Commit 9d0bb3d4 by Jamie Madill Committed by Commit Bot

Pass bit mask to ContextImpl::syncState.

This can be used to mask out inappropriate local dirty bits. Bug: angleproject:2763 Change-Id: Ie46e464df0dc719c963ff9f7066d42eb5a028262 Reviewed-on: https://chromium-review.googlesource.com/c/1264062 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarYuly Novikov <ynovikov@google.com>
parent 32099370
...@@ -483,6 +483,8 @@ void Context::initialize() ...@@ -483,6 +483,8 @@ void Context::initialize()
} }
// Initialize dirty bit masks // Initialize dirty bit masks
mAllDirtyBits.set();
mDrawDirtyObjects.set(State::DIRTY_OBJECT_DRAW_FRAMEBUFFER); mDrawDirtyObjects.set(State::DIRTY_OBJECT_DRAW_FRAMEBUFFER);
mDrawDirtyObjects.set(State::DIRTY_OBJECT_VERTEX_ARRAY); mDrawDirtyObjects.set(State::DIRTY_OBJECT_VERTEX_ARRAY);
mDrawDirtyObjects.set(State::DIRTY_OBJECT_PROGRAM_TEXTURES); mDrawDirtyObjects.set(State::DIRTY_OBJECT_PROGRAM_TEXTURES);
...@@ -3503,7 +3505,7 @@ Error Context::syncState(const State::DirtyBits &bitMask, const State::DirtyObje ...@@ -3503,7 +3505,7 @@ Error Context::syncState(const State::DirtyBits &bitMask, const State::DirtyObje
angle::Result Context::syncDirtyBits() angle::Result Context::syncDirtyBits()
{ {
const State::DirtyBits &dirtyBits = mGLState.getDirtyBits(); const State::DirtyBits &dirtyBits = mGLState.getDirtyBits();
ANGLE_TRY(mImplementation->syncState(this, dirtyBits)); ANGLE_TRY(mImplementation->syncState(this, dirtyBits, mAllDirtyBits));
mGLState.clearDirtyBits(); mGLState.clearDirtyBits();
return angle::Result::Continue(); return angle::Result::Continue();
} }
...@@ -3511,7 +3513,7 @@ angle::Result Context::syncDirtyBits() ...@@ -3511,7 +3513,7 @@ angle::Result Context::syncDirtyBits()
angle::Result Context::syncDirtyBits(const State::DirtyBits &bitMask) angle::Result Context::syncDirtyBits(const State::DirtyBits &bitMask)
{ {
const State::DirtyBits &dirtyBits = (mGLState.getDirtyBits() & bitMask); const State::DirtyBits &dirtyBits = (mGLState.getDirtyBits() & bitMask);
ANGLE_TRY(mImplementation->syncState(this, dirtyBits)); ANGLE_TRY(mImplementation->syncState(this, dirtyBits, bitMask));
mGLState.clearDirtyBits(dirtyBits); mGLState.clearDirtyBits(dirtyBits);
return angle::Result::Continue(); return angle::Result::Continue();
} }
......
...@@ -1820,6 +1820,7 @@ class Context final : public egl::LabeledObject, angle::NonCopyable, public angl ...@@ -1820,6 +1820,7 @@ class Context final : public egl::LabeledObject, angle::NonCopyable, public angl
StateCache mStateCache; StateCache mStateCache;
State::DirtyBits mAllDirtyBits;
State::DirtyBits mTexImageDirtyBits; State::DirtyBits mTexImageDirtyBits;
State::DirtyObjects mTexImageDirtyObjects; State::DirtyObjects mTexImageDirtyObjects;
State::DirtyBits mReadPixelsDirtyBits; State::DirtyBits mReadPixelsDirtyBits;
......
...@@ -142,7 +142,8 @@ class ContextImpl : public GLImplFactory ...@@ -142,7 +142,8 @@ class ContextImpl : public GLImplFactory
// State sync with dirty bits. // State sync with dirty bits.
virtual angle::Result syncState(const gl::Context *context, virtual angle::Result syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits) = 0; const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask) = 0;
// Disjoint timer queries // Disjoint timer queries
virtual GLint getGPUDisjoint() = 0; virtual GLint getGPUDisjoint() = 0;
......
...@@ -410,7 +410,8 @@ void Context11::popDebugGroup() ...@@ -410,7 +410,8 @@ void Context11::popDebugGroup()
} }
angle::Result Context11::syncState(const gl::Context *context, angle::Result Context11::syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits) const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask)
{ {
mRenderer->getStateManager()->syncState(context, dirtyBits); mRenderer->getStateManager()->syncState(context, dirtyBits);
return angle::Result::Continue(); return angle::Result::Continue();
......
...@@ -124,7 +124,8 @@ class Context11 : public ContextD3D, public MultisampleTextureInitializer ...@@ -124,7 +124,8 @@ class Context11 : public ContextD3D, public MultisampleTextureInitializer
// State sync with dirty bits. // State sync with dirty bits.
angle::Result syncState(const gl::Context *context, angle::Result syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits) override; const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask) override;
// Disjoint timer queries // Disjoint timer queries
GLint getGPUDisjoint() override; GLint getGPUDisjoint() override;
......
...@@ -260,7 +260,9 @@ void Context9::popDebugGroup() ...@@ -260,7 +260,9 @@ void Context9::popDebugGroup()
popGroupMarker(); popGroupMarker();
} }
angle::Result Context9::syncState(const gl::Context *context, const gl::State::DirtyBits &dirtyBits) angle::Result Context9::syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask)
{ {
mRenderer->getStateManager()->syncState(mState.getState(), dirtyBits); mRenderer->getStateManager()->syncState(mState.getState(), dirtyBits);
return angle::Result::Continue(); return angle::Result::Continue();
......
...@@ -122,7 +122,8 @@ class Context9 : public ContextD3D ...@@ -122,7 +122,8 @@ class Context9 : public ContextD3D
// State sync with dirty bits. // State sync with dirty bits.
angle::Result syncState(const gl::Context *context, angle::Result syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits) override; const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask) override;
// Disjoint timer queries // Disjoint timer queries
GLint getGPUDisjoint() override; GLint getGPUDisjoint() override;
......
...@@ -367,9 +367,10 @@ void ContextGL::popDebugGroup() ...@@ -367,9 +367,10 @@ void ContextGL::popDebugGroup()
} }
angle::Result ContextGL::syncState(const gl::Context *context, angle::Result ContextGL::syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits) const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask)
{ {
mRenderer->getStateManager()->syncState(context, dirtyBits); mRenderer->getStateManager()->syncState(context, dirtyBits, bitMask);
return angle::Result::Continue(); return angle::Result::Continue();
} }
......
...@@ -175,7 +175,8 @@ class ContextGL : public ContextImpl ...@@ -175,7 +175,8 @@ class ContextGL : public ContextImpl
// State sync with dirty bits. // State sync with dirty bits.
angle::Result syncState(const gl::Context *context, angle::Result syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits) override; const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask) override;
// Disjoint timer queries // Disjoint timer queries
GLint getGPUDisjoint() override; GLint getGPUDisjoint() override;
......
...@@ -1685,7 +1685,9 @@ void StateManagerGL::setClearStencil(GLint clearStencil) ...@@ -1685,7 +1685,9 @@ void StateManagerGL::setClearStencil(GLint clearStencil)
} }
} }
void StateManagerGL::syncState(const gl::Context *context, const gl::State::DirtyBits &glDirtyBits) void StateManagerGL::syncState(const gl::Context *context,
const gl::State::DirtyBits &glDirtyBits,
const gl::State::DirtyBits &bitMask)
{ {
const gl::State &state = context->getGLState(); const gl::State &state = context->getGLState();
......
...@@ -174,7 +174,9 @@ class StateManagerGL final : angle::NonCopyable ...@@ -174,7 +174,9 @@ class StateManagerGL final : angle::NonCopyable
angle::Result resumeQuery(const gl::Context *context, gl::QueryType type); angle::Result resumeQuery(const gl::Context *context, gl::QueryType type);
angle::Result onMakeCurrent(const gl::Context *context); angle::Result onMakeCurrent(const gl::Context *context);
void syncState(const gl::Context *context, const gl::State::DirtyBits &glDirtyBits); void syncState(const gl::Context *context,
const gl::State::DirtyBits &glDirtyBits,
const gl::State::DirtyBits &bitMask);
void updateMultiviewBaseViewLayerIndexUniform( void updateMultiviewBaseViewLayerIndexUniform(
const gl::Program *program, const gl::Program *program,
......
...@@ -297,7 +297,8 @@ void ContextNULL::popDebugGroup() ...@@ -297,7 +297,8 @@ void ContextNULL::popDebugGroup()
} }
angle::Result ContextNULL::syncState(const gl::Context *context, angle::Result ContextNULL::syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits) const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask)
{ {
return angle::Result::Continue(); return angle::Result::Continue();
} }
......
...@@ -143,7 +143,8 @@ class ContextNULL : public ContextImpl ...@@ -143,7 +143,8 @@ class ContextNULL : public ContextImpl
// State sync with dirty bits. // State sync with dirty bits.
angle::Result syncState(const gl::Context *context, angle::Result syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits) override; const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask) override;
// Disjoint timer queries // Disjoint timer queries
GLint getGPUDisjoint() override; GLint getGPUDisjoint() override;
......
...@@ -664,7 +664,8 @@ void ContextVk::updateScissor(const gl::State &glState) const ...@@ -664,7 +664,8 @@ void ContextVk::updateScissor(const gl::State &glState) const
} }
angle::Result ContextVk::syncState(const gl::Context *context, angle::Result ContextVk::syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits) const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask)
{ {
if (dirtyBits.any()) if (dirtyBits.any())
{ {
......
...@@ -93,7 +93,8 @@ class ContextVk : public ContextImpl, public vk::Context ...@@ -93,7 +93,8 @@ class ContextVk : public ContextImpl, public vk::Context
// State sync with dirty bits. // State sync with dirty bits.
angle::Result syncState(const gl::Context *context, angle::Result syncState(const gl::Context *context,
const gl::State::DirtyBits &dirtyBits) override; const gl::State::DirtyBits &dirtyBits,
const gl::State::DirtyBits &bitMask) override;
// Disjoint timer queries // Disjoint timer queries
GLint getGPUDisjoint() override; GLint getGPUDisjoint() override;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment