Merge #550
550: Add amdvlk and opencl options to amdgpu & Fix proton crash when Dual-Direct GFX enabled for lenovo legion 16ach6h r=Mic92 a=LostAttractor Co-authored-by: ChaosAttractor <46527539+LostAttractor@users.noreply.github.com> Co-authored-by: Jörg Thalheim <Mic92@users.noreply.github.com>
This commit is contained in:
commit
44ae00e02e
|
@ -6,11 +6,30 @@
|
||||||
) // {
|
) // {
|
||||||
default = true;
|
default = true;
|
||||||
};
|
};
|
||||||
|
options.hardware.amdgpu.amdvlk = lib.mkEnableOption (lib.mdDoc
|
||||||
|
"use amdvlk drivers instead mesa radv drivers"
|
||||||
|
) // {
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
options.hardware.amdgpu.opencl = lib.mkEnableOption (lib.mdDoc
|
||||||
|
"rocm opencl runtime (Install rocm-opencl-icd and rocm-opencl-runtime)"
|
||||||
|
) // {
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
|
||||||
config = lib.mkMerge [
|
config = lib.mkMerge [
|
||||||
{
|
{
|
||||||
services.xserver.videoDrivers = lib.mkDefault [ "amdgpu" ];
|
services.xserver.videoDrivers = lib.mkDefault [ "amdgpu" ];
|
||||||
|
|
||||||
|
hardware.opengl = {
|
||||||
|
driSupport = lib.mkDefault true;
|
||||||
|
driSupport32Bit = lib.mkDefault true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
(lib.mkIf config.hardware.amdgpu.loadInInitrd {
|
||||||
|
boot.initrd.kernelModules = [ "amdgpu" ];
|
||||||
|
})
|
||||||
|
(lib.mkIf config.hardware.amdgpu.amdvlk {
|
||||||
hardware.opengl.extraPackages = with pkgs; [
|
hardware.opengl.extraPackages = with pkgs; [
|
||||||
rocm-opencl-icd
|
rocm-opencl-icd
|
||||||
rocm-opencl-runtime
|
rocm-opencl-runtime
|
||||||
|
@ -21,15 +40,13 @@
|
||||||
driversi686Linux.amdvlk
|
driversi686Linux.amdvlk
|
||||||
];
|
];
|
||||||
|
|
||||||
hardware.opengl = {
|
|
||||||
driSupport = lib.mkDefault true;
|
|
||||||
driSupport32Bit = lib.mkDefault true;
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.variables.AMD_VULKAN_ICD = lib.mkDefault "RADV";
|
environment.variables.AMD_VULKAN_ICD = lib.mkDefault "RADV";
|
||||||
}
|
})
|
||||||
(lib.mkIf config.hardware.amdgpu.loadInInitrd {
|
(lib.mkIf config.hardware.amdgpu.opencl {
|
||||||
boot.initrd.kernelModules = [ "amdgpu" ];
|
hardware.opengl.extraPackages = with pkgs; [
|
||||||
|
rocm-opencl-icd
|
||||||
|
rocm-opencl-runtime
|
||||||
|
];
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,12 @@
|
||||||
# This specialisation is for the case where "DDG" (Dual-Direct GFX, A hardware feature that can enable in bios) is enabled, since the amd igpu is blocked at hardware level and the built-in display is directly connected to the dgpu, we no longer need the amdgpu and prime configuration.
|
# This specialisation is for the case where "DDG" (Dual-Direct GFX, A hardware feature that can enable in bios) is enabled, since the amd igpu is blocked at hardware level and the built-in display is directly connected to the dgpu, we no longer need the amdgpu and prime configuration.
|
||||||
system.nixos.tags = [ "Dual-Direct-GFX-Mode" ];
|
system.nixos.tags = [ "Dual-Direct-GFX-Mode" ];
|
||||||
services.xserver.videoDrivers = [ "nvidia" ]; # This will override services.xserver.videoDrivers = lib.mkDefault [ "amdgpu" "nvidia" ];
|
services.xserver.videoDrivers = [ "nvidia" ]; # This will override services.xserver.videoDrivers = lib.mkDefault [ "amdgpu" "nvidia" ];
|
||||||
hardware.nvidia.prime.offload.enable = false;
|
hardware = {
|
||||||
|
nvidia.prime.offload.enable = false;
|
||||||
|
amdgpu = {
|
||||||
|
amdvlk = false;
|
||||||
|
opencl = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -3,5 +3,24 @@
|
||||||
{
|
{
|
||||||
imports = [ ../hybrid ];
|
imports = [ ../hybrid ];
|
||||||
services.xserver.videoDrivers = [ "nvidia" ]; # This will override services.xserver.videoDrivers = lib.mkDefault [ "amdgpu" "nvidia" ];
|
services.xserver.videoDrivers = [ "nvidia" ]; # This will override services.xserver.videoDrivers = lib.mkDefault [ "amdgpu" "nvidia" ];
|
||||||
hardware.nvidia.prime.offload.enable = false;
|
# When I play the game through proton, I found that in the case of Dual-Direct GFX
|
||||||
|
# enabled (dGPU disabled), proton will crash directly. But in the case of hybrid,
|
||||||
|
# the game runs fine with or without nvidia-offload After investigation, this is
|
||||||
|
# because when writing the specialization of Dual-Direct GFX, I did not completely
|
||||||
|
# remove all packages for amd igpu. I only removed amdgpu from
|
||||||
|
# services.xserver.videoDrivers by overriding. This is because the specialization
|
||||||
|
# of nix cannot implement such an operation as canceling an import. In the end, if
|
||||||
|
# it is enabled in Dual-Direct GFX In the absence of amd igpu, the amdvlk package
|
||||||
|
# caused the proton to crash. In order to solve this problem, I add the option of
|
||||||
|
# whether to enable amdvlk to the configuration file of amd gpu, and open it by
|
||||||
|
# default, and turn it off in specialization, so as to delete amdvlk package and
|
||||||
|
# other packages for amd igpu in specialization. At the same time, I also added an
|
||||||
|
# option to amdgpu's opencl runtime.
|
||||||
|
hardware = {
|
||||||
|
nvidia.prime.offload.enable = false;
|
||||||
|
amdgpu = {
|
||||||
|
amdvlk = false;
|
||||||
|
opencl = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
Loading…
Reference in a new issue