native/crtc-kms: Unset config of CRTCs which are not part of a modeset
This allows us to keep track when primary and cursor plane assignments on a CRTC are unassigned. With this commit, all planes which are assigned are actually in use and can't be assigned to anything else. We'll make use of that fact when we search for a leasable primary plane. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3746>
This commit is contained in:
parent
46493a986b
commit
af8ef6cf02
3 changed files with 23 additions and 4 deletions
|
@ -130,6 +130,10 @@ void
|
|||
meta_crtc_unset_config (MetaCrtc *crtc)
|
||||
{
|
||||
MetaCrtcPrivate *priv = meta_crtc_get_instance_private (crtc);
|
||||
MetaCrtcClass *klass = META_CRTC_GET_CLASS (crtc);
|
||||
|
||||
if (klass->unset_config)
|
||||
klass->unset_config (crtc);
|
||||
|
||||
g_clear_pointer (&priv->config, g_free);
|
||||
}
|
||||
|
|
|
@ -56,6 +56,8 @@ struct _MetaCrtcClass
|
|||
const MetaCrtcConfig *config,
|
||||
gpointer backend_private);
|
||||
|
||||
void (* unset_config) (MetaCrtc *crtc);
|
||||
|
||||
gboolean (* is_leased) (MetaCrtc *crtc);
|
||||
};
|
||||
|
||||
|
|
|
@ -206,6 +206,15 @@ meta_crtc_kms_set_gamma_lut (MetaCrtc *crtc,
|
|||
clutter_stage_schedule_update (CLUTTER_STAGE (stage));
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
typedef struct _CrtcKmsAssignment
|
||||
{
|
||||
MetaKmsPlane *primary_plane;
|
||||
|
@ -326,13 +335,16 @@ 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)
|
||||
static void
|
||||
meta_crtc_kms_unset_config (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);
|
||||
if (meta_crtc_kms_is_leased (crtc))
|
||||
return;
|
||||
|
||||
crtc_kms->assigned_primary_plane = NULL;
|
||||
crtc_kms->assigned_cursor_plane = NULL;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -485,6 +497,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->unset_config = meta_crtc_kms_unset_config;
|
||||
crtc_class->is_leased = meta_crtc_kms_is_leased;
|
||||
|
||||
crtc_native_class->is_transform_handled = meta_crtc_kms_is_transform_handled;
|
||||
|
|
Loading…
Add table
Reference in a new issue