[gnome-flashback] crtc: move CRTC id field into instance private



commit 73d3bc5c4f073191a8acd7bccb52769e9a2f3f12
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Tue Jul 7 15:49:48 2020 +0300

    crtc: move CRTC id field into instance private
    
    Based on mutter commit:
    https://gitlab.gnome.org/GNOME/mutter/-/commit/a42eed023136878f2a14

 backends/gf-crtc-private.h           | 16 +++++++++-------
 backends/gf-crtc-xrandr.c            |  2 +-
 backends/gf-crtc.c                   | 34 +++++++++++++++++++++++++++++++++-
 backends/gf-monitor-config-manager.c | 17 +++++++++++++----
 backends/gf-monitor-manager-xrandr.c | 12 ++++++------
 backends/gf-monitor-manager.c        |  4 ++--
 backends/gf-output-xrandr.c          |  4 ++--
 7 files changed, 66 insertions(+), 23 deletions(-)
---
diff --git a/backends/gf-crtc-private.h b/backends/gf-crtc-private.h
index 3db120b..d0df0b2 100644
--- a/backends/gf-crtc-private.h
+++ b/backends/gf-crtc-private.h
@@ -26,6 +26,7 @@
 #define GF_CRTC_PRIVATE_H
 
 #include <glib-object.h>
+#include <stdint.h>
 
 #include "gf-gpu-private.h"
 #include "gf-monitor-manager-enums-private.h"
@@ -46,7 +47,6 @@ struct _GfCrtc
 {
   GObject         parent;
 
-  glong           crtc_id;
   guint           all_transforms;
 
   GfCrtcConfig   *config;
@@ -90,14 +90,16 @@ G_DECLARE_FINAL_TYPE (GfCrtc, gf_crtc, GF, CRTC, GObject)
 #define GF_TYPE_CRTC_MODE (gf_crtc_mode_get_type ())
 G_DECLARE_FINAL_TYPE (GfCrtcMode, gf_crtc_mode, GF, CRTC_MODE, GObject)
 
-GfGpu *gf_crtc_get_gpu      (GfCrtc             *crtc);
+uint64_t  gf_crtc_get_id       (GfCrtc             *self);
 
-void   gf_crtc_set_config   (GfCrtc             *crtc,
-                             GfRectangle        *layout,
-                             GfCrtcMode         *mode,
-                             GfMonitorTransform  transform);
+GfGpu    *gf_crtc_get_gpu      (GfCrtc             *self);
 
-void   gf_crtc_unset_config (GfCrtc             *crtc);
+void      gf_crtc_set_config   (GfCrtc             *self,
+                                GfRectangle        *layout,
+                                GfCrtcMode         *mode,
+                                GfMonitorTransform  transform);
+
+void      gf_crtc_unset_config (GfCrtc             *self);
 
 G_END_DECLS
 
diff --git a/backends/gf-crtc-xrandr.c b/backends/gf-crtc-xrandr.c
index 49473a0..fefb014 100644
--- a/backends/gf-crtc-xrandr.c
+++ b/backends/gf-crtc-xrandr.c
@@ -136,6 +136,7 @@ gf_create_xrandr_crtc (GfGpuXrandr        *gpu_xrandr,
   gpu = GF_GPU (gpu_xrandr);
 
   crtc = g_object_new (GF_TYPE_CRTC,
+                       "id", crtc_id,
                        "gpu", gpu,
                        NULL);
 
@@ -151,7 +152,6 @@ gf_create_xrandr_crtc (GfGpuXrandr        *gpu_xrandr,
   crtc->driver_private = crtc_xrandr;
   crtc->driver_notify = (GDestroyNotify) gf_crtc_destroy_notify;
 
-  crtc->crtc_id = crtc_id;
   crtc->is_dirty = FALSE;
   crtc->all_transforms = gf_monitor_transform_from_xrandr_all (xrandr_crtc->rotations);
 
diff --git a/backends/gf-crtc.c b/backends/gf-crtc.c
index aaea8fc..0e9a1e1 100644
--- a/backends/gf-crtc.c
+++ b/backends/gf-crtc.c
@@ -23,13 +23,16 @@
 
 typedef struct
 {
-  GfGpu *gpu;
+  uint64_t  id;
+
+  GfGpu    *gpu;
 } GfCrtcPrivate;
 
 enum
 {
   PROP_0,
 
+  PROP_ID,
   PROP_GPU,
 
   LAST_PROP
@@ -68,6 +71,10 @@ gf_crtc_get_property (GObject    *object,
 
   switch (property_id)
     {
+      case PROP_ID:
+        g_value_set_uint64 (value, priv->id);
+        break;
+
       case PROP_GPU:
         g_value_set_object (value, priv->gpu);
         break;
@@ -92,6 +99,10 @@ gf_crtc_set_property (GObject      *object,
 
   switch (property_id)
     {
+      case PROP_ID:
+        priv->id = g_value_get_uint64 (value);
+        break;
+
       case PROP_GPU:
         priv->gpu = g_value_get_object (value);
         break;
@@ -113,6 +124,17 @@ gf_crtc_class_init (GfCrtcClass *crtc_class)
   object_class->get_property = gf_crtc_get_property;
   object_class->set_property = gf_crtc_set_property;
 
+  crtc_properties[PROP_ID] =
+    g_param_spec_uint64 ("id",
+                         "id",
+                         "id",
+                         0,
+                         UINT64_MAX,
+                         0,
+                         G_PARAM_READWRITE |
+                         G_PARAM_CONSTRUCT_ONLY |
+                         G_PARAM_STATIC_STRINGS);
+
   crtc_properties[PROP_GPU] =
     g_param_spec_object ("gpu",
                          "GfGpu",
@@ -131,6 +153,16 @@ gf_crtc_init (GfCrtc *crtc)
 {
 }
 
+uint64_t
+gf_crtc_get_id (GfCrtc *self)
+{
+  GfCrtcPrivate *priv;
+
+  priv = gf_crtc_get_instance_private (self);
+
+  return priv->id;
+}
+
 GfGpu *
 gf_crtc_get_gpu (GfCrtc *crtc)
 {
diff --git a/backends/gf-monitor-config-manager.c b/backends/gf-monitor-config-manager.c
index 695ea9b..078db9d 100644
--- a/backends/gf-monitor-config-manager.c
+++ b/backends/gf-monitor-config-manager.c
@@ -588,8 +588,11 @@ is_crtc_reserved (GfCrtc *crtc,
 
   for (i = 0; i < reserved_crtcs->len; i++)
     {
-       glong id = g_array_index (reserved_crtcs, glong, i);
-       if (id == crtc->crtc_id)
+       uint64_t id;
+
+       id = g_array_index (reserved_crtcs, uint64_t, i);
+
+       if (id == gf_crtc_get_id (crtc))
          return TRUE;
     }
 
@@ -980,7 +983,7 @@ gf_monitor_config_manager_assign (GfMonitorManager  *manager,
 
   crtc_infos = g_ptr_array_new_with_free_func ((GDestroyNotify) gf_crtc_info_free);
   output_infos = g_ptr_array_new_with_free_func ((GDestroyNotify) gf_output_info_free);
-  reserved_crtcs = g_array_new (FALSE, FALSE, sizeof (glong));
+  reserved_crtcs = g_array_new (FALSE, FALSE, sizeof (uint64_t));
 
   for (l = config->logical_monitor_configs; l; l = l->next)
     {
@@ -1003,7 +1006,13 @@ gf_monitor_config_manager_assign (GfMonitorManager  *manager,
 
               crtc = gf_output_get_assigned_crtc (output);
               if (crtc)
-                g_array_append_val (reserved_crtcs, crtc->crtc_id);
+                {
+                  uint64_t crtc_id;
+
+                  crtc_id = gf_crtc_get_id (crtc);
+
+                  g_array_append_val (reserved_crtcs, crtc_id);
+                }
             }
         }
     }
diff --git a/backends/gf-monitor-manager-xrandr.c b/backends/gf-monitor-manager-xrandr.c
index a8076da..83fd72c 100644
--- a/backends/gf-monitor-manager-xrandr.c
+++ b/backends/gf-monitor-manager-xrandr.c
@@ -428,7 +428,7 @@ apply_crtc_assignments (GfMonitorManager  *manager,
           xrandr_set_crtc_config (xrandr,
                                   crtc,
                                   save_timestamp,
-                                  (xcb_randr_crtc_t) crtc->crtc_id,
+                                  (xcb_randr_crtc_t) gf_crtc_get_id (crtc),
                                   XCB_CURRENT_TIME,
                                   0, 0, XCB_NONE,
                                   XCB_RANDR_ROTATION_ROTATE_0,
@@ -455,7 +455,7 @@ apply_crtc_assignments (GfMonitorManager  *manager,
       xrandr_set_crtc_config (xrandr,
                               crtc,
                               save_timestamp,
-                              (xcb_randr_crtc_t) crtc->crtc_id,
+                              (xcb_randr_crtc_t) gf_crtc_get_id (crtc),
                               XCB_CURRENT_TIME,
                               0, 0, XCB_NONE,
                               XCB_RANDR_ROTATION_ROTATE_0,
@@ -509,7 +509,7 @@ apply_crtc_assignments (GfMonitorManager  *manager,
           if (!xrandr_set_crtc_config (xrandr,
                                        crtc,
                                        save_timestamp,
-                                       (xcb_randr_crtc_t) crtc->crtc_id,
+                                       (xcb_randr_crtc_t) gf_crtc_get_id (crtc),
                                        XCB_CURRENT_TIME,
                                        crtc_info->layout.x,
                                        crtc_info->layout.y,
@@ -518,7 +518,7 @@ apply_crtc_assignments (GfMonitorManager  *manager,
                                        output_ids, n_output_ids))
             {
               g_warning ("Configuring CRTC %d with mode %d (%d x %d @ %f) at position %d, %d and transform 
%u failed\n",
-                         (guint) (crtc->crtc_id), (guint) (mode->mode_id),
+                         (guint) gf_crtc_get_id (crtc), (guint) (mode->mode_id),
                          mode->width, mode->height, (gdouble) mode->refresh_rate,
                          crtc_info->layout.x, crtc_info->layout.y,
                          crtc_info->transform);
@@ -916,7 +916,7 @@ gf_monitor_manager_xrandr_get_crtc_gamma (GfMonitorManager  *manager,
   XRRCrtcGamma *gamma;
 
   xrandr = GF_MONITOR_MANAGER_XRANDR (manager);
-  gamma = XRRGetCrtcGamma (xrandr->xdisplay, (XID) crtc->crtc_id);
+  gamma = XRRGetCrtcGamma (xrandr->xdisplay, (XID) gf_crtc_get_id (crtc));
 
   *size = gamma->size;
   *red = g_memdup (gamma->red, sizeof (gushort) * gamma->size);
@@ -944,7 +944,7 @@ gf_monitor_manager_xrandr_set_crtc_gamma (GfMonitorManager *manager,
   memcpy (gamma->green, green, sizeof (gushort) * size);
   memcpy (gamma->blue, blue, sizeof (gushort) * size);
 
-  XRRSetCrtcGamma (xrandr->xdisplay, (XID) crtc->crtc_id, gamma);
+  XRRSetCrtcGamma (xrandr->xdisplay, (XID) gf_crtc_get_id (crtc), gamma);
   XRRFreeGamma (gamma);
 }
 
diff --git a/backends/gf-monitor-manager.c b/backends/gf-monitor-manager.c
index c82a602..f6f69e9 100644
--- a/backends/gf-monitor-manager.c
+++ b/backends/gf-monitor-manager.c
@@ -1111,7 +1111,7 @@ gf_monitor_manager_handle_get_resources (GfDBusDisplayConfig   *skeleton,
 
           g_variant_builder_add (&crtc_builder, "(uxiiiiiuaua{sv})",
                                  i, /* ID */
-                                 (int64_t) crtc->crtc_id,
+                                 (int64_t) gf_crtc_get_id (crtc),
                                  crtc_config->layout.x,
                                  crtc_config->layout.y,
                                  crtc_config->layout.width,
@@ -1125,7 +1125,7 @@ gf_monitor_manager_handle_get_resources (GfDBusDisplayConfig   *skeleton,
         {
           g_variant_builder_add (&crtc_builder, "(uxiiiiiuaua{sv})",
                                  i, /* ID */
-                                 (int64_t) crtc->crtc_id,
+                                 (int64_t) gf_crtc_get_id (crtc),
                                  0,
                                  0,
                                  0,
diff --git a/backends/gf-output-xrandr.c b/backends/gf-output-xrandr.c
index 46b0928..80fe048 100644
--- a/backends/gf-output-xrandr.c
+++ b/backends/gf-output-xrandr.c
@@ -531,7 +531,7 @@ output_get_crtcs (GfOutput      *output,
         {
           GfCrtc *crtc = l->data;
 
-          if ((XID) crtc->crtc_id == xrandr_output->crtcs[j])
+          if ((XID) gf_crtc_get_id (crtc) == xrandr_output->crtcs[j])
             {
               output->possible_crtcs[n_actual_crtcs] = crtc;
               n_actual_crtcs += 1;
@@ -546,7 +546,7 @@ output_get_crtcs (GfOutput      *output,
     {
       GfCrtc *crtc = l->data;
 
-      if ((XID) crtc->crtc_id == xrandr_output->crtc)
+      if ((XID) gf_crtc_get_id (crtc) == xrandr_output->crtc)
         {
           gf_output_assign_crtc (output, crtc);
           break;


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