ES31: Fix detaching/deleting compute shader after LinkProgram.

This change also moves the ShaderType enum from D3D renderer to angletype.h.
And it uses a bit mask to track the linked shader stages.

BUG=angleproject:2247

Change-Id: I5c7ee1445d353a02e24549ffcf6b0ac694dd1069
Reviewed-on: https://chromium-review.googlesource.com/768629
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/Program.cpp b/src/libANGLE/Program.cpp
index 9531c1f..795d326 100644
--- a/src/libANGLE/Program.cpp
+++ b/src/libANGLE/Program.cpp
@@ -948,6 +948,9 @@
 
     setUniformValuesFromBindingQualifiers();
 
+    ASSERT(mLinked);
+    updateLinkedShaderStages();
+
     // Mark implementation-specific unreferenced uniforms as ignored.
     mProgram->markUnusedUniformLocations(&mState.mUniformLocations, &mState.mSamplerBindings);
 
@@ -965,6 +968,24 @@
     return NoError();
 }
 
+void Program::updateLinkedShaderStages()
+{
+    if (mState.mAttachedVertexShader)
+    {
+        mState.mLinkedShaderStages.set(SHADER_VERTEX);
+    }
+
+    if (mState.mAttachedFragmentShader)
+    {
+        mState.mLinkedShaderStages.set(SHADER_FRAGMENT);
+    }
+
+    if (mState.mAttachedComputeShader)
+    {
+        mState.mLinkedShaderStages.set(SHADER_COMPUTE);
+    }
+}
+
 // Returns the program object to an unlinked state, before re-linking, or at destruction
 void Program::unlink()
 {
@@ -985,6 +1006,7 @@
     mState.mSamplerBindings.clear();
     mState.mImageBindings.clear();
     mState.mNumViews = -1;
+    mState.mLinkedShaderStages.reset();
 
     mValidated = false;