crtc: Move all_transforms field into instance private

Now set as a property during construction. Only actually set by the
Xrandr backend, as it's the only one currently not supporting all
transforms, which is the default.

While at it, move the 'ALL_TRANFORMS' macro to meta-monitor-tranforms.h.

https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1287
This commit is contained in:
Jonas Ådahl 2020-02-26 10:14:52 +01:00 committed by Georges Basile Stavracas Neto
parent 1406348be4
commit c3fc6025b1
11 changed files with 44 additions and 21 deletions

View File

@ -29,6 +29,7 @@ enum
PROP_ID,
PROP_GPU,
PROP_ALL_TRANSFORMS,
N_PROPS
};
@ -40,6 +41,8 @@ typedef struct _MetaCrtcPrivate
uint64_t id;
MetaGpu *gpu;
MetaMonitorTransform all_transforms;
} MetaCrtcPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (MetaCrtc, meta_crtc, G_TYPE_OBJECT)
@ -62,6 +65,14 @@ meta_crtc_get_gpu (MetaCrtc *crtc)
return priv->gpu;
}
MetaMonitorTransform
meta_crtc_get_all_transforms (MetaCrtc *crtc)
{
MetaCrtcPrivate *priv = meta_crtc_get_instance_private (crtc);
return priv->all_transforms;
}
void
meta_crtc_set_config (MetaCrtc *crtc,
graphene_rect_t *layout,
@ -103,6 +114,9 @@ meta_crtc_set_property (GObject *object,
case PROP_GPU:
priv->gpu = g_value_get_object (value);
break;
case PROP_ALL_TRANSFORMS:
priv->all_transforms = g_value_get_uint (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@ -125,6 +139,9 @@ meta_crtc_get_property (GObject *object,
case PROP_GPU:
g_value_set_object (value, priv->gpu);
break;
case PROP_ALL_TRANSFORMS:
g_value_set_uint (value, priv->all_transforms);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@ -146,6 +163,9 @@ meta_crtc_finalize (GObject *object)
static void
meta_crtc_init (MetaCrtc *crtc)
{
MetaCrtcPrivate *priv = meta_crtc_get_instance_private (crtc);
priv->all_transforms = META_MONITOR_ALL_TRANSFORMS;
}
static void
@ -173,6 +193,16 @@ meta_crtc_class_init (MetaCrtcClass *klass)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
obj_props[PROP_ALL_TRANSFORMS] =
g_param_spec_uint ("all-transforms",
"all-transforms",
"All transforms",
0,
META_MONITOR_ALL_TRANSFORMS,
META_MONITOR_ALL_TRANSFORMS,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, N_PROPS, obj_props);
}

View File

@ -60,8 +60,6 @@ struct _MetaCrtc
{
GObject parent;
unsigned int all_transforms;
MetaCrtcConfig *config;
gpointer driver_private;
@ -97,6 +95,8 @@ uint64_t meta_crtc_get_id (MetaCrtc *crtc);
META_EXPORT_TEST
MetaGpu * meta_crtc_get_gpu (MetaCrtc *crtc);
MetaMonitorTransform meta_crtc_get_all_transforms (MetaCrtc *crtc);
META_EXPORT_TEST
void meta_crtc_set_config (MetaCrtc *crtc,
graphene_rect_t *layout,

View File

@ -36,8 +36,6 @@
#include "backends/meta-output.h"
#include "meta/util.h"
#define ALL_TRANSFORMS ((1 << (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1)
#define MAX_MONITORS 5
#define MAX_OUTPUTS (MAX_MONITORS * 2)
#define MAX_CRTCS (MAX_MONITORS * 2)
@ -203,7 +201,6 @@ append_monitor (MetaMonitorManager *manager,
"id", g_list_length (*crtcs) + 1,
"gpu", gpu,
NULL);
crtc->all_transforms = ALL_TRANSFORMS;
*crtcs = g_list_append (*crtcs, crtc);
number = g_list_length (*outputs) + 1;
@ -298,7 +295,6 @@ append_tiled_monitor (MetaMonitorManager *manager,
"id", g_list_length (*crtcs) + i + 1,
"gpu", gpu,
NULL);
crtc->all_transforms = ALL_TRANSFORMS;
new_crtcs = g_list_append (new_crtcs, crtc);
}
*crtcs = g_list_concat (*crtcs, new_crtcs);

View File

@ -1021,8 +1021,10 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
g_variant_builder_init (&transforms, G_VARIANT_TYPE ("au"));
for (j = 0; j <= META_MONITOR_TRANSFORM_FLIPPED_270; j++)
if (crtc->all_transforms & (1 << j))
{
if (meta_crtc_get_all_transforms (crtc) & (1 << j))
g_variant_builder_add (&transforms, "u", j);
}
crtc_config = crtc->config;

View File

@ -36,6 +36,7 @@ enum _MetaMonitorTransform
META_MONITOR_TRANSFORM_FLIPPED_270,
};
#define META_MONITOR_N_TRANSFORMS (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)
#define META_MONITOR_ALL_TRANSFORMS ((1 << META_MONITOR_N_TRANSFORMS) - 1)
/* Returns true if transform causes width and height to be inverted
This is true for the odd transforms in the enum */

View File

@ -302,7 +302,6 @@ meta_create_kms_crtc (MetaGpuKms *gpu_kms,
"id", meta_kms_crtc_get_id (kms_crtc),
"gpu", gpu,
NULL);
crtc->all_transforms = ALL_TRANSFORMS_MASK;
crtc_kms = g_new0 (MetaCrtcKms, 1);
crtc_kms->kms_crtc = kms_crtc;

View File

@ -46,8 +46,6 @@
#include "backends/x11/meta-gpu-xrandr.h"
#include "backends/x11/meta-monitor-manager-xrandr.h"
#define ALL_TRANSFORMS ((1 << (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1)
typedef struct _MetaCrtcXrandr
{
MetaRectangle rect;
@ -161,7 +159,7 @@ meta_monitor_transform_from_xrandr_all (Rotation rotation)
/* All rotations and one reflection -> all of them by composition */
if ((rotation & ALL_ROTATIONS) &&
((rotation & RR_Reflect_X) || (rotation & RR_Reflect_Y)))
return ALL_TRANSFORMS;
return META_MONITOR_ALL_TRANSFORMS;
ret = 1 << META_MONITOR_TRANSFORM_NORMAL;
if (rotation & RR_Rotate_90)
@ -242,15 +240,19 @@ meta_create_xrandr_crtc (MetaGpuXrandr *gpu_xrandr,
META_MONITOR_MANAGER_XRANDR (monitor_manager);
Display *xdisplay =
meta_monitor_manager_xrandr_get_xdisplay (monitor_manager_xrandr);
MetaMonitorTransform all_transforms;
MetaCrtc *crtc;
MetaCrtcXrandr *crtc_xrandr;
XRRPanning *panning;
unsigned int i;
GList *modes;
all_transforms =
meta_monitor_transform_from_xrandr_all (xrandr_crtc->rotations);
crtc = g_object_new (META_TYPE_CRTC,
"id", crtc_id,
"gpu", gpu,
"all-transforms", all_transforms,
NULL);
crtc_xrandr = g_new0 (MetaCrtcXrandr, 1);
@ -280,9 +282,6 @@ meta_create_xrandr_crtc (MetaGpuXrandr *gpu_xrandr,
};
}
crtc->all_transforms =
meta_monitor_transform_from_xrandr_all (xrandr_crtc->rotations);
modes = meta_gpu_get_modes (gpu);
for (i = 0; i < (unsigned int) resources->nmode; i++)
{

View File

@ -857,7 +857,8 @@ meta_monitor_manager_xrandr_is_transform_handled (MetaMonitorManager *manager,
MetaCrtc *crtc,
MetaMonitorTransform transform)
{
g_warn_if_fail ((crtc->all_transforms & transform) == transform);
g_warn_if_fail ((meta_crtc_get_all_transforms (crtc) & transform) ==
transform);
return TRUE;
}

View File

@ -31,7 +31,6 @@
#include "tests/test-utils.h"
#include "wayland/meta-wayland.h"
#define ALL_TRANSFORMS ((1 << (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1)
#define FRAME_WARNING "Frame has assigned frame counter but no frame drawn time"
static gboolean
@ -143,7 +142,6 @@ meta_test_headless_monitor_connect (void)
"id", 1,
"gpu", gpu,
NULL);
crtc->all_transforms = ALL_TRANSFORMS;
test_setup->crtcs = g_list_append (NULL, crtc);
modes = g_new0 (MetaCrtcMode *, 1);

View File

@ -576,7 +576,6 @@ create_monitor_test_setup (MonitorTestCaseSetup *setup,
"id", i + 1,
"gpu", test_get_gpu (),
NULL);
crtc->all_transforms = ALL_TRANSFORMS;
test_setup->crtcs = g_list_append (test_setup->crtcs, crtc);
}

View File

@ -26,8 +26,6 @@
#include "backends/meta-crtc.h"
#include "backends/meta-output.h"
#define ALL_TRANSFORMS ((1 << (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1)
#define MAX_N_MODES 10
#define MAX_N_OUTPUTS 10
#define MAX_N_CRTCS 10