diff --git a/gn/gpu.gni b/gn/gpu.gni
index 5a7e75c..21206f6 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -10,7 +10,6 @@
 skia_gpu_sources = [
   "$_include/gpu/GrBlend.h",
   "$_include/gpu/GrBuffer.h",
-  "$_include/gpu/GrBufferAccess.h",
   "$_include/gpu/GrCaps.h",
   "$_include/gpu/GrClip.h",
   "$_include/gpu/GrColor.h",
diff --git a/include/gpu/GrBufferAccess.h b/include/gpu/GrBufferAccess.h
deleted file mode 100644
index a5d8f0a..0000000
--- a/include/gpu/GrBufferAccess.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef GrBufferAccess_DEFINED
-#define GrBufferAccess_DEFINED
-
-#include "GrBuffer.h"
-#include "GrGpuResourceRef.h"
-
-/**
- * Used to represent a texel buffer that will be read in a GrProcessor. It holds a GrBuffer along
- * with an associated offset and texel config.
- */
-class GrBufferAccess : public SkNoncopyable {
-public:
-    /**
-     * Must be initialized before adding to a GrProcessor's buffer access list.
-     */
-    void reset(GrPixelConfig texelConfig, GrBuffer* buffer,
-               GrShaderFlags visibility = kFragment_GrShaderFlag) {
-        fTexelConfig = texelConfig;
-        fBuffer.set(SkRef(buffer), kRead_GrIOType);
-        fVisibility = visibility;
-    }
-
-    bool operator==(const GrBufferAccess& that) const {
-        return fTexelConfig == that.fTexelConfig &&
-               this->buffer() == that.buffer() &&
-               fVisibility == that.fVisibility;
-    }
-
-    bool operator!=(const GrBufferAccess& that) const { return !(*this == that); }
-
-    GrPixelConfig texelConfig() const { return fTexelConfig; }
-    GrBuffer* buffer() const { return fBuffer.get(); }
-    GrShaderFlags visibility() const { return fVisibility; }
-
-    /**
-     * For internal use by GrProcessor.
-     */
-    const GrGpuResourceRef* getProgramBuffer() const { return &fBuffer;}
-
-private:
-    GrPixelConfig                 fTexelConfig;
-    GrTGpuResourceRef<GrBuffer>   fBuffer;
-    GrShaderFlags                 fVisibility;
-
-    typedef SkNoncopyable INHERITED;
-};
-
-#endif
diff --git a/include/gpu/GrProcessor.h b/include/gpu/GrProcessor.h
index f5f3842..e4f59ea 100644
--- a/include/gpu/GrProcessor.h
+++ b/include/gpu/GrProcessor.h
@@ -9,9 +9,11 @@
 #define GrProcessor_DEFINED
 
 #include "GrColor.h"
+#include "GrBuffer.h"
+#include "GrGpuResourceRef.h"
 #include "GrProcessorUnitTest.h"
 #include "GrProgramElement.h"
-#include "GrBufferAccess.h"
+#include "GrSamplerParams.h"
 #include "SkMath.h"
 #include "SkString.h"
 #include "../private/SkAtomics.h"
@@ -59,14 +61,15 @@
 class GrProcessor : public GrProgramElement {
 public:
     class TextureSampler;
+    class BufferAccess;
 
     virtual ~GrProcessor();
 
-    /** Human-meaningful string to identify this prcoessor; may be embedded
-        in generated shader code. */
+    /** Human-meaningful string to identify this prcoessor; may be embedded in generated shader
+        code. */
     virtual const char* name() const = 0;
 
-    // Human-readable dump of all information 
+    /** Human-readable dump of all information */
     virtual SkString dumpInfo() const {
         SkString str;
         str.appendf("Missing data");
@@ -83,13 +86,9 @@
 
     /** Returns the access pattern for the buffer at index. index must be valid according to
         numBuffers(). */
-    const GrBufferAccess& bufferAccess(int index) const {
-        return *fBufferAccesses[index];
-    }
+    const BufferAccess& bufferAccess(int index) const { return *fBufferAccesses[index]; }
 
-    /**
-     * Platform specific built-in features that a processor can request for the fragment shader.
-     */
+    /** Platform specific built-in features that a processor can request for the fragment shader. */
     enum RequiredFeatures {
         kNone_RequiredFeatures             = 0,
         kFragmentPosition_RequiredFeature  = 1 << 0,
@@ -110,9 +109,7 @@
         ::operator delete(target, placement);
     }
 
-    /**
-      * Helper for down-casting to a GrProcessor subclass
-      */
+    /** Helper for down-casting to a GrProcessor subclass */
     template <typename T> const T& cast() const { return *static_cast<const T*>(this); }
 
     uint32_t classID() const { SkASSERT(kIllegalProcessorClassID != fClassID); return fClassID; }
@@ -123,12 +120,11 @@
     /**
      * Subclasses call these from their constructor to register sampler sources. The processor
      * subclass manages the lifetime of the objects (these functions only store pointers). The
-     * TextureSampler and/or GrBufferAccess instances are typically member fields of the
-     * GrProcessor subclass. These must only be called from the constructor because GrProcessors
-     * are immutable.
+     * TextureSampler and/or BufferAccess instances are typically member fields of the GrProcessor
+     * subclass. These must only be called from the constructor because GrProcessors are immutable.
      */
     void addTextureSampler(const TextureSampler*);
-    void addBufferAccess(const GrBufferAccess* bufferAccess);
+    void addBufferAccess(const BufferAccess* bufferAccess);
 
     bool hasSameSamplers(const GrProcessor&) const;
 
@@ -170,7 +166,7 @@
 
     RequiredFeatures fRequiredFeatures;
     SkSTArray<4, const TextureSampler*, true>   fTextureSamplers;
-    SkSTArray<2, const GrBufferAccess*, true>   fBufferAccesses;
+    SkSTArray<2, const BufferAccess*, true>     fBufferAccesses;
 
     typedef GrProgramElement INHERITED;
 };
@@ -230,4 +226,45 @@
     typedef SkNoncopyable INHERITED;
 };
 
+/**
+ * Used to represent a texel buffer that will be read in a GrProcessor. It holds a GrBuffer along
+ * with an associated offset and texel config.
+ */
+class GrProcessor::BufferAccess : public SkNoncopyable {
+public:
+    /**
+     * Must be initialized before adding to a GrProcessor's buffer access list.
+     */
+    void reset(GrPixelConfig texelConfig, GrBuffer* buffer,
+               GrShaderFlags visibility = kFragment_GrShaderFlag) {
+        fTexelConfig = texelConfig;
+        fBuffer.set(SkRef(buffer), kRead_GrIOType);
+        fVisibility = visibility;
+    }
+
+    bool operator==(const BufferAccess& that) const {
+        return fTexelConfig == that.fTexelConfig &&
+               this->buffer() == that.buffer() &&
+               fVisibility == that.fVisibility;
+    }
+
+    bool operator!=(const BufferAccess& that) const { return !(*this == that); }
+
+    GrPixelConfig texelConfig() const { return fTexelConfig; }
+    GrBuffer* buffer() const { return fBuffer.get(); }
+    GrShaderFlags visibility() const { return fVisibility; }
+
+    /**
+     * For internal use by GrProcessor.
+     */
+    const GrGpuResourceRef* getProgramBuffer() const { return &fBuffer;}
+
+private:
+    GrPixelConfig                 fTexelConfig;
+    GrTGpuResourceRef<GrBuffer>   fBuffer;
+    GrShaderFlags                 fVisibility;
+
+    typedef SkNoncopyable INHERITED;
+};
+
 #endif
diff --git a/src/gpu/GrProcessor.cpp b/src/gpu/GrProcessor.cpp
index 89fc741..1e100e4 100644
--- a/src/gpu/GrProcessor.cpp
+++ b/src/gpu/GrProcessor.cpp
@@ -120,7 +120,7 @@
     this->addGpuResource(access->programTexture());
 }
 
-void GrProcessor::addBufferAccess(const GrBufferAccess* access) {
+void GrProcessor::addBufferAccess(const BufferAccess* access) {
     fBufferAccesses.push_back(access);
     this->addGpuResource(access->getProgramBuffer());
 }
diff --git a/src/gpu/GrProgramDesc.cpp b/src/gpu/GrProgramDesc.cpp
index 0976af9..cdbbc23 100644
--- a/src/gpu/GrProgramDesc.cpp
+++ b/src/gpu/GrProgramDesc.cpp
@@ -50,7 +50,7 @@
                              textureSampler.visibility(), caps);
     }
     for (; i < numSamplers; ++i) {
-        const GrBufferAccess& access = proc.bufferAccess(i - numTextureSamplers);
+        const GrProcessor::BufferAccess& access = proc.bufferAccess(i - numTextureSamplers);
         k16[i] = sampler_key(kBufferSampler_GrSLType, access.texelConfig(),
                              access.visibility(), caps);
     }
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
index 50cbdc1..27361e7 100644
--- a/src/gpu/gl/GrGLProgram.cpp
+++ b/src/gpu/gl/GrGLProgram.cpp
@@ -158,7 +158,7 @@
                           allowSRGBInputs, static_cast<GrGLTexture*>(sampler.texture()));
     }
     for (int i = 0; i < processor.numBuffers(); ++i) {
-        const GrBufferAccess& access = processor.bufferAccess(i);
+        const GrProcessor::BufferAccess& access = processor.bufferAccess(i);
         fGpu->bindTexelBuffer((*nextSamplerIdx)++, access.texelConfig(),
                               static_cast<GrGLBuffer*>(access.buffer()));
     }
diff --git a/src/gpu/glsl/GrGLSLFragmentProcessor.h b/src/gpu/glsl/GrGLSLFragmentProcessor.h
index 7add1eb..2189250 100644
--- a/src/gpu/glsl/GrGLSLFragmentProcessor.h
+++ b/src/gpu/glsl/GrGLSLFragmentProcessor.h
@@ -97,9 +97,9 @@
         @param texSamplers       Contains one entry for each TextureSampler  of the GrProcessor.
                                  These can be passed to the builder to emit texture reads in the
                                  generated code.
-        @param bufferSamplers    Contains one entry for each GrBufferAccess of the GrProcessor.
-                                 These can be passed to the builder to emit buffer reads in the
-                                 generated code.
+        @param bufferSamplers    Contains one entry for each BufferAccess of the GrProcessor. These
+                                 can be passed to the builder to emit buffer reads in the generated
+                                 code.
      */
     struct EmitArgs {
         EmitArgs(GrGLSLFPFragmentBuilder* fragBuilder,
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
index c4c3e68..1e78788 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
@@ -264,7 +264,7 @@
         GrShaderFlags texelBufferVisibility = kNone_GrShaderFlags;
 
         for (int b = 0; b < numBuffers; ++b) {
-            const GrBufferAccess& access = processor.bufferAccess(b);
+            const GrProcessor::BufferAccess& access = processor.bufferAccess(b);
             name.printf("BufferSampler_%d", outBufferSamplers->count());
             this->emitSampler(kBufferSampler_GrSLType, access.texelConfig(), name.c_str(),
                               access.visibility(), outBufferSamplers);
diff --git a/src/gpu/instanced/InstanceProcessor.h b/src/gpu/instanced/InstanceProcessor.h
index 0b3a16d..d54ffcd 100644
--- a/src/gpu/instanced/InstanceProcessor.h
+++ b/src/gpu/instanced/InstanceProcessor.h
@@ -9,7 +9,6 @@
 #define gr_instanced_InstanceProcessor_DEFINED
 
 #include "GrCaps.h"
-#include "GrBufferAccess.h"
 #include "GrGeometryProcessor.h"
 #include "instanced/InstancedRenderingTypes.h"
 
@@ -57,8 +56,8 @@
      */
     static GrCaps::InstancedSupport CheckSupport(const GrGLSLCaps&, const GrCaps&);
 
-    const BatchInfo   fBatchInfo;
-    GrBufferAccess    fParamsAccess;
+    const BatchInfo fBatchInfo;
+    BufferAccess    fParamsAccess;
 
     friend class GLInstancedRendering; // For CheckSupport.
 
