Refactor compressed texture format validation.
We were generating GL_INVALID_OPERATION when a non-compressed format
is used where a compressed one is expected or a compressed one is used
where a non-compressed one is expected. Instead we can generate
GL_INVALID_ENUM since these enums are never valid for these calls
(GL_INVALID_OPERATION is for when the enum is valid in some situations
but it's currently used incorrectly).
Change-Id: I9ee92a92cda0574284e709a5a745d5bb8b825a31
Reviewed-on: https://swiftshader-review.googlesource.com/16888
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/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index 0a880ad..1c1e2d0 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -55,10 +55,9 @@
static bool validateColorBufferFormat(GLenum textureFormat, GLenum colorbufferFormat)
{
- GLenum validationError = ValidateCompressedFormat(textureFormat, egl::getClientVersion(), false);
- if(validationError != GL_NONE)
+ if(IsCompressed(textureFormat, egl::getClientVersion()))
{
- return error(validationError, false);
+ return error(GL_INVALID_OPERATION, false);
}
switch(textureFormat)
@@ -834,22 +833,9 @@
return error(GL_INVALID_VALUE);
}
- switch(internalformat)
+ if(!IsCompressed(internalformat, egl::getClientVersion()))
{
- case GL_DEPTH_COMPONENT:
- case GL_DEPTH_COMPONENT16:
- case GL_DEPTH_COMPONENT32_OES:
- case GL_DEPTH_STENCIL:
- case GL_DEPTH24_STENCIL8:
- return error(GL_INVALID_OPERATION);
- default:
- {
- GLenum validationError = ValidateCompressedFormat(internalformat, egl::getClientVersion(), true);
- if(validationError != GL_NONE)
- {
- return error(validationError);
- }
- }
+ return error(GL_INVALID_ENUM);
}
if(imageSize != egl::ComputeCompressedSize(width, height, internalformat) * depth)
@@ -904,10 +890,9 @@
return error(GL_INVALID_VALUE);
}
- GLenum validationError = ValidateCompressedFormat(format, egl::getClientVersion(), true);
- if(validationError != GL_NONE)
+ if(!IsCompressed(format, egl::getClientVersion()))
{
- return error(validationError);
+ return error(GL_INVALID_ENUM);
}
if(imageSize != egl::ComputeCompressedSize(width, height, format) * depth)