[PATCH] compositor-drm: fix z-order inversion in plane assignment
Daniel Stone
daniel at fooishbar.org
Tue Sep 5 14:00:13 UTC 2017
Hi Matt,
On 24 August 2017 at 15:24, Matt Hoosier <matt.hoosier at gmail.com> wrote:
> @@ -1545,10 +1548,22 @@ drm_assign_planes(struct weston_output *output_base, void *repaint_data)
> next_plane = primary;
> if (next_plane == NULL)
> next_plane = drm_output_prepare_cursor_view(output, ev);
> - if (next_plane == NULL)
> +
> + /* If a higher-stacked view already got assigned to scanout, it's incorrect to
> + * assign a subsequent (lower-stacked) view to scanout.
> + */
> + if (next_plane == NULL && !picked_scanout) {
> next_plane = drm_output_prepare_scanout_view(output, ev);
> - if (next_plane == NULL)
> + if (next_plane)
> + picked_scanout = true;
> + }
> +
> + /* Similarly, it's incorrect to elevate a view to an overlay if some higher-stacked
> + * view is already identified as full-screen scanout.
> + */
> + if (next_plane == NULL && !picked_scanout)
> next_plane = drm_output_prepare_overlay_view(output, ev);
It can't be correct to raise it to the cursor plane either, since both
cursor and overlay planes strictly stack above the scanout plane. I
guess this would read a lot easier with:
if (picked_scanout)
next_plane = primary;
at the top of the loop.
Cheers,
Daniel
More information about the wayland-devel
mailing list