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:
parent
af8ef6cf02
commit
647f45bfa6
1 changed files with 22 additions and 0 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue