diff --git a/src/backends/meta-crtc.c b/src/backends/meta-crtc.c index 815823b14..1b546a751 100644 --- a/src/backends/meta-crtc.c +++ b/src/backends/meta-crtc.c @@ -43,6 +43,8 @@ typedef struct _MetaCrtcPrivate MetaGpu *gpu; MetaMonitorTransform all_transforms; + + MetaCrtcConfig *config; } MetaCrtcPrivate; G_DEFINE_TYPE_WITH_PRIVATE (MetaCrtc, meta_crtc, G_TYPE_OBJECT) @@ -79,6 +81,7 @@ meta_crtc_set_config (MetaCrtc *crtc, MetaCrtcMode *mode, MetaMonitorTransform transform) { + MetaCrtcPrivate *priv = meta_crtc_get_instance_private (crtc); MetaCrtcConfig *config; meta_crtc_unset_config (crtc); @@ -88,13 +91,23 @@ meta_crtc_set_config (MetaCrtc *crtc, config->mode = mode; config->transform = transform; - crtc->config = config; + priv->config = config; } void meta_crtc_unset_config (MetaCrtc *crtc) { - g_clear_pointer (&crtc->config, g_free); + MetaCrtcPrivate *priv = meta_crtc_get_instance_private (crtc); + + g_clear_pointer (&priv->config, g_free); +} + +const MetaCrtcConfig * +meta_crtc_get_config (MetaCrtc *crtc) +{ + MetaCrtcPrivate *priv = meta_crtc_get_instance_private (crtc); + + return priv->config; } static void @@ -151,11 +164,12 @@ static void meta_crtc_finalize (GObject *object) { MetaCrtc *crtc = META_CRTC (object); + MetaCrtcPrivate *priv = meta_crtc_get_instance_private (crtc); if (crtc->driver_notify) crtc->driver_notify (crtc); - g_clear_pointer (&crtc->config, g_free); + g_clear_pointer (&priv->config, g_free); G_OBJECT_CLASS (meta_crtc_parent_class)->finalize (object); } diff --git a/src/backends/meta-crtc.h b/src/backends/meta-crtc.h index e5737c446..77ae677d7 100644 --- a/src/backends/meta-crtc.h +++ b/src/backends/meta-crtc.h @@ -60,8 +60,6 @@ struct _MetaCrtc { GObject parent; - MetaCrtcConfig *config; - gpointer driver_private; GDestroyNotify driver_notify; }; @@ -106,4 +104,7 @@ void meta_crtc_set_config (MetaCrtc *crtc, META_EXPORT_TEST void meta_crtc_unset_config (MetaCrtc *crtc); +META_EXPORT_TEST +const MetaCrtcConfig * meta_crtc_get_config (MetaCrtc *crtc); + #endif /* META_CRTC_H */ diff --git a/src/backends/meta-logical-monitor.c b/src/backends/meta-logical-monitor.c index 52f4833fc..b562e5acb 100644 --- a/src/backends/meta-logical-monitor.c +++ b/src/backends/meta-logical-monitor.c @@ -119,10 +119,14 @@ static MetaMonitorTransform derive_monitor_transform (MetaMonitor *monitor) { MetaOutput *main_output; + MetaCrtc *crtc; + const MetaCrtcConfig *crtc_config; MetaMonitorTransform transform; main_output = meta_monitor_get_main_output (monitor); - transform = meta_output_get_assigned_crtc (main_output)->config->transform; + crtc = meta_output_get_assigned_crtc (main_output); + crtc_config = meta_crtc_get_config (crtc); + transform = crtc_config->transform; return meta_monitor_crtc_to_logical_transform (monitor, transform); } diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c index ebe763cb3..95bb92d83 100644 --- a/src/backends/meta-monitor-manager.c +++ b/src/backends/meta-monitor-manager.c @@ -1017,7 +1017,7 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton, { MetaCrtc *crtc = l->data; GVariantBuilder transforms; - MetaCrtcConfig *crtc_config; + const MetaCrtcConfig *crtc_config; g_variant_builder_init (&transforms, G_VARIANT_TYPE ("au")); for (j = 0; j <= META_MONITOR_TRANSFORM_FLIPPED_270; j++) @@ -1026,8 +1026,7 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton, g_variant_builder_add (&transforms, "u", j); } - crtc_config = crtc->config; - + crtc_config = meta_crtc_get_config (crtc); if (crtc_config) { int current_mode_index; diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c index 5887b6e16..63ff64b0f 100644 --- a/src/backends/meta-monitor.c +++ b/src/backends/meta-monitor.c @@ -642,8 +642,14 @@ meta_monitor_normal_generate_modes (MetaMonitorNormal *monitor_normal) monitor_priv->preferred_mode = mode; crtc = meta_output_get_assigned_crtc (output); - if (crtc && crtc->config && crtc_mode == crtc->config->mode) - monitor_priv->current_mode = mode; + if (crtc) + { + const MetaCrtcConfig *crtc_config; + + crtc_config = meta_crtc_get_config (crtc); + if (crtc_config && crtc_mode == crtc_config->mode) + monitor_priv->current_mode = mode; + } } } @@ -689,11 +695,11 @@ meta_monitor_normal_derive_layout (MetaMonitor *monitor, { MetaOutput *output; MetaCrtc *crtc; - MetaCrtcConfig *crtc_config; + const MetaCrtcConfig *crtc_config; output = meta_monitor_get_main_output (monitor); crtc = meta_output_get_assigned_crtc (output); - crtc_config = crtc->config; + crtc_config = meta_crtc_get_config (crtc); g_return_if_fail (crtc_config); @@ -910,11 +916,14 @@ is_monitor_mode_assigned (MetaMonitor *monitor, MetaOutput *output = l->data; MetaMonitorCrtcMode *monitor_crtc_mode = &mode->crtc_modes[i]; MetaCrtc *crtc; + const MetaCrtcConfig *crtc_config; crtc = meta_output_get_assigned_crtc (output); + crtc_config = crtc ? meta_crtc_get_config (crtc) : NULL; + if (monitor_crtc_mode->crtc_mode && - (!crtc || !crtc->config || - crtc->config->mode != monitor_crtc_mode->crtc_mode)) + (!crtc || !crtc_config || + crtc_config->mode != monitor_crtc_mode->crtc_mode)) return FALSE; else if (!monitor_crtc_mode->crtc_mode && crtc) return FALSE; @@ -1379,14 +1388,14 @@ meta_monitor_tiled_derive_layout (MetaMonitor *monitor, { MetaOutput *output = l->data; MetaCrtc *crtc; - MetaCrtcConfig *crtc_config; - graphene_rect_t *crtc_layout; + const MetaCrtcConfig *crtc_config; + const graphene_rect_t *crtc_layout; crtc = meta_output_get_assigned_crtc (output); if (!crtc) continue; - crtc_config = crtc->config; + crtc_config = meta_crtc_get_config (crtc); g_return_if_fail (crtc_config); crtc_layout = &crtc_config->layout; @@ -1553,7 +1562,8 @@ is_current_mode_known (MetaMonitor *monitor) output = meta_monitor_get_main_output (monitor); crtc = meta_output_get_assigned_crtc (output); - return meta_monitor_is_active (monitor) == (crtc && crtc->config); + return (meta_monitor_is_active (monitor) == + (crtc && meta_crtc_get_config (crtc))); } void diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c index f8be55736..ac5e0bf55 100644 --- a/src/backends/native/meta-crtc-kms.c +++ b/src/backends/native/meta-crtc-kms.c @@ -80,9 +80,12 @@ meta_crtc_kms_apply_transform (MetaCrtc *crtc, MetaKmsPlaneAssignment *kms_plane_assignment) { MetaCrtcKms *crtc_kms = crtc->driver_private; + const MetaCrtcConfig *crtc_config; MetaMonitorTransform hw_transform; - hw_transform = crtc->config->transform; + crtc_config = meta_crtc_get_config (crtc); + + hw_transform = crtc_config->transform; if (!meta_crtc_kms_is_transform_handled (crtc, hw_transform)) hw_transform = META_MONITOR_TRANSFORM_NORMAL; if (!meta_crtc_kms_is_transform_handled (crtc, hw_transform)) @@ -98,7 +101,7 @@ meta_crtc_kms_assign_primary_plane (MetaCrtc *crtc, uint32_t fb_id, MetaKmsUpdate *kms_update) { - MetaCrtcConfig *crtc_config; + const MetaCrtcConfig *crtc_config; MetaFixed16Rectangle src_rect; MetaFixed16Rectangle dst_rect; MetaKmsAssignPlaneFlag flags; @@ -107,8 +110,7 @@ meta_crtc_kms_assign_primary_plane (MetaCrtc *crtc, MetaKmsPlane *primary_kms_plane; MetaKmsPlaneAssignment *plane_assignment; - crtc_config = crtc->config; - + crtc_config = meta_crtc_get_config (crtc); src_rect = (MetaFixed16Rectangle) { .x = meta_fixed_16_from_int (0), @@ -168,7 +170,6 @@ void meta_crtc_kms_set_mode (MetaCrtc *crtc, MetaKmsUpdate *kms_update) { - MetaCrtcConfig *crtc_config = crtc->config; MetaGpu *gpu = meta_crtc_get_gpu (crtc); GList *connectors; drmModeModeInfo *mode; @@ -177,6 +178,8 @@ meta_crtc_kms_set_mode (MetaCrtc *crtc, if (connectors) { + const MetaCrtcConfig *crtc_config = meta_crtc_get_config (crtc); + mode = crtc_config->mode->driver_private; g_debug ("Setting CRTC (%ld) mode to %s", diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c index 61665b0bd..2617cba98 100644 --- a/src/backends/native/meta-output-kms.c +++ b/src/backends/native/meta-output-kms.c @@ -65,11 +65,11 @@ meta_output_kms_set_underscan (MetaOutput *output, if (meta_output_is_underscanning (output)) { MetaCrtc *crtc; - MetaCrtcConfig *crtc_config; + const MetaCrtcConfig *crtc_config; uint64_t hborder, vborder; crtc = meta_output_get_assigned_crtc (output); - crtc_config = crtc->config; + crtc_config = meta_crtc_get_config (crtc); hborder = MIN (128, (uint64_t) round (crtc_config->mode->width * 0.05)); vborder = MIN (128, (uint64_t) round (crtc_config->mode->height * 0.05)); diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c index 8ba6fb495..ac629867f 100644 --- a/src/backends/native/meta-renderer-native.c +++ b/src/backends/native/meta-renderer-native.c @@ -1127,6 +1127,7 @@ notify_view_crtc_presented (MetaRendererView *view, MetaGpuKms *render_gpu = onscreen_native->render_gpu; CoglFrameInfo *frame_info; MetaCrtc *crtc; + const MetaCrtcConfig *crtc_config; float refresh_rate; MetaGpuKms *gpu_kms; @@ -1138,9 +1139,8 @@ notify_view_crtc_presented (MetaRendererView *view, frame_info = g_queue_peek_tail (&onscreen->pending_frame_infos); crtc = meta_crtc_kms_from_kms_crtc (kms_crtc); - refresh_rate = crtc && crtc->config ? - crtc->config->mode->refresh_rate : - 0.0f; + crtc_config = crtc ? meta_crtc_get_config (crtc) : NULL; + refresh_rate = crtc_config ? crtc_config->mode->refresh_rate : 0.0f; if (refresh_rate >= frame_info->refresh_rate) { frame_info->presentation_time = time_ns; @@ -2240,10 +2240,12 @@ meta_onscreen_native_is_buffer_scanout_compatible (CoglOnscreen *onscreen, { CoglOnscreenEGL *onscreen_egl = onscreen->winsys; MetaOnscreenNative *onscreen_native = onscreen_egl->platform; + const MetaCrtcConfig *crtc_config; MetaDrmBuffer *fb; struct gbm_bo *gbm_bo; - if (onscreen_native->crtc->config->transform != META_MONITOR_TRANSFORM_NORMAL) + crtc_config = meta_crtc_get_config (onscreen_native->crtc); + if (crtc_config->transform != META_MONITOR_TRANSFORM_NORMAL) return FALSE; if (onscreen_native->secondary_gpu_state) @@ -3155,7 +3157,7 @@ meta_renderer_native_create_view (MetaRenderer *renderer, CoglDisplay *cogl_display = cogl_context_get_display (cogl_context); CoglDisplayEGL *cogl_display_egl; CoglOnscreenEGL *onscreen_egl; - MetaCrtcConfig *crtc_config; + const MetaCrtcConfig *crtc_config; MetaMonitorTransform view_transform; CoglOnscreen *onscreen = NULL; CoglOffscreen *offscreen = NULL; @@ -3167,7 +3169,7 @@ meta_renderer_native_create_view (MetaRenderer *renderer, MetaRendererView *view; GError *error = NULL; - crtc_config = crtc->config; + crtc_config = meta_crtc_get_config (crtc); onscreen_width = crtc_config->mode->width; onscreen_height = crtc_config->mode->height; @@ -3219,7 +3221,7 @@ meta_renderer_native_create_view (MetaRenderer *renderer, else scale = 1.0; - meta_rectangle_from_graphene_rect (&crtc->config->layout, + meta_rectangle_from_graphene_rect (&crtc_config->layout, META_ROUNDING_STRATEGY_ROUND, &view_layout); view = g_object_new (META_TYPE_RENDERER_VIEW, @@ -3297,7 +3299,7 @@ meta_renderer_native_finish_frame (MetaRendererNative *renderer_native) { MetaCrtc *crtc = k->data; - if (crtc->config) + if (meta_crtc_get_config (crtc)) continue; kms_update = meta_kms_ensure_pending_update (kms); diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c index b4873aa30..af7e62fa2 100644 --- a/src/backends/x11/meta-monitor-manager-xrandr.c +++ b/src/backends/x11/meta-monitor-manager-xrandr.c @@ -408,10 +408,10 @@ apply_crtc_assignments (MetaMonitorManager *manager, { MetaCrtcAssignment *crtc_assignment = crtcs[i]; MetaCrtc *crtc = crtc_assignment->crtc; - MetaCrtcConfig *crtc_config; + const MetaCrtcConfig *crtc_config; int x2, y2; - crtc_config = crtc->config; + crtc_config = meta_crtc_get_config (crtc); if (!crtc_config) continue; @@ -439,7 +439,7 @@ apply_crtc_assignments (MetaMonitorManager *manager, { MetaCrtc *crtc = l->data; - if (!crtc->config) + if (!meta_crtc_get_config (crtc)) continue; xrandr_set_crtc_config (manager_xrandr, diff --git a/src/backends/x11/meta-output-xrandr.c b/src/backends/x11/meta-output-xrandr.c index 588fac220..80e108ccc 100644 --- a/src/backends/x11/meta-output-xrandr.c +++ b/src/backends/x11/meta-output-xrandr.c @@ -106,11 +106,11 @@ output_set_underscanning_xrandr (MetaOutput *output, if (underscanning) { MetaCrtc *crtc; - MetaCrtcConfig *crtc_config; + const MetaCrtcConfig *crtc_config; uint32_t border_value; crtc = meta_output_get_assigned_crtc (output); - crtc_config = crtc->config; + crtc_config = meta_crtc_get_config (crtc); prop = XInternAtom (xdisplay, "underscan hborder", False); border_value = crtc_config->mode->width * 0.05; diff --git a/src/backends/x11/nested/meta-renderer-x11-nested.c b/src/backends/x11/nested/meta-renderer-x11-nested.c index e5ac8ae4b..b4ad3ce8f 100644 --- a/src/backends/x11/nested/meta-renderer-x11-nested.c +++ b/src/backends/x11/nested/meta-renderer-x11-nested.c @@ -185,6 +185,7 @@ meta_renderer_x11_nested_create_view (MetaRenderer *renderer, CoglContext *cogl_context = clutter_backend_get_cogl_context (clutter_backend); MetaMonitorTransform view_transform; float view_scale; + const MetaCrtcConfig *crtc_config; int width, height; CoglOffscreen *fake_onscreen; CoglOffscreen *offscreen; @@ -198,8 +199,9 @@ meta_renderer_x11_nested_create_view (MetaRenderer *renderer, else view_scale = 1.0; - width = roundf (crtc->config->layout.size.width * view_scale); - height = roundf (crtc->config->layout.size.height * view_scale); + crtc_config = meta_crtc_get_config (crtc); + width = roundf (crtc_config->layout.size.width * view_scale); + height = roundf (crtc_config->layout.size.height * view_scale); fake_onscreen = create_offscreen (cogl_context, width, height); @@ -208,7 +210,7 @@ meta_renderer_x11_nested_create_view (MetaRenderer *renderer, else offscreen = NULL; - meta_rectangle_from_graphene_rect (&crtc->config->layout, + meta_rectangle_from_graphene_rect (&crtc_config->layout, META_ROUNDING_STRATEGY_ROUND, &view_layout); diff --git a/src/backends/x11/nested/meta-stage-x11-nested.c b/src/backends/x11/nested/meta-stage-x11-nested.c index 361f905ed..2d9c2ea55 100644 --- a/src/backends/x11/nested/meta-stage-x11-nested.c +++ b/src/backends/x11/nested/meta-stage-x11-nested.c @@ -109,7 +109,7 @@ draw_view (MetaStageX11Nested *stage_nested, CoglFramebuffer *onscreen = COGL_FRAMEBUFFER (stage_x11->onscreen); ClutterStageView *stage_view = CLUTTER_STAGE_VIEW (renderer_view); MetaCrtc *crtc; - MetaCrtcConfig *crtc_config; + const MetaCrtcConfig *crtc_config; CoglMatrix projection_matrix; CoglMatrix transform; float texture_width, texture_height; @@ -120,7 +120,7 @@ draw_view (MetaStageX11Nested *stage_nested, texture_height = cogl_texture_get_height (texture); crtc = g_object_get_data (G_OBJECT (renderer_view), "crtc"); - crtc_config = crtc->config; + crtc_config = meta_crtc_get_config (crtc); sample_x = 0; sample_y = 0; diff --git a/src/tests/monitor-test-utils.c b/src/tests/monitor-test-utils.c index 3253a04c0..b799e6adc 100644 --- a/src/tests/monitor-test-utils.c +++ b/src/tests/monitor-test-utils.c @@ -185,12 +185,12 @@ check_current_monitor_mode (MetaMonitor *monitor, } else { - MetaCrtcConfig *crtc_config; + const MetaCrtcConfig *crtc_config; MetaLogicalMonitor *logical_monitor; g_assert_nonnull (crtc); - crtc_config = crtc->config; + crtc_config = meta_crtc_get_config (crtc); g_assert_nonnull (crtc_config); g_assert (monitor_crtc_mode->crtc_mode == crtc_config->mode); @@ -498,7 +498,7 @@ check_monitor_configuration (MonitorTestCaseExpect *expect) for (l = crtcs, i = 0; l; l = l->next, i++) { MetaCrtc *crtc = l->data; - MetaCrtcConfig *crtc_config = crtc->config; + const MetaCrtcConfig *crtc_config = meta_crtc_get_config (crtc); if (expect->crtcs[i].current_mode == -1) {