OpenGL: Difference between revisions
imported>Samuela No edit summary |
imported>Primeos dev m Force a table of contents (helpful for direct links) |
||
Line 1: | Line 1: | ||
__FORCETOC__ | |||
You can enable OpenGL by setting <code>hardware.opengl.enable = true;</code> in your <code>/etc/nixos/configuration.nix</code>. | You can enable OpenGL by setting <code>hardware.opengl.enable = true;</code> in your <code>/etc/nixos/configuration.nix</code>. | ||
Revision as of 19:51, 13 January 2022
You can enable OpenGL by setting hardware.opengl.enable = true;
in your /etc/nixos/configuration.nix
.
OpenGL must break purity due to the need for hardware-specific linkage. Intel, AMD, and Nvidia have different drivers for example. On NixOS, these libraries are symlinked under
/run/opengl-driver/lib
and optionally (if hardware.opengl.driSupport32Bit
is enabled)
/run/opengl-driver-32/lib
When a program is installed in your environment, these libraries should be found automatically. However, this is not the case in a `nix-shell`. To fix, add this line to your shell.nix:
LD_LIBRARY_PATH="/run/opengl-driver/lib:/run/opengl-driver-32/lib";
Testing Mesa updates
To avoid a lot of rebuilds there's an internal NixOS option to override the Mesa drivers: hardware.opengl.package
It can be used like this: hardware.opengl.package = (import /srv/nixpkgs-mesa { }).pkgs.mesa.drivers;
However, since Mesa 21.0.2 this doesn't necessarily work anymore and something like the following might be required:
system.replaceRuntimeDependencies = [ ({ original = pkgs.mesa; replacement = (import /srv/nixpkgs-mesa { }).pkgs.mesa; }) ({ original = pkgs.mesa.drivers; replacement = (import /srv/nixpkgs-mesa { }).pkgs.mesa.drivers; }) ];
Note: Both of these approaches are impure and only work to a certain degree (many limitations!). If you want to use a different version of Mesa your best option is to use an overlay or a Git worktree where you use the same Nixpkgs revision and only alter pkgs/development/libraries/mesa/
for one of the two approaches mentioned above.
Debugging Mesa issues
There are a lot of useful environment variables for debugging purposes: https://docs.mesa3d.org/envvars.html
The most important one is LIBGL_DEBUG=verbose
and helps with debugging error like:
libGL error: MESA-LOADER: failed to open $DRIVER (search paths /run/opengl-driver/lib/dri) libGL error: failed to load driver: $DRIVER