Configure the X Server
To use NVIDIA's PRIME render offload support, configure the X server with an X screen using an integrated GPU with the xf86-video-modesetting X driver and a GPU screen using the nvidia X driver. The X server will normally automatically do this, assuming the system BIOS is configured to boot on the iGPU and NVIDIA GPU screens are enabled in /etc/X11/xorg.conf.d/nvidia.conf:
Section "ServerLayout"
Identifier "layout"
Option "AllowNVIDIAGPUScreens"
EndSection
If GPU screen creation was successful, the log file /var/log/Xorg.0.log should contain lines with "NVIDIA(G0)", and querying the RandR providers with xrandr --listproviders should display a provider named "NVIDIA-G0" (for "NVIDIA GPU screen 0"). For example:
Providers: number : 2
Provider 0: id: 0x221 cap: 0x9, Source Output, Sink Offload crtcs: 3 outputs: 6 associated providers: 0 name:modesetting
Provider 1: id: 0x1f8 cap: 0x0 crtcs: 0 outputs: 0 associated providers: 0 name:NVIDIA-G0
Configure Graphics Applications to Render Using the GPU Screen
To configure a graphics application to be offloaded to the NVIDIA GPU screen, set the environment variable __NV_PRIME_RENDER_OFFLOAD to 1. If the graphics application uses Vulkan or EGL, that should be all that is needed. If the graphics application uses GLX, then also set the environment variable __GLX_VENDOR_LIBRARY_NAME to nvidia, so that GLVND loads the NVIDIA GLX driver.
Examples:
NV_PRIME_RENDER_OFFLOAD=1 vkcube
__NV_PRIME_RENDER_OFFLOAD=1 GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep vendor
Finer-Grained Control of Vulkan
The NV_PRIME_RENDER_OFFLOAD environment variable causes the special Vulkan layer VK_LAYER_NV_optimus to be loaded. Vulkan applications use the Vulkan API to enumerate the GPUs in the system and select which GPU to use; most Vulkan applications will use the first GPU reported by Vulkan. The VK_LAYER_NV_optimus layer causes the GPUs to be sorted such that the NVIDIA GPUs are enumerated first. For finer-grained control, the VK_LAYER_NV_optimus layer looks at the VK_LAYER_NV_optimus environment variable. The value NVIDIA_only causes VK_LAYER_NV_optimus to only report NVIDIA GPUs to the Vulkan application. The value non_NVIDIA_only causes VK_LAYER_NV_optimus to only report non-NVIDIA GPUs to the Vulkan application.
Examples:
NV_PRIME_RENDER_OFFLOAD=1 VK_LAYER_NV_optimus=NVIDIA_only vkcube
NV_PRIME_RENDER_OFFLOAD=1 VK_LAYER_NV_optimus=non_NVIDIA_only vkcube
Finer-Grained Control of OpenGL
For OpenGL with either GLX or EGL, the environment variable NV_PRIME_RENDER_OFFLOAD_PROVIDER provides finer-grained control. While NV_PRIME_RENDER_OFFLOAD=1 tells GLX or EGL to use the first NVIDIA GPU screen, __NV_PRIME_RENDER_OFFLOAD_PROVIDER can use an RandR provider name to pick a specific NVIDIA GPU screen, using the NVIDIA GPU screen names reported by xrandr --listproviders
.
Examples:
NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgears
NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 GLX_VENDOR_LIBRARY_NAME=nvidia glxgears
__NV_PRIME_RENDER_OFFLOAD=1 eglinfo
NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 eglinfo
Troubleshooting
After starting the X server, verify that the xf86-video-modesetting X driver is using "glamoregl". The log file /var/log/Xorg.0.log should contain something like this:
[1272173.618] (II) Loading sub module "glamoregl"
[1272173.618] (II) LoadModule: "glamoregl"
[1272173.618] (II) Loading /usr/lib/xorg/modules/libglamoregl.so
[1272173.622] (II) Module glamoregl: vendor="X.Org Foundation"
[1272173.622] compiled for 1.20.4, module version = 1.0.1
[1272173.622] ABI class: X.Org ANSI C Emulation, version 0.4
[1272173.638] (II) modeset(0): glamor X acceleration enabled on Mesa DRI Intel(R) HD Graphics 630 (Kaby Lake GT2)
[1272173.638] (II) modeset(0): glamor initialized
If glamoregl could not be loaded, the X log may report something like:
[1271802.673] (II) Loading sub module "glamoregl"
[1271802.673] (II) LoadModule: "glamoregl"
[1271802.673] (WW) Warning, couldn't open module glamoregl
[1271802.673] (EE) modeset: Failed to load module "glamoregl" (module does not exist, 0)
[1271802.673] (EE) modeset(0): Failed to load glamor module.
in which case, consult your distribution's documentation for how to (re-)install the package containing glamoregl.
If the server didn't create a GPU screen automatically, ensure that the nvidia-drm kernel module is loaded. This should normally happen by default, but you can confirm by running lsmod | grep nvidia-drm to see if the kernel module is loaded. Run modprobe nvidia-drm to load it.
If automatic configuration does not work, it may be necessary to explicitly configure the iGPU and dGPU devices in xorg.conf:
Section "ServerLayout"
Identifier "layout"
Screen 0 "iGPU"
Option "AllowNVIDIAGPUScreens"
EndSection
Section "Device"
Identifier "iGPU"
Driver "modesetting"
EndSection
Section "Screen"
Identifier "iGPU"
Device "iGPU"
EndSection
Section "Device"
Identifier "dGPU"
Driver "nvidia"
EndSection
See also : https://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/primerenderoffload.html
Chapter 32. Offloading Graphics Display with RandR 1.4
Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.
System Requirements
X.Org X server version 1.13 or higher.
A Linux kernel, version 3.13 or higher, with CONFIG_DRM enabled.
Version 1.4.0 of the xrandr command-line utility.
Using the NVIDIA Driver as a RandR 1.4 Output Source Provider
To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:
Section "ServerLayout"
Identifier "layout"
Screen 0 "nvidia"
Inactive "intel"
EndSection
Section "Device"
Identifier "nvidia"
Driver "nvidia"
BusID "
EndSection
Section "Screen"
Identifier "nvidia"
Device "nvidia"
Option "AllowEmptyInitialConfiguration"
EndSection
Section "Device"
Identifier "intel"
Driver "modesetting"
EndSection
Section "Screen"
Identifier "intel"
Device "intel"
EndSection
See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.
The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:
$ xrandr --setprovideroutputsource modesetting NVIDIA-0
$ xrandr --auto
This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.
Use the
$ xrandr --listproviders
command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.
Synchronized RandR 1.4 Outputs
When running against X.Org X server with video driver ABI 23 or higher, synchronization is supported with compatible drivers. At the time of writing, synchronization is compatible with the “modesetting” driver with Intel devices on Linux version 4.5 or newer. If all requirements are met, synchronization will be used automatically.
X.Org X server version 1.19 or newer is required to support synchronization. Without synchronization, displays are prone to “tearing”. See Caveats for details.
If synchronization is being used but is not desired, it can be disabled with:
$ xrandr --output
and re-enabled with:
$ xrandr --output
See Vblank syncing for information on how OpenGL applications can synchronize with sink-provided outputs.
===
What is the format of a PCI Bus ID?
Different tools have different formats for the PCI Bus ID of a PCI device.
The X server's "BusID" X configuration file option interprets the BusID string in the format "bus@domain:device:function" (the "@domain" portion is only needed if the PCI domain is non-zero), in decimal. More specifically,
"%d@%d:%d:%d", bus, domain, device, function
in printf(3) syntax. NVIDIA X driver logging, nvidia-xconfig, and nvidia-settings match the X configuration file BusID convention.
The lspci(8) utility, in contrast, reports the PCI BusID of a PCI device in the format "domain:bus:device.function", printing the values in hexadecimal. More specifically,
"%04x:%02x:%02x.%x", domain, bus, device, function
in printf(3) syntax. The "Bus Location" reported in the information file matches the lspci format. Also, the name of per-GPU directory in /proc/driver/nvidia/gpus is the same as the corresponding GPU's PCI BusID in lspci format.
On systems where both an integrated GPU and a PCI slot are present, setting the "BusID" option to "AXI" selects the integrated GPU. By default, not specifying this option or setting it to an empty string selects a discrete GPU if available, the integrated GPU otherwise.
LA VACHE !! Nvidia publie une présentation expliquant comment et pourquoi porter ses jeux sous linux oO !!
Cool !! ENFIN !! (je suis SUR que c'est l'effet "steam")
En même temps avec Microsoft qui choisi de ne pas porter les versions de directx sur XP puis les prochaines sou seven etc... ils découpent leur cibles...
Tant mieux !!
Comment forcer le GPU d'une NVIDIA a fonctionner avec la technologie Optimus ?
PS: cette technologie permet d'utiliser le GPU intégré (souvent un intel HD) pour les taches peu gourmandes en ressource graphique et de basculer automatiquement sur le GPU Nvidia lorsqu'une application telle qu'un jeu ou une lecture de vidéo est lancée, malheureusement cette détection a des fois des ratée (notamment avec l'outil dxdiag).
Check this list before open a thread about "What version run in mine PC?" Last update: Dez/16/2008 ------------------------------------------