Mesa (master): egl/wayland: Use visual map for buffer_from_image

Daniel Stone daniels at kemper.freedesktop.org
Fri Feb 9 16:25:42 UTC 2018


Module: Mesa
Branch: master
Commit: 3323ce72ff2d5de2fa7ad32d192c1a28ba8681e6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3323ce72ff2d5de2fa7ad32d192c1a28ba8681e6

Author: Daniel Stone <daniels at collabora.com>
Date:   Tue Feb  6 10:15:32 2018 +0000

egl/wayland: Use visual map for buffer_from_image

When creating a wl_buffer on an upstream Wayland display from an
existing EGLImage, use the dri2_wl_visual map rather than another
hardcoded list of formats.

Signed-off-by: Daniel Stone <daniels at collabora.com>
Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
Tested-by: Ilia Mirkin <imirkin at alum.mit.edu>

---

 src/egl/drivers/dri2/platform_wayland.c | 40 ++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 21 deletions(-)

diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
index 91434dbba0..28eba98092 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -116,7 +116,7 @@ dri2_wl_visual_idx_from_config(struct dri2_egl_display *dri2_dpy,
    dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_BLUE_MASK, &blue);
    dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_ALPHA_MASK, &alpha);
 
-   for (int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) {
+   for (unsigned int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) {
       const struct dri2_wl_visual *wl_visual = &dri2_wl_visuals[i];
 
       if (red == wl_visual->rgba_masks[0] &&
@@ -131,6 +131,17 @@ dri2_wl_visual_idx_from_config(struct dri2_egl_display *dri2_dpy,
 }
 
 static int
+dri2_wl_visual_idx_from_dri_image_format(uint32_t dri_image_format)
+{
+   for (int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) {
+      if (dri2_wl_visuals[i].dri_image_format == dri_image_format)
+         return i;
+   }
+
+   return -1;
+}
+
+static int
 roundtrip(struct dri2_egl_display *dri2_dpy)
 {
    return wl_display_roundtrip_queue(dri2_dpy->wl_dpy, dri2_dpy->wl_queue);
@@ -1042,29 +1053,16 @@ dri2_wl_create_wayland_buffer_from_image(_EGLDriver *drv,
    struct dri2_egl_image *dri2_img = dri2_egl_image(img);
    __DRIimage *image = dri2_img->dri_image;
    struct wl_buffer *buffer;
-   int format;
+   int format, visual_idx;
 
+   /* Check the upstream display supports this buffer's format. */
    dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FORMAT, &format);
-   switch (format) {
-   case __DRI_IMAGE_FORMAT_ARGB2101010:
-      if (!(dri2_dpy->formats & HAS_ARGB2101010))
-         goto bad_format;
-      break;
-   case __DRI_IMAGE_FORMAT_XRGB2101010:
-      if (!(dri2_dpy->formats & HAS_XRGB2101010))
-         goto bad_format;
-      break;
-   case __DRI_IMAGE_FORMAT_ARGB8888:
-      if (!(dri2_dpy->formats & HAS_ARGB8888))
-         goto bad_format;
-      break;
-   case __DRI_IMAGE_FORMAT_XRGB8888:
-      if (!(dri2_dpy->formats & HAS_XRGB8888))
-         goto bad_format;
-      break;
-   default:
+   visual_idx = dri2_wl_visual_idx_from_dri_image_format(format);
+   if (visual_idx == -1)
+      goto bad_format;
+
+   if (!(dri2_dpy->formats & dri2_wl_visuals[visual_idx].has_format))
       goto bad_format;
-   }
 
    buffer = create_wl_buffer(dri2_dpy, NULL, image);
 




More information about the mesa-commit mailing list