CopyTextureCHROMIUM: Validate the texture target enums first.
INVALID_ENUM should be generated before any INVALID_VALUE errors based
on the texture state.
BUG=angleproject:1932
Change-Id: If74440602d56b1a86fa24ff87c38d2b0dec2bfb2
Reviewed-on: https://chromium-review.googlesource.com/744448
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index 13e65d2..af93da2 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -306,30 +306,39 @@
return true;
}
-bool IsValidCopyTextureDestinationTarget(Context *context, GLenum textureType, GLenum target)
+bool IsValidCopyTextureDestinationTargetEnum(Context *context, GLenum target)
{
switch (target)
{
case GL_TEXTURE_2D:
- return textureType == GL_TEXTURE_2D;
-
case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
- return textureType == GL_TEXTURE_CUBE_MAP;
+ return true;
case GL_TEXTURE_RECTANGLE_ANGLE:
- return textureType == GL_TEXTURE_RECTANGLE_ANGLE &&
- context->getExtensions().textureRectangle;
+ return context->getExtensions().textureRectangle;
default:
return false;
}
}
+bool IsValidCopyTextureDestinationTarget(Context *context, GLenum textureType, GLenum target)
+{
+ if (IsCubeMapTextureTarget(target))
+ {
+ return textureType == GL_TEXTURE_CUBE_MAP;
+ }
+ else
+ {
+ return textureType == target;
+ }
+}
+
bool IsValidCopyTextureSourceTarget(Context *context, GLenum target)
{
switch (target)
@@ -3871,6 +3880,12 @@
return false;
}
+ if (!IsValidCopyTextureDestinationTargetEnum(context, destTarget))
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidTextureTarget);
+ return false;
+ }
+
const Texture *dest = context->getTexture(destId);
if (dest == nullptr)
{
@@ -3993,6 +4008,12 @@
return false;
}
+ if (!IsValidCopyTextureDestinationTargetEnum(context, destTarget))
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidTextureTarget);
+ return false;
+ }
+
const Texture *dest = context->getTexture(destId);
if (dest == nullptr)
{