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