<div dir="ltr"><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>><br><br></div>Marek<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 2, 2018 at 12:23 PM, Juan A. Suarez Romero <span dir="ltr"><<a href="mailto:jasuarez@igalia.com" target="_blank">jasuarez@igalia.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">According to EGL 1.4 spec, section 3.5.1 ("Creating On-Screen Rendering<br>
Surfaces"), if config does not support the colorspace or alpha format<br>
attributes specified in attrib_list (as defined for<br>
eglCreateWindowSurface), an EGL_BAD_MATCH error is generated.<br>
<br>
This fixes dEQP-EGL.functional.wide_<wbr>color.*_888_colorspace_srgb (still<br>
not merged,<br>
<a href="https://android-review.googlesource.com/c/platform/external/deqp/+/667322" rel="noreferrer" target="_blank">https://android-review.<wbr>googlesource.com/c/platform/<wbr>external/deqp/+/667322</a>),<br>
which is crashing when trying to create a windows surface with RGB888<br>
configuration and sRGB colorspace.<br>
<br>
v2: Handle the fix in other backends (Tapani)<br>
---<br>
 src/egl/drivers/dri2/platform_<wbr>drm.c      | 5 +++++<br>
 src/egl/drivers/dri2/platform_<wbr>wayland.c  | 6 ++++++<br>
 src/egl/drivers/dri2/platform_<wbr>x11.c      | 5 +++++<br>
 src/egl/drivers/dri2/platform_<wbr>x11_dri3.c | 5 +++++<br>
 4 files changed, 21 insertions(+)<br>
<br>
diff --git a/src/egl/drivers/dri2/<wbr>platform_drm.c b/src/egl/drivers/dri2/<wbr>platform_drm.c<br>
index dc4efea9103..35bc4b5b1ac 100644<br>
--- a/src/egl/drivers/dri2/<wbr>platform_drm.c<br>
+++ b/src/egl/drivers/dri2/<wbr>platform_drm.c<br>
@@ -155,6 +155,11 @@ dri2_drm_create_window_<wbr>surface(_EGLDriver *drv, _EGLDisplay *disp,<br>
    config = dri2_get_dri_config(dri2_conf, EGL_WINDOW_BIT,<br>
                                 dri2_surf->base.GLColorspace);<br>
<br>
+   if (!config) {<br>
+      _eglError(EGL_BAD_MATCH, "Unsupported surfacetype/colorspace configuration");<br>
+      goto cleanup_surf;<br>
+   }<br>
+<br>
    if (!dri2_drm_config_is_<wbr>compatible(dri2_dpy, config, surface)) {<br>
       _eglError(EGL_BAD_MATCH, "EGL config not compatible with GBM format");<br>
       goto cleanup_surf;<br>
diff --git a/src/egl/drivers/dri2/<wbr>platform_wayland.c b/src/egl/drivers/dri2/<wbr>platform_wayland.c<br>
index 80853ac00b8..63da21cdf55 100644<br>
--- a/src/egl/drivers/dri2/<wbr>platform_wayland.c<br>
+++ b/src/egl/drivers/dri2/<wbr>platform_wayland.c<br>
@@ -249,6 +249,12 @@ dri2_wl_create_window_surface(<wbr>_EGLDriver *drv, _EGLDisplay *disp,<br>
<br>
    config = dri2_get_dri_config(dri2_conf, EGL_WINDOW_BIT,<br>
                                 dri2_surf->base.GLColorspace);<br>
+<br>
+   if (!config) {<br>
+      _eglError(EGL_BAD_MATCH, "Unsupported surfacetype/colorspace configuration");<br>
+      goto cleanup_surf;<br>
+   }<br>
+<br>
    visual_idx = dri2_wl_visual_idx_from_<wbr>config(dri2_dpy, config);<br>
    assert(visual_idx != -1);<br>
<br>
diff --git a/src/egl/drivers/dri2/<wbr>platform_x11.c b/src/egl/drivers/dri2/<wbr>platform_x11.c<br>
index 6c287b4d06b..fa838f6721e 100644<br>
--- a/src/egl/drivers/dri2/<wbr>platform_x11.c<br>
+++ b/src/egl/drivers/dri2/<wbr>platform_x11.c<br>
@@ -251,6 +251,11 @@ dri2_x11_create_surface(_<wbr>EGLDriver *drv, _EGLDisplay *disp, EGLint type,<br>
    config = dri2_get_dri_config(dri2_conf, type,<br>
                                 dri2_surf->base.GLColorspace);<br>
<br>
+   if (!config) {<br>
+      _eglError(EGL_BAD_MATCH, "Unsupported surfacetype/colorspace configuration");<br>
+      goto cleanup_pixmap;<br>
+   }<br>
+<br>
    if (dri2_dpy->dri2) {<br>
       dri2_surf->dri_drawable =<br>
          dri2_dpy->dri2-><wbr>createNewDrawable(dri2_dpy-><wbr>dri_screen, config,<br>
diff --git a/src/egl/drivers/dri2/<wbr>platform_x11_dri3.c b/src/egl/drivers/dri2/<wbr>platform_x11_dri3.c<br>
index a41e40156df..5cb6d65c0a3 100644<br>
--- a/src/egl/drivers/dri2/<wbr>platform_x11_dri3.c<br>
+++ b/src/egl/drivers/dri2/<wbr>platform_x11_dri3.c<br>
@@ -183,6 +183,11 @@ dri3_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,<br>
    dri_config = dri2_get_dri_config(dri2_conf, type,<br>
                                     dri3_surf->surf.base.<wbr>GLColorspace);<br>
<br>
+   if (!dri_config) {<br>
+      _eglError(EGL_BAD_MATCH, "Unsupported surfacetype/colorspace configuration");<br>
+      goto cleanup_pixmap;<br>
+   }<br>
+<br>
    if (loader_dri3_drawable_init(<wbr>dri2_dpy->conn, drawable,<br>
                                  dri2_dpy->dri_screen,<br>
                                  dri2_dpy->is_different_gpu,<br>
<span class="HOEnZb"><font color="#888888">-- <br>
2.14.3<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>