Indirect GLX rendering with render offload fails

I run Arch linux on a Dell XPS 15 7590 that has a GTX 1650 and integrated Intel iGPU. I normally run it so that the Intel driver is running the iGPU (to avoid tearing with modesetting driver) and offloading to the discrete NVIDIA card as of driver version 435.17.

When I login to a local GPU cluster node using SSH with X11 forwarding and IndirectGLX server flags enabled in my xorg.conf, and attempt to open an application (UCSF Chimera) that uses openGL, I get the following error:

Error starting chimera:
error: Upgrade your graphics to OpenGL 1.1 or later

  File "/ssd/programs/x86_64-linux/chimera/1.13.1/share/OpenGLDebug/__init__.py", line 407, in checkConfig
    gi.makeWSCurrent()

See reply log for Python traceback.


X Error of failed request:  GLXBadCurrentWindow
  Major opcode of failed request:  152 (GLX)
  Minor opcode of failed request:  5 (X_GLXMakeCurrent)
  Serial number of failed request:  795
  Current serial number in output stream:  795

This error does not occur if I do not use render offload and only use the NVIDIA driver to run everything - the program loads fine. I did notice that If I run

glxinfo | grep OpenGL

while logged into the GPU server I get no population of OpenGL attributes:

OpenGL vendor string: 
OpenGL renderer string: 
OpenGL version string: 
OpenGL extensions:

whereas when I run it on either the laptop or the cluster node directly (not via SSH), these fields are populated. When I run another program that uses OpenGL through SSH with X11 forwarding I get the following error:

Unrecognized OpenGL version

I’ve tried this on both kernel 4.19-LTS and the latest kernel and the same thing happens. I’ve also tried this on driver versions 435.21 and the latest 440.26 with no changes. When I switch to the modesetting driver for iGPU with offloading to NVIDIA card and try to run the program, my X server crashes and I get booted back to a GDM login screen.

If anyone has thoughts or insight, they would be much appreciated.
nvidia-bug-report.log.gz (1.13 MB)

Interesting. Are you setting __NV_PRIME_RENDER_OFFLOAD=1 on the remote server, or just trying to use indirect GLX without actually setting the environment variables?

Unfortunately, render offload works by rendering the image in the GLX application and then sending it to the server using the Present extension. The server doesn’t provide a way for an internal server component (such as libglxserver_nvidia, where indirect rendering happens) to do something equivalent to present frames to the iGPU.

Do you have a backtrace of the crash? I don’t see one in your bug report log.

Setting __NV_PRIME_RENDER_OFFLOAD=1 or not on the remote server doesn’t change anything, unfortunately.

I’ve attached a new bug report log using the modesetting driver where the X-server crashed after trying to launch the application. The earlier log was made using the Intel driver, where the X-server doesn’t crash.

Thanks for your help.
nvidia-bug-report.log.gz (1.14 MB)