Chapter 33. Offloading Graphics Display with RandR 1.4
Prev | Part I. Installation and Configuration Instructions | Next

## 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. 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 "<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

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.

    $ nvidia-xconfig --prime

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

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 <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

- Support for PRIME Synchronization relies on DRM KMS support. See Chapter 34, Direct Rendering Manager Kernel Modesetting (DRM KMS) for more information.

- Some Intel i915 DRM driver versions, such as that included with Linux 4.5, have a bug where drmModeMoveCursor() and drmModePageFlip() interfere with each other, resulting in only one occurring per frame. If choppy performance is observed in configurations using PRIME Synchronization and i915, it is suggested to add `Option "SWCursor"` to Intel's device section in xorg.conf. The bug appears to be fixed as of Linux 4.6.

- When running against X.Org X server version 1.18.x or lower, there is no synchronization between the images rendered by the NVIDIA GPU and the output device. This means that the output device can start reading the next frame of video while it is still being updated, producing a graphical artifact known as “tearing”. Tearing is expected due to limitations in the design of the X.Org X server prior to video driver ABI 23.

- The NVIDIA driver currently only supports the `Source Output` capability. It does not support render offload and cannot be used as an output sink.

- Some versions of the “modesetting” driver try to load a sub-module called “glamor”, which conflicts with the NVIDIA GLX implementation. Please ensure that the `libglamoregl.so` X module is not installed.

- NVIDIA's implementation of PRIME requires support for DRM render nodes, a feature first merged in Linux 3.12. However, the feature was not enabled by default until Linux 3.17. To enable it on earlier supported kernels, specify the `drm.rnodes=1` kernel boot parameter.

Prev | Up | Next
Chapter 32. Configuring Depth 30 Displays | Home | Chapter 34. Direct Rendering Manager Kernel Modesetting (DRM KMS)