linux - Offload dri to a render node in xorg

07
2014-07
  • ayvango

    There is new feature in mesa DRI_PRIME emerged to keep up with modern hybrid graphics on laptops. I'd like to use it for desktop too. Powersaving is always good.

    So I make xorg to use only intel driver disabling AutoAddGPU option. Then, when I need to run gpu consuming application I may wake up my radeon cards. DRI render nodes emerges after modprobing radeon module:

    # ls /dev/dri/
    card0  card1  card2
    controlD64  controlD65  controlD66
    renderD128  renderD129  renderD130
    

    How can I make xorg use this nodes for offloading rendering?

    I tried xrandr --listproviders but got only single provider corresponded to embedded intel card. May render nodes be used as providers?

  • Answers
    Know someone who can answer? Share a link to this question via email, Google+, Twitter, or Facebook.

    Related Question

    nvidia - Setting up two screens in Xorg
  • viraptor

    I'be got two Nvidia cards, but Xorg activates only one of them. The following config is based on the nvidia configurator output:

    Section "ServerLayout"
        Identifier     "Layout0"
        Screen      0  "Screen0" 0 0
        Screen      1  "Screen1" LeftOf "Screen0"
        InputDevice    "Keyboard0" "CoreKeyboard"
        InputDevice    "Mouse0" "CorePointer"
        Option         "Xinerama" "0"
    EndSection
    
    Section "Module"
        Load           "dbe"
        Load           "extmod"
        Load           "type1"
        Load           "freetype"
        Load           "glx"
    EndSection
    
    Section "InputDevice"
        Identifier     "Mouse0"
        Driver         "mouse"
        Option         "Protocol" "auto"
        Option         "Device" "/dev/psaux"
        Option         "Emulate3Buttons" "no"
        Option         "ZAxisMapping" "4 5"
    EndSection
    
    Section "InputDevice"
        Identifier     "Keyboard0"
        Driver         "keyboard"
    EndSection
    
    Section "Monitor"
        Identifier     "Monitor0"
        VendorName     "Unknown"
        ModelName      "HP LE2201w"
        HorizSync       24.0 - 83.0
        VertRefresh     50.0 - 76.0
        Option         "DPMS"
    EndSection
    
    Section "Monitor"
        Identifier     "Monitor1"
        VendorName     "Unknown"
        ModelName      "Acer AL2017"
        HorizSync       30.0 - 82.0
        VertRefresh     56.0 - 76.0
        Option         "DPMS"
    EndSection
    
    Section "Device"
        Identifier  "Card0"
        Driver      "nvidia"
        VendorName  "nVidia Corporation"
        BoardName   "GeForce 6100 nForce 405"
        BusID       "PCI:0:13:0"
    EndSection
    Section "Device"
        Identifier  "Card1"
        Driver      "nvidia"
        VendorName  "nVidia Corporation"
        BoardName   "GeForce 8400 GS"
        BusID       "PCI:2:0:0"
    EndSection
    
    Section "Screen"
        Identifier     "Screen0"
        Device         "Device0"
        Monitor        "Monitor0"
        DefaultDepth    24
        Option         "TwinView" "0"
        Option         "metamodes" "nvidia-auto-select +0+0"
        SubSection     "Display"
            Depth       24
        EndSubSection
    EndSection
    Section "Screen"
        Identifier     "Screen1"
        Device         "Device1"
        Monitor        "Monitor1"
        DefaultDepth    24
        Option         "TwinView" "0"
        Option         "metamodes" "nvidia-auto-select +0+0"
        SubSection     "Display"
            Depth       24
        EndSubSection
    EndSection
    

    What I see in the log file is:

    (==) Log file: "/var/log/Xorg.0.log", Time: Fri Mar 19 11:08:08 2010
    (==) Using config file: "/etc/X11/xorg.conf"
    (==) ServerLayout "Layout0"
    (**) |-->Screen "Screen0" (0)
    (**) |   |-->Monitor "Monitor0"
    (==) No device specified for screen "Screen0".
            Using the first device section listed.
    (**) |   |-->Device "Card0"
    (**) |-->Screen "Screen1" (1)
    (**) |   |-->Monitor "Monitor1"
    (==) No device specified for screen "Screen1".
            Using the first device section listed.
    (**) |   |-->Device "Card0"
    (**) |-->Input Device "Keyboard0"
    (**) |-->Input Device "Mouse0"
    (**) Option "Xinerama" "0"
    (==) Automatically adding devices
    (==) Automatically enabling devices
    

    even though later on both cards are detected:

    (--) PCI:*(0:0:13:0) 10de:03d1:1019:2601 nVidia Corporation C61 [GeForce 6100 nForce 405] rev 162, Mem @ 0xfb000000/16777216, 0xd0000000/268435456, 0xfc000000/16777216, BIOS @ 0x????????/131072
    (--) PCI: (0:2:0:0) 10de:0422:0000:0000 nVidia Corporation G86 [GeForce 8400 GS] rev 161, Mem @ 0xf8000000/16777216, 0xe0000000/268435456, 0xf6000000/33554432, I/O @ 0x0000bc00/128, BIOS @ 0x????????/131072
    [ --- some more logs --- ]
    (II) Mar 19 11:08:10 NVIDIA(0): NVIDIA GPU GeForce 6100 nForce 405 (C61) at PCI:0:13:0
    (II) Mar 19 11:08:10 NVIDIA(0):     (GPU-0)
    [ --- some more logs --- ]
    (II) Mar 19 11:08:12 NVIDIA(GPU-1): NVIDIA GPU GeForce 8400 GS (G86) at PCI:2:0:0 (GPU-1)
    

    Unfortunately later on only one card is initialised and one screen is active. Xrandr shows only one screen too.

    Any ideas on how to fix it?


  • Related Answers
  • quack quixote

    Your Screen sections are not matching the Device sections you've defined. In the first Screen section (Screen0), the Device option points to "Device0" -- when in the first Device section, you set the Identifier option to "Card0". The Screen sections need to use the correct identifier.

    What you want to have here is:

    Section "Device"
        Identifier  "Card0"
        ^^^^^^^^^^^^^^^^^^^  this line names this device "Card0"
        [...]
    EndSection
    
    Section "Screen"
        Identifier     "Screen0"
        Device         "Card0"
        ^^^^^^^^^^^^^^^^^^^^^^  this line needs to match a device's Identifier
        [...]
    EndSection