raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=c7d0d6e6c9e7a3179af67ece78505a79bd02ad5b

commit c7d0d6e6c9e7a3179af67ece78505a79bd02ad5b
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Mon Sep 30 22:07:46 2019 +0100

    e - wl dmabuf - handle versioning for modifiers
    
    this syncs with what weston does in handling versioning for modifiers.
---
 src/bin/e_comp_wl_dmabuf.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/bin/e_comp_wl_dmabuf.c b/src/bin/e_comp_wl_dmabuf.c
index 61cb0fe1b..4e0276732 100644
--- a/src/bin/e_comp_wl_dmabuf.c
+++ b/src/bin/e_comp_wl_dmabuf.c
@@ -40,6 +40,10 @@
 
 #include "linux-dmabuf-unstable-v1-server-protocol.h"
 
+#ifndef DRM_FORMAT_MOD_LINEAR
+# define DRM_FORMAT_MOD_LINEAR 0
+#endif
+
 static void
 linux_dmabuf_buffer_destroy(struct linux_dmabuf_buffer *buffer)
 {
@@ -117,7 +121,10 @@ 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) |
+       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++;
 }
@@ -512,11 +519,17 @@ bind_linux_dmabuf(struct wl_client *client,
                        modifiers = &modifier_invalid;
                }
                for (j = 0; j < num_modifiers; j++) {
-                       uint32_t modifier_lo = modifiers[j] & 0xFFFFFFFF;
-                       uint32_t modifier_hi = modifiers[j] >> 32;
-                       zwp_linux_dmabuf_v1_send_modifier(resource, formats[i],
-                                                         modifier_hi,
-                                                         modifier_lo);
+                       if (version >= 
ZWP_LINUX_DMABUF_V1_MODIFIER_SINCE_VERSION) {
+                               uint32_t modifier_lo = modifiers[j] & 
0xFFFFFFFF;
+                               uint32_t modifier_hi = modifiers[j] >> 32;
+                               zwp_linux_dmabuf_v1_send_modifier(resource, 
formats[i],
+                                                                 modifier_hi,
+                                                                 modifier_lo);
+                       } else if (modifiers[j] == DRM_FORMAT_MOD_LINEAR ||
+                                  modifiers == &modifier_invalid) {
+                               zwp_linux_dmabuf_v1_send_format(resource,
+                                                               formats[i]);
+                       }
                }
                if (modifiers != &modifier_invalid)
                        free(modifiers);

-- 


Reply via email to