From e08df8e9e55ab7c9def0bb28cd2d4c684f1d6d0f Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Thu, 30 Jun 2022 09:16:58 +0800 Subject: [PATCH 73/74] backend-drm: Don't try to prepare non-cursor view in renderer-only mode It would fail out in the later check anyway. Signed-off-by: Jeffy Chen --- libweston/backend-drm/state-propose.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libweston/backend-drm/state-propose.c b/libweston/backend-drm/state-propose.c index 48e6de2..961efc0 100644 --- a/libweston/backend-drm/state-propose.c +++ b/libweston/backend-drm/state-propose.c @@ -695,6 +695,14 @@ dmabuf_feedback_maybe_update(struct drm_backend *b, struct weston_view *ev, return true; } +static struct weston_layer * +get_view_layer(struct weston_view *view) +{ + if (view->parent_view) + return get_view_layer(view->parent_view); + return view->layer_link.layer; +} + static struct drm_plane_state * drm_output_prepare_plane_view(struct drm_output_state *state, struct weston_view *ev, @@ -711,6 +719,7 @@ drm_output_prepare_plane_view(struct drm_output_state *state, struct drm_plane_zpos *p_zpos, *p_zpos_next; struct wl_list zpos_candidate_list; + struct weston_layer *layer; struct weston_buffer *buffer; struct wl_shm_buffer *shmbuf; struct drm_fb *fb; @@ -721,6 +730,12 @@ drm_output_prepare_plane_view(struct drm_output_state *state, if (!weston_view_has_valid_buffer(ev)) return ps; + /* only allow cursor in renderer-only mode */ + layer = get_view_layer(ev); + if (mode == DRM_OUTPUT_PROPOSE_STATE_RENDERER_ONLY && + layer->position != WESTON_LAYER_POSITION_CURSOR) + return NULL; + buffer = ev->surface->buffer_ref.buffer; shmbuf = wl_shm_buffer_get(buffer->resource); fb = drm_fb_get_from_view(state, ev, try_view_on_plane_failure_reasons); -- 2.20.1