Pass ContextImpl to Framebuffer methods instead of ContextState.

BUG=angleproject:1363

Change-Id: I7e7524d95f2ca31c35918f9fe5c0cb681ed93616
Reviewed-on: https://chromium-review.googlesource.com/340746
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/FramebufferD3D.cpp b/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
index 9d5503d..f038a59 100644
--- a/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
+++ b/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
@@ -13,6 +13,7 @@
 #include "libANGLE/Framebuffer.h"
 #include "libANGLE/FramebufferAttachment.h"
 #include "libANGLE/Surface.h"
+#include "libANGLE/renderer/ContextImpl.h"
 #include "libANGLE/renderer/d3d/RendererD3D.h"
 #include "libANGLE/renderer/d3d/RenderbufferD3D.h"
 #include "libANGLE/renderer/d3d/RenderTargetD3D.h"
@@ -94,20 +95,19 @@
 {
 }
 
-gl::Error FramebufferD3D::clear(const gl::ContextState &data, GLbitfield mask)
+gl::Error FramebufferD3D::clear(ContextImpl *context, GLbitfield mask)
 {
-    const gl::State &state = *data.state;
-    ClearParameters clearParams = GetClearParameters(state, mask);
-    return clear(data, clearParams);
+    ClearParameters clearParams = GetClearParameters(context->getState(), mask);
+    return clearImpl(context, clearParams);
 }
 
-gl::Error FramebufferD3D::clearBufferfv(const gl::ContextState &data,
+gl::Error FramebufferD3D::clearBufferfv(ContextImpl *context,
                                         GLenum buffer,
                                         GLint drawbuffer,
                                         const GLfloat *values)
 {
     // glClearBufferfv can be called to clear the color buffer or depth buffer
-    ClearParameters clearParams = GetClearParameters(*data.state, 0);
+    ClearParameters clearParams = GetClearParameters(context->getState(), 0);
 
     if (buffer == GL_COLOR)
     {
@@ -125,16 +125,16 @@
         clearParams.depthClearValue = values[0];
     }
 
-    return clear(data, clearParams);
+    return clearImpl(context, clearParams);
 }
 
-gl::Error FramebufferD3D::clearBufferuiv(const gl::ContextState &data,
+gl::Error FramebufferD3D::clearBufferuiv(ContextImpl *context,
                                          GLenum buffer,
                                          GLint drawbuffer,
                                          const GLuint *values)
 {
     // glClearBufferuiv can only be called to clear a color buffer
-    ClearParameters clearParams = GetClearParameters(*data.state, 0);
+    ClearParameters clearParams = GetClearParameters(context->getState(), 0);
     for (unsigned int i = 0; i < ArraySize(clearParams.clearColor); i++)
     {
         clearParams.clearColor[i] = (drawbuffer == static_cast<int>(i));
@@ -142,16 +142,16 @@
     clearParams.colorUIClearValue = gl::ColorUI(values[0], values[1], values[2], values[3]);
     clearParams.colorClearType = GL_UNSIGNED_INT;
 
-    return clear(data, clearParams);
+    return clearImpl(context, clearParams);
 }
 
-gl::Error FramebufferD3D::clearBufferiv(const gl::ContextState &data,
+gl::Error FramebufferD3D::clearBufferiv(ContextImpl *context,
                                         GLenum buffer,
                                         GLint drawbuffer,
                                         const GLint *values)
 {
     // glClearBufferiv can be called to clear the color buffer or stencil buffer
-    ClearParameters clearParams = GetClearParameters(*data.state, 0);
+    ClearParameters clearParams = GetClearParameters(context->getState(), 0);
 
     if (buffer == GL_COLOR)
     {
@@ -169,23 +169,23 @@
         clearParams.stencilClearValue = values[1];
     }
 
-    return clear(data, clearParams);
+    return clearImpl(context, clearParams);
 }
 
-gl::Error FramebufferD3D::clearBufferfi(const gl::ContextState &data,
+gl::Error FramebufferD3D::clearBufferfi(ContextImpl *context,
                                         GLenum buffer,
                                         GLint drawbuffer,
                                         GLfloat depth,
                                         GLint stencil)
 {
     // glClearBufferfi can only be called to clear a depth stencil buffer
-    ClearParameters clearParams   = GetClearParameters(*data.state, 0);
+    ClearParameters clearParams   = GetClearParameters(context->getState(), 0);
     clearParams.clearDepth = true;
     clearParams.depthClearValue = depth;
     clearParams.clearStencil = true;
     clearParams.stencilClearValue = stencil;
 
-    return clear(data, clearParams);
+    return clearImpl(context, clearParams);
 }
 
 GLenum FramebufferD3D::getImplementationColorReadFormat() const
@@ -232,9 +232,13 @@
     return implementationFormatInfo.type;
 }
 
-gl::Error FramebufferD3D::readPixels(const gl::State &state, const gl::Rectangle &area, GLenum format, GLenum type, GLvoid *pixels) const
+gl::Error FramebufferD3D::readPixels(ContextImpl *context,
+                                     const gl::Rectangle &area,
+                                     GLenum format,
+                                     GLenum type,
+                                     GLvoid *pixels) const
 {
-    const gl::PixelPackState &packState = state.getPackState();
+    const gl::PixelPackState &packState = context->getState().getPackState();
 
     GLenum sizedInternalFormat = gl::GetSizedInternalFormat(format, type);
     const gl::InternalFormat &sizedFormatInfo = gl::GetInternalFormatInfo(sizedInternalFormat);
@@ -247,9 +251,14 @@
                           reinterpret_cast<uint8_t *>(pixels) + outputSkipBytes);
 }
 
-gl::Error FramebufferD3D::blit(const gl::State &state, const gl::Rectangle &sourceArea, const gl::Rectangle &destArea,
-                               GLbitfield mask, GLenum filter, const gl::Framebuffer *sourceFramebuffer)
+gl::Error FramebufferD3D::blit(ContextImpl *context,
+                               const gl::Rectangle &sourceArea,
+                               const gl::Rectangle &destArea,
+                               GLbitfield mask,
+                               GLenum filter)
 {
+    const auto &glState                      = context->getState();
+    const gl::Framebuffer *sourceFramebuffer = glState.getReadFramebuffer();
     bool blitRenderTarget = false;
     if ((mask & GL_COLOR_BUFFER_BIT) && sourceFramebuffer->getReadColorbuffer() != nullptr &&
         mState.getFirstColorAttachment() != nullptr)
@@ -273,9 +282,10 @@
 
     if (blitRenderTarget || blitDepth || blitStencil)
     {
-        const gl::Rectangle *scissor = state.isScissorTestEnabled() ? &state.getScissor() : NULL;
-        gl::Error error = blit(sourceArea, destArea, scissor, blitRenderTarget, blitDepth, blitStencil,
-                               filter, sourceFramebuffer);
+        const gl::Rectangle *scissor =
+            glState.isScissorTestEnabled() ? &glState.getScissor() : nullptr;
+        gl::Error error = blitImpl(sourceArea, destArea, scissor, blitRenderTarget, blitDepth,
+                                   blitStencil, filter, sourceFramebuffer);
         if (error.isError())
         {
             return error;