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/renderer/vulkan/ContextVk.cpp b/src/libANGLE/renderer/vulkan/ContextVk.cpp
index e93309f..20dde85 100644
--- a/src/libANGLE/renderer/vulkan/ContextVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ContextVk.cpp
@@ -572,9 +572,8 @@
             case gl::State::DIRTY_BIT_SAMPLE_MASK_ENABLED:
                 WARN() << "DIRTY_BIT_SAMPLE_MASK_ENABLED unimplemented";
                 break;
-            case gl::State::DIRTY_BIT_SAMPLE_MASK_WORD_0:
-            case gl::State::DIRTY_BIT_SAMPLE_MASK_WORD_0 + 1:
-                WARN() << "DIRTY_BIT_SAMPLE_MASK_WORD unimplemented";
+            case gl::State::DIRTY_BIT_SAMPLE_MASK:
+                WARN() << "DIRTY_BIT_SAMPLE_MASK unimplemented";
                 break;
             case gl::State::DIRTY_BIT_DEPTH_TEST_ENABLED:
                 WARN() << "DIRTY_BIT_DEPTH_TEST_ENABLED unimplemented";
@@ -638,44 +637,11 @@
             case gl::State::DIRTY_BIT_CLEAR_STENCIL:
                 WARN() << "DIRTY_BIT_CLEAR_STENCIL unimplemented";
                 break;
-            case gl::State::DIRTY_BIT_UNPACK_ALIGNMENT:
-                WARN() << "DIRTY_BIT_UNPACK_ALIGNMENT unimplemented";
+            case gl::State::DIRTY_BIT_UNPACK_STATE:
+                WARN() << "DIRTY_BIT_UNPACK_STATE unimplemented";
                 break;
-            case gl::State::DIRTY_BIT_UNPACK_ROW_LENGTH:
-                WARN() << "DIRTY_BIT_UNPACK_ROW_LENGTH unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_UNPACK_IMAGE_HEIGHT:
-                WARN() << "DIRTY_BIT_UNPACK_IMAGE_HEIGHT unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_UNPACK_SKIP_IMAGES:
-                WARN() << "DIRTY_BIT_UNPACK_SKIP_IMAGES unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_UNPACK_SKIP_ROWS:
-                WARN() << "DIRTY_BIT_UNPACK_SKIP_ROWS unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_UNPACK_SKIP_PIXELS:
-                WARN() << "DIRTY_BIT_UNPACK_SKIP_PIXELS unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_UNPACK_BUFFER_BINDING:
-                WARN() << "DIRTY_BIT_UNPACK_BUFFER_BINDING unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_PACK_ALIGNMENT:
-                WARN() << "DIRTY_BIT_PACK_ALIGNMENT unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_PACK_REVERSE_ROW_ORDER:
-                WARN() << "DIRTY_BIT_PACK_REVERSE_ROW_ORDER unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_PACK_ROW_LENGTH:
-                WARN() << "DIRTY_BIT_PACK_ROW_LENGTH unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_PACK_SKIP_ROWS:
-                WARN() << "DIRTY_BIT_PACK_SKIP_ROWS unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_PACK_SKIP_PIXELS:
-                WARN() << "DIRTY_BIT_PACK_SKIP_PIXELS unimplemented";
-                break;
-            case gl::State::DIRTY_BIT_PACK_BUFFER_BINDING:
-                WARN() << "DIRTY_BIT_PACK_BUFFER_BINDING unimplemented";
+            case gl::State::DIRTY_BIT_PACK_STATE:
+                WARN() << "DIRTY_BIT_PACK_STATE unimplemented";
                 break;
             case gl::State::DIRTY_BIT_DITHER_ENABLED:
                 WARN() << "DIRTY_BIT_DITHER_ENABLED unimplemented";
@@ -745,16 +711,11 @@
             case gl::State::DIRTY_BIT_FRAMEBUFFER_SRGB:
                 WARN() << "DIRTY_BIT_FRAMEBUFFER_SRGB unimplemented";
                 break;
+            case gl::State::DIRTY_BIT_CURRENT_VALUES:
+                WARN() << "DIRTY_BIT_CURRENT_VALUES unimplemented";
+                break;
             default:
-                if (dirtyBit >= gl::State::DIRTY_BIT_CURRENT_VALUE_0 &&
-                    dirtyBit < gl::State::DIRTY_BIT_CURRENT_VALUE_MAX)
-                {
-                    WARN() << "DIRTY_BIT_CURRENT_VALUE unimplemented";
-                }
-                else
-                {
-                    UNREACHABLE();
-                }
+                UNREACHABLE();
                 break;
         }
     }