[PATCH weston v2] compositor-drm: Don't drop viewported surfaces into the cursor plane

Derek Foreman derekf at osg.samsung.com
Fri Sep 30 20:06:44 UTC 2016


No good can come of this... the cursor plane's constraints are too
heavy to make bothering with this worthwhile.

To see the bug this fixes, set your output scale to 2 and then
launch weston-scaler -s and perform an action that makes the cursor
disappear (such as typing in a weston terminal the cursor is over
top of).

The problem is that we don't implement cropping in the copy to the
cursor bo, and the cursor plane can't scale.  So viewport features
are unimplemented or unimplementable for cursor planes.

Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
---

Changes from v1:
Simplify the check to just testing widths for -1

 libweston/compositor-drm.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 8319d7c..8b62c20 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -1142,6 +1142,15 @@ drm_output_prepare_cursor_view(struct drm_output *output,
 		return NULL;
 	if (viewport->buffer.scale != output->base.current_scale)
 		return NULL;
+	/* If either of the viewport widths are not -1 then we're
+	 * using a viewport.  currently cursor_bo_update doesn't
+	 * handle crops, and cursor planes don't handle scale,
+	 * so don't put a viewported surface into a cursor plane.
+	 */
+	if (wl_fixed_to_int(viewport->buffer.src_width) != -1)
+		return NULL;
+	if (viewport->surface.width != -1)
+		return NULL;
 	if (output->cursor_view)
 		return NULL;
 	if (ev->output_mask != (1u << output->base.id))
-- 
2.9.3



More information about the wayland-devel mailing list