commit
6ffe3132e3
47
README.md
47
README.md
|
@ -1,4 +1,4 @@
|
||||||
This tool tries to solve the "OpenGL" problem on nix. Works with Nvidia cards (with bumblebee) and intel cards.
|
This tool tries to solve the "OpenGL" problem on nix. Works with Nvidia cards (with bumblebee) and Intel cards. It works for Vulkan programs too.
|
||||||
|
|
||||||
# Quick start
|
# Quick start
|
||||||
|
|
||||||
|
@ -33,10 +33,11 @@ libGL error: unable to load driver: swrast_dri.so
|
||||||
libGL error: failed to load driver: swrast
|
libGL error: failed to load driver: swrast
|
||||||
```
|
```
|
||||||
|
|
||||||
This library contains a wrapper which is able to launch GL application:
|
This library contains a wrapper which is able to launch GL or Vulkan applications:
|
||||||
|
|
||||||
```
|
```
|
||||||
nixGLXXX program
|
nixGLXXX program
|
||||||
|
nixVulkanXXX program
|
||||||
```
|
```
|
||||||
|
|
||||||
# Installation / Usage
|
# Installation / Usage
|
||||||
|
@ -61,18 +62,32 @@ OpenGL core profile version string: 4.5.0 NVIDIA 390.25
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
|
|
||||||
For intel:
|
For Intel GL:
|
||||||
|
|
||||||
```
|
```
|
||||||
nix-build -A nixGLIntel
|
nix-build -A nixGLIntel
|
||||||
```
|
```
|
||||||
|
|
||||||
For NVIDIA alone:
|
For Intel Vulkan:
|
||||||
|
|
||||||
|
```
|
||||||
|
nix-build -A nixVulkanIntel
|
||||||
|
```
|
||||||
|
|
||||||
|
For NVIDIA GL alone:
|
||||||
|
|
||||||
```
|
```
|
||||||
nix-build -A nixGLNvidia --argstr nvidiaVersion 390.25
|
nix-build -A nixGLNvidia --argstr nvidiaVersion 390.25
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For NVIDIA Vulkan alone:
|
||||||
|
|
||||||
|
Note that the NVIDIA GL and Vulkan wrappers are identical aside from the name
|
||||||
|
|
||||||
|
```
|
||||||
|
nix-build -A nixVulkanNvidia --argstr nvidiaVersion 390.25
|
||||||
|
```
|
||||||
|
|
||||||
(replace `390.25` with the host driver version gathered earlier.)
|
(replace `390.25` with the host driver version gathered earlier.)
|
||||||
|
|
||||||
For Nvidia with bumblebee:
|
For Nvidia with bumblebee:
|
||||||
|
@ -94,10 +109,18 @@ nix-env -i ./result
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
|
For GL programs
|
||||||
|
|
||||||
```
|
```
|
||||||
nixGLXXX program args
|
nixGLXXX program args
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For Vulkan programs
|
||||||
|
|
||||||
|
```
|
||||||
|
nixVulkanXXX program args
|
||||||
|
```
|
||||||
|
|
||||||
For example (on my dual GPU laptop):
|
For example (on my dual GPU laptop):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -107,6 +130,22 @@ $ nixGLNvidiaBumblebee glxinfo | grep -i 'OpenGL version string'
|
||||||
OpenGL version string: 4.6.0 NVIDIA 390.25
|
OpenGL version string: 4.6.0 NVIDIA 390.25
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Another example (on an XPS 9560 with the Intel GPU selected):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ sudo apt install mesa-vulkan-drivers
|
||||||
|
...
|
||||||
|
$ nixVulkanIntel $(nix-build '<nixpkgs>' --no-out-link -A vulkan-loader)/bin/vulkaninfo | grep VkPhysicalDeviceProperties -A 7
|
||||||
|
VkPhysicalDeviceProperties:
|
||||||
|
===========================
|
||||||
|
apiVersion = 0x400036 (1.0.54)
|
||||||
|
driverVersion = 71311368 (0x4402008)
|
||||||
|
vendorID = 0x8086
|
||||||
|
deviceID = 0x591b
|
||||||
|
deviceType = INTEGRATED_GPU
|
||||||
|
deviceName = Intel(R) HD Graphics 630 (Kaby Lake GT2)
|
||||||
|
```
|
||||||
|
|
||||||
# Limitations
|
# Limitations
|
||||||
|
|
||||||
Does not work now for AMD drivers because I dont' have the hardware.
|
Does not work now for AMD drivers because I dont' have the hardware.
|
||||||
|
|
37
default.nix
37
default.nix
|
@ -39,16 +39,16 @@ rec {
|
||||||
chmod u+x $out/bin/nixGLNvidiaBumblebee
|
chmod u+x $out/bin/nixGLNvidiaBumblebee
|
||||||
'';
|
'';
|
||||||
|
|
||||||
nixGLNvidia = runCommand "nixGLNvidia-${version}" {
|
nixNvidiaWrapper = api: runCommand "nix${api}Nvidia-${version}" {
|
||||||
buildInputs = [ nvidiaLibsOnly ];
|
buildInputs = [ nvidiaLibsOnly ];
|
||||||
|
|
||||||
meta = with pkgs.stdenv.lib; {
|
meta = with pkgs.stdenv.lib; {
|
||||||
description = "A tool to launch OpenGL application on system other than NixOS - Nvidia version";
|
description = "A tool to launch ${api} application on system other than NixOS - Nvidia version";
|
||||||
homepage = "https://github.com/guibou/nixGL";
|
homepage = "https://github.com/guibou/nixGL";
|
||||||
};
|
};
|
||||||
} ''
|
} ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
cat > $out/bin/nixGLNvidia << FOO
|
cat > $out/bin/nix${api}Nvidia << FOO
|
||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
export LD_LIBRARY_PATH=${nvidiaLibsOnly}/lib
|
export LD_LIBRARY_PATH=${nvidiaLibsOnly}/lib
|
||||||
"\$@"
|
"\$@"
|
||||||
|
@ -57,6 +57,10 @@ rec {
|
||||||
chmod u+x $out/bin/nixGLNvidia
|
chmod u+x $out/bin/nixGLNvidia
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
nixGLNvidia = nixNvidiaWrapper "GL";
|
||||||
|
|
||||||
|
nixVulkanNvidia = nixNvidiaWrapper "Vulkan";
|
||||||
|
|
||||||
nixGLIntel = runCommand "nixGLIntel-${version}" {
|
nixGLIntel = runCommand "nixGLIntel-${version}" {
|
||||||
buildInputs = [ mesa_drivers ];
|
buildInputs = [ mesa_drivers ];
|
||||||
|
|
||||||
|
@ -74,4 +78,31 @@ rec {
|
||||||
|
|
||||||
chmod u+x $out/bin/nixGLIntel
|
chmod u+x $out/bin/nixGLIntel
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
nixVulkanIntel = runCommand "nixVulkanIntel-${version}" {
|
||||||
|
meta = with pkgs.stdenv.lib; {
|
||||||
|
description = "A tool to launch Vulkan application on system other than NixOS - Intel version";
|
||||||
|
homepage = "https://github.com/guibou/nixGL";
|
||||||
|
};
|
||||||
|
} ''
|
||||||
|
mkdir -p "$out/bin"
|
||||||
|
cat > "$out/bin/nixVulkanIntel" << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
if [ ! -z "$LD_LIBRARY_PATH" ]; then
|
||||||
|
echo "Warning, nixVulkanIntel overwriting existing LD_LIBRARY_PATH" 1>&2
|
||||||
|
fi
|
||||||
|
export LD_LIBRARY_PATH=${lib.makeLibraryPath [
|
||||||
|
zlib
|
||||||
|
libdrm
|
||||||
|
xorg.libX11
|
||||||
|
xorg.libxcb
|
||||||
|
xorg.libxshmfence
|
||||||
|
wayland
|
||||||
|
gcc.cc
|
||||||
|
]}
|
||||||
|
exec "\$@"
|
||||||
|
EOF
|
||||||
|
chmod u+x "$out/bin/nixVulkanIntel"
|
||||||
|
${shellcheck}/bin/shellcheck "$out/bin/nixVulkanIntel"
|
||||||
|
'';
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user