modifier_hi and modifier_lo are set to 0 by clients,
which are not supporting modifiers. Modifier attributes
of buffers of these clients set to 0 too in linux-dmabuf.c

import_simple_dmabuf function in gl-renderer.c compares
modifier attribute of the buffer with DRM_FORMAT_MOD_INVALID.
DRM_FORMAT_MOD_INVALID is equal to ((1ULL<<56) - 1).
Therefore, modifer 0 is accepted as valid. Then, the function
checks support for eglQueryDmaBufModifiersEXT.
If it is not supported import_simple_dmabuf function is returning
NULL.

This patch sets the modifier attribute to DRM_FORMAT_MOD_INVALID
for clients which are not supporting modifiers. Without this patch
linux-dmabuf protocol is not working for not supporting clients.

Fixes: b138d7afb3a2a7d51dccb12f08d70c2d86766901 ("gl-renderer: Ignore INVALID 
modifier")
Signed-off-by: Emre Ucan <eu...@de.adit-jv.com>
---
 libweston/gl-renderer.c  | 2 +-
 libweston/linux-dmabuf.c | 9 +++++++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/libweston/gl-renderer.c b/libweston/gl-renderer.c
index abf556f..84a2cda 100644
--- a/libweston/gl-renderer.c
+++ b/libweston/gl-renderer.c
@@ -2156,7 +2156,7 @@ gl_renderer_import_dmabuf(struct weston_compositor *ec,
 
        for (i = 0; i < dmabuf->attributes.n_planes; i++) {
                /* return if EGL doesn't support import modifiers */
-               if (dmabuf->attributes.modifier[i] != 0)
+               if (dmabuf->attributes.modifier[i] != DRM_FORMAT_MOD_INVALID)
                        if (!gr->has_dmabuf_import_modifiers)
                                return false;
 
diff --git a/libweston/linux-dmabuf.c b/libweston/linux-dmabuf.c
index d81b63d..5970584 100644
--- a/libweston/linux-dmabuf.c
+++ b/libweston/linux-dmabuf.c
@@ -111,8 +111,13 @@ params_add(struct wl_client *client,
        buffer->attributes.fd[plane_idx] = name_fd;
        buffer->attributes.offset[plane_idx] = offset;
        buffer->attributes.stride[plane_idx] = stride;
-       buffer->attributes.modifier[plane_idx] = ((uint64_t)modifier_hi << 32) |
-                                                modifier_lo;
+
+       if (wl_resource_get_version(params_resource) < 
ZWP_LINUX_DMABUF_V1_MODIFIER_SINCE_VERSION)
+               buffer->attributes.modifier[plane_idx] = DRM_FORMAT_MOD_INVALID;
+       else
+               buffer->attributes.modifier[plane_idx] = ((uint64_t)modifier_hi 
<< 32) |
+                                                        modifier_lo;
+
        buffer->attributes.n_planes++;
 }
 
-- 
2.7.4

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to