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
@ -256,6 +256,25 @@ is_plane_assigned (MetaKmsPlane *plane,
|
|||||||
return FALSE;
|
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 *
|
static MetaKmsPlane *
|
||||||
find_unassigned_plane (MetaCrtcKms *crtc_kms,
|
find_unassigned_plane (MetaCrtcKms *crtc_kms,
|
||||||
MetaKmsPlaneType kms_plane_type,
|
MetaKmsPlaneType kms_plane_type,
|
||||||
@ -279,6 +298,9 @@ find_unassigned_plane (MetaCrtcKms *crtc_kms,
|
|||||||
crtc_assignments))
|
crtc_assignments))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (is_plane_leased (kms_device, kms_plane))
|
||||||
|
continue;
|
||||||
|
|
||||||
return kms_plane;
|
return kms_plane;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user