mirror of
https://github.com/brl/mutter.git
synced 2024-12-22 19:12:04 +00:00
output: Move configureable state to instance private
That is is_presentation, is_primary, is_underscanning and backlight. The first three are set during CRTC assignment as they are only valid when active. The other is set separately, as it is untied to monitor configuration. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1287
This commit is contained in:
parent
9186b6d6b0
commit
f71316c850
@ -178,7 +178,8 @@ meta_logical_monitor_add_monitor (MetaLogicalMonitor *logical_monitor,
|
||||
{
|
||||
MetaOutput *output = l_output->data;
|
||||
|
||||
is_presentation = is_presentation && output->is_presentation;
|
||||
is_presentation = (is_presentation &&
|
||||
meta_output_is_presentation (output));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -228,7 +228,6 @@ append_monitor (MetaMonitorManager *manager,
|
||||
output->subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
|
||||
output->preferred_mode = g_list_last (*modes)->data;
|
||||
output->n_possible_clones = 0;
|
||||
output->backlight = -1;
|
||||
output->connector_type = META_CONNECTOR_TYPE_LVDS;
|
||||
output->driver_private = output_dummy;
|
||||
output->driver_notify =
|
||||
@ -336,7 +335,6 @@ append_tiled_monitor (MetaMonitorManager *manager,
|
||||
output->subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
|
||||
output->preferred_mode = preferred_mode;
|
||||
output->n_possible_clones = 0;
|
||||
output->backlight = -1;
|
||||
output->connector_type = META_CONNECTOR_TYPE_LVDS;
|
||||
output->tile_info = (MetaTileInfo) {
|
||||
.group_id = tile_group_id,
|
||||
@ -508,7 +506,6 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
{
|
||||
g_autoptr (GList) to_configure_outputs = NULL;
|
||||
g_autoptr (GList) to_configure_crtcs = NULL;
|
||||
GList *l;
|
||||
unsigned i;
|
||||
|
||||
to_configure_outputs = g_list_copy (meta_gpu_get_outputs (get_gpu (manager)));
|
||||
@ -527,7 +524,6 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
}
|
||||
else
|
||||
{
|
||||
MetaOutput *output;
|
||||
unsigned int j;
|
||||
|
||||
meta_crtc_set_config (crtc,
|
||||
@ -537,40 +533,26 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
|
||||
for (j = 0; j < crtc_info->outputs->len; j++)
|
||||
{
|
||||
MetaOutput *output;
|
||||
MetaOutputInfo *output_info;
|
||||
|
||||
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
|
||||
|
||||
to_configure_outputs = g_list_remove (to_configure_outputs,
|
||||
output);
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
|
||||
output_info = meta_find_output_info (outputs, n_outputs, output);
|
||||
meta_output_assign_crtc (output, crtc, output_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < n_outputs; i++)
|
||||
{
|
||||
MetaOutputInfo *output_info = outputs[i];
|
||||
MetaOutput *output = output_info->output;
|
||||
|
||||
output->is_primary = output_info->is_primary;
|
||||
output->is_presentation = output_info->is_presentation;
|
||||
}
|
||||
|
||||
/* Disable CRTCs not mentioned in the list */
|
||||
for (l = to_configure_crtcs; l; l = l->next)
|
||||
{
|
||||
MetaCrtc *crtc = l->data;
|
||||
|
||||
meta_crtc_unset_config (crtc);
|
||||
}
|
||||
|
||||
/* Disable outputs not mentioned in the list */
|
||||
for (l = to_configure_outputs; l; l = l->next)
|
||||
{
|
||||
MetaOutput *output = l->data;
|
||||
|
||||
meta_output_unassign_crtc (output);
|
||||
output->is_primary = FALSE;
|
||||
}
|
||||
g_list_foreach (to_configure_crtcs,
|
||||
(GFunc) meta_crtc_unset_config,
|
||||
NULL);
|
||||
g_list_foreach (to_configure_outputs,
|
||||
(GFunc) meta_output_unassign_crtc,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -387,4 +387,22 @@ gboolean meta_monitor_has_aspect_as_size (MetaMonitor *monitor);
|
||||
char * meta_monitor_manager_get_vendor_name (MetaMonitorManager *manager,
|
||||
const char *vendor);
|
||||
|
||||
static inline MetaOutputInfo *
|
||||
meta_find_output_info (MetaOutputInfo **outputs,
|
||||
unsigned int n_outputs,
|
||||
MetaOutput *output)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < n_outputs; i++)
|
||||
{
|
||||
MetaOutputInfo *output_info = outputs[i];
|
||||
|
||||
if (output == output_info->output)
|
||||
return output_info;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* META_MONITOR_MANAGER_PRIVATE_H */
|
||||
|
@ -1107,18 +1107,18 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
|
||||
g_variant_builder_add (&properties, "{sv}", "display-name",
|
||||
g_variant_new_string (output->name));
|
||||
g_variant_builder_add (&properties, "{sv}", "backlight",
|
||||
g_variant_new_int32 (output->backlight));
|
||||
g_variant_new_int32 (meta_output_get_backlight (output)));
|
||||
g_variant_builder_add (&properties, "{sv}", "min-backlight-step",
|
||||
g_variant_new_int32 ((output->backlight_max - output->backlight_min) ?
|
||||
100 / (output->backlight_max - output->backlight_min) : -1));
|
||||
g_variant_builder_add (&properties, "{sv}", "primary",
|
||||
g_variant_new_boolean (output->is_primary));
|
||||
g_variant_new_boolean (meta_output_is_primary (output)));
|
||||
g_variant_builder_add (&properties, "{sv}", "presentation",
|
||||
g_variant_new_boolean (output->is_presentation));
|
||||
g_variant_new_boolean (meta_output_is_presentation (output)));
|
||||
g_variant_builder_add (&properties, "{sv}", "connector-type",
|
||||
g_variant_new_string (get_connector_type_name (output->connector_type)));
|
||||
g_variant_builder_add (&properties, "{sv}", "underscanning",
|
||||
g_variant_new_boolean (output->is_underscanning));
|
||||
g_variant_new_boolean (meta_output_is_underscanning (output)));
|
||||
g_variant_builder_add (&properties, "{sv}", "supports-underscanning",
|
||||
g_variant_new_boolean (output->supports_underscanning));
|
||||
|
||||
@ -2103,6 +2103,7 @@ meta_monitor_manager_handle_change_backlight (MetaDBusDisplayConfig *skeleton,
|
||||
{
|
||||
GList *combined_outputs;
|
||||
MetaOutput *output;
|
||||
int new_backlight;
|
||||
|
||||
if (serial != manager->serial)
|
||||
{
|
||||
@ -2133,7 +2134,7 @@ meta_monitor_manager_handle_change_backlight (MetaDBusDisplayConfig *skeleton,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (output->backlight == -1 ||
|
||||
if (meta_output_get_backlight (output) == -1 ||
|
||||
(output->backlight_min == 0 && output->backlight_max == 0))
|
||||
{
|
||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
||||
@ -2144,7 +2145,10 @@ meta_monitor_manager_handle_change_backlight (MetaDBusDisplayConfig *skeleton,
|
||||
|
||||
META_MONITOR_MANAGER_GET_CLASS (manager)->change_backlight (manager, output, value);
|
||||
|
||||
meta_dbus_display_config_complete_change_backlight (skeleton, invocation, output->backlight);
|
||||
new_backlight = meta_output_get_backlight (output);
|
||||
meta_dbus_display_config_complete_change_backlight (skeleton,
|
||||
invocation,
|
||||
new_backlight);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -316,7 +316,7 @@ meta_monitor_is_primary (MetaMonitor *monitor)
|
||||
|
||||
output = meta_monitor_get_main_output (monitor);
|
||||
|
||||
return output->is_primary;
|
||||
return meta_output_is_primary (output);
|
||||
}
|
||||
|
||||
gboolean
|
||||
@ -336,7 +336,7 @@ meta_monitor_is_underscanning (MetaMonitor *monitor)
|
||||
|
||||
output = meta_monitor_get_main_output (monitor);
|
||||
|
||||
return output->is_underscanning;
|
||||
return meta_output_is_underscanning (output);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -41,6 +41,13 @@ typedef struct _MetaOutputPrivate
|
||||
|
||||
/* The CRTC driving this output, NULL if the output is not enabled */
|
||||
MetaCrtc *crtc;
|
||||
|
||||
gboolean is_primary;
|
||||
gboolean is_presentation;
|
||||
|
||||
gboolean is_underscanning;
|
||||
|
||||
int backlight;
|
||||
} MetaOutputPrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaOutput, meta_output, G_TYPE_OBJECT)
|
||||
@ -67,15 +74,61 @@ meta_output_get_name (MetaOutput *output)
|
||||
return output->name;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_output_is_primary (MetaOutput *output)
|
||||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
return priv->is_primary;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_output_is_presentation (MetaOutput *output)
|
||||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
return priv->is_presentation;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_output_is_underscanning (MetaOutput *output)
|
||||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
return priv->is_underscanning;
|
||||
}
|
||||
|
||||
void
|
||||
meta_output_assign_crtc (MetaOutput *output,
|
||||
MetaCrtc *crtc)
|
||||
meta_output_set_backlight (MetaOutput *output,
|
||||
int backlight)
|
||||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
priv->backlight = backlight;
|
||||
}
|
||||
|
||||
int
|
||||
meta_output_get_backlight (MetaOutput *output)
|
||||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
return priv->backlight;
|
||||
}
|
||||
|
||||
void
|
||||
meta_output_assign_crtc (MetaOutput *output,
|
||||
MetaCrtc *crtc,
|
||||
const MetaOutputInfo *output_info)
|
||||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
g_assert (crtc);
|
||||
|
||||
g_set_object (&priv->crtc, crtc);
|
||||
|
||||
priv->is_primary = output_info->is_primary;
|
||||
priv->is_presentation = output_info->is_presentation;
|
||||
priv->is_underscanning = output_info->is_underscanning;
|
||||
}
|
||||
|
||||
void
|
||||
@ -84,6 +137,9 @@ meta_output_unassign_crtc (MetaOutput *output)
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
g_clear_object (&priv->crtc);
|
||||
|
||||
priv->is_primary = FALSE;
|
||||
priv->is_presentation = FALSE;
|
||||
}
|
||||
|
||||
MetaCrtc *
|
||||
@ -194,6 +250,9 @@ meta_output_finalize (GObject *object)
|
||||
static void
|
||||
meta_output_init (MetaOutput *output)
|
||||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
priv->backlight = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -85,14 +85,9 @@ struct _MetaOutput
|
||||
MetaOutput **possible_clones;
|
||||
unsigned int n_possible_clones;
|
||||
|
||||
int backlight;
|
||||
int backlight_min;
|
||||
int backlight_max;
|
||||
|
||||
gboolean is_primary;
|
||||
gboolean is_presentation;
|
||||
|
||||
gboolean is_underscanning;
|
||||
gboolean supports_underscanning;
|
||||
|
||||
gpointer driver_private;
|
||||
@ -121,8 +116,23 @@ MetaGpu * meta_output_get_gpu (MetaOutput *output);
|
||||
const char * meta_output_get_name (MetaOutput *output);
|
||||
|
||||
META_EXPORT_TEST
|
||||
void meta_output_assign_crtc (MetaOutput *output,
|
||||
MetaCrtc *crtc);
|
||||
gboolean meta_output_is_primary (MetaOutput *output);
|
||||
|
||||
META_EXPORT_TEST
|
||||
gboolean meta_output_is_presentation (MetaOutput *output);
|
||||
|
||||
META_EXPORT_TEST
|
||||
gboolean meta_output_is_underscanning (MetaOutput *output);
|
||||
|
||||
void meta_output_set_backlight (MetaOutput *output,
|
||||
int backlight);
|
||||
|
||||
int meta_output_get_backlight (MetaOutput *output);
|
||||
|
||||
META_EXPORT_TEST
|
||||
void meta_output_assign_crtc (MetaOutput *output,
|
||||
MetaCrtc *crtc,
|
||||
const MetaOutputInfo *output_info);
|
||||
|
||||
META_EXPORT_TEST
|
||||
void meta_output_unassign_crtc (MetaOutput *output);
|
||||
|
@ -219,40 +219,23 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
for (j = 0; j < crtc_info->outputs->len; j++)
|
||||
{
|
||||
MetaOutput *output = g_ptr_array_index (crtc_info->outputs, j);
|
||||
MetaOutputInfo *output_info;
|
||||
|
||||
to_configure_outputs = g_list_remove (to_configure_outputs,
|
||||
output);
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
|
||||
output_info = meta_find_output_info (outputs, n_outputs, output);
|
||||
meta_output_assign_crtc (output, crtc, output_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Disable CRTCs yet to be configured. */
|
||||
for (l = to_configure_crtcs; l; l = l->next)
|
||||
{
|
||||
MetaCrtc *crtc = l->data;
|
||||
|
||||
meta_crtc_unset_config (crtc);
|
||||
}
|
||||
|
||||
for (i = 0; i < n_outputs; i++)
|
||||
{
|
||||
MetaOutputInfo *output_info = outputs[i];
|
||||
MetaOutput *output = output_info->output;
|
||||
|
||||
output->is_primary = output_info->is_primary;
|
||||
output->is_presentation = output_info->is_presentation;
|
||||
output->is_underscanning = output_info->is_underscanning;
|
||||
}
|
||||
|
||||
/* Disable outputs yet to be configured. */
|
||||
for (l = to_configure_outputs; l; l = l->next)
|
||||
{
|
||||
MetaOutput *output = l->data;
|
||||
|
||||
meta_output_unassign_crtc (output);
|
||||
output->is_primary = FALSE;
|
||||
}
|
||||
g_list_foreach (to_configure_crtcs,
|
||||
(GFunc) meta_crtc_unset_config,
|
||||
NULL);
|
||||
g_list_foreach (to_configure_outputs,
|
||||
(GFunc) meta_output_unassign_crtc,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -61,7 +61,7 @@ meta_output_kms_set_underscan (MetaOutput *output,
|
||||
if (!output->supports_underscanning)
|
||||
return;
|
||||
|
||||
if (output->is_underscanning)
|
||||
if (meta_output_is_underscanning (output))
|
||||
{
|
||||
MetaCrtc *crtc;
|
||||
MetaCrtcConfig *crtc_config;
|
||||
@ -363,7 +363,23 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
|
||||
|
||||
if (meta_crtc_get_id (crtc) == connector_state->current_crtc_id)
|
||||
{
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
MetaOutputInfo output_info;
|
||||
|
||||
if (old_output)
|
||||
{
|
||||
output_info = (MetaOutputInfo) {
|
||||
.is_primary = meta_output_is_primary (old_output),
|
||||
.is_presentation = meta_output_is_presentation (old_output),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
output_info = (MetaOutputInfo) {
|
||||
.is_primary = FALSE,
|
||||
.is_presentation = FALSE,
|
||||
};
|
||||
}
|
||||
meta_output_assign_crtc (output, crtc, &output_info);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -373,17 +389,6 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
|
||||
meta_output_unassign_crtc (output);
|
||||
}
|
||||
|
||||
if (old_output)
|
||||
{
|
||||
output->is_primary = old_output->is_primary;
|
||||
output->is_presentation = old_output->is_presentation;
|
||||
}
|
||||
else
|
||||
{
|
||||
output->is_primary = FALSE;
|
||||
output->is_presentation = FALSE;
|
||||
}
|
||||
|
||||
output->suggested_x = connector_state->suggested_x;
|
||||
output->suggested_y = connector_state->suggested_y;
|
||||
output->hotplug_mode_update = connector_state->hotplug_mode_update;
|
||||
@ -407,7 +412,6 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
|
||||
*/
|
||||
output->backlight_min = 0;
|
||||
output->backlight_max = 0;
|
||||
output->backlight = -1;
|
||||
|
||||
return output;
|
||||
}
|
||||
|
@ -278,13 +278,15 @@ is_output_assignment_changed (MetaOutput *output,
|
||||
if (output_info->output != output)
|
||||
continue;
|
||||
|
||||
if (output->is_primary != output_info->is_primary)
|
||||
if (meta_output_is_primary (output) != output_info->is_primary)
|
||||
return TRUE;
|
||||
|
||||
if (output->is_presentation != output_info->is_presentation)
|
||||
if (meta_output_is_presentation (output) !=
|
||||
output_info->is_presentation)
|
||||
return TRUE;
|
||||
|
||||
if (output->is_underscanning != output_info->is_underscanning)
|
||||
if (meta_output_is_underscanning (output) !=
|
||||
output_info->is_underscanning)
|
||||
return TRUE;
|
||||
|
||||
output_is_found = TRUE;
|
||||
@ -484,12 +486,15 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
for (j = 0; j < n_output_ids; j++)
|
||||
{
|
||||
MetaOutput *output;
|
||||
MetaOutputInfo *output_info;
|
||||
|
||||
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
|
||||
|
||||
to_configure_outputs = g_list_remove (to_configure_outputs,
|
||||
output);
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
|
||||
output_info = meta_find_output_info (outputs, n_outputs, output);
|
||||
meta_output_assign_crtc (output, crtc, output_info);
|
||||
|
||||
output_ids[j] = meta_output_get_id (output);
|
||||
}
|
||||
@ -528,21 +533,12 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
MetaOutputInfo *output_info = outputs[i];
|
||||
MetaOutput *output = output_info->output;
|
||||
|
||||
output->is_primary = output_info->is_primary;
|
||||
output->is_presentation = output_info->is_presentation;
|
||||
output->is_underscanning = output_info->is_underscanning;
|
||||
|
||||
meta_output_xrandr_apply_mode (output);
|
||||
}
|
||||
|
||||
/* Disable outputs not mentioned in the list */
|
||||
for (l = to_configure_outputs; l; l = l->next)
|
||||
{
|
||||
MetaOutput *output = l->data;
|
||||
|
||||
meta_output_unassign_crtc (output);
|
||||
output->is_primary = FALSE;
|
||||
}
|
||||
g_list_foreach (to_configure_outputs,
|
||||
(GFunc) meta_output_unassign_crtc,
|
||||
NULL);
|
||||
|
||||
XUngrabServer (manager_xrandr->xdisplay);
|
||||
XFlush (manager_xrandr->xdisplay);
|
||||
|
@ -132,16 +132,19 @@ meta_output_xrandr_apply_mode (MetaOutput *output)
|
||||
{
|
||||
Display *xdisplay = xdisplay_from_output (output);
|
||||
|
||||
if (output->is_primary)
|
||||
if (meta_output_is_primary (output))
|
||||
{
|
||||
XRRSetOutputPrimary (xdisplay, DefaultRootWindow (xdisplay),
|
||||
(XID) meta_output_get_id (output));
|
||||
}
|
||||
|
||||
output_set_presentation_xrandr (output, output->is_presentation);
|
||||
output_set_presentation_xrandr (output, meta_output_is_presentation (output));
|
||||
|
||||
if (output->supports_underscanning)
|
||||
output_set_underscanning_xrandr (output, output->is_underscanning);
|
||||
{
|
||||
output_set_underscanning_xrandr (output,
|
||||
meta_output_is_underscanning (output));
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
@ -172,7 +175,7 @@ meta_output_xrandr_change_backlight (MetaOutput *output,
|
||||
1, &hw_value);
|
||||
|
||||
/* We're not selecting for property notifies, so update the value immediately */
|
||||
output->backlight = normalize_backlight (output, hw_value);
|
||||
meta_output_set_backlight (output, normalize_backlight (output, hw_value));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -730,8 +733,9 @@ output_get_modes (MetaOutput *output,
|
||||
}
|
||||
|
||||
static void
|
||||
output_get_crtcs (MetaOutput *output,
|
||||
XRROutputInfo *xrandr_output)
|
||||
output_get_crtcs (MetaOutput *output,
|
||||
XRROutputInfo *xrandr_output,
|
||||
MetaCrtc **assigned_crtc)
|
||||
{
|
||||
MetaGpu *gpu = meta_output_get_gpu (output);
|
||||
unsigned int i;
|
||||
@ -764,10 +768,12 @@ output_get_crtcs (MetaOutput *output,
|
||||
|
||||
if ((XID) meta_crtc_get_id (crtc) == xrandr_output->crtc)
|
||||
{
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
break;
|
||||
*assigned_crtc = crtc;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
*assigned_crtc = NULL;
|
||||
}
|
||||
|
||||
MetaOutput *
|
||||
@ -778,6 +784,7 @@ meta_create_xrandr_output (MetaGpuXrandr *gpu_xrandr,
|
||||
{
|
||||
MetaOutput *output;
|
||||
GBytes *edid;
|
||||
MetaCrtc *assigned_crtc;
|
||||
unsigned int i;
|
||||
|
||||
output = g_object_new (META_TYPE_OUTPUT,
|
||||
@ -812,7 +819,19 @@ meta_create_xrandr_output (MetaGpuXrandr *gpu_xrandr,
|
||||
|
||||
output_get_tile_info (output);
|
||||
output_get_modes (output, xrandr_output);
|
||||
output_get_crtcs (output, xrandr_output);
|
||||
output_get_crtcs (output, xrandr_output, &assigned_crtc);
|
||||
|
||||
if (assigned_crtc)
|
||||
{
|
||||
MetaOutputInfo output_info;
|
||||
|
||||
output_info = (MetaOutputInfo) {
|
||||
.is_primary = (XID) meta_output_get_id (output) == primary_output,
|
||||
.is_presentation = output_get_presentation_xrandr (output),
|
||||
.is_underscanning = output_get_underscanning_xrandr (output),
|
||||
};
|
||||
meta_output_assign_crtc (output, assigned_crtc, &output_info);
|
||||
}
|
||||
|
||||
output->n_possible_clones = xrandr_output->nclone;
|
||||
output->possible_clones = g_new0 (MetaOutput *,
|
||||
@ -827,17 +846,12 @@ meta_create_xrandr_output (MetaGpuXrandr *gpu_xrandr,
|
||||
output->possible_clones[i] = GINT_TO_POINTER (xrandr_output->clones[i]);
|
||||
}
|
||||
|
||||
output->is_primary = (XID) meta_output_get_id (output) == primary_output;
|
||||
output->is_presentation = output_get_presentation_xrandr (output);
|
||||
output->is_underscanning = output_get_underscanning_xrandr (output);
|
||||
output->supports_underscanning =
|
||||
output_get_supports_underscanning_xrandr (output);
|
||||
output_get_backlight_limits_xrandr (output);
|
||||
|
||||
if (!(output->backlight_min == 0 && output->backlight_max == 0))
|
||||
output->backlight = output_get_backlight_xrandr (output);
|
||||
else
|
||||
output->backlight = -1;
|
||||
meta_output_set_backlight (output, output_get_backlight_xrandr (output));
|
||||
|
||||
if (output->n_modes == 0 || output->n_possible_crtcs == 0)
|
||||
{
|
||||
|
@ -125,7 +125,6 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
MetaGpu *gpu = meta_backend_test_get_gpu (backend_test);
|
||||
g_autoptr (GList) to_configure_outputs = NULL;
|
||||
g_autoptr (GList) to_configure_crtcs = NULL;
|
||||
GList *l;
|
||||
unsigned int i;
|
||||
|
||||
to_configure_outputs = g_list_copy (meta_gpu_get_outputs (gpu));
|
||||
@ -144,7 +143,6 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
}
|
||||
else
|
||||
{
|
||||
MetaOutput *output;
|
||||
unsigned int j;
|
||||
|
||||
meta_crtc_set_config (crtc,
|
||||
@ -154,41 +152,26 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
|
||||
for (j = 0; j < crtc_info->outputs->len; j++)
|
||||
{
|
||||
MetaOutput *output;
|
||||
MetaOutputInfo *output_info;
|
||||
|
||||
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
|
||||
|
||||
to_configure_outputs = g_list_remove (to_configure_outputs,
|
||||
output);
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
|
||||
output_info = meta_find_output_info (outputs, n_outputs, output);
|
||||
meta_output_assign_crtc (output, crtc, output_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < n_outputs; i++)
|
||||
{
|
||||
MetaOutputInfo *output_info = outputs[i];
|
||||
MetaOutput *output = output_info->output;
|
||||
|
||||
output->is_primary = output_info->is_primary;
|
||||
output->is_presentation = output_info->is_presentation;
|
||||
output->is_underscanning = output_info->is_underscanning;
|
||||
}
|
||||
|
||||
/* Disable CRTCs not mentioned in the list */
|
||||
for (l = to_configure_crtcs; l; l = l->next)
|
||||
{
|
||||
MetaCrtc *crtc = l->data;
|
||||
|
||||
meta_crtc_unset_config (crtc);
|
||||
}
|
||||
|
||||
/* Disable outputs not mentioned in the list */
|
||||
for (l = to_configure_outputs; l; l = l->next)
|
||||
{
|
||||
MetaOutput *output = l->data;
|
||||
|
||||
meta_output_unassign_crtc (output);
|
||||
output->is_primary = FALSE;
|
||||
}
|
||||
g_list_foreach (to_configure_crtcs,
|
||||
(GFunc) meta_crtc_unset_config,
|
||||
NULL);
|
||||
g_list_foreach (to_configure_outputs,
|
||||
(GFunc) meta_output_unassign_crtc,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -285,7 +285,7 @@ check_logical_monitor (MetaMonitorManager *monitor_manager,
|
||||
MetaOutput *output = l_output->data;
|
||||
MetaCrtc *crtc;
|
||||
|
||||
if (output->is_primary)
|
||||
if (meta_output_is_primary (output))
|
||||
{
|
||||
g_assert_null (primary_output);
|
||||
primary_output = output;
|
||||
@ -296,7 +296,7 @@ check_logical_monitor (MetaMonitorManager *monitor_manager,
|
||||
meta_monitor_get_logical_monitor (monitor) == logical_monitor);
|
||||
g_assert_cmpint (logical_monitor->is_presentation,
|
||||
==,
|
||||
output->is_presentation);
|
||||
meta_output_is_presentation (output));
|
||||
}
|
||||
}
|
||||
|
||||
@ -370,7 +370,7 @@ check_monitor_configuration (MonitorTestCaseExpect *expect)
|
||||
g_assert (output == output_from_winsys_id (backend, winsys_id));
|
||||
g_assert_cmpint (expect->monitors[i].is_underscanning,
|
||||
==,
|
||||
output->is_underscanning);
|
||||
meta_output_is_underscanning (output));
|
||||
}
|
||||
|
||||
meta_monitor_get_physical_dimensions (monitor, &width_mm, &height_mm);
|
||||
@ -655,7 +655,15 @@ create_monitor_test_setup (MonitorTestCaseSetup *setup,
|
||||
NULL);
|
||||
|
||||
if (crtc)
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
{
|
||||
MetaOutputInfo output_info;
|
||||
|
||||
output_info = (MetaOutputInfo) {
|
||||
.is_underscanning = setup->outputs[i].is_underscanning,
|
||||
};
|
||||
meta_output_assign_crtc (output, crtc, &output_info);
|
||||
}
|
||||
|
||||
output->name = (is_laptop_panel ? g_strdup_printf ("eDP-%d",
|
||||
++n_laptop_panels)
|
||||
: g_strdup_printf ("DP-%d",
|
||||
@ -676,11 +684,9 @@ create_monitor_test_setup (MonitorTestCaseSetup *setup,
|
||||
output->possible_crtcs = possible_crtcs;
|
||||
output->n_possible_clones = 0;
|
||||
output->possible_clones = NULL;
|
||||
output->backlight = -1;
|
||||
output->connector_type = (is_laptop_panel ? META_CONNECTOR_TYPE_eDP
|
||||
: META_CONNECTOR_TYPE_DisplayPort);
|
||||
output->tile_info = setup->outputs[i].tile_info;
|
||||
output->is_underscanning = setup->outputs[i].is_underscanning;
|
||||
output->panel_orientation_transform =
|
||||
setup->outputs[i].panel_orientation_transform;
|
||||
output->driver_private = output_test;
|
||||
|
Loading…
Reference in New Issue
Block a user