Retain drm_plane tracking objects for all actual DRM planes when using universal planes, not just overlay planes.
These are currently unused. v2: Rename sprite_list to plane_list. Signed-off-by: Daniel Stone <dani...@collabora.com> --- src/compositor-drm.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/compositor-drm.c b/src/compositor-drm.c index 09fb3af..d0d419f 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -157,7 +157,7 @@ struct drm_compositor { uint32_t min_height, max_height; int no_addfb2; - struct wl_list sprite_list; + struct wl_list plane_list; int sprites_are_broken; int sprites_hidden; @@ -1043,13 +1043,16 @@ drm_output_repaint(struct weston_output *output_base, /* * Now, update all the sprite surfaces */ - wl_list_for_each(s, &compositor->sprite_list, link) { + wl_list_for_each(s, &compositor->plane_list, link) { uint32_t flags = 0, fb_id = 0; drmVBlank vbl = { .request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT, .request.sequence = 1, }; + if (s->type != WDRM_PLANE_TYPE_OVERLAY) + continue; + if ((!s->current && !s->next) || !drm_plane_crtc_supported(output, s->possible_crtcs)) continue; @@ -1284,10 +1287,13 @@ drm_output_prepare_overlay_view(struct drm_output *output, if (!drm_view_transform_supported(ev)) return NULL; - wl_list_for_each(p, &c->sprite_list, link) { + wl_list_for_each(p, &c->plane_list, link) { if (!drm_plane_crtc_supported(output, p->possible_crtcs)) continue; + if (p->type != WDRM_PLANE_TYPE_OVERLAY) + continue; + if (!p->next) { found = 1; break; @@ -2788,7 +2794,7 @@ drm_plane_create(struct drm_compositor *ec, const drmModePlane *kplane) plane->type = WDRM_PLANE_TYPE_OVERLAY; weston_plane_init(&plane->base, &ec->base, 0, 0); - wl_list_insert(&ec->sprite_list, &plane->link); + wl_list_insert(&ec->plane_list, &plane->link); return plane; } @@ -2851,15 +2857,10 @@ create_sprites(struct drm_compositor *ec) if (!drm_plane) continue; - /* Ignore non-overlay planes for now. */ - if (drm_plane->type != WDRM_PLANE_TYPE_OVERLAY) { - drm_plane_destroy(drm_plane); - continue; - } - - weston_compositor_stack_plane(&ec->base, - &drm_plane->base, - &ec->base.primary_plane); + if (drm_plane->type == WDRM_PLANE_TYPE_OVERLAY) + weston_compositor_stack_plane(&ec->base, + &drm_plane->base, + &ec->base.primary_plane); } drmModeFreePlaneResources(kplane_res); @@ -2877,7 +2878,7 @@ destroy_sprites(struct drm_compositor *compositor) { struct drm_plane *plane, *next; - wl_list_for_each_safe(plane, next, &compositor->sprite_list, link) + wl_list_for_each_safe(plane, next, &compositor->plane_list, link) drm_plane_destroy(plane); } @@ -3147,11 +3148,15 @@ session_notify(struct wl_listener *listener, void *data) output = container_of(ec->base.output_list.next, struct drm_output, base.link); - wl_list_for_each(sprite, &ec->sprite_list, link) + wl_list_for_each(sprite, &ec->plane_list, link) { + if (sprite->type != WDRM_PLANE_TYPE_OVERLAY) + continue; + drmModeSetPlane(ec->drm.fd, sprite->plane_id, output->crtc_id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + } }; } @@ -3491,7 +3496,7 @@ drm_compositor_create(struct wl_display *display, MODIFIER_CTRL | MODIFIER_ALT, switch_vt_binding, ec); - wl_list_init(&ec->sprite_list); + wl_list_init(&ec->plane_list); create_sprites(ec); if (udev_input_init(&ec->input, -- 2.4.3 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel