diff options
author | Plamena Manolova <[email protected]> | 2016-05-25 17:29:55 +0100 |
---|---|---|
committer | Ben Widawsky <[email protected]> | 2016-05-26 08:02:48 -0700 |
commit | a0674ce5c41903ccd161e89abb149621bfbc40d2 (patch) | |
tree | 9975c20f78fa8d5135a12758d12f6a4f680436c4 | |
parent | 8539c9bf3158416b22346dc49696872e631e969f (diff) |
egl: Additional attribute validation for eglCreatePbufferSurface
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 <[email protected]>
Reviewed-by: Ben Widawsky <[email protected]>
-rw-r--r-- | src/egl/main/eglsurface.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/egl/main/eglsurface.c b/src/egl/main/eglsurface.c index 2971bb0983a..17d79077837 100644 --- a/src/egl/main/eglsurface.c +++ b/src/egl/main/eglsurface.c @@ -71,6 +71,8 @@ _eglParseSurfaceAttribList(_EGLSurface *surf, const EGLint *attrib_list) 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 (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; |