[mutter] kms: Only force legacy mode setting when using EGLStream



commit 44dae3e1605549077230e80a403320d3d44d07bd
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Wed Aug 17 12:28:52 2022 +0200

    kms: Only force legacy mode setting when using EGLStream
    
    EGLStream is incompatible with atomic mode setting, but nvidia-drm when
    using libgbm is not, so lets only deny using atomic mode setting when
    the render device is an EGLStream based one.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2578>

 src/backends/native/meta-backend-native.c         | 5 +++++
 src/backends/native/meta-kms-device.c             | 2 ++
 src/backends/native/meta-kms-impl-device-atomic.c | 1 -
 src/backends/native/meta-kms-types.h              | 1 +
 4 files changed, 8 insertions(+), 1 deletion(-)
---
diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c
index 9b0220cbd7..8900875a07 100644
--- a/src/backends/native/meta-backend-native.c
+++ b/src/backends/native/meta-backend-native.c
@@ -604,6 +604,11 @@ add_drm_device (MetaBackendNative  *backend_native,
   if (!render_device)
     return FALSE;
 
+#ifdef HAVE_EGL_DEVICE
+  if (META_IS_RENDER_DEVICE_EGL_STREAM (render_device))
+    flags |= META_KMS_DEVICE_FLAG_FORCE_LEGACY;
+#endif
+
   kms_device = meta_kms_create_device (backend_native->kms, device_path, flags,
                                        error);
   if (!kms_device)
diff --git a/src/backends/native/meta-kms-device.c b/src/backends/native/meta-kms-device.c
index 15ae92a262..c2c04e10a8 100644
--- a/src/backends/native/meta-kms-device.c
+++ b/src/backends/native/meta-kms-device.c
@@ -411,6 +411,8 @@ meta_create_kms_impl_device (MetaKmsDevice      *device,
     {
       if (flags & META_KMS_DEVICE_FLAG_NO_MODE_SETTING)
         kms_mode = KMS_MODE_HEADLESS;
+      else if (flags & META_KMS_DEVICE_FLAG_FORCE_LEGACY)
+        kms_mode = KMS_MODE_SIMPLE;
       else
         kms_mode = KMS_MODE_AUTO;
     }
diff --git a/src/backends/native/meta-kms-impl-device-atomic.c 
b/src/backends/native/meta-kms-impl-device-atomic.c
index b9e7eb0e1f..e938e4522c 100644
--- a/src/backends/native/meta-kms-impl-device-atomic.c
+++ b/src/backends/native/meta-kms-impl-device-atomic.c
@@ -1214,7 +1214,6 @@ is_atomic_allowed (const char *driver_name)
     "qxl",
     "vmwgfx",
     "vboxvideo",
-    "nvidia-drm",
     "virtio_gpu",
     "xlnx",
     NULL,
diff --git a/src/backends/native/meta-kms-types.h b/src/backends/native/meta-kms-types.h
index 81fcad0e66..55ba42fbfd 100644
--- a/src/backends/native/meta-kms-types.h
+++ b/src/backends/native/meta-kms-types.h
@@ -63,6 +63,7 @@ typedef enum _MetaKmsDeviceFlag
   META_KMS_DEVICE_FLAG_PREFERRED_PRIMARY = 1 << 3,
   META_KMS_DEVICE_FLAG_NO_MODE_SETTING = 1 << 4,
   META_KMS_DEVICE_FLAG_HAS_ADDFB2 = 1 << 5,
+  META_KMS_DEVICE_FLAG_FORCE_LEGACY = 1 << 6,
 } MetaKmsDeviceFlag;
 
 typedef enum _MetaKmsResourceChanges


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