Implement CHROMIUM_copy_compressed_texture for D3D11.
BUG=angleproject:1356
Change-Id: Id563997d2921cf558c52a781ae66d8bde58d1f2f
Reviewed-on: https://chromium-review.googlesource.com/339847
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index c92ddad..b98f6b4 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -3320,6 +3320,68 @@
return true;
}
+bool ValidateCompressedCopyTextureCHROMIUM(Context *context, GLuint sourceId, GLuint destId)
+{
+ if (!context->getExtensions().copyCompressedTexture)
+ {
+ context->handleError(Error(GL_INVALID_OPERATION,
+ "GL_CHROMIUM_copy_compressed_texture extension not available."));
+ return false;
+ }
+
+ const gl::Texture *source = context->getTexture(sourceId);
+ if (source == nullptr)
+ {
+ context->handleError(
+ Error(GL_INVALID_VALUE, "Source texture is not a valid texture object."));
+ return false;
+ }
+
+ if (source->getTarget() != GL_TEXTURE_2D)
+ {
+ context->handleError(
+ Error(GL_INVALID_VALUE, "Source texture must be of type GL_TEXTURE_2D."));
+ return false;
+ }
+
+ if (source->getWidth(GL_TEXTURE_2D, 0) == 0 || source->getHeight(GL_TEXTURE_2D, 0) == 0)
+ {
+ context->handleError(Error(GL_INVALID_VALUE, "Source texture must level 0 defined."));
+ return false;
+ }
+
+ const gl::Format &sourceFormat = source->getFormat(GL_TEXTURE_2D, 0);
+ if (!sourceFormat.info->compressed)
+ {
+ context->handleError(
+ Error(GL_INVALID_OPERATION, "Source texture must have a compressed internal format."));
+ return false;
+ }
+
+ const gl::Texture *dest = context->getTexture(destId);
+ if (dest == nullptr)
+ {
+ context->handleError(
+ Error(GL_INVALID_VALUE, "Destination texture is not a valid texture object."));
+ return false;
+ }
+
+ if (dest->getTarget() != GL_TEXTURE_2D)
+ {
+ context->handleError(
+ Error(GL_INVALID_VALUE, "Destination texture must be of type GL_TEXTURE_2D."));
+ return false;
+ }
+
+ if (dest->getImmutableFormat())
+ {
+ context->handleError(Error(GL_INVALID_OPERATION, "Destination cannot be immutable."));
+ return false;
+ }
+
+ return true;
+}
+
bool ValidateCreateShader(Context *context, GLenum type)
{
switch (type)