monitor-config-manager: Consider leased CRTCs assigned

With leasing, we will give another client control over connectors but
they also need a CRTC to drive them. Those CRTCs won't be available to
the desktop/monitor-manager.

Co-authored-by: Sebastian Wick <sebastian.wick@redhat.com>
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3746>
This commit is contained in:
Jonas Ådahl 2022-01-03 17:24:12 +01:00 committed by Marge Bot
parent a001dbae59
commit 498310ec7c
6 changed files with 38 additions and 0 deletions

View File

@ -470,3 +470,14 @@ meta_crtc_config_new (graphene_rect_t *layout,
return config;
}
gboolean
meta_crtc_is_leased (MetaCrtc *crtc)
{
MetaCrtcClass *klass = META_CRTC_GET_CLASS (crtc);
if (klass->is_leased)
return klass->is_leased (crtc);
else
return FALSE;
}

View File

@ -55,6 +55,8 @@ struct _MetaCrtcClass
void (* set_config) (MetaCrtc *crtc,
const MetaCrtcConfig *config,
gpointer backend_private);
gboolean (* is_leased) (MetaCrtc *crtc);
};
META_EXPORT_TEST
@ -132,4 +134,6 @@ MetaCrtcConfig * meta_crtc_config_new (graphene_rect_t *layout,
MetaCrtcMode *mode,
MetaMonitorTransform transform);
gboolean meta_crtc_is_leased (MetaCrtc *crtc);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaGammaLut, meta_gamma_lut_free)

View File

@ -99,6 +99,9 @@ is_crtc_assigned (MetaCrtc *crtc,
{
unsigned int i;
if (meta_crtc_is_leased (crtc))
return TRUE;
for (i = 0; i < crtc_assignments->len; i++)
{
MetaCrtcAssignment *assigned_crtc_assignment =

View File

@ -326,6 +326,15 @@ meta_crtc_kms_set_config (MetaCrtc *crtc,
crtc_kms->assigned_cursor_plane = kms_assignment->cursor_plane;
}
static gboolean
meta_crtc_kms_is_leased (MetaCrtc *crtc)
{
MetaCrtcKms *crtc_kms = META_CRTC_KMS (crtc);
MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms);
return meta_kms_crtc_is_leased (kms_crtc);
}
static gboolean
meta_crtc_kms_is_transform_handled (MetaCrtcNative *crtc_native,
MetaMonitorTransform transform)
@ -476,6 +485,7 @@ meta_crtc_kms_class_init (MetaCrtcKmsClass *klass)
crtc_class->set_gamma_lut = meta_crtc_kms_set_gamma_lut;
crtc_class->assign_extra = meta_crtc_kms_assign_extra;
crtc_class->set_config = meta_crtc_kms_set_config;
crtc_class->is_leased = meta_crtc_kms_is_leased;
crtc_native_class->is_transform_handled = meta_crtc_kms_is_transform_handled;
crtc_native_class->is_hw_cursor_supported = meta_crtc_kms_is_hw_cursor_supported;

View File

@ -50,6 +50,8 @@ struct _MetaKmsCrtc
MetaKmsCrtcState current_state;
MetaKmsCrtcPropTable prop_table;
gboolean is_leased;
};
G_DEFINE_TYPE (MetaKmsCrtc, meta_kms_crtc, G_TYPE_OBJECT)
@ -107,6 +109,12 @@ meta_kms_crtc_is_active (MetaKmsCrtc *crtc)
return crtc->current_state.is_active;
}
gboolean
meta_kms_crtc_is_leased (MetaKmsCrtc *crtc)
{
return crtc->is_leased;
}
static void
read_crtc_gamma (MetaKmsCrtc *crtc,
MetaKmsCrtcState *crtc_state,

View File

@ -65,3 +65,5 @@ int meta_kms_crtc_get_idx (MetaKmsCrtc *crtc);
META_EXPORT_TEST
gboolean meta_kms_crtc_is_active (MetaKmsCrtc *crtc);
gboolean meta_kms_crtc_is_leased (MetaKmsCrtc *crtc);