[Mesa-dev] [PATCH] egl/wayland: Add a fallback when fourcc query isn't supported

Eric Engestrom eric.engestrom at imgtec.com
Wed Nov 8 12:12:25 UTC 2017


On Wednesday, 2017-11-08 11:56:12 +0000, Emil Velikov wrote:
> From: Derek Foreman <derekf at osg.samsung.com>
> 
> 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.
> 
> Fixes: 6595c699511 ("egl/wayland: Remove more surface specifics from
> create_wl_buffer")
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103519
> Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
> Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
> Acked-by: Daniel Stone <daniels at collabora.com>

Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>

> ---
>  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 b38eb1c3354..7010dfdcb2b 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;
>  
> -- 
> 2.14.1
> 


More information about the mesa-dev mailing list