Squash State dirty bits to below 64.
This will dramatically speed up performance on 64-bit systems due to
the efficiency of angle::BitSet64. Improves performance of the GL
back-end on benchmarks quite a bit.
Squashes the Pack and Unpack states together. Also moves the current
value dirty bits to a single dirty bit, with a separate set for each
attribute. Also squashes a multisample dirty bit.
Also fixes an incorrect dirty bit in StateManagerGL.
We may want to implement a semi-fast version of BitSet64 for 32-bit
systems if we find performance is not satisfactory.
BUG=angleproject:2188
Change-Id: I4616782bf75413252ede3e3ac752b9ccdb9aab49
Reviewed-on: https://chromium-review.googlesource.com/722423
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index eb0b424..476a139 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -389,23 +389,11 @@
}
// Initialize dirty bit masks
- // TODO(jmadill): additional ES3 state
- mTexImageDirtyBits.set(State::DIRTY_BIT_UNPACK_ALIGNMENT);
- mTexImageDirtyBits.set(State::DIRTY_BIT_UNPACK_ROW_LENGTH);
- mTexImageDirtyBits.set(State::DIRTY_BIT_UNPACK_IMAGE_HEIGHT);
- mTexImageDirtyBits.set(State::DIRTY_BIT_UNPACK_SKIP_IMAGES);
- mTexImageDirtyBits.set(State::DIRTY_BIT_UNPACK_SKIP_ROWS);
- mTexImageDirtyBits.set(State::DIRTY_BIT_UNPACK_SKIP_PIXELS);
- mTexImageDirtyBits.set(State::DIRTY_BIT_UNPACK_BUFFER_BINDING);
+ mTexImageDirtyBits.set(State::DIRTY_BIT_UNPACK_STATE);
// No dirty objects.
// Readpixels uses the pack state and read FBO
- mReadPixelsDirtyBits.set(State::DIRTY_BIT_PACK_ALIGNMENT);
- mReadPixelsDirtyBits.set(State::DIRTY_BIT_PACK_REVERSE_ROW_ORDER);
- mReadPixelsDirtyBits.set(State::DIRTY_BIT_PACK_ROW_LENGTH);
- mReadPixelsDirtyBits.set(State::DIRTY_BIT_PACK_SKIP_ROWS);
- mReadPixelsDirtyBits.set(State::DIRTY_BIT_PACK_SKIP_PIXELS);
- mReadPixelsDirtyBits.set(State::DIRTY_BIT_PACK_BUFFER_BINDING);
+ mReadPixelsDirtyBits.set(State::DIRTY_BIT_PACK_STATE);
mReadPixelsDirtyObjects.set(State::DIRTY_OBJECT_READ_FRAMEBUFFER);
mClearDirtyBits.set(State::DIRTY_BIT_RASTERIZER_DISCARD_ENABLED);