Skip to content

Nvidia secondary GPU copy acceleration

This fixes three issues that were preventing GPU copies on the Nvidia proprietary driver:

  1. gbm_surface_create fails with ENOSYS (Function not implemented) unless you remove all flags.
  2. Missing call to glViewport in meta-renderer-native-gles3.c.
  3. Checking for GL_OES_EGL_image_external but then using GL_OES_EGL_image semantics which Nvidia does not support.

Measurements from !3314:

Driver Before After
nvidia-drm 32.5 FPS, 23 ms 65.0 FPS, 11 ms
nouveau 65.0 FPS, 9 ms 65.0 FPS, 9 ms
amdgpu [1] 60.0 FPS, 10 ms 60.0 FPS, 10 ms
amdgpu [2] 30.0 FPS 30.0 FPS
  • nvidia-drm and nouveau are the same NVIDIA GTX 1650 card plugged into 2.5K 130 Hz. Hence the decimation to 65 FPS and 32.5 FPS.
  • amdgpu is a Radeon PRO WX 2100 card plugged into 4K 60 Hz.
  • amdgpu [1] is CLUTTER_SHOW_FPS=1 COGL_DEBUG=sync-frame which seems to be a workaround for #3070 (closed).
  • amdgpu [2] is CLUTTER_SHOW_FPS=1 and slower presumably due to #3070 (closed).

Closes: gnome-shell#6221 (closed), #2247 (closed), #2551 (closed), https://launchpad.net/bugs/1970291

Mutter 46 requires a fix for #3235 (closed) before this works. Mutter 45 has no such problem.

Edited by Daniel van Vugt

Merge request reports