Chapter 33. 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.

System Requirements

Using the NVIDIA Driver as an RandR 1.4 Output Source or Output Sink Provider

To use the NVIDIA driver as an RandR 1.4 output source provider, also known as “PRIME”, 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 "<BusID for NVIDIA device here>"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
    Option "AllowEmptyInitialConfiguration"
EndSection

Section "Device"
    Identifier "intel"
    Driver "modesetting"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

To use the NVIDIA driver as an RandR 1.4 output sink provider, also known as “Reverse PRIME”, the X server needs to be configured to use the “modesetting” driver for its primary screen and to use the NVIDIA 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 "intel"
    Inactive "nvidia"
    Option "AllowNVIDIAGPUScreens"
EndSection

Section "Device"
    Identifier "intel"
    Driver "modesetting"
    BusID "<BusID for Intel device here>"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
EndSection

When using the NVIDIA driver as a “Reverse PRIME” RandR 1.4 output sink provider combined with an application being run via Chapter 34, PRIME Render Offload, an optimization known as “Reverse PRIME Bypass” may be used, bypassing the bandwidth overhead of both PRIME Render Offload and PRIME Display Offload. In order for Reverse PRIME Bypass to be used, a PRIME Render Offload application must be unredirected, fullscreen, and visible only on a single NVIDIA-driven PRIME Display Offload output. Usage of Reverse PRIME Bypass is printed to the X log when verbose logging is enabled in the X server.

See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.

The nvidia-xconfig(1) utility can be used to update the X configuration file for using the NVIDIA driver as an output source provider.

$ nvidia-xconfig --prime

See the nvidia-xconfig(1) man page for details.

The X server does not automatically enable displays attached using the output sink in this configuration. To do that, use the xrandr command line tool.

For NVIDIA as an output source:

$ xrandr --setprovideroutputsource modesetting NVIDIA-0
$ xrandr --auto

For NVIDIA as an output sink:

$ xrandr --setprovideroutputsource NVIDIA-G0 modesetting
$ 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 or NVIDIA-G0 with the Source Output or Sink Output capability, respectively, and one named modesetting with the Sink Output and/or Source Output capabilities. 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 <output> --set "PRIME Synchronization" 0

and re-enabled with:

$ xrandr --output <output> --set "PRIME Synchronization" 1

See Vblank syncing for information on how OpenGL applications can synchronize with sink-provided outputs.

Caveats