diff options
author | Chris Forbes <chrisforbes@google.com> | 2019-10-02 08:23:32 -0700 |
---|---|---|
committer | Chris Forbes <chrisforbes@google.com> | 2019-10-02 17:09:38 +0000 |
commit | aabce7952d41115dcf427c394ba3b5a3205428ca (patch) | |
tree | b5f3fb2b127bcffbb59eeb11672141d907e4018f | |
parent | 0597afff0763df5cd67890c81f77e5f431516a15 (diff) | |
download | swiftshader-aabce7952d41115dcf427c394ba3b5a3205428ca.tar.gz |
Fix edge cases of creating EGLImages from cubemap faces
We need the face target here, not the whole texture target.
This fixes the one case that was actually broken, and avoids hitting
an assert in debug swiftshader for all tests in this group.
Bug: b/141916742
Test: dEQP-EGL.functional.image.api.create_image_gles2_cubemap*
Change-Id: I25ef8f6d6e2909adfc646e68f1711589777017ba
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/36948
Tested-by: Chris Forbes <chrisforbes@google.com>
Presubmit-Ready: Chris Forbes <chrisforbes@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-rw-r--r-- | src/OpenGL/libGLESv2/Context.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp index 7eda289ed..e03abc27e 100644 --- a/src/OpenGL/libGLESv2/Context.cpp +++ b/src/OpenGL/libGLESv2/Context.cpp @@ -4409,17 +4409,13 @@ EGLenum Context::validateSharedImage(EGLenum target, GLuint name, GLuint texture switch(target) { - case EGL_GL_TEXTURE_2D_KHR: - textureTarget = GL_TEXTURE_2D; - break; - case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR: - case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR: - case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR: - case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR: - case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR: - case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR: - textureTarget = GL_TEXTURE_CUBE_MAP; - break; + case EGL_GL_TEXTURE_2D_KHR: textureTarget = GL_TEXTURE_2D; break; + case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR: textureTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X; break; + case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR: textureTarget = GL_TEXTURE_CUBE_MAP_NEGATIVE_X; break; + case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR: textureTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_Y; break; + case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR: textureTarget = GL_TEXTURE_CUBE_MAP_NEGATIVE_Y; break; + case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR: textureTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_Z; break; + case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR: textureTarget = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z; break; case EGL_GL_RENDERBUFFER_KHR: break; default: @@ -4435,7 +4431,17 @@ EGLenum Context::validateSharedImage(EGLenum target, GLuint name, GLuint texture { es2::Texture *texture = getTexture(name); - if(!texture || texture->getTarget() != textureTarget) + if(!texture) + { + return EGL_BAD_PARAMETER; + } + + if (texture->getTarget() != GL_TEXTURE_CUBE_MAP && texture->getTarget() != textureTarget) + { + return EGL_BAD_PARAMETER; + } + + if (texture->getTarget() == GL_TEXTURE_CUBE_MAP && !IsCubemapTextureTarget(textureTarget)) { return EGL_BAD_PARAMETER; } |