WebGL validation of constant color & alpha blend.
In WebGL, generate INVALID_OPERATION if constant color and constant
alpha are used together as source and destination blend functions.
BUG=angleproject:1817
Change-Id: I9b2d05ab5017c013bb89c13256efbd80198de91b
Reviewed-on: https://chromium-review.googlesource.com/448940
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index 9a7f9d0..900d341 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -3848,7 +3848,8 @@
return false;
}
- if (context->getLimitations().noSimultaneousConstantColorAndAlphaBlendFunc)
+ if (context->getLimitations().noSimultaneousConstantColorAndAlphaBlendFunc ||
+ context->getExtensions().webglCompatibility)
{
bool constantColorUsed =
(srcRGB == GL_CONSTANT_COLOR || srcRGB == GL_ONE_MINUS_CONSTANT_COLOR ||
@@ -3860,14 +3861,22 @@
if (constantColorUsed && constantAlphaUsed)
{
- ERR() << "Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and "
- "GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR not supported by this "
- "implementation.";
- context->handleError(Error(GL_INVALID_OPERATION,
- "Simultaneous use of "
- "GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and "
- "GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR not "
- "supported by this implementation."));
+ const char *msg;
+ if (context->getExtensions().webglCompatibility)
+ {
+ msg =
+ "Invalid simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and "
+ "GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR.";
+ }
+ else
+ {
+ msg =
+ "Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and "
+ "GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR not supported by this "
+ "implementation.";
+ ERR() << msg;
+ }
+ context->handleError(Error(GL_INVALID_OPERATION, msg));
return false;
}
}