Commit 0741c0f1 by Jamie Madill Committed by Commit Bot

Add missing reset to GL multi-view dirty bits.

This missing clear was costing quite a bit of performance on any use case that called for a lot of state changes. BUG=angleproject:2188 Change-Id: I98fa6c21728c1655fa9e1019ddc10ccfbdb594d8 Reviewed-on: https://chromium-review.googlesource.com/722422Reviewed-by: 's avatarFrank Henigman <fjhenigman@chromium.org> Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent a59fc19f
......@@ -1695,34 +1695,38 @@ void StateManagerGL::syncState(const gl::Context *context, const gl::State::Dirt
}
// Iterate over and resolve multi-view dirty bits.
for (auto dirtyBit : mMultiviewDirtyBits)
if (mMultiviewDirtyBits.any())
{
switch (dirtyBit)
for (auto dirtyBit : mMultiviewDirtyBits)
{
case MULTIVIEW_DIRTY_BIT_SIDE_BY_SIDE_LAYOUT:
switch (dirtyBit)
{
const gl::Framebuffer *drawFramebuffer = state.getDrawFramebuffer();
ASSERT(drawFramebuffer != nullptr);
setSideBySide(drawFramebuffer->getMultiviewLayout() ==
GL_FRAMEBUFFER_MULTIVIEW_SIDE_BY_SIDE_ANGLE);
}
break;
case MULTIVIEW_DIRTY_BIT_VIEWPORT_OFFSETS:
{
const gl::Framebuffer *drawFramebuffer = state.getDrawFramebuffer();
ASSERT(drawFramebuffer != nullptr);
const std::vector<gl::Offset> *attachmentViewportOffsets =
drawFramebuffer->getViewportOffsets();
const std::vector<gl::Offset> &viewportOffsets =
attachmentViewportOffsets != nullptr
? *attachmentViewportOffsets
: gl::FramebufferAttachment::GetDefaultViewportOffsetVector();
setViewportOffsets(viewportOffsets);
case MULTIVIEW_DIRTY_BIT_SIDE_BY_SIDE_LAYOUT:
{
const gl::Framebuffer *drawFramebuffer = state.getDrawFramebuffer();
ASSERT(drawFramebuffer != nullptr);
setSideBySide(drawFramebuffer->getMultiviewLayout() ==
GL_FRAMEBUFFER_MULTIVIEW_SIDE_BY_SIDE_ANGLE);
}
break;
case MULTIVIEW_DIRTY_BIT_VIEWPORT_OFFSETS:
{
const gl::Framebuffer *drawFramebuffer = state.getDrawFramebuffer();
ASSERT(drawFramebuffer != nullptr);
const std::vector<gl::Offset> *attachmentViewportOffsets =
drawFramebuffer->getViewportOffsets();
const std::vector<gl::Offset> &viewportOffsets =
attachmentViewportOffsets != nullptr
? *attachmentViewportOffsets
: gl::FramebufferAttachment::GetDefaultViewportOffsetVector();
setViewportOffsets(viewportOffsets);
}
break;
default:
UNREACHABLE();
}
break;
default:
UNREACHABLE();
}
mMultiviewDirtyBits.reset();
}
const gl::State::DirtyBits &glAndLocalDirtyBits = (glDirtyBits | mLocalDirtyBits);
......
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