ES31: Fix the issue when rendering against compute program.
It is a undefined behavior in gles spec, but we should generate an error.
This change also refactored the coding style for shader in the test.
BUG=angleproject:2260
Change-Id: I7b480e8b66486d9954f7c7f6e8683298e94b6ad7
Reviewed-on: https://chromium-review.googlesource.com/764797
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index 3e4e12a..ae564b7 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -2537,6 +2537,18 @@
return false;
}
+ // In OpenGL ES spec for UseProgram at section 7.3, trying to render without
+ // vertex shader stage or fragment shader stage is a undefined behaviour.
+ // But ANGLE should clearly generate an INVALID_OPERATION error instead of
+ // produce undefined result.
+ if (program->isLinked() &&
+ (!program->hasLinkedVertexShader() || !program->hasLinkedFragmentShader()))
+ {
+ context->handleError(InvalidOperation() << "It is a undefined behaviour to render without "
+ "vertex shader stage or fragment shader stage.");
+ return false;
+ }
+
if (!program->validateSamplers(nullptr, context->getCaps()))
{
context->handleError(InvalidOperation());