From 4c23158f81c3c4b91353150fd4c28246ce1e692f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 3 Dec 2021 11:07:00 +0100 Subject: [PATCH 4/5] renderer/native: Allow forcing EGLStream backend The GBM support in the NVIDIA driver is fairly new, and to make it easier to identify whether a problem encountered is related to using GBM instead of EGLStreams, add a debug environment variable to force using EGLStream instead of GBM. To force using EGLStream instead of GBM, use MUTTER_DEBUG_FORCE_EGL_STREAM=1 Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/2045 Part-of: (cherry picked from commit d43cc776ef733251fc02e8e62669ea4ba7e68e2c) --- src/backends/native/meta-renderer-native.c | 26 ++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c index e7460fbf1..0cd7a27d6 100644 --- a/src/backends/native/meta-renderer-native.c +++ b/src/backends/native/meta-renderer-native.c @@ -1765,7 +1765,7 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat MetaGpuKms *gpu_kms, GError **error) { - MetaRendererNativeGpuData *gbm_renderer_gpu_data; + MetaRendererNativeGpuData *gbm_renderer_gpu_data = NULL; GError *gbm_error = NULL; #ifdef HAVE_EGL_DEVICE MetaRendererNativeGpuData *egl_stream_renderer_gpu_data; @@ -1775,14 +1775,26 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat if (!gpu_kms) return create_renderer_gpu_data_surfaceless (renderer_native, error); - gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native, - gpu_kms, - &gbm_error); - if (gbm_renderer_gpu_data) +#ifdef HAVE_EGL_DEVICE + if (g_strcmp0 (getenv ("MUTTER_DEBUG_FORCE_EGL_STREAM"), "1") != 0) +#endif + { + gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native, + gpu_kms, + &gbm_error); + if (gbm_renderer_gpu_data) + { + if (gbm_renderer_gpu_data->secondary.is_hardware_rendering) + return gbm_renderer_gpu_data; + } + } +#ifdef HAVE_EGL_DEVICE + else { - if (gbm_renderer_gpu_data->secondary.is_hardware_rendering) - return gbm_renderer_gpu_data; + g_set_error (&gbm_error, G_IO_ERROR, G_IO_ERROR_FAILED, + "GBM backend was disabled using env var"); } +#endif #ifdef HAVE_EGL_DEVICE egl_stream_renderer_gpu_data = -- 2.35.1