1
0
Fork 0

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:
Sebastian Wick 2024-01-16 16:37:49 +01:00 committed by Marge Bot
parent 46493a986b
commit af8ef6cf02
3 changed files with 23 additions and 4 deletions

View file

@ -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);
}

View file

@ -56,6 +56,8 @@ struct _MetaCrtcClass
const MetaCrtcConfig *config,
gpointer backend_private);
void (* unset_config) (MetaCrtc *crtc);
gboolean (* is_leased) (MetaCrtc *crtc);
};

View file

@ -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;