diff --git a/libweston/backend-drm/state-propose.c b/libweston/backend-drm/state-propose.c index 953e3a9f..8e6c0ed8 100644 --- a/libweston/backend-drm/state-propose.c +++ b/libweston/backend-drm/state-propose.c @@ -169,7 +169,6 @@ cursor_bo_update(struct drm_plane_state *plane_state, struct weston_view *ev) int i; assert(buffer && buffer->shm_buffer); - assert(buffer->shm_buffer == wl_shm_buffer_get(buffer->resource)); assert(buffer->width <= b->cursor_width); assert(buffer->height <= b->cursor_height); @@ -432,7 +431,6 @@ drm_output_find_plane_for_view(struct drm_output_state *state, struct weston_view *ev = pnode->view; struct weston_buffer *buffer; - struct wl_shm_buffer *shmbuf; struct drm_fb *fb = NULL; bool view_matches_entire_output, scanout_has_view_assigned; @@ -448,15 +446,16 @@ drm_output_find_plane_for_view(struct drm_output_state *state, } buffer = ev->surface->buffer_ref.buffer; - shmbuf = wl_shm_buffer_get(buffer->resource); - if (shmbuf) { + if (buffer->type == WESTON_BUFFER_SHM) { if (!output->cursor_plane || b->cursors_are_broken) { pnode->try_view_on_plane_failure_reasons |= FAILURE_REASONS_FB_FORMAT_INCOMPATIBLE; return NULL; } - if (wl_shm_buffer_get_format(shmbuf) != WL_SHM_FORMAT_ARGB8888) { + /* Even though this is a SHM buffer, pixel_format stores the + * format code as DRM FourCC */ + if (buffer->pixel_format->format != DRM_FORMAT_ARGB8888) { drm_debug(b, "\t\t\t\t[view] not placing view %p on " "plane; SHM buffers must be ARGB8888 for " "cursor view\n", ev); @@ -512,7 +511,7 @@ drm_output_find_plane_for_view(struct drm_output_state *state, switch (plane->type) { case WDRM_PLANE_TYPE_CURSOR: - assert(shmbuf); + assert(buffer->shm_buffer); assert(plane == output->cursor_plane); break; case WDRM_PLANE_TYPE_PRIMARY: @@ -959,7 +958,7 @@ drm_assign_planes(struct weston_output *output_base) */ if (b->use_pixman || (weston_view_has_valid_buffer(ev) && - (!wl_shm_buffer_get(ev->surface->buffer_ref.buffer->resource) || + (ev->surface->buffer_ref.buffer->type != WESTON_BUFFER_SHM || (ev->surface->width <= b->cursor_width && ev->surface->height <= b->cursor_height)))) ev->surface->keep_buffer = true;