Validate cube completeness for mipmap generation.
The OpenGL ES 3.0.5 spec section 3.8.10.5 states: "For cube map
textures an INVALID_OPERATION error is generated if the texture
bound to target is not cube complete".
Change-Id: I4304ecf125528b9406a011a95d7822b1f868ee14
Reviewed-on: https://swiftshader-review.googlesource.com/15328
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libGLESv2/Texture.h b/src/OpenGL/libGLESv2/Texture.h
index bd34b33..5badc9f 100644
--- a/src/OpenGL/libGLESv2/Texture.h
+++ b/src/OpenGL/libGLESv2/Texture.h
@@ -242,11 +242,12 @@
egl::Image *getImage(int face, unsigned int level);
+ bool isCubeComplete() const;
+
protected:
~TextureCubeMap() override;
private:
- bool isCubeComplete() const;
bool isMipmapCubeComplete() const;
// face is one of the GL_TEXTURE_CUBE_MAP_* enumerants. Returns nullptr on failure.
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index 123e97c..f9cbde1 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -2261,7 +2261,15 @@
texture = context->getTexture2D();
break;
case GL_TEXTURE_CUBE_MAP:
- texture = context->getTextureCubeMap();
+ {
+ TextureCubeMap *cube = context->getTextureCubeMap();
+ texture = cube;
+
+ if(!cube->isCubeComplete())
+ {
+ return error(GL_INVALID_OPERATION);
+ }
+ }
break;
case GL_TEXTURE_2D_ARRAY:
if(clientVersion < 3)