Vulkan: Implement EXT_texture_type_2_10_10_10_REV
- Expose GLES 3.0 feature of 2_10_10_10_REV texture type
on GLES 2.0 as EXT.
- Handle alpha channel value as 1.0 when used with RGB format.
- Add test for "RGB+UNSIGNED_INT_2_10_10_10_REV" case into TextureUploadFormatTest.
BUG=angleproject:3232.
Test:
dEQP-GLES2.capability.extensions.uncompressed_texture_formats.GL_EXT_texture_type_2_10_10_10_REV
dEQP-GLES2.functional.fbo.completeness.renderable.texture.*2_10_10_10_rev
dEQP-GLES3.functional.fbo.completeness.renderable.texture.*2_10_10_10_rev
KHR-GLES2.core.internalformat.*2_10_10_10_rev*
KHR-GLES3.core.internalformat.*2_10_10_10_rev*
Change-Id: Iac00517971f9242161115c7256117a69093fb5df
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1732618
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index 6665216..0eabc82 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -1349,6 +1349,13 @@
case GL_HALF_FLOAT_OES:
case GL_FLOAT:
break;
+ case GL_UNSIGNED_INT_2_10_10_10_REV_EXT:
+ if (!context->getExtensions().textureFormat2101010REV)
+ {
+ context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
+ return false;
+ }
+ break;
default:
context->validationError(GL_INVALID_ENUM, kInvalidType);
return false;
@@ -1402,6 +1409,7 @@
{
case GL_UNSIGNED_BYTE:
case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_UNSIGNED_INT_2_10_10_10_REV_EXT:
case GL_FLOAT:
case GL_HALF_FLOAT_OES:
break;
@@ -1418,6 +1426,7 @@
case GL_UNSIGNED_SHORT_5_5_5_1:
case GL_FLOAT:
case GL_HALF_FLOAT_OES:
+ case GL_UNSIGNED_INT_2_10_10_10_REV_EXT:
break;
default:
context->validationError(GL_INVALID_OPERATION, kMismatchedTypeAndFormat);
@@ -1685,6 +1694,32 @@
}
break;
+ case GL_RGB10_A2_EXT:
+ if (!context->getExtensions().textureFormat2101010REV)
+ {
+ context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
+ return false;
+ }
+
+ if (type != GL_UNSIGNED_INT_2_10_10_10_REV_EXT || format != GL_RGBA)
+ {
+ context->validationError(GL_INVALID_OPERATION, kMismatchedTypeAndFormat);
+ return false;
+ }
+
+ nonEqualFormatsAllowed = true;
+
+ break;
+
+ case GL_RGB5_A1:
+ if (context->getExtensions().textureFormat2101010REV &&
+ type == GL_UNSIGNED_INT_2_10_10_10_REV_EXT && format == GL_RGBA)
+ {
+ nonEqualFormatsAllowed = true;
+ }
+
+ break;
+
default:
context->validationError(GL_INVALID_VALUE, kInvalidInternalFormat);
return false;