nixGL/README.md
2018-03-19 11:47:40 +01:00

134 lines
3.1 KiB
Markdown

This tool tries to solve the "OpenGL" problem on nix. Works with Nvidia cards (with bumblebee) and intel cards.
# Quick start
Suppose you have a configuration with an nvidia card, host driver version `390.25`
```
# clone the repository
git clone https://github.com/guibou/nixGL
cd nixGL
# build and install the wrapper
nix-build -A nixGLNvidia --argstr nvidiaVersion 390.25
nix-env -i ./result
# use it with any OpenGL application
nixGLNvidia blender
```
# Motivation
You use Nix on any distribution, and any GL application installed fails with this error:
```
$ program
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
```
This library contains a wrapper which is able to launch GL application:
```
nixGLXXX program
```
# Installation / Usage
Clone this git repository:
```
git clone https://github.com/guibou/nixGL
cd nixGL
```
## Optional (if NVIDIA): Grab your NVIDIA driver version
Using `glxinfo` from your host system, grab the driver version, here `390.25`:
```
$ glxinfo | grep NVIDIA
...
OpenGL core profile version string: 4.5.0 NVIDIA 390.25
...
```
## Build
For intel:
```
nix-build -A nixGLIntel
```
For NVIDIA alone:
```
nix-build -A nixGLNvidia --argstr nvidiaVersion 390.25
```
(replace `390.25` with the host driver version gathered earlier.)
For Nvidia with bumblebee:
```
nix-build -A nixGLNvidiaBumblebee --argstr nvidiaVersion 390.25
```
(replace `390.25` with the host driver version gathered earlier.)
For Ati (untested):
```
nix-build ./default.nix -A nixGLAti --argstr atiUrl "https://www2.ati.com/drivers/linux/radeon-crimson-15.12-15.302-151217a-297685e.zip" --argstr atiVersion "15.12"
```
(replace the url and the version with the correct ones. At the time of this writting, I have no idea on how we can detect that, ati seems to have a weird file naming convention).
## Install
```
nix-env -i ./result
```
(Note, you can iterate many time on this process to install as many driver as needed. Common example are `nixGLIntel` with `nixGLNvidiaBumblebee`)
# Usage
```
nixGLXXX program args
```
For example (on my dual GPU laptop):
```bash
$ nixGLIntel glxinfo | grep -i 'OpenGL version string'
OpenGL version string: 3.0 Mesa 17.3.3
$ nixGLNvidiaBumblebee glxinfo | grep -i 'OpenGL version string'
OpenGL version string: 4.6.0 NVIDIA 390.25
```
# Limitations
Does not work now for AMD drivers because I dont' have the hardware.
# Comparaison with similar tools
[nix-install-vendor-gl.sh](https://github.com/deepfire/nix-install-vendor-gl)
provides a similar system with a different approach:
- it auto detect the host driver
- it needs root access and set your system for a specific driver
- it only provides wrappers for nvidia (without bumblebee)
Both projects are now really similar and the only reason I did not
contributed to `nix-install-vendor-gl.sh` was because initial `nixGL`
had a totally different approach.