[mutter/gnome-3-28] backends: Move MetaOutput::crtc field into private struct
- From: Marco Trevisan <marcotrevi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gnome-3-28] backends: Move MetaOutput::crtc field into private struct
- Date: Thu, 28 Jun 2018 11:51:33 +0000 (UTC)
commit 7d01aec48da979f4fdad3c5f586fd0fd340d9325
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Fri Nov 3 11:25:30 2017 +0100
backends: Move MetaOutput::crtc field into private struct
No functional changes. This is only done so that changes to reference
counting can done more reliably.
https://bugzilla.gnome.org/show_bug.cgi?id=786929
(cherry picked from commit 1200182d706d5144df49a221b26225c729c2a60b)
src/backends/meta-logical-monitor.c | 13 +++---
src/backends/meta-monitor-manager-dummy.c | 4 +-
src/backends/meta-monitor-manager.c | 11 ++---
src/backends/meta-monitor.c | 48 ++++++++++++++--------
src/backends/meta-output.c | 35 +++++++++++++++-
src/backends/meta-output.h | 10 +++--
src/backends/native/meta-cursor-renderer-native.c | 10 +++--
src/backends/native/meta-gpu-kms.c | 8 +++-
src/backends/native/meta-monitor-manager-kms.c | 4 +-
src/backends/native/meta-output-kms.c | 12 +++---
src/backends/native/meta-renderer-native.c | 16 ++++----
src/backends/x11/meta-monitor-manager-xrandr.c | 15 ++++---
src/backends/x11/meta-output-xrandr.c | 11 +++--
src/backends/x11/meta-stage-x11-nested.c | 4 +-
src/backends/x11/nested/meta-renderer-x11-nested.c | 14 +++----
src/tests/meta-monitor-manager-test.c | 4 +-
src/tests/monitor-unit-tests.c | 18 ++++----
17 files changed, 154 insertions(+), 83 deletions(-)
---
diff --git a/src/backends/meta-logical-monitor.c b/src/backends/meta-logical-monitor.c
index d2faa0f26..3f6986880 100644
--- a/src/backends/meta-logical-monitor.c
+++ b/src/backends/meta-logical-monitor.c
@@ -100,11 +100,12 @@ static MetaMonitorTransform
derive_monitor_transform (MetaMonitor *monitor)
{
MetaOutput *main_output;
+ MetaMonitorTransform transform;
main_output = meta_monitor_get_main_output (monitor);
+ transform = meta_output_get_assigned_crtc (main_output)->transform;
- return meta_monitor_crtc_to_logical_transform (monitor,
- main_output->crtc->transform);
+ return meta_monitor_crtc_to_logical_transform (monitor, transform);
}
MetaLogicalMonitor *
@@ -157,10 +158,12 @@ meta_logical_monitor_add_monitor (MetaLogicalMonitor *logical_monitor,
for (l_output = outputs; l_output; l_output = l_output->next)
{
MetaOutput *output = l_output->data;
+ MetaCrtc *crtc;
is_presentation = is_presentation && output->is_presentation;
- if (output->crtc)
- output->crtc->logical_monitor = logical_monitor;
+ crtc = meta_output_get_assigned_crtc (output);
+ if (crtc)
+ crtc->logical_monitor = logical_monitor;
}
}
@@ -220,7 +223,7 @@ foreach_crtc (MetaMonitor *monitor,
ForeachCrtcData *data = user_data;
data->func (data->logical_monitor,
- monitor_crtc_mode->output->crtc,
+ meta_output_get_assigned_crtc (monitor_crtc_mode->output),
data->user_data);
return TRUE;
diff --git a/src/backends/meta-monitor-manager-dummy.c b/src/backends/meta-monitor-manager-dummy.c
index f81349e71..fe49487b1 100644
--- a/src/backends/meta-monitor-manager-dummy.c
+++ b/src/backends/meta-monitor-manager-dummy.c
@@ -486,7 +486,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
output->is_dirty = TRUE;
- output->crtc = crtc;
+ meta_output_assign_crtc (output, crtc);
}
}
}
@@ -531,7 +531,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
continue;
}
- output->crtc = NULL;
+ meta_output_unassign_crtc (output);
output->is_primary = FALSE;
}
}
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 0b5e54c48..6d9e2ade4 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -1041,6 +1041,7 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
GVariantBuilder crtcs, modes, clones, properties;
GBytes *edid;
char *edid_file;
+ MetaCrtc *crtc;
int crtc_index;
g_variant_builder_init (&crtcs, G_VARIANT_TYPE ("au"));
@@ -1134,8 +1135,8 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
output->tile_info.tile_h));
}
- crtc_index = output->crtc ? g_list_index (combined_crtcs, output->crtc)
- : -1;
+ crtc = meta_output_get_assigned_crtc (output);
+ crtc_index = crtc ? g_list_index (combined_crtcs, crtc) : -1;
g_variant_builder_add (&output_builder, "(uxiausauaua{sv})",
i, /* ID */
(gint64)output->winsys_id,
@@ -2903,11 +2904,7 @@ meta_monitor_manager_get_monitor_for_connector (MetaMonitorManager *manager,
if (meta_monitor_is_active (monitor) &&
g_str_equal (connector, meta_monitor_get_connector (monitor)))
- {
- MetaOutput *main_output = meta_monitor_get_main_output (monitor);
-
- return main_output->crtc->logical_monitor->number;
- }
+ return meta_monitor_get_logical_monitor (monitor)->number;
}
return -1;
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index 51c793543..1e1af3950 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -204,10 +204,12 @@ gboolean
meta_monitor_is_active (MetaMonitor *monitor)
{
MetaOutput *output;
+ MetaCrtc *crtc;
output = meta_monitor_get_main_output (monitor);
+ crtc = meta_output_get_assigned_crtc (output);
- return output->crtc && output->crtc->current_mode;
+ return crtc && crtc->current_mode;
}
gboolean
@@ -493,6 +495,7 @@ meta_monitor_normal_generate_modes (MetaMonitorNormal *monitor_normal)
for (i = 0; i < output->n_modes; i++)
{
MetaCrtcMode *crtc_mode = output->modes[i];
+ MetaCrtc *crtc;
MetaMonitorMode *mode;
gboolean replace;
@@ -526,7 +529,9 @@ meta_monitor_normal_generate_modes (MetaMonitorNormal *monitor_normal)
if (crtc_mode == output->preferred_mode)
monitor_priv->preferred_mode = mode;
- if (output->crtc && crtc_mode == output->crtc->current_mode)
+
+ crtc = meta_output_get_assigned_crtc (output);
+ if (crtc && crtc_mode == crtc->current_mode)
monitor_priv->current_mode = mode;
}
}
@@ -568,13 +573,15 @@ meta_monitor_normal_derive_layout (MetaMonitor *monitor,
MetaRectangle *layout)
{
MetaOutput *output;
+ MetaCrtc *crtc;
output = meta_monitor_get_main_output (monitor);
+ crtc = meta_output_get_assigned_crtc (output);
*layout = (MetaRectangle) {
- .x = output->crtc->rect.x,
- .y = output->crtc->rect.y,
- .width = output->crtc->rect.width,
- .height = output->crtc->rect.height
+ .x = crtc->rect.x,
+ .y = crtc->rect.y,
+ .width = crtc->rect.width,
+ .height = crtc->rect.height
};
}
@@ -764,12 +771,13 @@ is_monitor_mode_assigned (MetaMonitor *monitor,
{
MetaOutput *output = l->data;
MetaMonitorCrtcMode *monitor_crtc_mode = &mode->crtc_modes[i];
+ MetaCrtc *crtc;
+ crtc = meta_output_get_assigned_crtc (output);
if (monitor_crtc_mode->crtc_mode &&
- (!output->crtc ||
- output->crtc->current_mode != monitor_crtc_mode->crtc_mode))
+ (!crtc || crtc->current_mode != monitor_crtc_mode->crtc_mode))
return FALSE;
- else if (!monitor_crtc_mode->crtc_mode && output->crtc)
+ else if (!monitor_crtc_mode->crtc_mode && crtc)
return FALSE;
}
@@ -1217,14 +1225,16 @@ meta_monitor_tiled_derive_layout (MetaMonitor *monitor,
for (l = monitor_priv->outputs; l; l = l->next)
{
MetaOutput *output = l->data;
+ MetaCrtc *crtc;
- if (!output->crtc)
+ crtc = meta_output_get_assigned_crtc (output);
+ if (!crtc)
continue;
- min_x = MIN (output->crtc->rect.x, min_x);
- min_y = MIN (output->crtc->rect.y, min_y);
- max_x = MAX (output->crtc->rect.x + output->crtc->rect.width, max_x);
- max_y = MAX (output->crtc->rect.y + output->crtc->rect.height, max_y);
+ min_x = MIN (crtc->rect.x, min_x);
+ min_y = MIN (crtc->rect.y, min_y);
+ max_x = MAX (crtc->rect.x + crtc->rect.width, max_x);
+ max_y = MAX (crtc->rect.y + crtc->rect.height, max_y);
}
*layout = (MetaRectangle) {
@@ -1318,10 +1328,14 @@ meta_monitor_get_spec (MetaMonitor *monitor)
MetaLogicalMonitor *
meta_monitor_get_logical_monitor (MetaMonitor *monitor)
{
- MetaOutput *output = meta_monitor_get_main_output (monitor);
+ MetaOutput *output;
+ MetaCrtc *crtc;
+
+ output = meta_monitor_get_main_output (monitor);
+ crtc = meta_output_get_assigned_crtc (output);
- if (output->crtc)
- return output->crtc->logical_monitor;
+ if (crtc)
+ return crtc->logical_monitor;
else
return NULL;
}
diff --git a/src/backends/meta-output.c b/src/backends/meta-output.c
index 62102ced3..b5ecccd2b 100644
--- a/src/backends/meta-output.c
+++ b/src/backends/meta-output.c
@@ -21,7 +21,13 @@
#include "backends/meta-output.h"
-G_DEFINE_TYPE (MetaOutput, meta_output, G_TYPE_OBJECT)
+typedef struct _MetaOutputPrivate
+{
+ /* The CRTC driving this output, NULL if the output is not enabled */
+ MetaCrtc *crtc;
+} MetaOutputPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (MetaOutput, meta_output, G_TYPE_OBJECT)
MetaGpu *
meta_output_get_gpu (MetaOutput *output)
@@ -29,6 +35,33 @@ meta_output_get_gpu (MetaOutput *output)
return output->gpu;
}
+void
+meta_output_assign_crtc (MetaOutput *output,
+ MetaCrtc *crtc)
+{
+ MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+ g_assert (crtc);
+
+ priv->crtc = crtc;
+}
+
+void
+meta_output_unassign_crtc (MetaOutput *output)
+{
+ MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+ priv->crtc = NULL;
+}
+
+MetaCrtc *
+meta_output_get_assigned_crtc (MetaOutput *output)
+{
+ MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+ return priv->crtc;
+}
+
static void
meta_output_finalize (GObject *object)
{
diff --git a/src/backends/meta-output.h b/src/backends/meta-output.h
index a63a1cd10..2dc17daf1 100644
--- a/src/backends/meta-output.h
+++ b/src/backends/meta-output.h
@@ -64,9 +64,6 @@ struct _MetaOutput
MetaGpu *gpu;
- /* The CRTC driving this output, NULL if the output is not enabled */
- MetaCrtc *crtc;
-
/* The low-level ID of this output, used to apply back configuration */
glong winsys_id;
char *name;
@@ -122,4 +119,11 @@ G_DECLARE_FINAL_TYPE (MetaOutput, meta_output, META, OUTPUT, GObject)
MetaGpu * meta_output_get_gpu (MetaOutput *output);
+void meta_output_assign_crtc (MetaOutput *output,
+ MetaCrtc *crtc);
+
+void meta_output_unassign_crtc (MetaOutput *output);
+
+MetaCrtc * meta_output_get_assigned_crtc (MetaOutput *output);
+
#endif /* META_OUTPUT_H */
diff --git a/src/backends/native/meta-cursor-renderer-native.c
b/src/backends/native/meta-cursor-renderer-native.c
index aea86dffd..c7326af42 100644
--- a/src/backends/native/meta-cursor-renderer-native.c
+++ b/src/backends/native/meta-cursor-renderer-native.c
@@ -291,6 +291,7 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
data->in_cursor_renderer_native;
MetaCursorRendererNativePrivate *priv =
meta_cursor_renderer_native_get_instance_private (cursor_renderer_native);
+ MetaCrtc *crtc;
MetaMonitorTransform transform;
ClutterRect scaled_crtc_rect;
float scale;
@@ -330,6 +331,8 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
},
};
+ crtc = meta_output_get_assigned_crtc (monitor_crtc_mode->output);
+
if (priv->has_hw_cursor &&
clutter_rect_intersection (&scaled_crtc_rect,
&data->in_local_cursor_rect,
@@ -340,7 +343,7 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
float crtc_cursor_x, crtc_cursor_y;
set_crtc_cursor (data->in_cursor_renderer_native,
- monitor_crtc_mode->output->crtc,
+ crtc,
data->in_cursor_sprite);
gpu_kms = META_GPU_KMS (meta_monitor_get_gpu (monitor));
@@ -350,7 +353,7 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
crtc_cursor_y = (data->in_local_cursor_rect.origin.y -
scaled_crtc_rect.origin.y) * scale;
drmModeMoveCursor (kms_fd,
- monitor_crtc_mode->output->crtc->crtc_id,
+ crtc->crtc_id,
roundf (crtc_cursor_x),
roundf (crtc_cursor_y));
@@ -358,8 +361,7 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
}
else
{
- set_crtc_cursor (data->in_cursor_renderer_native,
- monitor_crtc_mode->output->crtc, NULL);
+ set_crtc_cursor (data->in_cursor_renderer_native, crtc, NULL);
}
return TRUE;
diff --git a/src/backends/native/meta-gpu-kms.c b/src/backends/native/meta-gpu-kms.c
index b33389de6..613a60705 100644
--- a/src/backends/native/meta-gpu-kms.c
+++ b/src/backends/native/meta-gpu-kms.c
@@ -105,8 +105,10 @@ get_crtc_drm_connectors (MetaGpu *gpu,
for (l = meta_gpu_get_outputs (gpu); l; l = l->next)
{
MetaOutput *output = l->data;
+ MetaCrtc *assigned_crtc;
- if (output->crtc == crtc)
+ assigned_crtc = meta_output_get_assigned_crtc (output);
+ if (assigned_crtc == crtc)
g_array_append_val (connectors_array, output->winsys_id);
}
@@ -186,8 +188,10 @@ meta_gpu_kms_is_crtc_active (MetaGpuKms *gpu_kms,
for (l = meta_gpu_get_outputs (gpu); l; l = l->next)
{
MetaOutput *output = l->data;
+ MetaCrtc *assigned_crtc;
- if (output->crtc == crtc)
+ assigned_crtc = meta_output_get_assigned_crtc (output);
+ if (assigned_crtc == crtc)
{
connected_crtc_found = TRUE;
break;
diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
index 1a2eaec56..d8e7b848d 100644
--- a/src/backends/native/meta-monitor-manager-kms.c
+++ b/src/backends/native/meta-monitor-manager-kms.c
@@ -188,7 +188,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
MetaOutput *output = g_ptr_array_index (crtc_info->outputs, j);
output->is_dirty = TRUE;
- output->crtc = crtc;
+ meta_output_assign_crtc (output, crtc);
}
}
@@ -249,7 +249,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
continue;
}
- output->crtc = NULL;
+ meta_output_unassign_crtc (output);
output->is_primary = FALSE;
}
}
diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c
index 5668be51c..f33f65dc7 100644
--- a/src/backends/native/meta-output-kms.c
+++ b/src/backends/native/meta-output-kms.c
@@ -64,11 +64,13 @@ typedef struct _MetaOutputKms
void
meta_output_kms_set_underscan (MetaOutput *output)
{
- if (!output->crtc)
+ MetaCrtc *crtc;
+
+ crtc = meta_output_get_assigned_crtc (output);
+ if (!crtc)
return;
- meta_crtc_kms_set_underscan (output->crtc,
- output->is_underscanning);
+ meta_crtc_kms_set_underscan (crtc, output->is_underscanning);
}
void
@@ -600,14 +602,14 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
if (crtc->crtc_id == output_kms->current_encoder->crtc_id)
{
- output->crtc = crtc;
+ meta_output_assign_crtc (output, crtc);
break;
}
}
}
else
{
- output->crtc = NULL;
+ meta_output_unassign_crtc (output);
}
if (old_output)
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index cb8e03abe..fc6b22302 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -2089,6 +2089,7 @@ meta_renderer_native_create_surface_egl_device (CoglOnscreen *onscreen,
EGLDisplay egl_display = renderer_gpu_data->egl_display;
MetaMonitor *monitor;
MetaOutput *output;
+ MetaCrtc *crtc;
EGLConfig egl_config;
EGLStreamKHR egl_stream;
EGLSurface egl_surface;
@@ -2112,6 +2113,7 @@ meta_renderer_native_create_surface_egl_device (CoglOnscreen *onscreen,
monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
output = meta_monitor_get_main_output (monitor);
+ crtc = meta_output_get_assigned_crtc (output);
/*
* An "logical_monitor" may have multiple outputs/crtcs in case its tiled,
@@ -2119,7 +2121,7 @@ meta_renderer_native_create_surface_egl_device (CoglOnscreen *onscreen,
* lets pass the first one.
*/
output_attribs[0] = EGL_DRM_CRTC_EXT;
- output_attribs[1] = output->crtc->crtc_id;
+ output_attribs[1] = crtc->crtc_id;
output_attribs[2] = EGL_NONE;
if (!meta_egl_get_output_layers (egl, egl_display,
@@ -2717,12 +2719,10 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
{
MetaMonitor *main_monitor;
MetaOutput *main_output;
- MetaMonitorTransform crtc_transform;
+ MetaCrtc *crtc;
main_monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
main_output = meta_monitor_get_main_output (main_monitor);
- crtc_transform =
- meta_monitor_logical_to_crtc_transform (main_monitor,
- logical_monitor->transform);
+ crtc = meta_output_get_assigned_crtc (main_output);
/*
* Pick any monitor and output and check; all CRTCs of a logical monitor will
@@ -2730,11 +2730,11 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
*/
if (meta_monitor_manager_is_transform_handled (monitor_manager,
- main_output->crtc,
- crtc_transform))
+ crtc,
+ crtc->transform))
return META_MONITOR_TRANSFORM_NORMAL;
else
- return crtc_transform;
+ return crtc->transform;
}
static MetaRendererView *
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
index dbe3e4e3b..e438d8f98 100644
--- a/src/backends/x11/meta-monitor-manager-xrandr.c
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
@@ -225,8 +225,10 @@ is_crtc_assignment_changed (MetaCrtc *crtc,
for (j = 0; j < crtc_info->outputs->len; j++)
{
MetaOutput *output = ((MetaOutput**) crtc_info->outputs->pdata)[j];
+ MetaCrtc *assigned_crtc;
- if (output->crtc != crtc)
+ assigned_crtc = meta_output_get_assigned_crtc (output);
+ if (assigned_crtc != crtc)
return TRUE;
}
@@ -243,6 +245,7 @@ is_output_assignment_changed (MetaOutput *output,
MetaOutputInfo **output_infos,
unsigned int n_output_infos)
{
+ MetaCrtc *assigned_crtc;
gboolean output_is_found = FALSE;
unsigned int i;
@@ -265,8 +268,10 @@ is_output_assignment_changed (MetaOutput *output,
output_is_found = TRUE;
}
+ assigned_crtc = meta_output_get_assigned_crtc (output);
+
if (!output_is_found)
- return output->crtc != NULL;
+ return assigned_crtc != NULL;
for (i = 0; i < n_crtc_infos; i++)
{
@@ -279,7 +284,7 @@ is_output_assignment_changed (MetaOutput *output,
((MetaOutput**) crtc_info->outputs->pdata)[j];
if (crtc_info_output == output &&
- crtc_info->crtc == output->crtc)
+ crtc_info->crtc == assigned_crtc)
return FALSE;
}
}
@@ -455,7 +460,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
output->is_dirty = TRUE;
- output->crtc = crtc;
+ meta_output_assign_crtc (output, crtc);
output_ids[j] = output->winsys_id;
}
@@ -521,7 +526,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
continue;
}
- output->crtc = NULL;
+ meta_output_unassign_crtc (output);
output->is_primary = FALSE;
}
diff --git a/src/backends/x11/meta-output-xrandr.c b/src/backends/x11/meta-output-xrandr.c
index 1f44cb168..515389dae 100644
--- a/src/backends/x11/meta-output-xrandr.c
+++ b/src/backends/x11/meta-output-xrandr.c
@@ -97,10 +97,13 @@ output_set_underscanning_xrandr (MetaOutput *output,
* make the border configurable. */
if (underscanning)
{
+ MetaCrtc *crtc;
uint32_t border_value;
+ crtc = meta_output_get_assigned_crtc (output);
+
prop = XInternAtom (xdisplay, "underscan hborder", False);
- border_value = output->crtc->current_mode->width * 0.05;
+ border_value = crtc->current_mode->width * 0.05;
xcb_randr_change_output_property (XGetXCBConnection (xdisplay),
(XID) output->winsys_id,
@@ -109,7 +112,7 @@ output_set_underscanning_xrandr (MetaOutput *output,
1, &border_value);
prop = XInternAtom (xdisplay, "underscan vborder", False);
- border_value = output->crtc->current_mode->height * 0.05;
+ border_value = crtc->current_mode->height * 0.05;
xcb_randr_change_output_property (XGetXCBConnection (xdisplay),
(XID) output->winsys_id,
@@ -737,14 +740,14 @@ output_get_crtcs (MetaOutput *output,
}
output->n_possible_crtcs = n_actual_crtcs;
- output->crtc = NULL;
+ meta_output_unassign_crtc (output);
for (l = meta_gpu_get_crtcs (gpu); l; l = l->next)
{
MetaCrtc *crtc = l->data;
if ((XID) crtc->crtc_id == xrandr_output->crtc)
{
- output->crtc = crtc;
+ meta_output_assign_crtc (output, crtc);
break;
}
}
diff --git a/src/backends/x11/meta-stage-x11-nested.c b/src/backends/x11/meta-stage-x11-nested.c
index 57fdabb2c..4cc58d609 100644
--- a/src/backends/x11/meta-stage-x11-nested.c
+++ b/src/backends/x11/meta-stage-x11-nested.c
@@ -113,7 +113,7 @@ draw_crtc (MetaMonitor *monitor,
CoglTexture *texture = data->texture;
MetaLogicalMonitor *logical_monitor = data->logical_monitor;
MetaOutput *output = monitor_crtc_mode->output;
- MetaCrtc *crtc = output->crtc;
+ MetaCrtc *crtc;
MetaRendererView *renderer_view = META_RENDERER_VIEW (data->view);
MetaMonitorTransform view_transform;
MetaMonitorTransform layout_transform = META_MONITOR_TRANSFORM_NORMAL;
@@ -129,6 +129,8 @@ draw_crtc (MetaMonitor *monitor,
texture_width = cogl_texture_get_width (texture);
texture_height = cogl_texture_get_height (texture);
+ crtc = meta_output_get_assigned_crtc (output);
+
clutter_stage_view_get_layout (data->view, &view_layout);
sample_x = crtc->rect.x - view_layout.x;
sample_y = crtc->rect.y - view_layout.y;
diff --git a/src/backends/x11/nested/meta-renderer-x11-nested.c
b/src/backends/x11/nested/meta-renderer-x11-nested.c
index a0c26c9b5..8fdf46b0b 100644
--- a/src/backends/x11/nested/meta-renderer-x11-nested.c
+++ b/src/backends/x11/nested/meta-renderer-x11-nested.c
@@ -50,24 +50,22 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
{
MetaMonitor *main_monitor;
MetaOutput *main_output;
- MetaMonitorTransform crtc_transform;
+ MetaCrtc *crtc;
+
main_monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
main_output = meta_monitor_get_main_output (main_monitor);
- crtc_transform =
- meta_monitor_logical_to_crtc_transform (main_monitor,
- logical_monitor->transform);
-
+ crtc = meta_output_get_assigned_crtc (main_output);
/*
* Pick any monitor and output and check; all CRTCs of a logical monitor will
* always have the same transform assigned to them.
*/
if (meta_monitor_manager_is_transform_handled (monitor_manager,
- main_output->crtc,
- crtc_transform))
+ crtc,
+ crtc->transform))
return META_MONITOR_TRANSFORM_NORMAL;
else
- return crtc_transform;
+ return crtc->transform;
}
static MetaRendererView *
diff --git a/src/tests/meta-monitor-manager-test.c b/src/tests/meta-monitor-manager-test.c
index 5e1c56ec3..953d87192 100644
--- a/src/tests/meta-monitor-manager-test.c
+++ b/src/tests/meta-monitor-manager-test.c
@@ -209,7 +209,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
output->is_dirty = TRUE;
- output->crtc = crtc;
+ meta_output_assign_crtc (output, crtc);
}
}
}
@@ -255,7 +255,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
continue;
}
- output->crtc = NULL;
+ meta_output_unassign_crtc (output);
output->is_primary = FALSE;
}
}
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
index 97b1e6ee7..a9cb2e24f 100644
--- a/src/tests/monitor-unit-tests.c
+++ b/src/tests/monitor-unit-tests.c
@@ -449,22 +449,24 @@ check_current_monitor_mode (MetaMonitor *monitor,
CheckMonitorModeData *data = user_data;
MetaMonitorManager *monitor_manager = data->monitor_manager;
MetaOutput *output;
+ MetaCrtc *crtc;
output = output_from_winsys_id (monitor_manager,
data->expect_crtc_mode_iter->output);
+ crtc = meta_output_get_assigned_crtc (output);
if (data->expect_crtc_mode_iter->crtc_mode == -1)
{
- g_assert_null (output->crtc);
+ g_assert_null (crtc);
}
else
{
MetaLogicalMonitor *logical_monitor;
- g_assert_nonnull (output->crtc);
- g_assert (monitor_crtc_mode->crtc_mode == output->crtc->current_mode);
+ g_assert_nonnull (crtc);
+ g_assert (monitor_crtc_mode->crtc_mode == crtc->current_mode);
- logical_monitor = output->crtc->logical_monitor;
+ logical_monitor = crtc->logical_monitor;
g_assert_nonnull (logical_monitor);
}
@@ -553,6 +555,7 @@ check_logical_monitor (MonitorTestCase *test_case,
for (l_output = outputs; l_output; l_output = l_output->next)
{
MetaOutput *output = l_output->data;
+ MetaCrtc *crtc;
if (output->is_primary)
{
@@ -560,8 +563,8 @@ check_logical_monitor (MonitorTestCase *test_case,
primary_output = output;
}
- g_assert (!output->crtc ||
- output->crtc->logical_monitor == logical_monitor);
+ crtc = meta_output_get_assigned_crtc (output);
+ g_assert (!crtc || crtc->logical_monitor == logical_monitor);
g_assert_cmpint (logical_monitor->is_presentation,
==,
output->is_presentation);
@@ -983,7 +986,8 @@ create_monitor_test_setup (MonitorTestCase *test_case,
output = g_object_new (META_TYPE_OUTPUT, NULL);
- output->crtc = crtc;
+ if (crtc)
+ meta_output_assign_crtc (output, crtc);
output->winsys_id = i;
output->name = (is_laptop_panel ? g_strdup_printf ("eDP-%d",
++n_laptop_panels)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]