AMD GPU: Difference between revisions
imported>SuperSamus No edit summary |
imported>FrostyTheWoahman |
||
Line 54: | Line 54: | ||
You should also install the <code>clinfo</code> package to verify that OpenCL is correctly setup (or check in the program you use to see if it is now available, such as in Darktable). | You should also install the <code>clinfo</code> package to verify that OpenCL is correctly setup (or check in the program you use to see if it is now available, such as in Darktable). | ||
=== Radeon 500 series (aka Polaris) === | |||
As of [https://github.com/ROCm/ROCm/issues/1659 ROCm 4.5], AMD has disabled OpenCL on Polaris based cards. This can be re-enabled by setting the environment variable <code>ROC_ENABLE_PRE_VEGA=1</code> | |||
<syntaxhighlight lang="nix"> | |||
environment.variables = { | |||
ROC_ENABLE_PRE_VEGA = "1"; | |||
}; | |||
</syntaxhighlight> | |||
== Vulkan == | == Vulkan == |
Revision as of 18:21, 18 December 2023
This guide is about setting up NixOS to correctly use your AMD Graphics card if it is relatively new (aka, after the GCN architecture).
Make the kernel use the correct driver early
The kernel can load the correct driver right away:
boot.initrd.kernelModules = [ "amdgpu" ];
XServer
Make sure Xserver uses the `amdgpu` driver in your configuration.nix:
services.xserver.enable = true;
services.xserver.videoDrivers = [ "amdgpu" ];
Enable Southern Islands (SI) and Sea Islands (CIK) support
The oldest architectures that AMDGPU supports are Southern Islands (SI, i.e. GCN 1) and Sea Islands (CIK, i.e. GCN 2), but support for them is disabled by default. To use AMDGPU instead of the radeon
driver, you can set the kernel parameters:
# for Southern Islands (SI i.e. GCN 1) cards
boot.kernelParams = [ "radeon.si_support=0" "amdgpu.si_support=1" ];
# for Sea Islands (CIK i.e. GCN 2) cards
boot.kernelParams = [ "radeon.cik_support=0" "amdgpu.cik_support=1" ];
Doing this is required to use Vulkan on these cards, as the radeon
driver doesn't support it.
HIP
Most software has the HIP libraries hard-coded. You can work around it on NixOS by using:
systemd.tmpfiles.rules = [
"L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
];
Blender
Hardware accelerated rendering can be achieved by using the package blender-hip
.
OpenCL
hardware.opengl.extraPackages = with pkgs; [
rocmPackages.clr.icd
];
You should also install the clinfo
package to verify that OpenCL is correctly setup (or check in the program you use to see if it is now available, such as in Darktable).
Radeon 500 series (aka Polaris)
As of ROCm 4.5, AMD has disabled OpenCL on Polaris based cards. This can be re-enabled by setting the environment variable ROC_ENABLE_PRE_VEGA=1
environment.variables = {
ROC_ENABLE_PRE_VEGA = "1";
};
Vulkan
Vulkan is already enabled by default (using Mesa RADV) on 64 bit applications. The settings to control it are:
hardware.opengl.driSupport = true; # This is already enabled by default
hardware.opengl.driSupport32Bit = true; # For 32 bit applications
AMDVLK
The AMDVLK drivers can be used in addition to the Mesa RADV drivers. The program will choose which one to use:
hardware.opengl.extraPackages = with pkgs; [
amdvlk
];
# For 32 bit applications
hardware.opengl.extraPackages32 = with pkgs; [
driversi686Linux.amdvlk
];
More information can be found here: https://nixos.org/manual/nixos/unstable/index.html#sec-gpu-accel-vulkan
Problems
Dual Monitors
If you encounter problems having multiple monitors connected to your GPU, adding `video` parameters for each connector to the kernel command line sometimes helps.
For example:
boot.kernelParams = [
"video=DP-1:2560x1440@144"
"video=DP-2:2560x1440@144"
];
With the connector names (like `DP-1`), the resolution and frame rate adjusted accordingly.
To figure out the connector names, execute the following command while your monitors are connected:
head /sys/class/drm/*/status