forked from natto1784/dotfiles
53
modules/graphics.nix
Normal file
53
modules/graphics.nix
Normal file
@@ -0,0 +1,53 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
nvidia-offload = pkgs.writeShellScriptBin "nvi" ''
|
||||
export __NV_PRIME_RENDER_OFFLOAD=1
|
||||
export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0
|
||||
export __GLX_VENDOR_LIBRARY_NAME=nvidia
|
||||
export __VK_LAYER_NV_optimus=NVIDIA_only
|
||||
exec -a "$0" "$@"
|
||||
'';
|
||||
in
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
nvidia-offload
|
||||
];
|
||||
hardware = {
|
||||
opengl =
|
||||
let
|
||||
fn = oa: with lib; {
|
||||
nativeBuildInputs = oa.nativeBuildInputs ++ singleton pkgs.glslang;
|
||||
mesonFlags = oa.mesonFlags ++ singleton "-Dvulkan-layers=device-select,overlay";
|
||||
patches = oa.patches ++ singleton ./mesa-vulkan-layer-nvidia.patch;
|
||||
postInstall = oa.postInstall + ''
|
||||
mv $out/lib/libVkLayer* $drivers/lib
|
||||
layer=VkLayer_MESA_device_select
|
||||
substituteInPlace $drivers/share/vulkan/implicit_layer.d/''${layer}.json \
|
||||
--replace "lib''${layer}" "$drivers/lib/lib''${layer}"
|
||||
layer=VkLayer_MESA_overlay
|
||||
substituteInPlace $drivers/share/vulkan/explicit_layer.d/''${layer}.json \
|
||||
--replace "lib''${layer}" "$drivers/lib/lib''${layer}"
|
||||
'';
|
||||
};
|
||||
in
|
||||
with pkgs; {
|
||||
driSupport32Bit = true;
|
||||
enable = true;
|
||||
package = (mesa.overrideAttrs fn).drivers;
|
||||
package32 = (pkgsi686Linux.mesa.overrideAttrs fn).drivers;
|
||||
};
|
||||
nvidia = {
|
||||
prime = {
|
||||
# sync.enable = true;
|
||||
offload = { enable = true; };
|
||||
intelBusId = "PCI:0:2:0";
|
||||
nvidiaBusId = "PCI:1:0:0";
|
||||
};
|
||||
modesetting = { enable = true; };
|
||||
};
|
||||
};
|
||||
services.xserver = {
|
||||
videoDrivers = [ "nvidia" ];
|
||||
dpi = 96;
|
||||
};
|
||||
}
|
||||
17
modules/mesa-vulkan-layer-nvidia.patch
Normal file
17
modules/mesa-vulkan-layer-nvidia.patch
Normal file
@@ -0,0 +1,17 @@
|
||||
diff --color -u -r b/src/vulkan/device-select-layer/device_select_layer.c a/src/vulkan/device-select-layer/device_select_layer.c
|
||||
--- b/src/vulkan/device-select-layer/device_select_layer.c 2022-03-22 11:18:04.309569433 +0530
|
||||
+++ a/src/vulkan/device-select-layer/device_select_layer.c 2022-03-22 11:18:17.944644235 +0530
|
||||
@@ -454,12 +454,8 @@
|
||||
exit(0);
|
||||
} else {
|
||||
unsigned selected_index = get_default_device(info, selection, physical_device_count, physical_devices);
|
||||
- selected_physical_device_count = physical_device_count;
|
||||
+ selected_physical_device_count = 1;
|
||||
selected_physical_devices[0] = physical_devices[selected_index];
|
||||
- for (unsigned i = 0; i < physical_device_count - 1; ++i) {
|
||||
- unsigned this_idx = i < selected_index ? i : i + 1;
|
||||
- selected_physical_devices[i + 1] = physical_devices[this_idx];
|
||||
- }
|
||||
}
|
||||
|
||||
if (selected_physical_device_count == 0) {
|
||||
@@ -1,39 +0,0 @@
|
||||
{config, pkgs, ... }:
|
||||
let
|
||||
nvidia-offload = pkgs.writeShellScriptBin "nvi" ''
|
||||
export __NV_PRIME_RENDER_OFFLOAD=1
|
||||
export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0
|
||||
export __GLX_VENDOR_LIBRARY_NAME=nvidia
|
||||
export __VK_LAYER_NV_optimus=NVIDIA_only
|
||||
exec -a "$0" "$@"
|
||||
'';
|
||||
in
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
nvidia-offload
|
||||
];
|
||||
hardware = {
|
||||
opengl = {
|
||||
driSupport32Bit = true;
|
||||
# extraPackages32 = with pkgs.pkgsi686Linux; [ libva ];
|
||||
enable = true;
|
||||
};
|
||||
nvidia = {
|
||||
prime = {
|
||||
# sync.enable = true;
|
||||
offload = { enable = true; };
|
||||
intelBusId = "PCI:0:2:0";
|
||||
nvidiaBusId = "PCI:1:0:0";
|
||||
};
|
||||
modesetting = { enable = true; };
|
||||
/* powerManagement = {
|
||||
enable = true;
|
||||
finegrained = true;
|
||||
};*/
|
||||
};
|
||||
};
|
||||
services.xserver = {
|
||||
videoDrivers = [ "nvidia" ];
|
||||
dpi = 96;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user