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());