diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
index a1cd1e0..bf526c9 100644
--- a/src/gpu/gl/GrGpuGL.cpp
+++ b/src/gpu/gl/GrGpuGL.cpp
@@ -481,7 +481,7 @@
     GL_CALL(LineWidth(1));
 
     // invalid
-    fActiveTextureUnitIdx = -1;
+    fHWActiveTextureUnitIdx = -1;
 
     fHWBlendState.invalidate();
 
@@ -2395,16 +2395,16 @@
 
 void GrGpuGL::setTextureUnit(int unit) {
     GrAssert(unit >= 0 && unit < GrDrawState::kNumStages);
-    if (fActiveTextureUnitIdx != unit) {
+    if (fHWActiveTextureUnitIdx != unit) {
         GL_CALL(ActiveTexture(GR_GL_TEXTURE0 + unit));
-        fActiveTextureUnitIdx = unit;
+        fHWActiveTextureUnitIdx = unit;
     }
 }
 
 void GrGpuGL::setSpareTextureUnit() {
-    if (fActiveTextureUnitIdx != (GR_GL_TEXTURE0 + SPARE_TEX_UNIT)) {
+    if (fHWActiveTextureUnitIdx != (GR_GL_TEXTURE0 + SPARE_TEX_UNIT)) {
         GL_CALL(ActiveTexture(GR_GL_TEXTURE0 + SPARE_TEX_UNIT));
-        fActiveTextureUnitIdx = SPARE_TEX_UNIT;
+        fHWActiveTextureUnitIdx = SPARE_TEX_UNIT;
     }
 }
 
diff --git a/src/gpu/gl/GrGpuGL.h b/src/gpu/gl/GrGpuGL.h
index f19981a..5830348 100644
--- a/src/gpu/gl/GrGpuGL.h
+++ b/src/gpu/gl/GrGpuGL.h
@@ -55,36 +55,8 @@
 
     bool programUnitTest();
 
+
 protected:
-
-    enum TriState {
-        kNo_TriState,
-        kYes_TriState,
-        kUnknown_TriState
-    };
-
-    struct {
-        size_t                  fVertexOffset;
-        GrVertexLayout          fVertexLayout;
-        const GrVertexBuffer*   fVertexBuffer;
-        const GrIndexBuffer*    fIndexBuffer;
-        bool                    fArrayPtrsDirty;
-    } fHWGeometryState;
-
-    enum UnpremulConversion {
-        kUpOnWrite_DownOnRead_UnpremulConversion,
-        kDownOnWrite_UpOnRead_UnpremulConversion
-    } fUnpremulConversion;
-
-    // last scissor / viewport scissor state seen by the GL.
-    struct {
-        bool        fScissorEnabled;
-        GrGLIRect   fScissorRect;
-        GrGLIRect   fViewportRect;
-    } fHWBounds;
-
-    const GrGLCaps& glCaps() const { return fGLContextInfo.caps(); }
-
     // GrGpu overrides
     virtual void onResetContext() SK_OVERRIDE;
 
@@ -146,6 +118,9 @@
                                int vertexCount,
                                int indexCount) SK_OVERRIDE;
 
+private:
+
+    const GrGLCaps& glCaps() const { return fGLContextInfo.caps(); }
 
     // binds texture unit in GL
     void setTextureUnit(int unitIdx);
@@ -182,7 +157,6 @@
 
     static bool BlendCoeffReferencesConstant(GrBlendCoeff coeff);
 
-private:
     // for readability of function impls
     typedef GrGLProgram::ProgramDesc ProgramDesc;
     typedef ProgramDesc::StageDesc   StageDesc;
@@ -318,12 +292,36 @@
     // GL program-related state
     ProgramCache*               fProgramCache;
     CachedData*                 fProgramData;
+    GrGLProgram                 fCurrentProgram;
+
+    ///////////////////////////////////////////////////////////////////////////
+    ///@name Caching of GL State
+    ///@{
+    int                         fHWActiveTextureUnitIdx;
     GrGLuint                    fHWProgramID;
     GrColor                     fHWConstAttribColor;
     GrColor                     fHWConstAttribCoverage;
-    GrGLProgram                 fCurrentProgram;
 
-    int fActiveTextureUnitIdx;
+    // last scissor / viewport scissor state seen by the GL.
+    struct {
+        bool        fScissorEnabled;
+        GrGLIRect   fScissorRect;
+        GrGLIRect   fViewportRect;
+    } fHWBounds;
+
+    enum TriState {
+        kNo_TriState,
+        kYes_TriState,
+        kUnknown_TriState
+    };
+
+    struct {
+        size_t                  fVertexOffset;
+        GrVertexLayout          fVertexLayout;
+        const GrVertexBuffer*   fVertexBuffer;
+        const GrIndexBuffer*    fIndexBuffer;
+        bool                    fArrayPtrsDirty;
+    } fHWGeometryState;
 
     struct {
         GrBlendCoeff    fSrcCoeff;
@@ -371,11 +369,17 @@
     TriState                fHWDitherEnabled;
     GrRenderTarget*         fHWBoundRenderTarget;
     GrTexture*              fHWBoundTextures[GrDrawState::kNumStages];
+    ///@}
 
     // we record what stencil format worked last time to hopefully exit early
     // from our loop that tries stencil formats and calls check fb status.
     int fLastSuccessfulStencilFmtIdx;
 
+    enum UnpremulConversion {
+        kUpOnWrite_DownOnRead_UnpremulConversion,
+        kDownOnWrite_UpOnRead_UnpremulConversion
+    } fUnpremulConversion;
+
     enum CanPreserveUnpremulRoundtrip {
         kUnknown_CanPreserveUnpremulRoundtrip,
         kNo_CanPreserveUnpremulRoundtrip,
diff --git a/src/gpu/gl/GrGpuGL_program.cpp b/src/gpu/gl/GrGpuGL_program.cpp
index 99847db..f383ffc 100644
--- a/src/gpu/gl/GrGpuGL_program.cpp
+++ b/src/gpu/gl/GrGpuGL_program.cpp
@@ -79,7 +79,7 @@
 }
 
 void GrGpuGL::DeleteProgram(const GrGLInterface* gl,
-                                   CachedData* programData) {
+                            CachedData* programData) {
     GR_GL_CALL(gl, DeleteShader(programData->fVShaderID));
     if (programData->fGShaderID) {
         GR_GL_CALL(gl, DeleteShader(programData->fGShaderID));
@@ -478,9 +478,9 @@
 #endif
 
 void GrGpuGL::setupGeometry(int* startVertex,
-                                    int* startIndex,
-                                    int vertexCount,
-                                    int indexCount) {
+                            int* startIndex,
+                            int vertexCount,
+                            int indexCount) {
 
     int newColorOffset;
     int newCoverageOffset;
@@ -635,9 +635,9 @@
 }
 
 void GrGpuGL::buildProgram(GrPrimitiveType type,
-                                  BlendOptFlags blendOpts,
-                                  GrBlendCoeff dstCoeff,
-                                  GrCustomStage** customStages) {
+                           BlendOptFlags blendOpts,
+                           GrBlendCoeff dstCoeff,
+                           GrCustomStage** customStages) {
     ProgramDesc& desc = fCurrentProgram.fProgramDesc;
     const GrDrawState& drawState = this->getDrawState();
 
