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:
@ -470,3 +470,14 @@ meta_crtc_config_new (graphene_rect_t *layout,
|
|||||||
|
|
||||||
return config;
|
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,
|
void (* set_config) (MetaCrtc *crtc,
|
||||||
const MetaCrtcConfig *config,
|
const MetaCrtcConfig *config,
|
||||||
gpointer backend_private);
|
gpointer backend_private);
|
||||||
|
|
||||||
|
gboolean (* is_leased) (MetaCrtc *crtc);
|
||||||
};
|
};
|
||||||
|
|
||||||
META_EXPORT_TEST
|
META_EXPORT_TEST
|
||||||
@ -132,4 +134,6 @@ MetaCrtcConfig * meta_crtc_config_new (graphene_rect_t *layout,
|
|||||||
MetaCrtcMode *mode,
|
MetaCrtcMode *mode,
|
||||||
MetaMonitorTransform transform);
|
MetaMonitorTransform transform);
|
||||||
|
|
||||||
|
gboolean meta_crtc_is_leased (MetaCrtc *crtc);
|
||||||
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaGammaLut, meta_gamma_lut_free)
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaGammaLut, meta_gamma_lut_free)
|
||||||
|
@ -99,6 +99,9 @@ is_crtc_assigned (MetaCrtc *crtc,
|
|||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
if (meta_crtc_is_leased (crtc))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
for (i = 0; i < crtc_assignments->len; i++)
|
for (i = 0; i < crtc_assignments->len; i++)
|
||||||
{
|
{
|
||||||
MetaCrtcAssignment *assigned_crtc_assignment =
|
MetaCrtcAssignment *assigned_crtc_assignment =
|
||||||
|
@ -326,6 +326,15 @@ meta_crtc_kms_set_config (MetaCrtc *crtc,
|
|||||||
crtc_kms->assigned_cursor_plane = kms_assignment->cursor_plane;
|
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
|
static gboolean
|
||||||
meta_crtc_kms_is_transform_handled (MetaCrtcNative *crtc_native,
|
meta_crtc_kms_is_transform_handled (MetaCrtcNative *crtc_native,
|
||||||
MetaMonitorTransform transform)
|
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->set_gamma_lut = meta_crtc_kms_set_gamma_lut;
|
||||||
crtc_class->assign_extra = meta_crtc_kms_assign_extra;
|
crtc_class->assign_extra = meta_crtc_kms_assign_extra;
|
||||||
crtc_class->set_config = meta_crtc_kms_set_config;
|
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_transform_handled = meta_crtc_kms_is_transform_handled;
|
||||||
crtc_native_class->is_hw_cursor_supported = meta_crtc_kms_is_hw_cursor_supported;
|
crtc_native_class->is_hw_cursor_supported = meta_crtc_kms_is_hw_cursor_supported;
|
||||||
|
@ -50,6 +50,8 @@ struct _MetaKmsCrtc
|
|||||||
MetaKmsCrtcState current_state;
|
MetaKmsCrtcState current_state;
|
||||||
|
|
||||||
MetaKmsCrtcPropTable prop_table;
|
MetaKmsCrtcPropTable prop_table;
|
||||||
|
|
||||||
|
gboolean is_leased;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (MetaKmsCrtc, meta_kms_crtc, G_TYPE_OBJECT)
|
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;
|
return crtc->current_state.is_active;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_kms_crtc_is_leased (MetaKmsCrtc *crtc)
|
||||||
|
{
|
||||||
|
return crtc->is_leased;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_crtc_gamma (MetaKmsCrtc *crtc,
|
read_crtc_gamma (MetaKmsCrtc *crtc,
|
||||||
MetaKmsCrtcState *crtc_state,
|
MetaKmsCrtcState *crtc_state,
|
||||||
|
@ -65,3 +65,5 @@ int meta_kms_crtc_get_idx (MetaKmsCrtc *crtc);
|
|||||||
|
|
||||||
META_EXPORT_TEST
|
META_EXPORT_TEST
|
||||||
gboolean meta_kms_crtc_is_active (MetaKmsCrtc *crtc);
|
gboolean meta_kms_crtc_is_active (MetaKmsCrtc *crtc);
|
||||||
|
|
||||||
|
gboolean meta_kms_crtc_is_leased (MetaKmsCrtc *crtc);
|
||||||
|
Reference in New Issue
Block a user