OpenGL
From Wikipedia:OpenGL:
- OpenGL (Open Graphics Library) is a cross-language, cross-platform application programming interface (API) for rendering 2D and 3D vector graphics.
Learn more at Khronos.
Installation
To run applications that use OpenGL, you will need to install the correct driver(s) for your hardware (either GPUs or CPUs)
- For AMD (and ATI) it is recommended to use the open-source drivers unless you have a very strong reason to use the proprietary ones.
- For NVIDIA, using the proprietary driver is recommended for newer cards and/or better performance in general.
- Intel's GenN hardware does not refer to the generation of the CPU, it refers to the generation of the GPU, which is different from the generation of the CPU.
- To find the family of an AMD (and ATI) GPU, check the decoder ring from the X.Org project
- To find the code-name of an NVIDIA GPU, check the code-name list from the Nouveau project
Mesa is an open-source OpenGL implementation, continually updated to support the latest OpenGL specification. It has a collection of open-source drivers for Intel graphics, ATI, AMD and NVIDIA GPUs. Mesa also provides software rasterizers, such as llvmpipe.
There are two Mesa packages each with a distinct set of drivers:
-
mesa is the up to date Mesa package which includes most of the modern drivers for newer hardware:
-
r300
: for AMD's Radeon R300, R400, and R500 GPUs. -
r600
: for AMD's Radeon R600 GPUs up to Northern Islands. Officially supported by AMD. -
radeonsi
: for AMD's Southern Island GPUs and later. Officially supported by AMD. -
nouveau
: Nouveau is the open-source driver for NVIDIA GPUs. -
virtio_gpu
: a virtual GPU driver for virtio, can be used with QEMU based VMMs (like KVM or Xen). -
vmwgfx
: for VMware virtual GPUs. -
crocus
: for Intel's Gen 4 to Gen 7 hardware. -
iris
: for Intel's Gen 8 hardware and later. Officially supported by Intel. -
zink
: a Gallium driver used to run OpenGL on top of Vulkan. -
d3d12
: for OpenGL 3.3 support on devices that only support D3D12 (i.e. WSL). -
swrast
: a legacy software rasterizer. -
softpipe
: a software rasterizer and a reference Gallium driver. -
llvmpipe
: a software rasterizer which uses LLVM for x86 JIT code generation and is multi-threaded.
-
-
mesa-amber is the legacy Mesa package which includes the classic (non-Gallium3D) drivers for older hardware:
-
i830
andi915
: for older Intel integrated GPUs. Same binary asi965
. -
i965
: for Intel's Gen 4 hardware and later. Officially supported by Intel. -
radeon
: for AMD's Radeon R100 GPUs. Same binary asr200
. -
r200
: for AMD's Radeon R200 GPUs. -
nouveau_vieux
: for NVIDIA NV04 (Fahrenheit) to NV20 (Kelvin) GPUs. -
swrast
: a legacy software rasterizer.
-
- Note: When using Mesa, the correct driver should be selected automatically, no configuration needed once the package is installed.
- nvidia-utils is the proprietary driver for NVIDIA GPUs, which includes an OpenGL implementation.
- amdgpu-pro-libglAUR is the proprietary driver for AMD GPUs.
Verification
To verify your OpenGL installation, you can use mesa-utils glxinfo
, which should display output like this (with different values depending on your setup, of course):
$ glxinfo | grep OpenGL
OpenGL vendor string: X.Org OpenGL renderer string: AMD RV620 (DRM 2.50.0 / 5.10.12-arch1-1, LLVM 11.0.1) OpenGL core profile version string: 3.3 (Core Profile) Mesa 20.3.4 OpenGL core profile shading language version string: 3.30 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.0 Mesa 20.3.4 OpenGL shading language version string: 1.30 OpenGL context flags: (none) OpenGL extensions: OpenGL ES profile version string: OpenGL ES 3.0 Mesa 20.3.4 OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00 OpenGL ES profile extensions:
From the same package, you can also use glxgears
as a basic OpenGL test. You should see 3 rotating gears when running the program.
Switching between drivers
For Hybrid graphics, see PRIME.
Mesa
You can override the driver used for an application with the following environment variable:
MESA_LOADER_DRIVER_OVERRIDE=driver
By default, Mesa searches for drivers in /lib/dri/
. You can view the list of installed drivers with
$ ls /lib/dri/
driver
in driver_dri.so
is the actual name of the driver. If Mesa failed to find the specified driver, it will fall back to llvmpipe
.
You can also use an OpenGL software rasterizer by setting the following environment variables:
LIBGL_ALWAYS_SOFTWARE=true GALLIUM_DRIVER=driver
driver
can be either softpipe
, llvmpipe
, or swr
.
llvmpipe
and swr
are faster than softpipe
.OpenGL over Vulkan (Zink)
From the Mesa documentation:
- The Zink driver is a Gallium driver that emits Vulkan API calls instead of targeting a specific GPU architecture. This can be used to get full desktop OpenGL support on devices that only support Vulkan.
If you are experiencing issues in your default OpenGL drivers (a bug in RadeonSI, Iris, etc.), you could try using the Zink driver.
According to this Phoronix benchmark, the average FPS in some applications ranges from 58-105% on Zink compared to RadeonSI, using an AMD RX 6700 XT.
As of 2021-11-30, many applications do not work on NVIDIA GPUs even with the latest driver 495.44 and mesa-gitAUR's master branch. When paired with Copper DRI extension (not yet upstreamed), the average FPS in Tomb Raider is 20% higher on a RTX 2070. To use Zink on NVIDIA drivers, use this command or similar:
$ env __GLX_VENDOR_LIBRARY_NAME=mesa MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink application
Development
Using OpenGL in code requires functions loader, read more at Khronos.
OpenGL Hardware Database
GPUInfo provides user reported GPU/driver combinations, supported extensions, capabilities, etc. This information is useful for verifying compatibility / compliance of particular hardware under both OpenGL and Vulkan.