egl: check if colorspace/surface type is supported
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) Reviewed-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:
parent
0ba0ac815e
commit
fd4eba4929
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue