[mutter/gnome-42] kms/crtc: Always read the gamma state



commit ad27964639e4e26f5cbfc8a2d3420cdcc70e94db
Author: Jonas Ådahl <jadahl gmail com>
Date:   Fri May 27 18:18:27 2022 +0200

    kms/crtc: Always read the gamma state
    
    It doesn't depend on whether the CRTC is active or not, so always read
    it. This is also useful to know whether a CRTC supports gamma, before it
    is being turned on, without relying on the existance of properties.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2435>
    (cherry picked from commit 9001fa9717c88f8d429fbfafb236f8b8cf92dba2)

 src/backends/native/meta-kms-crtc.c | 26 ++++++++++----------------
 1 file changed, 10 insertions(+), 16 deletions(-)
---
diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c
index 8c2f8d7839..93df17031e 100644
--- a/src/backends/native/meta-kms-crtc.c
+++ b/src/backends/native/meta-kms-crtc.c
@@ -105,20 +105,14 @@ read_gamma_state (MetaKmsCrtc       *crtc,
                   MetaKmsImplDevice *impl_device,
                   drmModeCrtc       *drm_crtc)
 {
-  if (crtc_state->gamma.size != drm_crtc->gamma_size)
-    {
-      crtc_state->gamma.size = drm_crtc->gamma_size;
-
-      crtc_state->gamma.red = g_realloc_n (crtc_state->gamma.red,
-                                           drm_crtc->gamma_size,
-                                           sizeof (uint16_t));
-      crtc_state->gamma.green = g_realloc_n (crtc_state->gamma.green,
-                                             drm_crtc->gamma_size,
-                                             sizeof (uint16_t));
-      crtc_state->gamma.blue = g_realloc_n (crtc_state->gamma.blue,
-                                            drm_crtc->gamma_size,
-                                            sizeof (uint16_t));
-    }
+  g_assert (!crtc_state->gamma.red &&
+            !crtc_state->gamma.green &&
+            !crtc_state->gamma.blue);
+
+  crtc_state->gamma.size = drm_crtc->gamma_size;
+  crtc_state->gamma.red = g_new0 (uint16_t, drm_crtc->gamma_size);
+  crtc_state->gamma.green = g_new0 (uint16_t, drm_crtc->gamma_size);
+  crtc_state->gamma.blue = g_new0 (uint16_t, drm_crtc->gamma_size);
 
   drmModeCrtcGetGamma (meta_kms_impl_device_get_fd (impl_device),
                        crtc->id,
@@ -209,7 +203,6 @@ meta_kms_crtc_read_state (MetaKmsCrtc             *crtc,
 
   crtc_state.is_drm_mode_valid = drm_crtc->mode_valid;
   crtc_state.drm_mode = drm_crtc->mode;
-  crtc_state.gamma.size = 0;
 
   active_prop = &crtc->prop_table.props[META_KMS_CRTC_PROP_ACTIVE];
   if (active_prop->prop_id)
@@ -224,6 +217,8 @@ meta_kms_crtc_read_state (MetaKmsCrtc             *crtc,
       crtc_state.is_active = drm_crtc->mode_valid;
     }
 
+  read_gamma_state (crtc, &crtc_state, impl_device, drm_crtc);
+
   if (!crtc_state.is_active)
     {
       if (crtc->current_state.is_active)
@@ -231,7 +226,6 @@ meta_kms_crtc_read_state (MetaKmsCrtc             *crtc,
     }
   else
     {
-      read_gamma_state (crtc, &crtc_state, impl_device, drm_crtc);
       changes = meta_kms_crtc_state_changes (&crtc->current_state, &crtc_state);
     }
 


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