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:
parent
a001dbae59
commit
498310ec7c
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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 =
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user