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;