mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-09-29 07:32:58 +00:00
Merge pull request #320228 from K900/opengl-cleanups
treewide: big opengl cleanups
This commit is contained in:
commit
20b7b4f619
@ -30,7 +30,7 @@ $ export \
|
||||
```
|
||||
|
||||
The second mechanism is to add the OpenCL driver package to
|
||||
[](#opt-hardware.opengl.extraPackages).
|
||||
[](#opt-hardware.graphics.extraPackages).
|
||||
This links the ICD file under `/run/opengl-driver`, where it will be visible
|
||||
to the ICD loader.
|
||||
|
||||
@ -51,12 +51,12 @@ Platform Vendor Advanced Micro Devices, Inc.
|
||||
Modern AMD [Graphics Core
|
||||
Next](https://en.wikipedia.org/wiki/Graphics_Core_Next) (GCN) GPUs are
|
||||
supported through the rocmPackages.clr.icd package. Adding this package to
|
||||
[](#opt-hardware.opengl.extraPackages)
|
||||
[](#opt-hardware.graphics.extraPackages)
|
||||
enables OpenCL support:
|
||||
|
||||
```nix
|
||||
{
|
||||
hardware.opengl.extraPackages = [
|
||||
hardware.graphics.extraPackages = [
|
||||
rocmPackages.clr.icd
|
||||
];
|
||||
}
|
||||
@ -71,13 +71,13 @@ intel-compute-runtime package. The proprietary Intel OpenCL runtime, in
|
||||
the intel-ocl package, is an alternative for Gen7 GPUs.
|
||||
|
||||
The intel-compute-runtime or intel-ocl package can be added to
|
||||
[](#opt-hardware.opengl.extraPackages)
|
||||
[](#opt-hardware.graphics.extraPackages)
|
||||
to enable OpenCL support. For example, for Gen8 and later GPUs, the following
|
||||
configuration can be used:
|
||||
|
||||
```nix
|
||||
{
|
||||
hardware.opengl.extraPackages = [
|
||||
hardware.graphics.extraPackages = [
|
||||
intel-compute-runtime
|
||||
];
|
||||
}
|
||||
@ -90,8 +90,8 @@ compute API for GPUs. It is used directly by games or indirectly though
|
||||
compatibility layers like
|
||||
[DXVK](https://github.com/doitsujin/dxvk/wiki).
|
||||
|
||||
By default, if [](#opt-hardware.opengl.driSupport)
|
||||
is enabled, mesa is installed and provides Vulkan for supported hardware.
|
||||
By default, if [](#opt-hardware.graphics.enable)
|
||||
is enabled, Mesa is installed and provides Vulkan for supported hardware.
|
||||
|
||||
Similar to OpenCL, Vulkan drivers are loaded through the *Installable
|
||||
Client Driver* (ICD) mechanism. ICD files for Vulkan are JSON files that
|
||||
@ -110,7 +110,7 @@ $ export \
|
||||
```
|
||||
|
||||
The second mechanism is to add the Vulkan driver package to
|
||||
[](#opt-hardware.opengl.extraPackages).
|
||||
[](#opt-hardware.graphics.extraPackages).
|
||||
This links the ICD file under `/run/opengl-driver`, where it will be
|
||||
visible to the ICD loader.
|
||||
|
||||
@ -140,18 +140,18 @@ Modern AMD [Graphics Core
|
||||
Next](https://en.wikipedia.org/wiki/Graphics_Core_Next) (GCN) GPUs are
|
||||
supported through either radv, which is part of mesa, or the amdvlk
|
||||
package. Adding the amdvlk package to
|
||||
[](#opt-hardware.opengl.extraPackages)
|
||||
[](#opt-hardware.graphics.extraPackages)
|
||||
makes amdvlk the default driver and hides radv and lavapipe from the device list.
|
||||
A specific driver can be forced as follows:
|
||||
|
||||
```nix
|
||||
{
|
||||
hardware.opengl.extraPackages = [
|
||||
hardware.graphics.extraPackages = [
|
||||
pkgs.amdvlk
|
||||
];
|
||||
|
||||
# To enable Vulkan support for 32-bit applications, also add:
|
||||
hardware.opengl.extraPackages32 = [
|
||||
hardware.graphics.extraPackages32 = [
|
||||
pkgs.driversi686Linux.amdvlk
|
||||
];
|
||||
|
||||
@ -171,7 +171,7 @@ graphics hardware acceleration capabilities for video processing.
|
||||
|
||||
VA-API drivers are loaded by `libva`. The version in nixpkgs is built to search
|
||||
the opengl driver path, so drivers can be installed in
|
||||
[](#opt-hardware.opengl.extraPackages).
|
||||
[](#opt-hardware.graphics.extraPackages).
|
||||
|
||||
VA-API can be tested using:
|
||||
|
||||
@ -185,7 +185,7 @@ Modern Intel GPUs use the iHD driver, which can be installed with:
|
||||
|
||||
```nix
|
||||
{
|
||||
hardware.opengl.extraPackages = [
|
||||
hardware.graphics.extraPackages = [
|
||||
intel-media-driver
|
||||
];
|
||||
}
|
||||
@ -195,7 +195,7 @@ Older Intel GPUs use the i965 driver, which can be installed with:
|
||||
|
||||
```nix
|
||||
{
|
||||
hardware.opengl.extraPackages = [
|
||||
hardware.graphics.extraPackages = [
|
||||
intel-vaapi-driver
|
||||
];
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ Wine, you should also set the following:
|
||||
|
||||
```nix
|
||||
{
|
||||
hardware.opengl.driSupport32Bit = true;
|
||||
hardware.graphics.enable32Bit = true;
|
||||
}
|
||||
```
|
||||
|
||||
@ -183,23 +183,6 @@ If you have an older card, you may have to use one of the legacy drivers:
|
||||
You may need to reboot after enabling this driver to prevent a clash
|
||||
with other kernel modules.
|
||||
|
||||
## Proprietary AMD drivers {#sec-x11--graphics-cards-amd}
|
||||
|
||||
AMD provides a proprietary driver for its graphics cards that is not
|
||||
enabled by default because it's not Free Software, is often broken in
|
||||
nixpkgs and as of this writing doesn't offer more features or
|
||||
performance. If you still want to use it anyway, you need to explicitly
|
||||
set:
|
||||
|
||||
```nix
|
||||
{
|
||||
services.xserver.videoDrivers = [ "amdgpu-pro" ];
|
||||
}
|
||||
```
|
||||
|
||||
You will need to reboot after enabling this driver to prevent a clash
|
||||
with other kernel modules.
|
||||
|
||||
## Touchpads {#sec-x11-touchpads}
|
||||
|
||||
Support for Synaptics touchpads (found in many laptops such as the Dell
|
||||
|
126
nixos/modules/hardware/graphics.nix
Normal file
126
nixos/modules/hardware/graphics.nix
Normal file
@ -0,0 +1,126 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
cfg = config.hardware.graphics;
|
||||
|
||||
driversEnv = pkgs.buildEnv {
|
||||
name = "graphics-drivers";
|
||||
paths = [ cfg.package ] ++ cfg.extraPackages;
|
||||
};
|
||||
|
||||
driversEnv32 = pkgs.buildEnv {
|
||||
name = "graphics-drivers-32bit";
|
||||
paths = [ cfg.package32 ] ++ cfg.extraPackages32;
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
(lib.mkRenamedOptionModule [ "services" "xserver" "vaapiDrivers" ] [ "hardware" "opengl" "extraPackages" ])
|
||||
(lib.mkRemovedOptionModule [ "hardware" "opengl" "s3tcSupport" ] "S3TC support is now always enabled in Mesa.")
|
||||
(lib.mkRemovedOptionModule [ "hardware" "opengl" "driSupport"] "The setting can be removed.")
|
||||
|
||||
(lib.mkRenamedOptionModule [ "hardware" "opengl" "enable"] [ "hardware" "graphics" "enable" ])
|
||||
(lib.mkRenamedOptionModule [ "hardware" "opengl" "driSupport32Bit"] [ "hardware" "graphics" "enable32Bit" ])
|
||||
(lib.mkRenamedOptionModule [ "hardware" "opengl" "package"] [ "hardware" "graphics" "package" ])
|
||||
(lib.mkRenamedOptionModule [ "hardware" "opengl" "package32"] [ "hardware" "graphics" "package32" ])
|
||||
(lib.mkRenamedOptionModule [ "hardware" "opengl" "extraPackages"] [ "hardware" "graphics" "extraPackages" ])
|
||||
(lib.mkRenamedOptionModule [ "hardware" "opengl" "extraPackages32"] [ "hardware" "graphics" "extraPackages32" ])
|
||||
];
|
||||
|
||||
options.hardware.graphics = {
|
||||
enable = lib.mkOption {
|
||||
description = ''
|
||||
Whether to enable hardware accelerated graphics drivers.
|
||||
|
||||
This is required to allow most graphical applications and
|
||||
environments to use hardware rendering, video encode/decode
|
||||
acceleration, etc.
|
||||
|
||||
This option should be enabled by default by the corresponding modules,
|
||||
so you do not usually have to set it yourself.
|
||||
'';
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
};
|
||||
|
||||
enable32Bit = lib.mkOption {
|
||||
description = ''
|
||||
On 64-bit systems, whether to also install 32-bit drivers for
|
||||
32-bit applications (such as Wine).
|
||||
'';
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
};
|
||||
|
||||
package = lib.mkOption {
|
||||
description = ''
|
||||
The package that provides the default driver set.
|
||||
'';
|
||||
type = lib.types.package;
|
||||
internal = true;
|
||||
};
|
||||
|
||||
package32 = lib.mkOption {
|
||||
description = ''
|
||||
The package that provides the 32-bit driver set. Used when {option}`enable32Bit` is enabled.
|
||||
set.
|
||||
'';
|
||||
type = lib.types.package;
|
||||
internal = true;
|
||||
};
|
||||
|
||||
extraPackages = lib.mkOption {
|
||||
description = ''
|
||||
Additional packages to add to the default graphics driver lookup path.
|
||||
This can be used to add OpenCL drivers, VA-API/VDPAU drivers, etc.
|
||||
|
||||
::: {.note}
|
||||
intel-media-driver supports hardware Broadwell (2014) or newer. Older hardware should use the mostly unmaintained intel-vaapi-driver driver.
|
||||
:::
|
||||
'';
|
||||
type = lib.types.listOf lib.types.package;
|
||||
default = [];
|
||||
example = lib.literalExpression "with pkgs; [ intel-media-driver intel-ocl intel-vaapi-driver ]";
|
||||
};
|
||||
|
||||
extraPackages32 = lib.mkOption {
|
||||
description = ''
|
||||
Additional packages to add to 32-bit graphics driver lookup path on 64-bit systems.
|
||||
Used when {option}`enable32Bit` is set. This can be used to add OpenCL drivers, VA-API/VDPAU drivers, etc.
|
||||
|
||||
::: {.note}
|
||||
intel-media-driver supports hardware Broadwell (2014) or newer. Older hardware should use the mostly unmaintained intel-vaapi-driver driver.
|
||||
:::
|
||||
'';
|
||||
type = lib.types.listOf lib.types.package;
|
||||
default = [];
|
||||
example = lib.literalExpression "with pkgs.pkgsi686Linux; [ intel-media-driver intel-vaapi-driver ]";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = cfg.enable32Bit -> pkgs.stdenv.isx86_64;
|
||||
message = "`hardware.graphics.enable32Bit` only makes sense on a 64-bit system.";
|
||||
}
|
||||
{
|
||||
assertion = cfg.enable32Bit -> (config.boot.kernelPackages.kernel.features.ia32Emulation or false);
|
||||
message = "`hardware.graphics.enable32Bit` requires a kernel that supports 32-bit emulation";
|
||||
}
|
||||
];
|
||||
|
||||
systemd.tmpfiles.settings.graphics-driver = {
|
||||
"/run/opengl-driver"."L+".argument = toString driversEnv;
|
||||
"/run/opengl-driver-32" =
|
||||
if pkgs.stdenv.isi686 then
|
||||
{ "L+".argument = "opengl-driver"; }
|
||||
else if cfg.enable32Bit then
|
||||
{ "L+".argument = toString driversEnv32; }
|
||||
else
|
||||
{ "r" = {}; };
|
||||
};
|
||||
|
||||
hardware.graphics.package = lib.mkDefault pkgs.mesa.drivers;
|
||||
hardware.graphics.package32 = lib.mkDefault pkgs.pkgsi686Linux.mesa.drivers;
|
||||
};
|
||||
}
|
@ -1,158 +0,0 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
|
||||
cfg = config.hardware.opengl;
|
||||
|
||||
kernelPackages = config.boot.kernelPackages;
|
||||
|
||||
videoDrivers = config.services.xserver.videoDrivers;
|
||||
|
||||
package = pkgs.buildEnv {
|
||||
name = "opengl-drivers";
|
||||
paths = [ cfg.package ] ++ cfg.extraPackages;
|
||||
};
|
||||
|
||||
package32 = pkgs.buildEnv {
|
||||
name = "opengl-drivers-32bit";
|
||||
paths = [ cfg.package32 ] ++ cfg.extraPackages32;
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
imports = [
|
||||
(lib.mkRenamedOptionModule [ "services" "xserver" "vaapiDrivers" ] [ "hardware" "opengl" "extraPackages" ])
|
||||
(lib.mkRemovedOptionModule [ "hardware" "opengl" "s3tcSupport" ] "S3TC support is now always enabled in Mesa.")
|
||||
];
|
||||
|
||||
options = {
|
||||
|
||||
hardware.opengl = {
|
||||
enable = lib.mkOption {
|
||||
description = ''
|
||||
Whether to enable OpenGL drivers. This is needed to enable
|
||||
OpenGL support in X11 systems, as well as for Wayland compositors
|
||||
like sway and Weston. It is enabled by default
|
||||
by the corresponding modules, so you do not usually have to
|
||||
set it yourself, only if there is no module for your wayland
|
||||
compositor of choice. See services.xserver.enable and
|
||||
programs.sway.enable.
|
||||
'';
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
};
|
||||
|
||||
driSupport = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Whether to enable accelerated OpenGL rendering through the
|
||||
Direct Rendering Interface (DRI).
|
||||
'';
|
||||
};
|
||||
|
||||
driSupport32Bit = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
On 64-bit systems, whether to support Direct Rendering for
|
||||
32-bit applications (such as Wine). This is currently only
|
||||
supported for the `nvidia` as well as
|
||||
`Mesa`.
|
||||
'';
|
||||
};
|
||||
|
||||
package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
internal = true;
|
||||
description = ''
|
||||
The package that provides the OpenGL implementation.
|
||||
'';
|
||||
};
|
||||
|
||||
package32 = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
internal = true;
|
||||
description = ''
|
||||
The package that provides the 32-bit OpenGL implementation on
|
||||
64-bit systems. Used when {option}`driSupport32Bit` is
|
||||
set.
|
||||
'';
|
||||
};
|
||||
|
||||
extraPackages = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.package;
|
||||
default = [];
|
||||
example = lib.literalExpression "with pkgs; [ intel-media-driver intel-ocl intel-vaapi-driver ]";
|
||||
description = ''
|
||||
Additional packages to add to OpenGL drivers.
|
||||
This can be used to add OpenCL drivers, VA-API/VDPAU drivers etc.
|
||||
|
||||
::: {.note}
|
||||
intel-media-driver supports hardware Broadwell (2014) or newer. Older hardware should use the mostly unmaintained intel-vaapi-driver driver.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
extraPackages32 =lib. mkOption {
|
||||
type = lib.types.listOf lib.types.package;
|
||||
default = [];
|
||||
example = lib.literalExpression "with pkgs.pkgsi686Linux; [ intel-media-driver intel-vaapi-driver ]";
|
||||
description = ''
|
||||
Additional packages to add to 32-bit OpenGL drivers on 64-bit systems.
|
||||
Used when {option}`driSupport32Bit` is set. This can be used to add OpenCL drivers, VA-API/VDPAU drivers etc.
|
||||
|
||||
::: {.note}
|
||||
intel-media-driver supports hardware Broadwell (2014) or newer. Older hardware should use the mostly unmaintained intel-vaapi-driver driver.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
setLdLibraryPath = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
internal = true;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether the `LD_LIBRARY_PATH` environment variable
|
||||
should be set to the locations of driver libraries. Drivers which
|
||||
rely on overriding libraries should set this to true. Drivers which
|
||||
support `libglvnd` and other dispatch libraries
|
||||
instead of overriding libraries should not set this.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
{ assertion = cfg.driSupport32Bit -> pkgs.stdenv.isx86_64;
|
||||
message = "Option driSupport32Bit only makes sense on a 64-bit system.";
|
||||
}
|
||||
{ assertion = cfg.driSupport32Bit -> (config.boot.kernelPackages.kernel.features.ia32Emulation or false);
|
||||
message = "Option driSupport32Bit requires a kernel that supports 32bit emulation";
|
||||
}
|
||||
];
|
||||
|
||||
systemd.tmpfiles.settings.opengl = {
|
||||
"/run/opengl-driver"."L+".argument = toString package;
|
||||
"/run/opengl-driver-32" =
|
||||
if pkgs.stdenv.isi686 then
|
||||
{ "L+".argument = "opengl-driver"; }
|
||||
else if cfg.driSupport32Bit then
|
||||
{ "L+".argument = toString package32; }
|
||||
else
|
||||
{ "r" = {}; };
|
||||
};
|
||||
|
||||
environment.sessionVariables.LD_LIBRARY_PATH = lib.mkIf cfg.setLdLibraryPath
|
||||
([ "/run/opengl-driver/lib" ] ++ lib.optional cfg.driSupport32Bit "/run/opengl-driver-32/lib");
|
||||
|
||||
hardware.opengl.package = lib.mkDefault pkgs.mesa.drivers;
|
||||
hardware.opengl.package32 = lib.mkDefault pkgs.pkgsi686Linux.mesa.drivers;
|
||||
|
||||
boot.extraModulePackages = lib.optional (lib.elem "virtualbox" videoDrivers) kernelPackages.virtualboxGuestAdditions;
|
||||
};
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
# This module provides the proprietary AMDGPU-PRO drivers.
|
||||
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
drivers = config.services.xserver.videoDrivers;
|
||||
|
||||
enabled = elem "amdgpu-pro" drivers;
|
||||
|
||||
package = config.boot.kernelPackages.amdgpu-pro;
|
||||
package32 = pkgs.pkgsi686Linux.linuxPackages.amdgpu-pro.override { kernel = null; };
|
||||
|
||||
opengl = config.hardware.opengl;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
config = mkIf enabled {
|
||||
services.xserver.drivers = singleton
|
||||
{ name = "amdgpu"; modules = [ package ]; display = true; };
|
||||
|
||||
hardware.opengl.package = package;
|
||||
hardware.opengl.package32 = package32;
|
||||
hardware.opengl.setLdLibraryPath = true;
|
||||
|
||||
boot.extraModulePackages = [ package.kmod ];
|
||||
|
||||
boot.kernelPackages = pkgs.linuxKernel.packagesFor
|
||||
(pkgs.linuxKernel.kernels.linux_5_10.override {
|
||||
structuredExtraConfig = {
|
||||
DEVICE_PRIVATE = kernel.yes;
|
||||
KALLSYMS_ALL = kernel.yes;
|
||||
};
|
||||
});
|
||||
|
||||
hardware.firmware = [ package.fw ];
|
||||
|
||||
systemd.tmpfiles.settings.amdgpu-pro = {
|
||||
"/run/amdgpu"."L+".argument = "${package}/opt/amdgpu";
|
||||
"/run/amdgpu-pro"."L+".argument = "${package}/opt/amdgpu-pro";
|
||||
};
|
||||
|
||||
system.requiredKernelConfig = with config.lib.kernelConfig; [
|
||||
(isYes "DEVICE_PRIVATE")
|
||||
(isYes "KALLSYMS_ALL")
|
||||
];
|
||||
|
||||
boot.initrd.extraUdevRulesCommands = mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
cp -v ${package}/etc/udev/rules.d/*.rules $out/
|
||||
'';
|
||||
boot.initrd.services.udev.packages = [ package ];
|
||||
|
||||
environment.systemPackages =
|
||||
[ package.vulkan ] ++
|
||||
# this isn't really DRI, but we'll reuse this option for now
|
||||
optional config.hardware.opengl.driSupport32Bit package32.vulkan;
|
||||
|
||||
environment.etc = {
|
||||
"modprobe.d/blacklist-radeon.conf".source = package + "/etc/modprobe.d/blacklist-radeon.conf";
|
||||
amd.source = package + "/etc/amd";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
@ -297,7 +297,7 @@ in
|
||||
KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
|
||||
KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 1'"
|
||||
'';
|
||||
hardware.opengl = {
|
||||
hardware.graphics = {
|
||||
extraPackages = [ nvidia_x11.out ];
|
||||
extraPackages32 = [ nvidia_x11.lib32 ];
|
||||
};
|
||||
@ -467,7 +467,7 @@ in
|
||||
"egl/egl_external_platform.d".source = "/run/opengl-driver/share/egl/egl_external_platform.d/";
|
||||
};
|
||||
|
||||
hardware.opengl = {
|
||||
hardware.graphics = {
|
||||
extraPackages = [ pkgs.nvidia-vaapi-driver ];
|
||||
extraPackages32 = [ pkgs.pkgsi686Linux.nvidia-vaapi-driver ];
|
||||
};
|
||||
|
7
nixos/modules/hardware/video/virtualbox.nix
Normal file
7
nixos/modules/hardware/video/virtualbox.nix
Normal file
@ -0,0 +1,7 @@
|
||||
{ lib, config, ... }:
|
||||
let
|
||||
inherit (config.boot) kernelPackages;
|
||||
inherit (config.services.xserver) videoDrivers;
|
||||
in {
|
||||
boot.extraModulePackages = lib.mkIf (lib.elem "virtualbox" videoDrivers) [ kernelPackages.virtualboxGuestAdditions ];
|
||||
}
|
@ -67,6 +67,7 @@
|
||||
./hardware/gkraken.nix
|
||||
./hardware/glasgow.nix
|
||||
./hardware/gpgsmartcards.nix
|
||||
./hardware/graphics.nix
|
||||
./hardware/hackrf.nix
|
||||
./hardware/i2c.nix
|
||||
./hardware/infiniband.nix
|
||||
@ -84,7 +85,6 @@
|
||||
./hardware/new-lg4ff.nix
|
||||
./hardware/nitrokey.nix
|
||||
./hardware/onlykey/default.nix
|
||||
./hardware/opengl.nix
|
||||
./hardware/openrazer.nix
|
||||
./hardware/opentabletdriver.nix
|
||||
./hardware/pcmcia.nix
|
||||
@ -103,7 +103,6 @@
|
||||
./hardware/uni-sync.nix
|
||||
./hardware/usb-modeswitch.nix
|
||||
./hardware/usb-storage.nix
|
||||
./hardware/video/amdgpu-pro.nix
|
||||
./hardware/video/bumblebee.nix
|
||||
./hardware/video/capture/mwprocapture.nix
|
||||
./hardware/video/displaylink.nix
|
||||
@ -111,6 +110,7 @@
|
||||
./hardware/video/nvidia.nix
|
||||
./hardware/video/switcheroo-control.nix
|
||||
./hardware/video/uvcvideo/default.nix
|
||||
./hardware/video/virtualbox.nix
|
||||
./hardware/video/webcam/facetimehd.nix
|
||||
./hardware/video/webcam/ipu6.nix
|
||||
./hardware/wooting.nix
|
||||
|
@ -65,7 +65,7 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
hardware.opengl.enable = lib.mkDefault true;
|
||||
hardware.graphics.enable = lib.mkDefault true;
|
||||
fonts.enableDefaultPackages = lib.mkDefault true;
|
||||
programs.dconf.enable = lib.mkDefault true;
|
||||
programs.xwayland.enable = lib.mkDefault true;
|
||||
|
@ -50,7 +50,7 @@ in {
|
||||
}) // (prev.extraEnv or {});
|
||||
extraLibraries = pkgs: let
|
||||
prevLibs = if prev ? extraLibraries then prev.extraLibraries pkgs else [ ];
|
||||
additionalLibs = with config.hardware.opengl;
|
||||
additionalLibs = with config.hardware.graphics;
|
||||
if pkgs.stdenv.hostPlatform.is64bit
|
||||
then [ package ] ++ extraPackages
|
||||
else [ package32 ] ++ extraPackages32;
|
||||
@ -176,10 +176,9 @@ in {
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
hardware.opengl = { # this fixes the "glXChooseVisual failed" bug, context: https://github.com/NixOS/nixpkgs/issues/47932
|
||||
hardware.graphics = { # this fixes the "glXChooseVisual failed" bug, context: https://github.com/NixOS/nixpkgs/issues/47932
|
||||
enable = true;
|
||||
driSupport = true;
|
||||
driSupport32Bit = true;
|
||||
enable32Bit = true;
|
||||
};
|
||||
|
||||
security.wrappers = lib.mkIf (cfg.gamescopeSession.enable && gamescopeCfg.capSysNice) {
|
||||
|
@ -17,7 +17,7 @@ in
|
||||
Whether to set up NixOS such that TurboVNC's built-in software OpenGL
|
||||
implementation works.
|
||||
|
||||
This will enable {option}`hardware.opengl.enable` so that OpenGL
|
||||
This will enable {option}`hardware.graphics.enable` so that OpenGL
|
||||
programs can find Mesa's llvmpipe drivers.
|
||||
|
||||
Setting this option to `false` does not mean that software
|
||||
@ -46,7 +46,7 @@ in
|
||||
# can find the llvmpipe `swrast.so` software rendering DRI lib via `libglvnd`.
|
||||
# This comment exists to explain why `hardware.` is involved,
|
||||
# even though 100% software rendering is used.
|
||||
hardware.opengl.enable = true;
|
||||
hardware.graphics.enable = true;
|
||||
|
||||
};
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
pam.services.swaylock = {};
|
||||
};
|
||||
|
||||
hardware.opengl.enable = lib.mkDefault true;
|
||||
hardware.graphics.enable = lib.mkDefault true;
|
||||
fonts.enableDefaultPackages = lib.mkDefault true;
|
||||
|
||||
programs = {
|
||||
|
@ -63,7 +63,7 @@ in {
|
||||
];
|
||||
|
||||
# Copy-pasted basic stuff
|
||||
hardware.opengl.enable = lib.mkDefault true;
|
||||
hardware.graphics.enable = lib.mkDefault true;
|
||||
fonts.enableDefaultPackages = lib.mkDefault true;
|
||||
programs.dconf.enable = lib.mkDefault true;
|
||||
|
||||
|
@ -212,9 +212,7 @@ in
|
||||
after = [ "acpid.service" "systemd-logind.service" "systemd-user-sessions.service" ];
|
||||
restartIfChanged = false;
|
||||
|
||||
environment = lib.optionalAttrs config.hardware.opengl.setLdLibraryPath {
|
||||
LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.addOpenGLRunpath.driverLink ];
|
||||
} // cfg.environment;
|
||||
environment = cfg.environment;
|
||||
|
||||
preStart = cfg.preStart;
|
||||
script = lib.mkIf (config.systemd.services.display-manager.enable == true) cfg.execCmd;
|
||||
|
@ -31,11 +31,9 @@ in {
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
hardware.opengl = {
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
driSupport = true;
|
||||
extraPackages = [ cfg.package ];
|
||||
driSupport32Bit = cfg.support32Bit.enable;
|
||||
extraPackages32 = [ cfg.support32Bit.package ];
|
||||
};
|
||||
|
||||
|
@ -38,7 +38,7 @@ in
|
||||
|
||||
fonts.enableDefaultPackages = lib.mkDefault true;
|
||||
|
||||
hardware.opengl.enable = lib.mkDefault true;
|
||||
hardware.graphics.enable = lib.mkDefault true;
|
||||
|
||||
programs.gnupg.agent.pinentryPackage = lib.mkOverride 1100 pkgs.pinentry-gnome3;
|
||||
|
||||
|
@ -107,7 +107,7 @@ in {
|
||||
fonts = optional (cfg.fonts != null) "font-name=${lib.concatMapStringsSep ", " (f: f.name) cfg.fonts}";
|
||||
in lib.concatStringsSep "\n" (render ++ fonts);
|
||||
|
||||
hardware.opengl.enable = mkIf cfg.hwRender true;
|
||||
hardware.graphics.enable = mkIf cfg.hwRender true;
|
||||
|
||||
fonts = mkIf (cfg.fonts != null) {
|
||||
fontconfig.enable = true;
|
||||
|
@ -101,7 +101,7 @@ in {
|
||||
session required ${config.systemd.package}/lib/security/pam_systemd.so
|
||||
'';
|
||||
|
||||
hardware.opengl.enable = mkDefault true;
|
||||
hardware.graphics.enable = mkDefault true;
|
||||
|
||||
systemd.targets.graphical.wants = [ "cage-tty1.service" ];
|
||||
|
||||
|
@ -216,7 +216,7 @@ in
|
||||
|
||||
security.pam.services.phosh = {};
|
||||
|
||||
hardware.opengl.enable = mkDefault true;
|
||||
hardware.graphics.enable = mkDefault true;
|
||||
|
||||
services.gnome.core-shell.enable = true;
|
||||
services.gnome.core-os-services.enable = true;
|
||||
|
@ -302,7 +302,7 @@ in
|
||||
default = [ "modesetting" "fbdev" ];
|
||||
example = [
|
||||
"nvidia"
|
||||
"amdgpu-pro"
|
||||
"amdgpu"
|
||||
];
|
||||
# TODO(@oxij): think how to easily add the rest, like those nvidia things
|
||||
relatedPackages = concatLists
|
||||
@ -716,10 +716,7 @@ in
|
||||
|
||||
restartIfChanged = false;
|
||||
|
||||
environment =
|
||||
optionalAttrs config.hardware.opengl.setLdLibraryPath
|
||||
{ LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.addOpenGLRunpath.driverLink ]; }
|
||||
// config.services.displayManager.environment;
|
||||
environment = config.services.displayManager.environment;
|
||||
|
||||
preStart =
|
||||
''
|
||||
|
@ -244,8 +244,8 @@ in
|
||||
};
|
||||
|
||||
assertions = [
|
||||
{ assertion = cfg.enableNvidia && pkgs.stdenv.isx86_64 -> config.hardware.opengl.driSupport32Bit or false;
|
||||
message = "Option enableNvidia on x86_64 requires 32bit support libraries";
|
||||
{ assertion = cfg.enableNvidia && pkgs.stdenv.isx86_64 -> config.hardware.graphics.enable32Bit or false;
|
||||
message = "Option enableNvidia on x86_64 requires 32-bit support libraries";
|
||||
}];
|
||||
|
||||
virtualisation.docker.daemon.settings = {
|
||||
|
@ -12,7 +12,7 @@ let
|
||||
{ pkgs, ... }:
|
||||
|
||||
{ imports = [ ./common/user-account.nix ./common/x11.nix ];
|
||||
hardware.opengl.driSupport = true;
|
||||
hardware.graphics.enable = true;
|
||||
virtualisation.memorySize = 256;
|
||||
environment = {
|
||||
systemPackages = [ pkgs.armagetronad ];
|
||||
|
@ -14,9 +14,7 @@ in
|
||||
};
|
||||
|
||||
nodes.machine = { config, ... }:
|
||||
let
|
||||
alice = config.users.users.alice;
|
||||
in {
|
||||
{
|
||||
# Automatically login on tty1 as a normal user:
|
||||
imports = [ ./common/user-account.nix ];
|
||||
services.getty.autologinUser = "alice";
|
||||
@ -31,7 +29,7 @@ in
|
||||
fi
|
||||
'';
|
||||
|
||||
hardware.opengl.enable = true;
|
||||
hardware.graphics.enable = true;
|
||||
programs.xwayland.enable = true;
|
||||
security.polkit.enable = true;
|
||||
environment.systemPackages = [ pkgs.cagebreak pkgs.wayland-utils ];
|
||||
|
@ -5,7 +5,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
hardware.opengl.enable = true;
|
||||
hardware.graphics.enable = true;
|
||||
users.users.alice = {
|
||||
isNormalUser = true;
|
||||
uid = 1000;
|
||||
|
@ -5,7 +5,7 @@ let
|
||||
{ pkgs, ... }:
|
||||
|
||||
{ imports = [ ./common/x11.nix ];
|
||||
hardware.opengl.driSupport = true;
|
||||
hardware.graphics.enable = true;
|
||||
environment.systemPackages = [ pkgs.openarena ];
|
||||
};
|
||||
|
||||
|
@ -21,7 +21,7 @@ let
|
||||
{ pkgs, ... }:
|
||||
|
||||
{ imports = [ ./common/x11.nix ];
|
||||
hardware.opengl.driSupport = true;
|
||||
hardware.graphics.enable = true;
|
||||
environment.systemPackages = [ pkgs.quake3demo ];
|
||||
nixpkgs.config.packageOverrides = overrides;
|
||||
nixpkgs.config.allowUnfreePredicate = unfreePredicate;
|
||||
|
@ -39,7 +39,7 @@ in
|
||||
dwl -s 'foot touch /tmp/foot_started'
|
||||
'';
|
||||
|
||||
hardware.opengl.enable = true;
|
||||
hardware.graphics.enable = true;
|
||||
virtualisation.qemu.options = [ "-vga none -device virtio-gpu-pci" ];
|
||||
services.seatd.enable = true;
|
||||
};
|
||||
|
@ -16,7 +16,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||
systemPackages = with pkgs; [ tinywl foot wayland-utils ];
|
||||
};
|
||||
|
||||
hardware.opengl.enable = true;
|
||||
hardware.graphics.enable = true;
|
||||
|
||||
# Automatically start TinyWL when logging in on tty1:
|
||||
programs.bash.loginShellInit = ''
|
||||
|
@ -280,7 +280,7 @@ in buildFHSEnv rec {
|
||||
WARNING: Steam is not set up. Add the following options to /etc/nixos/configuration.nix
|
||||
and then run \`sudo nixos-rebuild switch\`:
|
||||
{
|
||||
hardware.opengl.driSupport32Bit = true;
|
||||
hardware.graphics.enable32Bit = true;
|
||||
hardware.pulseaudio.support32Bit = true;
|
||||
}
|
||||
**
|
||||
|
@ -1,222 +0,0 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
, elfutils
|
||||
, xorg
|
||||
, patchelf
|
||||
, libxcb
|
||||
, libxshmfence
|
||||
, perl
|
||||
, zlib
|
||||
, expat
|
||||
, libffi_3_3
|
||||
, libselinux
|
||||
, libdrm
|
||||
, udev
|
||||
, kernel ? null
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
bitness = if stdenv.is64bit then "64" else "32";
|
||||
|
||||
libArch =
|
||||
if stdenv.hostPlatform.system == "i686-linux" then
|
||||
"i386-linux-gnu"
|
||||
else if stdenv.hostPlatform.system == "x86_64-linux" then
|
||||
"x86_64-linux-gnu"
|
||||
else throw "amdgpu-pro is Linux only. Sorry ${stdenv.hostPlatform.system}.";
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
|
||||
version = "21.30";
|
||||
pname = "amdgpu-pro";
|
||||
build = "${version}-1290604";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://drivers.amd.com/drivers/linux/amdgpu-pro-${build}-ubuntu-20.04.tar.xz";
|
||||
sha256 = "sha256-WECqxjo2WLP3kMWeVyJgYufkvHTzwGaj57yeMGXiQ4I=";
|
||||
curlOpts = "--referer https://www.amd.com/en/support/kb/release-notes/rn-amdgpu-unified-linux-21-30";
|
||||
};
|
||||
|
||||
postUnpack = ''
|
||||
mkdir root
|
||||
pushd $sourceRoot
|
||||
for deb in *_all.deb *_${if stdenv.is64bit then "amd64" else "i386"}.deb
|
||||
do
|
||||
ar p $deb data.tar.xz | tar -C ../root -xJ
|
||||
done
|
||||
popd
|
||||
# if we don't use a short sourceRoot, compilation can fail due to command
|
||||
# line length
|
||||
sourceRoot=root
|
||||
'';
|
||||
|
||||
passthru = optionalAttrs (kernel != null) {
|
||||
kmod = stdenv.mkDerivation rec {
|
||||
inherit version src postUnpack;
|
||||
name = "${pname}-${version}-kmod-${kernel.dev.version}";
|
||||
|
||||
postPatch = ''
|
||||
pushd usr/src/amdgpu-*
|
||||
patchShebangs amd/dkms/*.sh
|
||||
substituteInPlace amd/dkms/pre-build.sh --replace "./configure" "./configure --with-linux=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source --with-linux-obj=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
||||
popd
|
||||
'';
|
||||
|
||||
preConfigure = ''
|
||||
pushd usr/src/amdgpu-*
|
||||
makeFlags="$makeFlags M=$(pwd)"
|
||||
amd/dkms/pre-build.sh ${kernel.version}
|
||||
popd
|
||||
'';
|
||||
|
||||
postBuild = ''
|
||||
pushd usr/src/amdgpu-*
|
||||
find -name \*.ko -exec xz {} \;
|
||||
popd
|
||||
'';
|
||||
|
||||
makeFlags = optionalString (kernel != null) "-C ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build modules";
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
pushd usr/src/amdgpu-*
|
||||
find -name \*.ko.xz -exec install -Dm444 {} $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/gpu/drm/{} \;
|
||||
popd
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
# without this we get a collision with the ttm module from linux
|
||||
meta.priority = 4;
|
||||
};
|
||||
|
||||
fw = stdenv.mkDerivation rec {
|
||||
inherit version src postUnpack;
|
||||
name = "${pname}-${version}-fw";
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/lib
|
||||
cp -r usr/src/amdgpu-*/firmware $out/lib/firmware
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
outputs = [ "out" "vulkan" ];
|
||||
|
||||
depLibPath = makeLibraryPath [
|
||||
stdenv.cc.cc.lib
|
||||
zlib
|
||||
libxcb
|
||||
libxshmfence
|
||||
elfutils
|
||||
expat
|
||||
libffi_3_3
|
||||
libselinux
|
||||
# libudev is not listed in any dependencies, but is loaded dynamically
|
||||
udev
|
||||
xorg.libXext
|
||||
xorg.libX11
|
||||
xorg.libXfixes
|
||||
xorg.libXdamage
|
||||
xorg.libXxf86vm
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out
|
||||
|
||||
cp -r usr/lib/${libArch} $out/lib
|
||||
cp -r usr/share $out/share
|
||||
|
||||
mkdir -p $out/opt/amdgpu{,-pro}
|
||||
cp -r opt/amdgpu-pro/lib/${libArch} $out/opt/amdgpu-pro/lib
|
||||
cp -r opt/amdgpu/lib/${libArch} $out/opt/amdgpu/lib
|
||||
|
||||
pushd $out/lib
|
||||
ln -s ../opt/amdgpu-pro/lib/libGL.so* .
|
||||
ln -s ../opt/amdgpu-pro/lib/libEGL.so* .
|
||||
popd
|
||||
|
||||
# short name to allow replacement below
|
||||
ln -s lib/dri $out/dri
|
||||
|
||||
'' + optionalString (stdenv.is64bit) ''
|
||||
mkdir -p $out/etc
|
||||
pushd etc
|
||||
cp -r modprobe.d udev amd $out/etc
|
||||
popd
|
||||
|
||||
cp -r lib/udev/rules.d/* $out/etc/udev/rules.d
|
||||
cp -r opt/amdgpu/lib/xorg $out/lib/xorg
|
||||
cp -r opt/amdgpu-pro/lib/xorg/* $out/lib/xorg
|
||||
cp -r opt/amdgpu/share $out/opt/amdgpu/share
|
||||
'' + ''
|
||||
|
||||
mkdir -p $vulkan/share/vulkan/icd.d
|
||||
install opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd${bitness}.json $vulkan/share/vulkan/icd.d
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
preFixup = (if stdenv.is64bit
|
||||
# this could also be done with LIBGL_DRIVERS_PATH, but it would need to be
|
||||
# set in the user session and for Xorg
|
||||
then ''
|
||||
expr1='s:/opt/amdgpu/lib/x86_64-linux-gnu/dri\0:/run/opengl-driver/lib/dri\0\0\0\0\0\0\0\0\0\0\0:g'
|
||||
expr2='s:/usr/lib/x86_64-linux-gnu/dri[\0\:]:/run/opengl-driver/lib/dri\0\0\0\0:g'
|
||||
perl -pi -e "$expr2" $out/lib/xorg/modules/extensions/libglx.so
|
||||
''
|
||||
else ''
|
||||
expr1='s:/opt/amdgpu/lib/i386-linux-gnu/dri\0:/run/opengl-driver-32/lib/dri\0\0\0\0\0\0:g'
|
||||
# we replace a different path on 32-bit because it's the only one long
|
||||
# enough to fit the target path :(
|
||||
expr2='s:/usr/lib/i386-linux-gnu/dri[\0\:]:/run/opengl-driver-32/dri\0\0\0:g'
|
||||
'') + ''
|
||||
perl -pi -e "$expr1" \
|
||||
$out/opt/amdgpu/lib/libEGL.so.1.0.0 \
|
||||
$out/opt/amdgpu/lib/libgbm.so.1.0.0 \
|
||||
$out/opt/amdgpu/lib/libGL.so.1.2.0
|
||||
|
||||
perl -pi -e "$expr2" \
|
||||
$out/opt/amdgpu-pro/lib/libEGL.so.1 \
|
||||
$out/opt/amdgpu-pro/lib/libGL.so.1.2 \
|
||||
$out/opt/amdgpu-pro/lib/libGLX_amd.so.0
|
||||
|
||||
find $out -type f -exec perl -pi -e 's:/opt/amdgpu-pro/:/run/amdgpu-pro/:g' {} \;
|
||||
find $out -type f -exec perl -pi -e 's:/opt/amdgpu/:/run/amdgpu/:g' {} \;
|
||||
|
||||
substituteInPlace $vulkan/share/vulkan/icd.d/*.json --replace /opt/amdgpu-pro/lib/${libArch} "$out/opt/amdgpu-pro/lib"
|
||||
'';
|
||||
|
||||
# doing this in post because shrinking breaks things that dynamically load
|
||||
postFixup = ''
|
||||
libPath="$out/opt/amdgpu/lib:$out/opt/amdgpu-pro/lib:$depLibPath"
|
||||
find "$out" -name '*.so*' -type f -exec patchelf --set-rpath "$libPath" {} \;
|
||||
'';
|
||||
|
||||
buildInputs = [
|
||||
libdrm
|
||||
patchelf
|
||||
perl
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "AMDGPU-PRO drivers";
|
||||
homepage = "https://www.amd.com/en/support";
|
||||
license = licenses.unfree;
|
||||
platforms = platforms.linux;
|
||||
maintainers = with maintainers; [ corngood ];
|
||||
};
|
||||
}
|
@ -318,8 +318,6 @@ in {
|
||||
|
||||
akvcam = callPackage ../os-specific/linux/akvcam { };
|
||||
|
||||
amdgpu-pro = callPackage ../os-specific/linux/amdgpu-pro { };
|
||||
|
||||
apfs = callPackage ../os-specific/linux/apfs { };
|
||||
|
||||
ax99100 = callPackage ../os-specific/linux/ax99100 {};
|
||||
@ -605,6 +603,7 @@ in {
|
||||
rtl8723bs = throw "rtl8723bs was added in mainline kernel version 4.12"; # Added 2023-06-14
|
||||
vm-tools = self.mm-tools;
|
||||
xmm7360-pci = throw "Support for the XMM7360 WWAN card was added to the iosm kmod in mainline kernel version 5.18";
|
||||
amdgpu-pro = throw "amdgpu-pro was removed due to lack of maintenance"; # Added 2024-06-16
|
||||
});
|
||||
|
||||
hardenedPackagesFor = kernel: overrides: packagesFor (hardenedKernelFor kernel overrides);
|
||||
|
Loading…
Reference in New Issue
Block a user