[Mesa-dev] [PATCH v2] egl: check if colorspace/surface type is supported

Marek Olšák maraeo at gmail.com
Wed May 2 22:10:42 UTC 2018


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Wed, May 2, 2018 at 12:23 PM, Juan A. Suarez Romero <jasuarez at igalia.com>
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
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180502/b0598384/attachment.html>


More information about the mesa-dev mailing list