[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