[mutter] renderer/native: Allow forcing EGLStream backend



commit d43cc776ef733251fc02e8e62669ea4ba7e68e2c
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Fri Dec 3 11:07:00 2021 +0100

    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: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2132>

 src/backends/native/meta-renderer-native.c | 30 +++++++++++++++++++++---------
 1 file changed, 21 insertions(+), 9 deletions(-)
---
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index 1b118ce062..4bcd00cb4c 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -1664,7 +1664,7 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative  *renderer_nat
   MetaBackend *backend = meta_renderer_get_backend (renderer);
   MetaDevicePool *device_pool =
     meta_backend_native_get_device_pool (META_BACKEND_NATIVE (backend));
-  MetaRendererNativeGpuData *gbm_renderer_gpu_data;
+  MetaRendererNativeGpuData *gbm_renderer_gpu_data = NULL;
   MetaDeviceFileFlags device_file_flags = META_DEVICE_FILE_FLAG_NONE;
   g_autoptr (MetaDeviceFile) device_file = NULL;
   GError *gbm_error = NULL;
@@ -1687,17 +1687,29 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative  *renderer_nat
   if (!device_file)
     return NULL;
 
-  gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native,
-                                                        device_file,
-                                                        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
     {
-      MetaRenderDevice *render_device = gbm_renderer_gpu_data->render_device;
+      gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native,
+                                                            device_file,
+                                                            gpu_kms,
+                                                            &gbm_error);
+      if (gbm_renderer_gpu_data)
+        {
+          MetaRenderDevice *render_device = gbm_renderer_gpu_data->render_device;
 
-      if (meta_render_device_is_hardware_accelerated (render_device))
-        return gbm_renderer_gpu_data;
+          if (meta_render_device_is_hardware_accelerated (render_device))
+            return gbm_renderer_gpu_data;
+        }
     }
+#ifdef HAVE_EGL_DEVICE
+  else
+    {
+      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 =


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]