eglCreatePbufferSurface should generate an EGL_BAD_MATCH error if: 1: The EGL_TEXTURE_FORMAT attribute is EGL_NO_TEXTURE and EGL_TEXTURE_TARGET is something other than EGL_NO_TEXTURE 2: EGL_TEXTURE_FORMAT is something other than EGL_NO_TEXTURE and EGL_TEXTURE_TARGET is EGL_NO_TEXTURE.
This fixes the dEQP-EGL.functional.negative_api.create_pbuffer_surface test. Signed-off-by: Plamena Manolova <plamena.manol...@intel.com> --- src/egl/main/eglsurface.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/egl/main/eglsurface.c b/src/egl/main/eglsurface.c index 2971bb0..d6b8083 100644 --- a/src/egl/main/eglsurface.c +++ b/src/egl/main/eglsurface.c @@ -65,12 +65,14 @@ _eglClampSwapInterval(_EGLSurface *surf, EGLint interval) * Parse the list of surface attributes and return the proper error code. */ static EGLint -_eglParseSurfaceAttribList(_EGLSurface *surf, const EGLint *attrib_list) +_eglParseSurfaceAttribList(_EGLSurface *surf, EGLint s_type, const EGLint *attrib_list) { _EGLDisplay *dpy = surf->Resource.Display; EGLint type = surf->Type; EGLint texture_type = EGL_PBUFFER_BIT; EGLint i, err = EGL_SUCCESS; + EGLint tex_target = -1; + EGLint tex_format = -1; if (!attrib_list) return EGL_SUCCESS; @@ -186,6 +188,8 @@ _eglParseSurfaceAttribList(_EGLSurface *surf, const EGLint *attrib_list) err = EGL_BAD_ATTRIBUTE; break; } + + tex_format = val; switch (val) { case EGL_TEXTURE_RGB: case EGL_TEXTURE_RGBA: @@ -204,6 +208,8 @@ _eglParseSurfaceAttribList(_EGLSurface *surf, const EGLint *attrib_list) err = EGL_BAD_ATTRIBUTE; break; } + + tex_target = val; switch (val) { case EGL_TEXTURE_2D: case EGL_NO_TEXTURE: @@ -229,6 +235,13 @@ _eglParseSurfaceAttribList(_EGLSurface *surf, const EGLint *attrib_list) break; } + if (s_type == EGL_PBUFFER_BIT) { + if ((tex_target == EGL_NO_TEXTURE && tex_format != EGL_NO_TEXTURE) || + (tex_format == EGL_NO_TEXTURE && tex_target != EGL_NO_TEXTURE)) { + err = EGL_BAD_MATCH; + } + } + if (err != EGL_SUCCESS) { _eglLog(_EGL_WARNING, "bad surface attribute 0x%04x", attr); break; @@ -303,7 +316,7 @@ _eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type, /* the default swap interval is 1 */ _eglClampSwapInterval(surf, 1); - err = _eglParseSurfaceAttribList(surf, attrib_list); + err = _eglParseSurfaceAttribList(surf, type, attrib_list); if (err != EGL_SUCCESS) return _eglError(err, func); -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev