compositor: Keep a z-ordered list of planes
This let us clear a plane's opaque region without adding code in the
backend, and will be used in a following commit to change how we track
damage.
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 3e93162..fa21495 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -920,26 +920,10 @@
{
struct drm_compositor *c =
(struct drm_compositor *) output->compositor;
- struct drm_output *drm_output = (struct drm_output *) output;
- struct drm_sprite *s;
struct weston_surface *es, *next;
pixman_region32_t overlap, surface_overlap;
struct weston_plane *primary, *next_plane;
- /* Reset the opaque region of the planes */
- pixman_region32_fini(&drm_output->cursor_plane.opaque);
- pixman_region32_init(&drm_output->cursor_plane.opaque);
- pixman_region32_fini(&drm_output->fb_plane.opaque);
- pixman_region32_init(&drm_output->fb_plane.opaque);
-
- wl_list_for_each (s, &c->sprite_list, link) {
- if (!drm_sprite_crtc_supported(output, s->possible_crtcs))
- continue;
-
- pixman_region32_fini(&s->plane.opaque);
- pixman_region32_init(&s->plane.opaque);
- }
-
/*
* Find a surface for each sprite in the output using some heuristics:
* 1) size
@@ -1643,6 +1627,10 @@
weston_plane_init(&output->cursor_plane, 0, 0);
weston_plane_init(&output->fb_plane, 0, 0);
+ weston_compositor_stack_plane(&ec->base, &output->cursor_plane, NULL);
+ weston_compositor_stack_plane(&ec->base, &output->fb_plane,
+ &ec->base.primary_plane);
+
weston_log("Output %s, (connector %d, crtc %d)\n",
output->name, output->connector_id, output->crtc_id);
wl_list_for_each(m, &output->base.mode_list, link)
@@ -1716,6 +1704,8 @@
plane->count_formats * sizeof(plane->formats[0]));
drmModeFreePlane(plane);
weston_plane_init(&sprite->plane, 0, 0);
+ weston_compositor_stack_plane(&ec->base, &sprite->plane,
+ &ec->base.primary_plane);
wl_list_insert(&ec->sprite_list, &sprite->link);
}