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)