1*4882a593SmuzhiyunFrom a9957e4c4984438aa15dca4d2164a3dd9b1c8897 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Thu, 30 Jun 2022 09:16:58 +0800 4*4882a593SmuzhiyunSubject: [PATCH 72/92] backend-drm: Don't try to prepare non-cursor view in 5*4882a593Smuzhiyun renderer-only mode 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunIt would fail out in the later check anyway. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 10*4882a593Smuzhiyun--- 11*4882a593Smuzhiyun libweston/backend-drm/state-propose.c | 15 +++++++++++++++ 12*4882a593Smuzhiyun 1 file changed, 15 insertions(+) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyundiff --git a/libweston/backend-drm/state-propose.c b/libweston/backend-drm/state-propose.c 15*4882a593Smuzhiyunindex 69d49bc..b2f0f53 100644 16*4882a593Smuzhiyun--- a/libweston/backend-drm/state-propose.c 17*4882a593Smuzhiyun+++ b/libweston/backend-drm/state-propose.c 18*4882a593Smuzhiyun@@ -438,6 +438,14 @@ dmabuf_feedback_maybe_update(struct drm_device *device, struct weston_view *ev, 19*4882a593Smuzhiyun return true; 20*4882a593Smuzhiyun } 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun+static struct weston_layer * 23*4882a593Smuzhiyun+get_view_layer(struct weston_view *view) 24*4882a593Smuzhiyun+{ 25*4882a593Smuzhiyun+ if (view->parent_view) 26*4882a593Smuzhiyun+ return get_view_layer(view->parent_view); 27*4882a593Smuzhiyun+ return view->layer_link.layer; 28*4882a593Smuzhiyun+} 29*4882a593Smuzhiyun+ 30*4882a593Smuzhiyun static struct drm_plane_state * 31*4882a593Smuzhiyun drm_output_find_plane_for_view(struct drm_output_state *state, 32*4882a593Smuzhiyun struct weston_paint_node *pnode, 33*4882a593Smuzhiyun@@ -453,6 +461,7 @@ drm_output_find_plane_for_view(struct drm_output_state *state, 34*4882a593Smuzhiyun struct drm_plane *plane; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun struct weston_view *ev = pnode->view; 37*4882a593Smuzhiyun+ struct weston_layer *layer; 38*4882a593Smuzhiyun struct weston_buffer *buffer; 39*4882a593Smuzhiyun struct drm_fb *fb = NULL; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun@@ -468,6 +477,12 @@ drm_output_find_plane_for_view(struct drm_output_state *state, 42*4882a593Smuzhiyun return NULL; 43*4882a593Smuzhiyun } 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun+ /* only allow cursor in renderer-only mode */ 46*4882a593Smuzhiyun+ layer = get_view_layer(ev); 47*4882a593Smuzhiyun+ if (mode == DRM_OUTPUT_PROPOSE_STATE_RENDERER_ONLY && 48*4882a593Smuzhiyun+ layer->position != WESTON_LAYER_POSITION_CURSOR) 49*4882a593Smuzhiyun+ return NULL; 50*4882a593Smuzhiyun+ 51*4882a593Smuzhiyun buffer = ev->surface->buffer_ref.buffer; 52*4882a593Smuzhiyun if (buffer->type == WESTON_BUFFER_SOLID) { 53*4882a593Smuzhiyun pnode->try_view_on_plane_failure_reasons |= 54*4882a593Smuzhiyun-- 55*4882a593Smuzhiyun2.20.1 56*4882a593Smuzhiyun 57