ES31: Enable some dirty bits and dirty objects for compute pipeline
BUG=angleproject:2265
TEST=dEQP-GLES31.functional.shaders.builtin_var.compute.*
angle_end2end_test.ShaderStorageBufferTest31
.MultiStorageBuffersForMultiPrograms
Change-Id: Icc3df122602951a2328003c10a76696ab4c9f0d8
Reviewed-on: https://chromium-review.googlesource.com/792951
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 8115230..ade792e 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -411,6 +411,13 @@
mBlitDirtyObjects.set(State::DIRTY_OBJECT_READ_FRAMEBUFFER);
mBlitDirtyObjects.set(State::DIRTY_OBJECT_DRAW_FRAMEBUFFER);
+ // TODO(xinghua.cao@intel.com): add other dirty bits and dirty objects.
+ mComputeDirtyBits.set(State::DIRTY_BIT_SHADER_STORAGE_BUFFER_BINDING);
+ mComputeDirtyBits.set(State::DIRTY_BIT_PROGRAM_BINDING);
+ mComputeDirtyBits.set(State::DIRTY_BIT_PROGRAM_EXECUTABLE);
+ mComputeDirtyBits.set(State::DIRTY_BIT_TEXTURE_BINDINGS);
+ mComputeDirtyBits.set(State::DIRTY_BIT_SAMPLER_BINDINGS);
+
handleError(mImplementation->initialize());
}
@@ -4217,6 +4224,18 @@
return NoError();
}
+Error Context::prepareForDispatch()
+{
+ syncRendererState(mComputeDirtyBits, mComputeDirtyObjects);
+
+ if (isRobustResourceInitEnabled())
+ {
+ ANGLE_TRY(mGLState.clearUnclearedActiveTextures(this));
+ }
+
+ return NoError();
+}
+
void Context::dispatchCompute(GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ)
{
if (numGroupsX == 0u || numGroupsY == 0u || numGroupsZ == 0u)
@@ -4224,12 +4243,7 @@
return;
}
- // TODO(jmadill): Dirty bits for compute.
- if (isRobustResourceInitEnabled())
- {
- ANGLE_CONTEXT_TRY(mGLState.clearUnclearedActiveTextures(this));
- }
-
+ ANGLE_CONTEXT_TRY(prepareForDispatch());
handleError(mImplementation->dispatchCompute(this, numGroupsX, numGroupsY, numGroupsZ));
}