wayland-dma-buf: Don't send modifiers to old clients
authorDaniel Stone <daniels@collabora.com>
Mon, 2 Oct 2017 15:46:17 +0000 (16:46 +0100)
committerJeremy Bicha <jbicha@debian.org>
Sat, 21 Oct 2017 23:47:22 +0000 (00:47 +0100)
The modifier event was only added in v3 of the client; sending it to
older clients (e.g. GStreamer waylandsink) causes them to disconnect
immediately.

Send the older 'format' event to all clients, and only send the newer
'modifier' event to resource versions 3 or above.

https://bugzilla.gnome.org/show_bug.cgi?id=788558

Gbp-Pq: Name 0001-wayland-dma-buf-Don-t-send-modifiers-to-old-clients.patch

src/wayland/meta-wayland-dma-buf.c

index e5d2f7c35a878d9ddb7dbe72b06601bf0b56b8df..76b8aa2196d39249cafbd1d65700bc8af8ee6eb8 100644 (file)
@@ -473,12 +473,19 @@ send_modifiers (struct wl_resource *resource,
   gboolean ret;
   int i;
 
+  zwp_linux_dmabuf_v1_send_format (resource, format);
+
+  /* The modifier event was only added in v3; v1 and v2 only have the format
+   * event. */
+  if (wl_resource_get_version (resource) < ZWP_LINUX_DMABUF_V1_MODIFIER_SINCE_VERSION)
+    return;
+
   /* First query the number of available modifiers, then allocate an array,
    * then fill the array. */
   ret = meta_egl_query_dma_buf_modifiers (egl, egl_display, format, 0, NULL,
                                           NULL, &num_modifiers, NULL);
   if (!ret || num_modifiers == 0)
-     return;
+    return;
 
   modifiers = g_new0 (uint64_t, num_modifiers);
   ret = meta_egl_query_dma_buf_modifiers (egl, egl_display, format,