render offload power management on 435.17 linux drivers

i’ve been playing with the render offload capabilities on these most recent drivers, following the documentation here
http://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/primerenderoffload.html

i have it working with manjaro using a patched xorg, by all accounts seems to be working as intended. xorg starts and shows the intel gpu as the rendering, im able to start both vulkan and opengl apps on the nvidia gpu using the launch variables, xrandr --listproviders shows both modesetting and nvidia.

where im uncertain is regarding power management, with this setup since the xorg process is running on the nvidia gpu there is no way to power it down short of killing the xorg process > unloading nvidia modules > and starting xorg entirely on the intel gpu exclusively.

is there no way to be able to run xorg on the intel gpu and use the nvidia to launch processes and offload to modesetting for display so that when the process (game, etc…) is ended, be able to unload the nvidia modulesto allow the nvidia gpu to power off.

am i wasting my time attempting to make this work?

do i understand correctly that getting the nvidia gpu to go into a low power state is the best possible outcome?

thank you for your time, i look forward to hearing back.

Unless you have a notebook with a Turing gpu, this is it.

i have a 960m on this laptop so it’s not turing and i knew going in that power management would require manual intervention which is fine, i was just hoping to be able to manage it without needing to restart xorg or reboot.

what i dont understand is even with the turing cards, if xorg needs to be run on the nvidia it is never able to fully turn off, only go to it’s lowest power state possible?

thanks for the quick reply.

To make this work, the kernel driver has to have power management functions, i.e. it stays awake and knows about/toggles the power state of the hardware. This was implemented for Turing:
http://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/dynamicpowermanagement.html
Why only for Turing? My guess, if you look at the doc, it now uses standardized acpi methods, probably only mandatory for hardware manufacturers since Turing. Previously, power cycling was done through some non-standard methods, like the “device specific method” DSM or NVP2/3 power resources depending on time built.

since this setup uses the modesetting driver for compositing, tearing is pretty bad. im able to reduce it by using

compton --backend glx --vsync

but it’s still a problem.

nvidia_drm modeset=1

seems to cause render offload to fail.

im aware skylake cpu’s have issues with modesetting but any suggestions would be appreciated.

i marked your previous post as the answer to my power management question.

to answer my own question in regards to fixing the tearing on skylake cpu’s with the modesetting driver. i was able to get the render offloading to the intel driver working, the config was put together by @openminded on the manjaro forum. bus id’s dont seem to be needed, tearing is gone, and render offload is working for both opengl and vulkan using the env variables.

for others who might need/want this.

#/etc/X11/xorg.conf.d/10-offload.conf   
                                                                                                                                                                  
Section "ServerLayout"
  Identifier "layout"
  Option "AllowNVIDIAGPUScreens"
  Screen 0 "iGPU"
EndSection

Section "Device"
  Identifier "iGPU"
  Driver "intel"
#  BusID "PCI:0:2:0"
  Option "TearFree" "true"
  Option "AccelMethod" "sna"
  Option "DRI" "3"
EndSection

Section "DRI"
    Group "video"
    Mode 0666
EndSection

Section "Extensions"
    Option "Composite" "Enable"
    Option "RENDER" "Enable"
EndSection

Section "Screen"
  Identifier "iGPU"
  Device "iGPU"
EndSection

Section "Device"
  Identifier "nvidia"
  Driver "nvidia"
#  BusID "PCI:1:0:0"
EndSection