1
0
Fork 0

native/crtc-kms: Don't assign leased primary planes to CRTCs

When a plane is leased, it is assigned to a CRTC which is leased. When
trying to find a primary plane for a modeset, skip the assigned planes
on leased CRTCs to avoid sharing the resources with the leased process.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3746>
This commit is contained in:
Sebastian Wick 2024-01-16 16:47:16 +01:00 committed by Marge Bot
parent af8ef6cf02
commit 647f45bfa6

View file

@ -256,6 +256,25 @@ is_plane_assigned (MetaKmsPlane *plane,
return FALSE;
}
static gboolean
is_plane_leased (MetaKmsDevice *kms_device,
MetaKmsPlane *kms_plane)
{
GList *l;
for (l = meta_kms_device_get_crtcs (kms_device); l; l = l->next)
{
MetaKmsCrtc *kms_crtc = l->data;
MetaCrtcKms *crtc_kms = meta_crtc_kms_from_kms_crtc (kms_crtc);
if (meta_kms_crtc_is_leased (kms_crtc) &&
crtc_kms->assigned_primary_plane == kms_plane)
return TRUE;
}
return FALSE;
}
static MetaKmsPlane *
find_unassigned_plane (MetaCrtcKms *crtc_kms,
MetaKmsPlaneType kms_plane_type,
@ -279,6 +298,9 @@ find_unassigned_plane (MetaCrtcKms *crtc_kms,
crtc_assignments))
continue;
if (is_plane_leased (kms_device, kms_plane))
continue;
return kms_plane;
}