From 43baf643d4f4ff62939160167ab273b9bc93f5b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Tue, 14 Apr 2020 10:23:43 +0200 Subject: [PATCH] monitor-config-manager: Only use crtc transform for assignment The CRTC level transform (i.e. not necessarily the one set on the hardware) is what is relevant for calculating the layout the CRTC will have on the stage, so only use the one that can be handled by the hardware for the CRTC assignment. This makes the CRTC layout valid for tiled monitors. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1199 --- src/backends/meta-monitor-config-manager.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c index 5739ca18b..cc9159683 100644 --- a/src/backends/meta-monitor-config-manager.c +++ b/src/backends/meta-monitor-config-manager.c @@ -172,6 +172,7 @@ assign_monitor_crtc (MetaMonitor *monitor, MetaCrtc *crtc; MetaMonitorTransform transform; MetaMonitorTransform crtc_transform; + MetaMonitorTransform crtc_hw_transform; int crtc_x, crtc_y; float x_offset, y_offset; float scale = 0.0; @@ -200,10 +201,12 @@ assign_monitor_crtc (MetaMonitor *monitor, transform = data->logical_monitor_config->transform; crtc_transform = meta_monitor_logical_to_crtc_transform (monitor, transform); - if (!meta_monitor_manager_is_transform_handled (data->monitor_manager, - crtc, - crtc_transform)) - crtc_transform = META_MONITOR_TRANSFORM_NORMAL; + if (meta_monitor_manager_is_transform_handled (data->monitor_manager, + crtc, + crtc_transform)) + crtc_hw_transform = crtc_transform; + else + crtc_hw_transform = META_MONITOR_TRANSFORM_NORMAL; meta_monitor_calculate_crtc_pos (monitor, mode, output, crtc_transform, &crtc_x, &crtc_y); @@ -244,7 +247,7 @@ assign_monitor_crtc (MetaMonitor *monitor, .crtc = crtc, .mode = crtc_mode, .layout = crtc_layout, - .transform = crtc_transform, + .transform = crtc_hw_transform, .outputs = g_ptr_array_new () }; g_ptr_array_add (crtc_info->outputs, output);