Please disregard, I misunderstood a comment in the bug tracker and this has been posted here before.

Sorry for the line noise.

On 2017-11-14 09:39 AM, Derek Foreman wrote:
When queryImage doesn't support __DRI_IMAGE_ATTRIB_FOURCC wayland clients
will die with a NULL derefence in wl_proxy_add_listener.

Attempt to provide a simple fallback to keep ancient systems working.

Signed-off-by: Derek Foreman <[email protected]>
---
  src/egl/drivers/dri2/platform_wayland.c | 32 ++++++++++++++++++++++++++++++--
  1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/src/egl/drivers/dri2/platform_wayland.c 
b/src/egl/drivers/dri2/platform_wayland.c
index b38eb1c335..7010dfdcb2 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -671,6 +671,35 @@ static const struct wl_callback_listener throttle_listener 
= {
     .done = wayland_throttle_callback
  };
+static EGLBoolean
+get_fourcc(struct dri2_egl_display *dri2_dpy,
+           __DRIimage *image, int *fourcc)
+{
+   EGLBoolean query;
+   uint32_t dri_format;
+
+   query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FOURCC,
+                                       fourcc);
+   if (query)
+      return true;
+
+   query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FORMAT,
+                                       &dri_format);
+   if (!query)
+      return false;
+
+   switch (dri_format) {
+   case __DRI_IMAGE_FORMAT_ARGB8888:
+      *fourcc = __DRI_IMAGE_FOURCC_ARGB8888;
+      return true;
+   case __DRI_IMAGE_FORMAT_XRGB8888:
+      *fourcc = __DRI_IMAGE_FOURCC_XRGB8888;
+      return true;
+   default:
+      return false;
+   }
+}
+
  static struct wl_buffer *
  create_wl_buffer(struct dri2_egl_display *dri2_dpy,
                   struct dri2_egl_surface *dri2_surf,
@@ -684,8 +713,7 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
     query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_WIDTH, 
&width);
     query &= dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_HEIGHT,
                                          &height);
-   query &= dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FOURCC,
-                                        &fourcc);
+   query &= get_fourcc(dri2_dpy, image, &fourcc);
     if (!query)
        return NULL;

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to