From c8890125adcc3c0cebb217197fa6ace00d4b710f Mon Sep 17 00:00:00 2001 From: Micah Fedke Date: Wed, 1 Feb 2017 15:28:23 -0500 Subject: [PATCH] compositor-drm: don't put y-inverted / interlaced / bottom-first dmabufs on overlays This patch checks the attribute flags on incoming dmabufs and refuses to put them overlays if they have any of the flags set (currently: ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT, ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_INTERLACED and ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_BOTTOM_FIRST), instead defaulting to the gl-renderer which can handle some of the flags. This check should be superceded by buffer transforms, when they become available. Reviewed-by: Pekka Paalanen --- libweston/compositor-drm.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c index 564e3244..a16136d3 100644 --- a/libweston/compositor-drm.c +++ b/libweston/compositor-drm.c @@ -60,6 +60,7 @@ #include "vaapi-recorder.h" #include "presentation-time-server-protocol.h" #include "linux-dmabuf.h" +#include "linux-dmabuf-unstable-v1-server-protocol.h" #ifndef DRM_CAP_TIMESTAMP_MONOTONIC #define DRM_CAP_TIMESTAMP_MONOTONIC 0x6 @@ -1016,7 +1017,18 @@ drm_output_prepare_overlay_view(struct drm_output *output, .format = dmabuf->attributes.format }; - if (dmabuf->attributes.n_planes != 1 || dmabuf->attributes.offset[0] != 0) + /* XXX: TODO: + * + * Currently the buffer is rejected if any dmabuf attribute + * flag is set. This keeps us from passing an inverted / + * interlaced / bottom-first buffer (or any other type that may + * be added in the future) through to an overlay. Ultimately, + * these types of buffers should be handled through buffer + * transforms and not as spot-checks requiring specific + * knowledge. */ + if (dmabuf->attributes.n_planes != 1 || + dmabuf->attributes.offset[0] != 0 || + dmabuf->attributes.flags) return NULL; bo = gbm_bo_import(b->gbm, GBM_BO_IMPORT_FD, &gbm_dmabuf,