Difference between revisions of "PRIME"

From ArchWiki
Jump to navigation Jump to search
(Troubleshooting)
(XRandR specifies only 1 output provider)
Line 47: Line 47:
  
 
If the video driver is blacklisted in {{ic|/etc/modprobe.d/}}, load the module and restart X. This may be the case if you use the bbswitch module for Nvidia GPUs.
 
If the video driver is blacklisted in {{ic|/etc/modprobe.d/}}, load the module and restart X. This may be the case if you use the bbswitch module for Nvidia GPUs.
 +
 +
Since kernel version 3.19.0 the nouveau kernel module cannot be loaded under certain circumstances. Dmesg will throw an error with {ic|invalid rom content}. The bug as has been patched, but hasnt yet reached mainline. [https://bugs.freedesktop.org/show_bug.cgi?id=89047 Freedesktop Bug Thread] In the meantime, applying the patches to a custom kernel before compiling seems to be the only fix.
  
 
=== When an application is rendered with the discrete card, it only renders a black screen ===
 
=== When an application is rendered with the discrete card, it only renders a black screen ===

Revision as of 19:07, 18 April 2015

zh-CN:PRIME

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: The list of drivers that support PRIME is incomplete. (Discuss in Talk:PRIME#)

PRIME is a technology used to manage hybrid graphics found on recent laptops (Optimus for NVIDIA, AMD Dynamic Switchable Graphics for ATI).

The following drivers support it:

Installation

First, check the list of video cards attached to your display:

$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x7d cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 3 outputs: 4 associated providers: 1 name:Intel
Provider 1: id: 0x56 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 6 outputs: 1 associated providers: 1 name:radeon

We can see that there are two graphic cards: Intel, the integrated card (id 0x7d), and Radeon, the discrete card (id 0x56), which should be used for GPU-intensive applications. We can see that, by default, Intel is always used:

$ glxinfo | grep "OpenGL renderer"
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile

The command xrandr --setprovideroffloadsink provider sink can be used to make a render offload provider send its output to the sink provider (the provider which has a display connected). The provider and sink identifiers can be numeric (0x7d, 0x56) or a case-sensitive name (Intel, radeon). Example:

$ xrandr --setprovideroffloadsink radeon Intel

Now, you can use your discrete card for the applications who need it the most (for example games, 3D modellers...):

$ DRI_PRIME=1 glxinfo | grep "OpenGL renderer"
OpenGL renderer string: Gallium 0.4 on AMD TURKS

Other applications will still use the less power-hungry integrated card. These settings are lost once the X server restarts, you may want to make a script and auto-run it at the startup of your desktop environment (alternatively, put it in /etc/X11/xinit/xinitrc.d/). This may reduce your battery life and increase heat though.

Troubleshooting

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: No sources to motivate the workarounds in this section (Discuss in Talk:PRIME#)

XRandR specifies only 1 output provider

Delete/move /etc/X11/xorg.conf file and any other files relating to GPUs in /etc/X11/xorg.conf.d/. Restart the X server after this change.

If the video driver is blacklisted in /etc/modprobe.d/, load the module and restart X. This may be the case if you use the bbswitch module for Nvidia GPUs.

Since kernel version 3.19.0 the nouveau kernel module cannot be loaded under certain circumstances. Dmesg will throw an error with {ic|invalid rom content}. The bug as has been patched, but hasnt yet reached mainline. Freedesktop Bug Thread In the meantime, applying the patches to a custom kernel before compiling seems to be the only fix.

When an application is rendered with the discrete card, it only renders a black screen

In some cases PRIME needs a composition manager to properly work. If your window manager doesn’t do compositing, you can use xcompmgr on top of it.

If you use Xfce, you can go to Menu->Settings->Window Manager Tweaks->Compositor and enable compositing, then try again your application.

Black screen with GL-based compositors

Currently there are issues with GL-based compositors and PRIME offloading. While Xrender-based compositors (xcompmgr, xfwm, compton's default backend, cairo-compmgr, and a few others) will work without issue, GL-based compositors (Mutter/muffin, Compiz, compton with GLX backend, Kwin's OpenGL backend, etc) will initially show a black screen, as if there was no compositor running. While you can force an image to appear by resizing the offloaded window, this is not a practical solution as it will not work for things such as full screen Wine applications. This means that desktop environments such as GNOME3 and Cinnamon have issues with using PRIME offloading.

Additionally if you are using an Intel IGP you might be able to fix the GL Compositing issue by running the IGP as UXA instead of SNA, however this may cause issues with the offloading process (ie, xrandr --listproviders may not list the discrete GPU).

Kernel crash/oops when using PRIME and switching windows/workspaces

Note: this has been tested on a system with Intel+AMD

Using DRI3 WITH a config file for the integrated card seems to fix this issue.

To enable DRI3, you need to recompile mesa with --enable-dri3 in the configure flags[1] and create a config for the integrated card adding the DRI3 option:

Section "Device"
    Identifier "Intel Graphics"
    Driver "intel"
    Option "DRI" "3"
EndSection

After this you can use DRI_PRIME=1 WITHOUT having to run xrandr --setprovideroffloadsink radeon Intel as DRI3 will take care of the offloading.

Glitches/Ghosting Synchronization Problem on second monitor when using reverse PRIME

This problem occurs using i3 window manager without compositing, because double buffering is not supported. Enabling a compositing manager like compton, with specific options, can resolve the issue.

compton --backend glx --paint-on-overlay --vsync opengl-swc 

Source: Freedesktop Bugreport