ParallelCompile: Add entry points.

Add the extension text, entry points and validations.

BUG=chromium:849576
TEST=angle_end2end_tests

Change-Id: I4c06ee30e4f4fe9bb1c1fecada747b9c78fed0ea
Reviewed-on: https://chromium-review.googlesource.com/1103789
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jie A Chen <jie.a.chen@intel.com>
diff --git a/src/tests/gl_tests/ParallelShaderCompileTest.cpp b/src/tests/gl_tests/ParallelShaderCompileTest.cpp
new file mode 100644
index 0000000..1117fa5
--- /dev/null
+++ b/src/tests/gl_tests/ParallelShaderCompileTest.cpp
@@ -0,0 +1,69 @@
+//
+// Copyright 2018 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// ParallelShaderCompileTest.cpp : Tests of the GL_KHR_parallel_shader_compile extension.
+
+#include "test_utils/ANGLETest.h"
+
+using namespace angle;
+
+namespace
+{
+
+class ParallelShaderCompileTest : public ANGLETest
+{
+  protected:
+    ParallelShaderCompileTest()
+    {
+        setWindowWidth(128);
+        setWindowHeight(128);
+        setConfigRedBits(8);
+        setConfigGreenBits(8);
+        setConfigBlueBits(8);
+        setConfigAlphaBits(8);
+    }
+
+    void SetUp() override { ANGLETest::SetUp(); }
+
+    void TearDown() override { ANGLETest::TearDown(); }
+
+    bool ensureParallelShaderCompileExtensionAvailable()
+    {
+        if (extensionRequestable("GL_KHR_parallel_shader_compile"))
+        {
+            glRequestExtensionANGLE("GL_KHR_parallel_shader_compile");
+        }
+
+        if (!extensionEnabled("GL_KHR_parallel_shader_compile"))
+        {
+            return false;
+        }
+        return true;
+    }
+};
+
+// Test basic functionality of GL_KHR_parallel_shader_compile
+TEST_P(ParallelShaderCompileTest, Basic)
+{
+    ANGLE_SKIP_TEST_IF(!ensureParallelShaderCompileExtensionAvailable());
+
+    GLint count = 0;
+    glMaxShaderCompilerThreadsKHR(8);
+    EXPECT_GL_NO_ERROR();
+    glGetIntegerv(GL_MAX_SHADER_COMPILER_THREADS_KHR, &count);
+    EXPECT_GL_NO_ERROR();
+    EXPECT_EQ(8, count);
+}
+
+ANGLE_INSTANTIATE_TEST(ParallelShaderCompileTest,
+                       ES2_D3D9(),
+                       ES2_D3D11(),
+                       ES2_D3D11_FL9_3(),
+                       ES2_OPENGL(),
+                       ES2_OPENGLES(),
+                       ES2_VULKAN());
+
+}  // namespace