Split pixelBuffer from pack/unpack state

This will refactor will help use packed enums for buffer targets.

BUG=angleproject:2169

Change-Id: Ie7ed3e105f89457c67027e6598d7e29503ad355c
Reviewed-on: https://chromium-review.googlesource.com/745181
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/gl/FramebufferGL.cpp b/src/libANGLE/renderer/gl/FramebufferGL.cpp
index b2ff033..620de74 100644
--- a/src/libANGLE/renderer/gl/FramebufferGL.cpp
+++ b/src/libANGLE/renderer/gl/FramebufferGL.cpp
@@ -429,8 +429,8 @@
         return gl::NoError();
     }
 
-    PixelPackState packState;
-    packState.copyFrom(context, context->getGLState().getPackState());
+    PixelPackState packState     = context->getGLState().getPackState();
+    const gl::Buffer *packBuffer = context->getGLState().getTargetBuffer(GL_PIXEL_PACK_BUFFER);
 
     nativegl::ReadPixelsFormat readPixelsFormat =
         nativegl::GetReadPixelsFormat(mFunctions, mWorkarounds, format, type);
@@ -440,7 +440,7 @@
     mStateManager->bindFramebuffer(GL_READ_FRAMEBUFFER, mFramebufferID);
 
     bool useOverlappingRowsWorkaround = mWorkarounds.packOverlappingRowsSeparatelyPackBuffer &&
-                                        packState.pixelBuffer.get() && packState.rowLength != 0 &&
+                                        packBuffer && packState.rowLength != 0 &&
                                         packState.rowLength < area.width;
 
     GLubyte *pixels = reinterpret_cast<GLubyte *>(ptrOrOffset);
@@ -479,9 +479,9 @@
         gl::ErrorOrResult<bool> useLastRowPaddingWorkaround = false;
         if (mWorkarounds.packLastRowSeparatelyForPaddingInclusion)
         {
-            useLastRowPaddingWorkaround =
-                ShouldApplyLastRowPaddingWorkaround(gl::Extents(area.width, area.height, 1),
-                                                    packState, readFormat, readType, false, pixels);
+            useLastRowPaddingWorkaround = ShouldApplyLastRowPaddingWorkaround(
+                gl::Extents(area.width, area.height, 1), packState, packBuffer, readFormat,
+                readType, false, pixels);
         }
 
         if (useLastRowPaddingWorkaround.isError())
@@ -495,7 +495,6 @@
         }
     }
 
-    packState.pixelBuffer.set(context, nullptr);
     return retVal;
 }
 
@@ -837,7 +836,6 @@
                                             const gl::PixelPackState &pack,
                                             GLubyte *pixels) const
 {
-
     const gl::InternalFormat &glFormat = gl::GetInternalFormatInfo(format, type);
 
     GLuint rowBytes = 0;
@@ -847,10 +845,8 @@
     ANGLE_TRY_RESULT(glFormat.computeSkipBytes(rowBytes, 0, pack, false), skipBytes);
 
     gl::PixelPackState directPack;
-    directPack.pixelBuffer.set(context, pack.pixelBuffer.get());
     directPack.alignment   = 1;
     mStateManager->setPixelPackState(directPack);
-    directPack.pixelBuffer.set(context, nullptr);
 
     pixels += skipBytes;
     for (GLint y = area.y; y < area.y + area.height; ++y)
@@ -888,10 +884,8 @@
         ANGLE_TRY_RESULT(glFormat.computeSkipBytes(rowBytes, 0, pack, false), skipBytes);
 
         gl::PixelPackState directPack;
-        directPack.pixelBuffer.set(context, pack.pixelBuffer.get());
         directPack.alignment = 1;
         mStateManager->setPixelPackState(directPack);
-        directPack.pixelBuffer.set(context, nullptr);
 
         pixels += skipBytes + (area.height - 1) * rowBytes;
         mFunctions->readPixels(area.x, area.y + area.height - 1, area.width, 1, format, type,