Encapulate the ESSL compiler into a GL object that is per-context.

 * Allows for multiple contexts have to have different client versions, caps
   and extensions without causing shader compilation failures.

BUG=angle:823

Change-Id: I523679e90be031b0b7fa385d46d6839b1cf3029f
Reviewed-on: https://chromium-review.googlesource.com/227710
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/ProgramD3D.cpp b/src/libANGLE/renderer/d3d/ProgramD3D.cpp
index 2a7ead2..bbe5a97 100644
--- a/src/libANGLE/renderer/d3d/ProgramD3D.cpp
+++ b/src/libANGLE/renderer/d3d/ProgramD3D.cpp
@@ -1352,7 +1352,7 @@
 
         if (uniform.staticUse)
         {
-            defineUniformBase(GL_VERTEX_SHADER, uniform, vertexShaderD3D->getUniformRegister(uniform.name));
+            defineUniformBase(vertexShaderD3D, uniform, vertexShaderD3D->getUniformRegister(uniform.name));
         }
     }
 
@@ -1362,7 +1362,7 @@
 
         if (uniform.staticUse)
         {
-            defineUniformBase(GL_FRAGMENT_SHADER, uniform, fragmentShaderD3D->getUniformRegister(uniform.name));
+            defineUniformBase(fragmentShaderD3D, uniform, fragmentShaderD3D->getUniformRegister(uniform.name));
         }
     }
 
@@ -1386,17 +1386,17 @@
     return true;
 }
 
-void ProgramD3D::defineUniformBase(GLenum shader, const sh::Uniform &uniform, unsigned int uniformRegister)
+void ProgramD3D::defineUniformBase(const ShaderD3D *shader, const sh::Uniform &uniform, unsigned int uniformRegister)
 {
-    ShShaderOutput outputType = ShaderD3D::getCompilerOutputType(shader);
+    ShShaderOutput outputType = shader->getCompilerOutputType();
     sh::HLSLBlockEncoder encoder(sh::HLSLBlockEncoder::GetStrategyFor(outputType));
     encoder.skipRegisters(uniformRegister);
 
     defineUniform(shader, uniform, uniform.name, &encoder);
 }
 
-void ProgramD3D::defineUniform(GLenum shader, const sh::ShaderVariable &uniform,
-                                  const std::string &fullName, sh::HLSLBlockEncoder *encoder)
+void ProgramD3D::defineUniform(const ShaderD3D *shader, const sh::ShaderVariable &uniform,
+                               const std::string &fullName, sh::HLSLBlockEncoder *encoder)
 {
     if (uniform.isStruct())
     {
@@ -1438,11 +1438,11 @@
 
         ASSERT(linkedUniform->registerElement == encoder->getCurrentElement());
 
-        if (shader == GL_FRAGMENT_SHADER)
+        if (shader->getShaderType() == GL_FRAGMENT_SHADER)
         {
             linkedUniform->psRegisterIndex = encoder->getCurrentRegister();
         }
-        else if (shader == GL_VERTEX_SHADER)
+        else if (shader->getShaderType() == GL_VERTEX_SHADER)
         {
             linkedUniform->vsRegisterIndex = encoder->getCurrentRegister();
         }