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()
}
// Initialize dirty bit masks
mAllDirtyBits.set();
mDrawDirtyObjects.set(State::DIRTY_OBJECT_DRAW_FRAMEBUFFER);
mDrawDirtyObjects.set(State::DIRTY_OBJECT_VERTEX_ARRAY);
mDrawDirtyObjects.set(State::DIRTY_OBJECT_PROGRAM_TEXTURES);
......@@ -3503,7 +3505,7 @@ Error Context::syncState(const State::DirtyBits &bitMask, const State::DirtyObje
angle::Result Context::syncDirtyBits()
{
const State::DirtyBits &dirtyBits = mGLState.getDirtyBits();
ANGLE_TRY(mImplementation->syncState(this, dirtyBits));
ANGLE_TRY(mImplementation->syncState(this, dirtyBits, mAllDirtyBits));
mGLState.clearDirtyBits();
return angle::Result::Continue();
}
......@@ -3511,7 +3513,7 @@ angle::Result Context::syncDirtyBits()
angle::Result Context::syncDirtyBits(const State::DirtyBits &bitMask)
{
const State::DirtyBits &dirtyBits = (mGLState.getDirtyBits() & bitMask);
ANGLE_TRY(mImplementation->syncState(this, dirtyBits));
ANGLE_TRY(mImplementation->syncState(this, dirtyBits, bitMask));
mGLState.clearDirtyBits(dirtyBits);
return angle::Result::Continue();
}
......
......@@ -1820,6 +1820,7 @@ class Context final : public egl::LabeledObject, angle::NonCopyable, public angl
StateCache mStateCache;
State::DirtyBits mAllDirtyBits;
State::DirtyBits mTexImageDirtyBits;
State::DirtyObjects mTexImageDirtyObjects;
State::DirtyBits mReadPixelsDirtyBits;
......
......@@ -142,7 +142,8 @@ class ContextImpl : public GLImplFactory
// State sync with dirty bits.
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
virtual GLint getGPUDisjoint() = 0;
......
......@@ -410,7 +410,8 @@ void Context11::popDebugGroup()
}
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);
return angle::Result::Continue();
......
......@@ -124,7 +124,8 @@ class Context11 : public ContextD3D, public MultisampleTextureInitializer
// State sync with dirty bits.
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
GLint getGPUDisjoint() override;
......
......@@ -260,7 +260,9 @@ void Context9::popDebugGroup()
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);
return angle::Result::Continue();
......
......@@ -122,7 +122,8 @@ class Context9 : public ContextD3D
// State sync with dirty bits.
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
GLint getGPUDisjoint() override;
......
......@@ -367,9 +367,10 @@ void ContextGL::popDebugGroup()
}
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();
}
......
......@@ -175,7 +175,8 @@ class ContextGL : public ContextImpl
// State sync with dirty bits.
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
GLint getGPUDisjoint() override;
......
......@@ -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();
......
......@@ -174,7 +174,9 @@ class StateManagerGL final : angle::NonCopyable
angle::Result resumeQuery(const gl::Context *context, gl::QueryType type);
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(
const gl::Program *program,
......
......@@ -297,7 +297,8 @@ void ContextNULL::popDebugGroup()
}
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();
}
......
......@@ -143,7 +143,8 @@ class ContextNULL : public ContextImpl
// State sync with dirty bits.
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
GLint getGPUDisjoint() override;
......
......@@ -664,7 +664,8 @@ void ContextVk::updateScissor(const gl::State &glState) const
}
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())
{
......
......@@ -93,7 +93,8 @@ class ContextVk : public ContextImpl, public vk::Context
// State sync with dirty bits.
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
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