Use packed enums on shader types in ANGLE renderer

This patch uses a packed internal enum ShaderType everywhere we
need a shader type instead of the GLenum value of the shader type.

This patch also uses program::getAttachedShader(type) everywhere
we need to get gl::Shader from a program in ANGLE.

BUG=angleproject:2169
Change-Id: I28a7fa1cfe35622c57a486932911110688eaadec
Reviewed-on: https://chromium-review.googlesource.com/972844
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/renderer/gl/ProgramGL.cpp b/src/libANGLE/renderer/gl/ProgramGL.cpp
index d6f3976..89cd454 100644
--- a/src/libANGLE/renderer/gl/ProgramGL.cpp
+++ b/src/libANGLE/renderer/gl/ProgramGL.cpp
@@ -131,9 +131,10 @@
 {
     preLink();
 
-    if (mState.getAttachedComputeShader())
+    if (mState.getAttachedShader(gl::ShaderType::Compute))
     {
-        const ShaderGL *computeShaderGL = GetImplAs<ShaderGL>(mState.getAttachedComputeShader());
+        const ShaderGL *computeShaderGL =
+            GetImplAs<ShaderGL>(mState.getAttachedShader(gl::ShaderType::Compute));
 
         mFunctions->attachShader(mProgramID, computeShaderGL->getShaderID());
 
@@ -150,8 +151,8 @@
         for (const auto &tfVarying : mState.getTransformFeedbackVaryingNames())
         {
             std::string tfVaryingMappedName =
-                mState.getAttachedVertexShader()->getTransformFeedbackVaryingMappedName(tfVarying,
-                                                                                        context);
+                mState.getAttachedShader(gl::ShaderType::Vertex)
+                    ->getTransformFeedbackVaryingMappedName(tfVarying, context);
             transformFeedbackVaryingMappedNames.push_back(tfVaryingMappedName);
         }
 
@@ -176,10 +177,12 @@
                 &transformFeedbackVaryings[0], mState.getTransformFeedbackBufferMode());
         }
 
-        const ShaderGL *vertexShaderGL   = GetImplAs<ShaderGL>(mState.getAttachedVertexShader());
-        const ShaderGL *fragmentShaderGL = GetImplAs<ShaderGL>(mState.getAttachedFragmentShader());
-        const ShaderGL *geometryShaderGL =
-            rx::SafeGetImplAs<ShaderGL, gl::Shader>(mState.getAttachedGeometryShader());
+        const ShaderGL *vertexShaderGL =
+            GetImplAs<ShaderGL>(mState.getAttachedShader(gl::ShaderType::Vertex));
+        const ShaderGL *fragmentShaderGL =
+            GetImplAs<ShaderGL>(mState.getAttachedShader(gl::ShaderType::Fragment));
+        const ShaderGL *geometryShaderGL = rx::SafeGetImplAs<ShaderGL, gl::Shader>(
+            mState.getAttachedShader(gl::ShaderType::Geometry));
 
         // Attach the shaders
         mFunctions->attachShader(mProgramID, vertexShaderGL->getShaderID());