[mutter] kms/device: Add flag to disable sending DRM modifiers to clients



commit 00ffe0b454460ccd27da1d23217672a6853374af
Author: Michel Dänzer <mdaenzer redhat com>
Date:   Tue Sep 20 18:54:32 2022 +0200

    kms/device: Add flag to disable sending DRM modifiers to clients
    
    So far the new flag can only be set via the new environment variable
    MUTTER_DEBUG_SEND_KMS_MODIFIERS, and doesn't have any effect yet.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2637>

 src/backends/native/meta-kms-types.h       |  1 +
 src/backends/native/meta-renderer-native.c | 41 +++++++++++++++++++++++-------
 src/backends/native/meta-renderer-native.h |  2 ++
 3 files changed, 35 insertions(+), 9 deletions(-)
---
diff --git a/src/backends/native/meta-kms-types.h b/src/backends/native/meta-kms-types.h
index 55ba42fbfd..5762babc77 100644
--- a/src/backends/native/meta-kms-types.h
+++ b/src/backends/native/meta-kms-types.h
@@ -64,6 +64,7 @@ typedef enum _MetaKmsDeviceFlag
   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,
+  META_KMS_DEVICE_FLAG_DISABLE_CLIENT_MODIFIERS = 1 << 7,
 } MetaKmsDeviceFlag;
 
 typedef enum _MetaKmsResourceChanges
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index 99fbb2bb65..c7181106d6 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -87,6 +87,7 @@ struct _MetaRendererNative
   MetaGles3 *gles3;
 
   gboolean use_modifiers;
+  gboolean send_modifiers;
 
   GHashTable *gpu_datas;
 
@@ -247,6 +248,12 @@ meta_renderer_native_get_egl (MetaRendererNative *renderer_native)
   return meta_backend_get_egl (meta_renderer_get_backend (renderer));
 }
 
+gboolean
+meta_renderer_native_send_modifiers (MetaRendererNative *renderer_native)
+{
+  return renderer_native->send_modifiers;
+}
+
 gboolean
 meta_renderer_native_use_modifiers (MetaRendererNative *renderer_native)
 {
@@ -2033,7 +2040,9 @@ meta_renderer_native_initable_init (GInitable     *initable,
   gpus = meta_backend_get_gpus (backend);
   if (gpus)
     {
-      const char *use_kms_modifiers_debug_env;
+      MetaKmsDevice *kms_device;
+      MetaKmsDeviceFlag flags;
+      const char *kms_modifiers_debug_env;
 
       for (l = gpus; l; l = l->next)
         {
@@ -2049,19 +2058,17 @@ meta_renderer_native_initable_init (GInitable     *initable,
       if (!renderer_native->primary_gpu_kms)
         return FALSE;
 
-      use_kms_modifiers_debug_env = g_getenv ("MUTTER_DEBUG_USE_KMS_MODIFIERS");
-      if (use_kms_modifiers_debug_env)
+      kms_device = meta_gpu_kms_get_kms_device (renderer_native->primary_gpu_kms);
+      flags = meta_kms_device_get_flags (kms_device);
+
+      kms_modifiers_debug_env = g_getenv ("MUTTER_DEBUG_USE_KMS_MODIFIERS");
+      if (kms_modifiers_debug_env)
         {
           renderer_native->use_modifiers =
-            g_strcmp0 (use_kms_modifiers_debug_env, "1") == 0;
+            g_strcmp0 (kms_modifiers_debug_env, "1") == 0;
         }
       else
         {
-          MetaKmsDevice *kms_device =
-            meta_gpu_kms_get_kms_device (renderer_native->primary_gpu_kms);
-          MetaKmsDeviceFlag flags;
-
-          flags = meta_kms_device_get_flags (kms_device);
           renderer_native->use_modifiers =
             !(flags & META_KMS_DEVICE_FLAG_DISABLE_MODIFIERS) &&
             flags & META_KMS_DEVICE_FLAG_HAS_ADDFB2;
@@ -2069,6 +2076,22 @@ meta_renderer_native_initable_init (GInitable     *initable,
 
       meta_topic (META_DEBUG_KMS, "Usage of KMS modifiers is %s",
                   renderer_native->use_modifiers ? "enabled" : "disabled");
+
+      kms_modifiers_debug_env = g_getenv ("MUTTER_DEBUG_SEND_KMS_MODIFIERS");
+      if (kms_modifiers_debug_env)
+        {
+          renderer_native->send_modifiers =
+            g_strcmp0 (kms_modifiers_debug_env, "1") == 0;
+        }
+      else
+        {
+          renderer_native->send_modifiers =
+            !(flags & META_KMS_DEVICE_FLAG_DISABLE_CLIENT_MODIFIERS) &&
+            flags & META_KMS_DEVICE_FLAG_HAS_ADDFB2;
+        }
+
+      meta_topic (META_DEBUG_KMS, "Sending KMS modifiers to clients is %s",
+                  renderer_native->send_modifiers ? "enabled" : "disabled");
     }
   else
     {
diff --git a/src/backends/native/meta-renderer-native.h b/src/backends/native/meta-renderer-native.h
index a01ceede26..b39e35f80a 100644
--- a/src/backends/native/meta-renderer-native.h
+++ b/src/backends/native/meta-renderer-native.h
@@ -66,6 +66,8 @@ void meta_renderer_native_finish_frame (MetaRendererNative *renderer_native,
 
 void meta_renderer_native_reset_modes (MetaRendererNative *renderer_native);
 
+gboolean meta_renderer_native_send_modifiers (MetaRendererNative *renderer_native);
+
 gboolean meta_renderer_native_use_modifiers (MetaRendererNative *renderer_native);
 
 MetaRendererNativeMode meta_renderer_native_get_mode (MetaRendererNative *renderer_native);


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