Add dirty bits for the pixel pack and unpack buffer

BUG=605775

Change-Id: Ifb7eee94a395a9e9f5a5c1d6c0f05299162264a9
Reviewed-on: https://chromium-review.googlesource.com/340115
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 61bb172..683ec18 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -232,6 +232,7 @@
     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);
     // No dirty objects.
 
     // Readpixels uses the pack state and read FBO
@@ -240,6 +241,7 @@
     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);
     mReadPixelsDirtyObjects.set(State::DIRTY_OBJECT_READ_FRAMEBUFFER);
 
     mClearDirtyBits.set(State::DIRTY_BIT_RASTERIZER_DISCARD_ENABLED);
diff --git a/src/libANGLE/State.cpp b/src/libANGLE/State.cpp
index fb7d125..a1d2752 100644
--- a/src/libANGLE/State.cpp
+++ b/src/libANGLE/State.cpp
@@ -1069,11 +1069,13 @@
 void State::setPixelPackBufferBinding(Buffer *buffer)
 {
     mPack.pixelBuffer.set(buffer);
+    mDirtyBits.set(DIRTY_BIT_PACK_BUFFER_BINDING);
 }
 
 void State::setPixelUnpackBufferBinding(Buffer *buffer)
 {
     mUnpack.pixelBuffer.set(buffer);
+    mDirtyBits.set(DIRTY_BIT_UNPACK_BUFFER_BINDING);
 }
 
 Buffer *State::getTargetBuffer(GLenum target) const
diff --git a/src/libANGLE/State.h b/src/libANGLE/State.h
index 2d9d655..727da3e 100644
--- a/src/libANGLE/State.h
+++ b/src/libANGLE/State.h
@@ -319,11 +319,13 @@
         DIRTY_BIT_UNPACK_SKIP_IMAGES,
         DIRTY_BIT_UNPACK_SKIP_ROWS,
         DIRTY_BIT_UNPACK_SKIP_PIXELS,
+        DIRTY_BIT_UNPACK_BUFFER_BINDING,
         DIRTY_BIT_PACK_ALIGNMENT,
         DIRTY_BIT_PACK_REVERSE_ROW_ORDER,
         DIRTY_BIT_PACK_ROW_LENGTH,
         DIRTY_BIT_PACK_SKIP_ROWS,
         DIRTY_BIT_PACK_SKIP_PIXELS,
+        DIRTY_BIT_PACK_BUFFER_BINDING,
         DIRTY_BIT_DITHER_ENABLED,
         DIRTY_BIT_GENERATE_MIPMAP_HINT,
         DIRTY_BIT_SHADER_DERIVATIVE_HINT,
diff --git a/src/libANGLE/renderer/gl/StateManagerGL.cpp b/src/libANGLE/renderer/gl/StateManagerGL.cpp
index c48281a..7b84e55 100644
--- a/src/libANGLE/renderer/gl/StateManagerGL.cpp
+++ b/src/libANGLE/renderer/gl/StateManagerGL.cpp
@@ -1460,6 +1460,10 @@
                 // TODO(jmadill): split this
                 setPixelUnpackState(state.getUnpackState());
                 break;
+            case gl::State::DIRTY_BIT_UNPACK_BUFFER_BINDING:
+                // TODO(jmadill): split this
+                setPixelUnpackState(state.getUnpackState());
+                break;
             case gl::State::DIRTY_BIT_PACK_ALIGNMENT:
                 // TODO(jmadill): split this
                 setPixelPackState(state.getPackState());
@@ -1480,6 +1484,10 @@
                 // TODO(jmadill): split this
                 setPixelPackState(state.getPackState());
                 break;
+            case gl::State::DIRTY_BIT_PACK_BUFFER_BINDING:
+                // TODO(jmadill): split this
+                setPixelPackState(state.getPackState());
+                break;
             case gl::State::DIRTY_BIT_DITHER_ENABLED:
                 // TODO(jmadill): implement this
                 break;