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