Reviewed-by: Marek Olšák <[email protected]> Marek
On Wed, May 2, 2018 at 12:23 PM, Juan A. Suarez Romero <[email protected]> wrote: > According to EGL 1.4 spec, section 3.5.1 ("Creating On-Screen Rendering > Surfaces"), if config does not support the colorspace or alpha format > attributes specified in attrib_list (as defined for > eglCreateWindowSurface), an EGL_BAD_MATCH error is generated. > > This fixes dEQP-EGL.functional.wide_color.*_888_colorspace_srgb (still > not merged, > https://android-review.googlesource.com/c/platform/external/deqp/+/667322 > ), > which is crashing when trying to create a windows surface with RGB888 > configuration and sRGB colorspace. > > v2: Handle the fix in other backends (Tapani) > --- > src/egl/drivers/dri2/platform_drm.c | 5 +++++ > src/egl/drivers/dri2/platform_wayland.c | 6 ++++++ > src/egl/drivers/dri2/platform_x11.c | 5 +++++ > src/egl/drivers/dri2/platform_x11_dri3.c | 5 +++++ > 4 files changed, 21 insertions(+) > > diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/ > platform_drm.c > index dc4efea9103..35bc4b5b1ac 100644 > --- a/src/egl/drivers/dri2/platform_drm.c > +++ b/src/egl/drivers/dri2/platform_drm.c > @@ -155,6 +155,11 @@ dri2_drm_create_window_surface(_EGLDriver *drv, > _EGLDisplay *disp, > config = dri2_get_dri_config(dri2_conf, EGL_WINDOW_BIT, > dri2_surf->base.GLColorspace); > > + if (!config) { > + _eglError(EGL_BAD_MATCH, "Unsupported surfacetype/colorspace > configuration"); > + goto cleanup_surf; > + } > + > if (!dri2_drm_config_is_compatible(dri2_dpy, config, surface)) { > _eglError(EGL_BAD_MATCH, "EGL config not compatible with GBM > format"); > goto cleanup_surf; > diff --git a/src/egl/drivers/dri2/platform_wayland.c > b/src/egl/drivers/dri2/platform_wayland.c > index 80853ac00b8..63da21cdf55 100644 > --- a/src/egl/drivers/dri2/platform_wayland.c > +++ b/src/egl/drivers/dri2/platform_wayland.c > @@ -249,6 +249,12 @@ dri2_wl_create_window_surface(_EGLDriver *drv, > _EGLDisplay *disp, > > config = dri2_get_dri_config(dri2_conf, EGL_WINDOW_BIT, > dri2_surf->base.GLColorspace); > + > + if (!config) { > + _eglError(EGL_BAD_MATCH, "Unsupported surfacetype/colorspace > configuration"); > + goto cleanup_surf; > + } > + > visual_idx = dri2_wl_visual_idx_from_config(dri2_dpy, config); > assert(visual_idx != -1); > > diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/ > platform_x11.c > index 6c287b4d06b..fa838f6721e 100644 > --- a/src/egl/drivers/dri2/platform_x11.c > +++ b/src/egl/drivers/dri2/platform_x11.c > @@ -251,6 +251,11 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay > *disp, EGLint type, > config = dri2_get_dri_config(dri2_conf, type, > dri2_surf->base.GLColorspace); > > + if (!config) { > + _eglError(EGL_BAD_MATCH, "Unsupported surfacetype/colorspace > configuration"); > + goto cleanup_pixmap; > + } > + > if (dri2_dpy->dri2) { > dri2_surf->dri_drawable = > dri2_dpy->dri2->createNewDrawable(dri2_dpy->dri_screen, config, > diff --git a/src/egl/drivers/dri2/platform_x11_dri3.c > b/src/egl/drivers/dri2/platform_x11_dri3.c > index a41e40156df..5cb6d65c0a3 100644 > --- a/src/egl/drivers/dri2/platform_x11_dri3.c > +++ b/src/egl/drivers/dri2/platform_x11_dri3.c > @@ -183,6 +183,11 @@ dri3_create_surface(_EGLDriver *drv, _EGLDisplay > *disp, EGLint type, > dri_config = dri2_get_dri_config(dri2_conf, type, > dri3_surf->surf.base.GLColorspace); > > + if (!dri_config) { > + _eglError(EGL_BAD_MATCH, "Unsupported surfacetype/colorspace > configuration"); > + goto cleanup_pixmap; > + } > + > if (loader_dri3_drawable_init(dri2_dpy->conn, drawable, > dri2_dpy->dri_screen, > dri2_dpy->is_different_gpu, > -- > 2.14.3 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
