backend-drm: fix plane sorting
The planes in the plane_list must be sorted from largest zpos_max to smallest. Currently the plane order is only correct when the planes are already ordered and added starting with the smallest zpos_max. This works accidentally in most cases because the primary plane is usually first and there is often only one overlay plane or the zpos is sufficiantly configurable. To fix this, insert a new plane before the first plane with a smaller zpos_max. And if none is found, insert it at the end of the list. Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
This commit is contained in:
parent
4990e28ff2
commit
4cde507be6
@ -840,13 +840,13 @@ drm_plane_create(struct drm_device *device, const drmModePlane *kplane)
|
||||
weston_plane_init(&plane->base, compositor, 0, 0);
|
||||
|
||||
wl_list_for_each(tmp, &device->plane_list, link) {
|
||||
if (tmp->zpos_max > plane->zpos_max) {
|
||||
if (tmp->zpos_max < plane->zpos_max) {
|
||||
wl_list_insert(tmp->link.prev, &plane->link);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (plane->link.next == NULL)
|
||||
wl_list_insert(&device->plane_list, &plane->link);
|
||||
wl_list_insert(device->plane_list.prev, &plane->link);
|
||||
|
||||
return plane;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user