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 ...@@ -1695,34 +1695,38 @@ void StateManagerGL::syncState(const gl::Context *context, const gl::State::Dirt
} }
// Iterate over and resolve multi-view dirty bits. // 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(); case MULTIVIEW_DIRTY_BIT_SIDE_BY_SIDE_LAYOUT:
ASSERT(drawFramebuffer != nullptr); {
setSideBySide(drawFramebuffer->getMultiviewLayout() == const gl::Framebuffer *drawFramebuffer = state.getDrawFramebuffer();
GL_FRAMEBUFFER_MULTIVIEW_SIDE_BY_SIDE_ANGLE); ASSERT(drawFramebuffer != nullptr);
} setSideBySide(drawFramebuffer->getMultiviewLayout() ==
break; GL_FRAMEBUFFER_MULTIVIEW_SIDE_BY_SIDE_ANGLE);
case MULTIVIEW_DIRTY_BIT_VIEWPORT_OFFSETS: }
{ break;
const gl::Framebuffer *drawFramebuffer = state.getDrawFramebuffer(); case MULTIVIEW_DIRTY_BIT_VIEWPORT_OFFSETS:
ASSERT(drawFramebuffer != nullptr); {
const std::vector<gl::Offset> *attachmentViewportOffsets = const gl::Framebuffer *drawFramebuffer = state.getDrawFramebuffer();
drawFramebuffer->getViewportOffsets(); ASSERT(drawFramebuffer != nullptr);
const std::vector<gl::Offset> &viewportOffsets = const std::vector<gl::Offset> *attachmentViewportOffsets =
attachmentViewportOffsets != nullptr drawFramebuffer->getViewportOffsets();
? *attachmentViewportOffsets const std::vector<gl::Offset> &viewportOffsets =
: gl::FramebufferAttachment::GetDefaultViewportOffsetVector(); attachmentViewportOffsets != nullptr
setViewportOffsets(viewportOffsets); ? *attachmentViewportOffsets
: gl::FramebufferAttachment::GetDefaultViewportOffsetVector();
setViewportOffsets(viewportOffsets);
}
break;
default:
UNREACHABLE();
} }
break;
default:
UNREACHABLE();
} }
mMultiviewDirtyBits.reset();
} }
const gl::State::DirtyBits &glAndLocalDirtyBits = (glDirtyBits | mLocalDirtyBits); 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