Remove GrGpuTextureCommandBuffer class and rename to GrOpsRenderPass.

Change-Id: Ia6e666a7bb986bb3dc769d25919580bca17b4748
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/236556
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrCaps.h b/src/gpu/GrCaps.h
index 02ff07e..b7229bc 100644
--- a/src/gpu/GrCaps.h
+++ b/src/gpu/GrCaps.h
@@ -121,7 +121,7 @@
         kCanMap_MapFlag     = 0x1,   //<! The resource can be mapped. Must be set for any of
                                      //   the other flags to have meaning.
         kSubset_MapFlag     = 0x2,   //<! The resource can be partially mapped.
-        kAsyncRead_MapFlag  = 0x4,   //<! Are maps for reading asynchronous WRT GrGpuCommandBuffers
+        kAsyncRead_MapFlag  = 0x4,   //<! Are maps for reading asynchronous WRT GrOpsRenderPass
                                      //   submitted to GrGpu.
     };
 
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp
index 987b956..a32240c 100644
--- a/src/gpu/GrDrawingManager.cpp
+++ b/src/gpu/GrDrawingManager.cpp
@@ -470,7 +470,7 @@
         }
     }
 
-    SkASSERT(!flushState->commandBuffer());
+    SkASSERT(!flushState->opsRenderPass());
     SkASSERT(fTokenTracker.nextDrawToken() == fTokenTracker.nextTokenToFlush());
 
     // We reset the flush state before the RenderTasks so that the last resources to be freed are
diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h
index 71e1557..a221cc7 100644
--- a/src/gpu/GrGpu.h
+++ b/src/gpu/GrGpu.h
@@ -14,7 +14,7 @@
 #include "include/private/SkTArray.h"
 #include "src/gpu/GrAllocator.h"
 #include "src/gpu/GrCaps.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/GrProgramDesc.h"
 #include "src/gpu/GrSamplePatternDictionary.h"
 #include "src/gpu/GrSwizzle.h"
@@ -310,16 +310,12 @@
         return fSamplePatternDictionary.retrieveSampleLocations(samplePatternKey);
     }
 
-    // Returns a GrGpuRTCommandBuffer which GrOpsTasks send draw commands to instead of directly
-    // to the Gpu object. The 'bounds' rect is the content rect of the destination.
-    virtual GrGpuRTCommandBuffer* getCommandBuffer(
-            GrRenderTarget*, GrSurfaceOrigin, const SkRect& bounds,
-            const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
-            const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) = 0;
-
-    // Returns a GrGpuTextureCommandBuffer which GrOpsTasks send texture commands to instead of
-    // directly to the Gpu object.
-    virtual GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) = 0;
+    // Returns a GrOpsRenderPass which GrOpsTasks send draw commands to instead of directly
+    // to the Gpu object. The 'bounds' rect is the content rect of the renderTarget.
+    virtual GrOpsRenderPass* getOpsRenderPass(
+            GrRenderTarget* renderTarget, GrSurfaceOrigin, const SkRect& bounds,
+            const GrOpsRenderPass::LoadAndStoreInfo&,
+            const GrOpsRenderPass::StencilLoadAndStoreInfo&) = 0;
 
     // Called by GrDrawingManager when flushing.
     // Provides a hook for post-flush actions (e.g. Vulkan command buffer submits). This will also
@@ -329,7 +325,7 @@
                                       SkSurface::BackendSurfaceAccess access, const GrFlushInfo&,
                                       const GrPrepareForExternalIORequests&);
 
-    virtual void submit(GrGpuCommandBuffer*) = 0;
+    virtual void submit(GrOpsRenderPass*) = 0;
 
     virtual GrFence SK_WARN_UNUSED_RESULT insertFence() = 0;
     virtual bool waitFence(GrFence, uint64_t timeout = 1000) = 0;
diff --git a/src/gpu/GrOpFlushState.cpp b/src/gpu/GrOpFlushState.cpp
index b8bb048..2705adf 100644
--- a/src/gpu/GrOpFlushState.cpp
+++ b/src/gpu/GrOpFlushState.cpp
@@ -30,14 +30,10 @@
     return *fGpu->caps();
 }
 
-GrGpuRTCommandBuffer* GrOpFlushState::rtCommandBuffer() {
-    return fCommandBuffer->asRTCommandBuffer();
-}
-
 void GrOpFlushState::executeDrawsAndUploadsForMeshDrawOp(
         const GrOp* op, const SkRect& chainBounds, GrProcessorSet&& processorSet,
         GrPipeline::InputFlags pipelineFlags, const GrUserStencilSettings* stencilSettings) {
-    SkASSERT(this->rtCommandBuffer());
+    SkASSERT(this->opsRenderPass());
 
     GrPipeline::InitArgs pipelineArgs;
     pipelineArgs.fInputFlags = pipelineFlags;
@@ -53,10 +49,10 @@
         GrDeferredUploadToken drawToken = fTokenTracker->nextTokenToFlush();
         while (fCurrUpload != fInlineUploads.end() &&
                fCurrUpload->fUploadBeforeToken == drawToken) {
-            this->rtCommandBuffer()->inlineUpload(this, fCurrUpload->fUpload);
+            this->opsRenderPass()->inlineUpload(this, fCurrUpload->fUpload);
             ++fCurrUpload;
         }
-        this->rtCommandBuffer()->draw(
+        this->opsRenderPass()->draw(
                 *fCurrDraw->fGeometryProcessor, *pipeline, fCurrDraw->fFixedDynamicState,
                 fCurrDraw->fDynamicStateArrays, fCurrDraw->fMeshes, fCurrDraw->fMeshCnt,
                 chainBounds);
diff --git a/src/gpu/GrOpFlushState.h b/src/gpu/GrOpFlushState.h
index c9178e2..09ac779 100644
--- a/src/gpu/GrOpFlushState.h
+++ b/src/gpu/GrOpFlushState.h
@@ -19,8 +19,7 @@
 #include "src/gpu/ops/GrMeshDrawOp.h"
 
 class GrGpu;
-class GrGpuCommandBuffer;
-class GrGpuRTCommandBuffer;
+class GrOpsRenderPass;
 class GrResourceProvider;
 
 /** Tracks the state across all the GrOps (really just the GrDrawOps) in a GrOpsTask flush. */
@@ -46,10 +45,8 @@
             GrPipeline::InputFlags = GrPipeline::InputFlags::kNone,
             const GrUserStencilSettings* = &GrUserStencilSettings::kUnused);
 
-    GrGpuCommandBuffer* commandBuffer() { return fCommandBuffer; }
-    // Helper function used by Ops that are only called via OpsTasks
-    GrGpuRTCommandBuffer* rtCommandBuffer();
-    void setCommandBuffer(GrGpuCommandBuffer* buffer) { fCommandBuffer = buffer; }
+    GrOpsRenderPass* opsRenderPass() { return fOpsRenderPass; }
+    void setOpsRenderPass(GrOpsRenderPass* renderPass) { fOpsRenderPass = renderPass; }
 
     GrGpu* gpu() { return fGpu; }
 
@@ -161,7 +158,7 @@
     GrGpu* fGpu;
     GrResourceProvider* fResourceProvider;
     GrTokenTracker* fTokenTracker;
-    GrGpuCommandBuffer* fCommandBuffer = nullptr;
+    GrOpsRenderPass* fOpsRenderPass = nullptr;
 
     // Variables that are used to track where we are in lists as ops are executed
     SkArenaAllocList<Draw>::Iter fCurrDraw;
diff --git a/src/gpu/GrGpuCommandBuffer.cpp b/src/gpu/GrOpsRenderPass.cpp
similarity index 87%
rename from src/gpu/GrGpuCommandBuffer.cpp
rename to src/gpu/GrOpsRenderPass.cpp
index 4817cf5..3876a42 100644
--- a/src/gpu/GrGpuCommandBuffer.cpp
+++ b/src/gpu/GrOpsRenderPass.cpp
@@ -5,7 +5,7 @@
 * found in the LICENSE file.
 */
 
-#include "src/gpu/GrGpuCommandBuffer.h"
+#include "src/gpu/GrOpsRenderPass.h"
 
 #include "include/core/SkRect.h"
 #include "include/gpu/GrContext.h"
@@ -18,7 +18,7 @@
 #include "src/gpu/GrRenderTarget.h"
 #include "src/gpu/GrRenderTargetPriv.h"
 
-void GrGpuRTCommandBuffer::clear(const GrFixedClip& clip, const SkPMColor4f& color) {
+void GrOpsRenderPass::clear(const GrFixedClip& clip, const SkPMColor4f& color) {
     SkASSERT(fRenderTarget);
     // A clear at this level will always be a true clear, so make sure clears were not supposed to
     // be redirected to draws instead
@@ -27,16 +27,16 @@
     this->onClear(clip, color);
 }
 
-void GrGpuRTCommandBuffer::clearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
+void GrOpsRenderPass::clearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
     // As above, make sure the stencil clear wasn't supposed to be a draw rect with stencil settings
     SkASSERT(!this->gpu()->caps()->performStencilClearsAsDraws());
     this->onClearStencilClip(clip, insideStencilMask);
 }
 
-bool GrGpuRTCommandBuffer::draw(const GrPrimitiveProcessor& primProc, const GrPipeline& pipeline,
-                                const GrPipeline::FixedDynamicState* fixedDynamicState,
-                                const GrPipeline::DynamicStateArrays* dynamicStateArrays,
-                                const GrMesh meshes[], int meshCount, const SkRect& bounds) {
+bool GrOpsRenderPass::draw(const GrPrimitiveProcessor& primProc, const GrPipeline& pipeline,
+                           const GrPipeline::FixedDynamicState* fixedDynamicState,
+                           const GrPipeline::DynamicStateArrays* dynamicStateArrays,
+                           const GrMesh meshes[], int meshCount, const SkRect& bounds) {
 #ifdef SK_DEBUG
     SkASSERT(!primProc.hasInstanceAttributes() || this->gpu()->caps()->instanceAttribSupport());
     for (int i = 0; i < meshCount; ++i) {
diff --git a/src/gpu/GrGpuCommandBuffer.h b/src/gpu/GrOpsRenderPass.h
similarity index 68%
rename from src/gpu/GrGpuCommandBuffer.h
rename to src/gpu/GrOpsRenderPass.h
index b242c06..b23ee56 100644
--- a/src/gpu/GrGpuCommandBuffer.h
+++ b/src/gpu/GrOpsRenderPass.h
@@ -5,8 +5,8 @@
 * found in the LICENSE file.
 */
 
-#ifndef GrGpuCommandBuffer_DEFINED
-#define GrGpuCommandBuffer_DEFINED
+#ifndef GrOpsRenderPass_DEFINED
+#define GrOpsRenderPass_DEFINED
 
 #include "include/core/SkDrawable.h"
 #include "src/gpu/GrPipeline.h"
@@ -23,44 +23,17 @@
 struct SkIRect;
 struct SkRect;
 
-class GrGpuRTCommandBuffer;
-
-class GrGpuCommandBuffer {
+/**
+ * The GrOpsRenderPass is a series of commands (draws, clears, and discards), which all target the
+ * same render target. It is possible that these commands execute immediately (GL), or get buffered
+ * up for later execution (Vulkan). GrOps execute into a GrOpsRenderPass.
+ */
+class GrOpsRenderPass {
 public:
-    virtual ~GrGpuCommandBuffer() {}
+    virtual ~GrOpsRenderPass() {}
 
     virtual void insertEventMarker(const char*) = 0;
 
-    virtual GrGpuRTCommandBuffer* asRTCommandBuffer() { return nullptr; }
-};
-
-class GrGpuTextureCommandBuffer : public GrGpuCommandBuffer{
-public:
-    void set(GrTexture* texture, GrSurfaceOrigin origin) {
-        SkASSERT(!fTexture);
-
-        fTexture = texture;
-    }
-
-protected:
-    GrGpuTextureCommandBuffer() : fTexture(nullptr) {}
-
-    GrGpuTextureCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin) : fTexture(texture) {}
-
-    GrTexture*      fTexture;
-
-private:
-    typedef GrGpuCommandBuffer INHERITED;
-};
-
-/**
- * The GrGpuRenderTargetCommandBuffer is a series of commands (draws, clears, and discards), which
- * all target the same render target. It is possible that these commands execute immediately (GL),
- * or get buffered up for later execution (Vulkan). GrOps will execute their draw commands into a
- * GrGpuCommandBuffer.
- */
-class GrGpuRTCommandBuffer : public GrGpuCommandBuffer {
-public:
     struct LoadAndStoreInfo {
         GrLoadOp    fLoadOp;
         GrStoreOp   fStoreOp;
@@ -74,10 +47,8 @@
         GrStoreOp fStoreOp;
     };
 
-    GrGpuRTCommandBuffer* asRTCommandBuffer() { return this; }
-
     virtual void begin() = 0;
-    // Signals the end of recording to the command buffer and that it can now be submitted.
+    // Signals the end of recording to the GrOpsRenderPass and that it can now be submitted.
     virtual void end() = 0;
 
     // We pass in an array of meshCount GrMesh to the draw. The backend should loop over each
@@ -108,9 +79,9 @@
     virtual void executeDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler>) {}
 
 protected:
-    GrGpuRTCommandBuffer() : fOrigin(kTopLeft_GrSurfaceOrigin), fRenderTarget(nullptr) {}
+    GrOpsRenderPass() : fOrigin(kTopLeft_GrSurfaceOrigin), fRenderTarget(nullptr) {}
 
-    GrGpuRTCommandBuffer(GrRenderTarget* rt, GrSurfaceOrigin origin)
+    GrOpsRenderPass(GrRenderTarget* rt, GrSurfaceOrigin origin)
             : fOrigin(origin)
             , fRenderTarget(rt) {
     }
@@ -142,7 +113,7 @@
 
     virtual void onClearStencilClip(const GrFixedClip&, bool insideStencilMask) = 0;
 
-    typedef GrGpuCommandBuffer INHERITED;
+    typedef GrOpsRenderPass INHERITED;
 };
 
 #endif
diff --git a/src/gpu/GrOpsTask.cpp b/src/gpu/GrOpsTask.cpp
index bcf0034..98f0c61 100644
--- a/src/gpu/GrOpsTask.cpp
+++ b/src/gpu/GrOpsTask.cpp
@@ -14,9 +14,9 @@
 #include "src/gpu/GrAuditTrail.h"
 #include "src/gpu/GrCaps.h"
 #include "src/gpu/GrGpu.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrMemoryPool.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/GrRecordingContextPriv.h"
 #include "src/gpu/GrRenderTargetContext.h"
 #include "src/gpu/GrResourceAllocator.h"
@@ -414,14 +414,14 @@
     }
 }
 
-static GrGpuRTCommandBuffer* create_command_buffer(GrGpu* gpu,
-                                                   GrRenderTarget* rt,
-                                                   GrSurfaceOrigin origin,
-                                                   const SkRect& bounds,
-                                                   GrLoadOp colorLoadOp,
-                                                   const SkPMColor4f& loadClearColor,
-                                                   GrLoadOp stencilLoadOp) {
-    const GrGpuRTCommandBuffer::LoadAndStoreInfo kColorLoadStoreInfo {
+static GrOpsRenderPass* create_command_buffer(GrGpu* gpu,
+                                              GrRenderTarget* rt,
+                                              GrSurfaceOrigin origin,
+                                              const SkRect& bounds,
+                                              GrLoadOp colorLoadOp,
+                                              const SkPMColor4f& loadClearColor,
+                                              GrLoadOp stencilLoadOp) {
+    const GrOpsRenderPass::LoadAndStoreInfo kColorLoadStoreInfo {
         colorLoadOp,
         GrStoreOp::kStore,
         loadClearColor
@@ -432,12 +432,12 @@
     // to stop splitting up higher level OpsTasks for copyOps to achieve that.
     // Note: we would still need SB loads and stores but they would happen at a
     // lower level (inside the VK command buffer).
-    const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo stencilLoadAndStoreInfo {
+    const GrOpsRenderPass::StencilLoadAndStoreInfo stencilLoadAndStoreInfo {
         stencilLoadOp,
         GrStoreOp::kStore,
     };
 
-    return gpu->getCommandBuffer(rt, origin, bounds, kColorLoadStoreInfo, stencilLoadAndStoreInfo);
+    return gpu->getOpsRenderPass(rt, origin, bounds, kColorLoadStoreInfo, stencilLoadAndStoreInfo);
 }
 
 // TODO: this is where GrOp::renderTarget is used (which is fine since it
@@ -459,7 +459,7 @@
              !flushState->gpu()->caps()->performColorClearsAsDraws());
     SkASSERT(fStencilLoadOp != GrLoadOp::kClear ||
              !flushState->gpu()->caps()->performStencilClearsAsDraws());
-    GrGpuRTCommandBuffer* commandBuffer = create_command_buffer(
+    GrOpsRenderPass* renderPass = create_command_buffer(
                                                     flushState->gpu(),
                                                     fTarget->peekRenderTarget(),
                                                     fTarget->origin(),
@@ -467,8 +467,8 @@
                                                     fColorLoadOp,
                                                     fLoadClearColor,
                                                     fStencilLoadOp);
-    flushState->setCommandBuffer(commandBuffer);
-    commandBuffer->begin();
+    flushState->setOpsRenderPass(renderPass);
+    renderPass->begin();
 
     // Draw all the generated geometry.
     for (const auto& chain : fOpChains) {
@@ -492,9 +492,9 @@
         flushState->setOpArgs(nullptr);
     }
 
-    commandBuffer->end();
-    flushState->gpu()->submit(commandBuffer);
-    flushState->setCommandBuffer(nullptr);
+    renderPass->end();
+    flushState->gpu()->submit(renderPass);
+    flushState->setOpsRenderPass(nullptr);
 
     return true;
 }
diff --git a/src/gpu/ccpr/GrCCCoverageProcessor.cpp b/src/gpu/ccpr/GrCCCoverageProcessor.cpp
index cd635e4..b6ec180 100644
--- a/src/gpu/ccpr/GrCCCoverageProcessor.cpp
+++ b/src/gpu/ccpr/GrCCCoverageProcessor.cpp
@@ -8,8 +8,8 @@
 #include "src/gpu/ccpr/GrCCCoverageProcessor.h"
 
 #include "src/core/SkMakeUnique.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/ccpr/GrCCConicShader.h"
 #include "src/gpu/ccpr/GrCCCubicShader.h"
 #include "src/gpu/ccpr/GrCCQuadraticShader.h"
@@ -200,6 +200,6 @@
         const GrMesh meshes[], int meshCount, const SkRect& drawBounds) const {
     GrPipeline::DynamicStateArrays dynamicStateArrays;
     dynamicStateArrays.fScissorRects = scissorRects;
-    GrGpuRTCommandBuffer* cmdBuff = flushState->rtCommandBuffer();
-    cmdBuff->draw(*this, pipeline, nullptr, &dynamicStateArrays, meshes, meshCount, drawBounds);
+    GrOpsRenderPass* renderPass = flushState->opsRenderPass();
+    renderPass->draw(*this, pipeline, nullptr, &dynamicStateArrays, meshes, meshCount, drawBounds);
 }
diff --git a/src/gpu/ccpr/GrCCFiller.cpp b/src/gpu/ccpr/GrCCFiller.cpp
index 79fbc73..9c09b4a 100644
--- a/src/gpu/ccpr/GrCCFiller.cpp
+++ b/src/gpu/ccpr/GrCCFiller.cpp
@@ -12,7 +12,6 @@
 #include "src/core/SkMathPriv.h"
 #include "src/core/SkPathPriv.h"
 #include "src/gpu/GrCaps.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrOnFlushResourceProvider.h"
 #include "src/gpu/GrOpFlushState.h"
 #include <stdlib.h>
diff --git a/src/gpu/ccpr/GrCCPathProcessor.cpp b/src/gpu/ccpr/GrCCPathProcessor.cpp
index 3a88698..acc5613 100644
--- a/src/gpu/ccpr/GrCCPathProcessor.cpp
+++ b/src/gpu/ccpr/GrCCPathProcessor.cpp
@@ -8,8 +8,8 @@
 #include "src/gpu/ccpr/GrCCPathProcessor.h"
 
 #include "include/gpu/GrTexture.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrOnFlushResourceProvider.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/GrTexturePriv.h"
 #include "src/gpu/ccpr/GrCCPerFlushResources.h"
 #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
@@ -141,8 +141,8 @@
                              baseInstance, enablePrimitiveRestart);
     mesh.setVertexData(resources.refVertexBuffer());
 
-    flushState->rtCommandBuffer()->draw(*this, pipeline, fixedDynamicState, nullptr, &mesh, 1,
-                                        bounds);
+    flushState->opsRenderPass()->draw(*this, pipeline, fixedDynamicState, nullptr, &mesh, 1,
+                                      bounds);
 }
 
 void GrCCPathProcessor::Impl::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) {
diff --git a/src/gpu/ccpr/GrCCStroker.cpp b/src/gpu/ccpr/GrCCStroker.cpp
index 2829a2d..b432d60 100644
--- a/src/gpu/ccpr/GrCCStroker.cpp
+++ b/src/gpu/ccpr/GrCCStroker.cpp
@@ -9,8 +9,8 @@
 
 #include "include/core/SkStrokeRec.h"
 #include "src/core/SkPathPriv.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrOnFlushResourceProvider.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/ccpr/GrCCCoverageProcessor.h"
 #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
 #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h"
@@ -775,9 +775,9 @@
     SkASSERT(fMeshesBuffer.count() == fScissorsBuffer.count());
     GrPipeline::DynamicStateArrays dynamicStateArrays;
     dynamicStateArrays.fScissorRects = fScissorsBuffer.begin();
-    flushState->rtCommandBuffer()->draw(processor, pipeline, nullptr, &dynamicStateArrays,
-                                        fMeshesBuffer.begin(), fMeshesBuffer.count(),
-                                        SkRect::Make(drawBounds));
+    flushState->opsRenderPass()->draw(processor, pipeline, nullptr, &dynamicStateArrays,
+                                      fMeshesBuffer.begin(), fMeshesBuffer.count(),
+                                      SkRect::Make(drawBounds));
     // Don't call reset(), as that also resets the reserve count.
     fMeshesBuffer.pop_back_n(fMeshesBuffer.count());
     fScissorsBuffer.pop_back_n(fScissorsBuffer.count());
diff --git a/src/gpu/ccpr/GrStencilAtlasOp.cpp b/src/gpu/ccpr/GrStencilAtlasOp.cpp
index 7192ee9..4f2e357 100644
--- a/src/gpu/ccpr/GrStencilAtlasOp.cpp
+++ b/src/gpu/ccpr/GrStencilAtlasOp.cpp
@@ -8,8 +8,8 @@
 #include "src/gpu/ccpr/GrStencilAtlasOp.h"
 
 #include "include/private/GrRecordingContext.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/GrRecordingContextPriv.h"
 #include "src/gpu/ccpr/GrCCPerFlushResources.h"
 #include "src/gpu/ccpr/GrSampleMaskProcessor.h"
@@ -129,7 +129,7 @@
             fResources->refStencilResolveBuffer(),
             fEndStencilResolveInstance - fBaseStencilResolveInstance, fBaseStencilResolveInstance,
             4);
-    flushState->rtCommandBuffer()->draw(
+    flushState->opsRenderPass()->draw(
             StencilResolveProcessor(), resolvePipeline, &scissorRectState, nullptr, &mesh, 1,
             SkRect::Make(drawBoundsRect));
 }
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 9be58c5..4660793 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -32,7 +32,7 @@
 #include "src/gpu/GrTexturePriv.h"
 #include "src/gpu/gl/GrGLBuffer.h"
 #include "src/gpu/gl/GrGLGpu.h"
-#include "src/gpu/gl/GrGLGpuCommandBuffer.h"
+#include "src/gpu/gl/GrGLOpsRenderPass.h"
 #include "src/gpu/gl/GrGLSemaphore.h"
 #include "src/gpu/gl/GrGLStencilAttachment.h"
 #include "src/gpu/gl/GrGLTextureRenderTarget.h"
@@ -2294,25 +2294,16 @@
                                           dstColorType, buffer, rowPixelWidth);
 }
 
-GrGpuRTCommandBuffer* GrGLGpu::getCommandBuffer(
+GrOpsRenderPass* GrGLGpu::getOpsRenderPass(
         GrRenderTarget* rt, GrSurfaceOrigin origin, const SkRect& bounds,
-        const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
-        const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
-    if (!fCachedRTCommandBuffer) {
-        fCachedRTCommandBuffer.reset(new GrGLGpuRTCommandBuffer(this));
+        const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+        const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
+    if (!fCachedOpsRenderPass) {
+        fCachedOpsRenderPass.reset(new GrGLOpsRenderPass(this));
     }
 
-    fCachedRTCommandBuffer->set(rt, origin, colorInfo, stencilInfo);
-    return fCachedRTCommandBuffer.get();
-}
-
-GrGpuTextureCommandBuffer* GrGLGpu::getCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin) {
-    if (!fCachedTexCommandBuffer) {
-        fCachedTexCommandBuffer.reset(new GrGLGpuTextureCommandBuffer(this));
-    }
-
-    fCachedTexCommandBuffer->set(texture, origin);
-    return fCachedTexCommandBuffer.get();
+    fCachedOpsRenderPass->set(rt, origin, colorInfo, stencilInfo);
+    return fCachedOpsRenderPass.get();
 }
 
 void GrGLGpu::flushRenderTarget(GrGLRenderTarget* target, GrSurfaceOrigin origin,
@@ -4145,14 +4136,10 @@
     }
 }
 
-void GrGLGpu::submit(GrGpuCommandBuffer* buffer) {
-    if (buffer->asRTCommandBuffer()) {
-        SkASSERT(fCachedRTCommandBuffer.get() == buffer);
-        fCachedRTCommandBuffer->reset();
-    } else {
-        SkASSERT(fCachedTexCommandBuffer.get() == buffer);
-        fCachedTexCommandBuffer->reset();
-    }
+void GrGLGpu::submit(GrOpsRenderPass* renderPass) {
+    // The GrGLOpsRenderPass doesn't buffer ops so there is nothing to do here
+    SkASSERT(fCachedOpsRenderPass.get() == renderPass);
+    fCachedOpsRenderPass->reset();
 }
 
 GrFence SK_WARN_UNUSED_RESULT GrGLGpu::insertFence() {
diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h
index 5787096..d274a25 100644
--- a/src/gpu/gl/GrGLGpu.h
+++ b/src/gpu/gl/GrGLGpu.h
@@ -26,8 +26,7 @@
 #include "src/gpu/gl/GrGLVertexArray.h"
 
 class GrGLBuffer;
-class GrGLGpuRTCommandBuffer;
-class GrGLGpuTextureCommandBuffer;
+class GrGLOpsRenderPass;
 class GrPipeline;
 class GrSwizzle;
 
@@ -77,9 +76,9 @@
     // If the caller wishes to bind an index buffer to a specific VAO, it can call glBind directly.
     GrGLenum bindBuffer(GrGpuBufferType type, const GrBuffer*);
 
-    // The GrGLGpuRTCommandBuffer does not buffer up draws before submitting them to the gpu.
+    // The GrGLOpsRenderPass does not buffer up draws before submitting them to the gpu.
     // Thus this is the implementation of the draw call for the corresponding passthrough function
-    // on GrGLRTGpuCommandBuffer.
+    // on GrGLOpsRenderPass.
     void draw(GrRenderTarget*, GrSurfaceOrigin,
               const GrPrimitiveProcessor&,
               const GrPipeline&,
@@ -107,14 +106,14 @@
                                        const GrBuffer* instanceBuffer, int instanceCount,
                                        int baseInstance, GrPrimitiveRestart) final;
 
-    // The GrGLGpuRTCommandBuffer does not buffer up draws before submitting them to the gpu.
+    // The GrGLOpsRenderPass does not buffer up draws before submitting them to the gpu.
     // Thus this is the implementation of the clear call for the corresponding passthrough function
-    // on GrGLGpuRTCommandBuffer.
+    // on GrGLOpsRenderPass.
     void clear(const GrFixedClip&, const SkPMColor4f&, GrRenderTarget*, GrSurfaceOrigin);
 
-    // The GrGLGpuRTCommandBuffer does not buffer up draws before submitting them to the gpu.
+    // The GrGLOpsRenderPass does not buffer up draws before submitting them to the gpu.
     // Thus this is the implementation of the clearStencil call for the corresponding passthrough
-    // function on GrGLGpuRTCommandBuffer.
+    // function on GrGLOpsrenderPass.
     void clearStencilClip(const GrFixedClip&, bool insideStencilMask,
                           GrRenderTarget*, GrSurfaceOrigin);
 
@@ -122,12 +121,10 @@
     // stencil buffer as not dirty?
     void clearStencil(GrRenderTarget*, int clearValue);
 
-    GrGpuRTCommandBuffer* getCommandBuffer(
+    GrOpsRenderPass* getOpsRenderPass(
             GrRenderTarget*, GrSurfaceOrigin, const SkRect&,
-            const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
-            const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override;
-
-    GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) override;
+            const GrOpsRenderPass::LoadAndStoreInfo&,
+            const GrOpsRenderPass::StencilLoadAndStoreInfo&) override;
 
     void invalidateBoundRenderTarget() {
         fHWBoundRenderTargetUniqueID.makeInvalid();
@@ -155,7 +152,7 @@
     void testingOnly_flushGpuAndSync() override;
 #endif
 
-    void submit(GrGpuCommandBuffer* buffer) override;
+    void submit(GrOpsRenderPass* renderPass) override;
 
     GrFence SK_WARN_UNUSED_RESULT insertFence() override;
     bool waitFence(GrFence, uint64_t timeout) override;
@@ -681,8 +678,7 @@
     class SamplerObjectCache;
     std::unique_ptr<SamplerObjectCache> fSamplerObjectCache;
 
-    std::unique_ptr<GrGLGpuRTCommandBuffer>      fCachedRTCommandBuffer;
-    std::unique_ptr<GrGLGpuTextureCommandBuffer> fCachedTexCommandBuffer;
+    std::unique_ptr<GrGLOpsRenderPass> fCachedOpsRenderPass;
 
     struct FinishCallback {
         GrGpuFinishedProc fCallback;
diff --git a/src/gpu/gl/GrGLGpuCommandBuffer.cpp b/src/gpu/gl/GrGLOpsRenderPass.cpp
similarity index 73%
rename from src/gpu/gl/GrGLGpuCommandBuffer.cpp
rename to src/gpu/gl/GrGLOpsRenderPass.cpp
index 1412aa3..dd24c68 100644
--- a/src/gpu/gl/GrGLGpuCommandBuffer.cpp
+++ b/src/gpu/gl/GrGLOpsRenderPass.cpp
@@ -5,13 +5,13 @@
  * found in the LICENSE file.
  */
 
-#include "src/gpu/gl/GrGLGpuCommandBuffer.h"
+#include "src/gpu/gl/GrGLOpsRenderPass.h"
 
 #include "src/gpu/GrContextPriv.h"
 #include "src/gpu/GrFixedClip.h"
 #include "src/gpu/GrRenderTargetPriv.h"
 
-void GrGLGpuRTCommandBuffer::begin() {
+void GrGLOpsRenderPass::begin() {
     if (GrLoadOp::kClear == fColorLoadAndStoreInfo.fLoadOp) {
         fGpu->clear(GrFixedClip::Disabled(), fColorLoadAndStoreInfo.fClearColor,
                     fRenderTarget, fOrigin);
@@ -24,9 +24,9 @@
     }
 }
 
-void GrGLGpuRTCommandBuffer::set(GrRenderTarget* rt, GrSurfaceOrigin origin,
-                                 const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
-                                 const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
+void GrGLOpsRenderPass::set(GrRenderTarget* rt, GrSurfaceOrigin origin,
+                            const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+                            const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
     SkASSERT(fGpu);
     SkASSERT(!fRenderTarget);
     SkASSERT(fGpu == rt->getContext()->priv().getGpu());
diff --git a/src/gpu/gl/GrGLGpuCommandBuffer.h b/src/gpu/gl/GrGLOpsRenderPass.h
similarity index 65%
rename from src/gpu/gl/GrGLGpuCommandBuffer.h
rename to src/gpu/gl/GrGLOpsRenderPass.h
index 7d61a19..998ef24 100644
--- a/src/gpu/gl/GrGLGpuCommandBuffer.h
+++ b/src/gpu/gl/GrGLOpsRenderPass.h
@@ -5,10 +5,10 @@
  * found in the LICENSE file.
  */
 
-#ifndef GrGLGpuCommandBuffer_DEFINED
-#define GrGLGpuCommandBuffer_DEFINED
+#ifndef GrGLOpsRenderPass_DEFINED
+#define GrGLOpsRenderPass_DEFINED
 
-#include "src/gpu/GrGpuCommandBuffer.h"
+#include "src/gpu/GrOpsRenderPass.h"
 
 #include "src/gpu/GrOpFlushState.h"
 #include "src/gpu/gl/GrGLGpu.h"
@@ -17,32 +17,14 @@
 class GrGLGpu;
 class GrGLRenderTarget;
 
-class GrGLGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer {
-public:
-    GrGLGpuTextureCommandBuffer(GrGLGpu* gpu) : fGpu(gpu) {}
-
-    void insertEventMarker(const char* msg) override {
-        fGpu->insertEventMarker(msg);
-    }
-
-    void reset() {
-        fTexture = nullptr;
-    }
-
-private:
-    GrGLGpu* fGpu;
-
-    typedef GrGpuTextureCommandBuffer INHERITED;
-};
-
-class GrGLGpuRTCommandBuffer : public GrGpuRTCommandBuffer {
+class GrGLOpsRenderPass : public GrOpsRenderPass {
 /**
  * We do not actually buffer up draws or do any work in the this class for GL. Instead commands
  * are immediately sent to the gpu to execute. Thus all the commands in this class are simply
  * pass through functions to corresponding calls in the GrGLGpu class.
  */
 public:
-    GrGLGpuRTCommandBuffer(GrGLGpu* gpu) : fGpu(gpu) {}
+    GrGLOpsRenderPass(GrGLGpu* gpu) : fGpu(gpu) {}
 
     void begin() override;
     void end() override {}
@@ -56,8 +38,8 @@
     }
 
     void set(GrRenderTarget*, GrSurfaceOrigin,
-             const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
-             const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&);
+             const GrOpsRenderPass::LoadAndStoreInfo&,
+             const GrOpsRenderPass::StencilLoadAndStoreInfo&);
 
     void reset() {
         fRenderTarget = nullptr;
@@ -85,11 +67,11 @@
         fGpu->clearStencilClip(clip, insideStencilMask, fRenderTarget, fOrigin);
     }
 
-    GrGLGpu*                                      fGpu;
-    GrGpuRTCommandBuffer::LoadAndStoreInfo        fColorLoadAndStoreInfo;
-    GrGpuRTCommandBuffer::StencilLoadAndStoreInfo fStencilLoadAndStoreInfo;
+    GrGLGpu*                                 fGpu;
+    GrOpsRenderPass::LoadAndStoreInfo        fColorLoadAndStoreInfo;
+    GrOpsRenderPass::StencilLoadAndStoreInfo fStencilLoadAndStoreInfo;
 
-    typedef GrGpuRTCommandBuffer INHERITED;
+    typedef GrOpsRenderPass INHERITED;
 };
 
 #endif
diff --git a/src/gpu/mock/GrMockGpu.cpp b/src/gpu/mock/GrMockGpu.cpp
index a2515bd..8101da8 100644
--- a/src/gpu/mock/GrMockGpu.cpp
+++ b/src/gpu/mock/GrMockGpu.cpp
@@ -8,7 +8,7 @@
 #include "src/gpu/mock/GrMockBuffer.h"
 #include "src/gpu/mock/GrMockCaps.h"
 #include "src/gpu/mock/GrMockGpu.h"
-#include "src/gpu/mock/GrMockGpuCommandBuffer.h"
+#include "src/gpu/mock/GrMockOpsRenderPass.h"
 #include "src/gpu/mock/GrMockStencilAttachment.h"
 #include "src/gpu/mock/GrMockTexture.h"
 #include <atomic>
@@ -52,30 +52,18 @@
     return sk_sp<GrGpu>(new GrMockGpu(context, *mockOptions, contextOptions));
 }
 
-GrGpuRTCommandBuffer* GrMockGpu::getCommandBuffer(
+GrOpsRenderPass* GrMockGpu::getOpsRenderPass(
                                 GrRenderTarget* rt, GrSurfaceOrigin origin, const SkRect& bounds,
-                                const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
-                                const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) {
-    return new GrMockGpuRTCommandBuffer(this, rt, origin, colorInfo);
+                                const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+                                const GrOpsRenderPass::StencilLoadAndStoreInfo&) {
+    return new GrMockOpsRenderPass(this, rt, origin, colorInfo);
 }
 
-GrGpuTextureCommandBuffer* GrMockGpu::getCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin) {
-    return new GrMockGpuTextureCommandBuffer(texture, origin);
-}
-
-void GrMockGpu::submit(GrGpuCommandBuffer* buffer) {
-    if (buffer->asRTCommandBuffer()) {
-        this->submitCommandBuffer(
-                        static_cast<GrMockGpuRTCommandBuffer*>(buffer->asRTCommandBuffer()));
-    }
-
-    delete buffer;
-}
-
-void GrMockGpu::submitCommandBuffer(const GrMockGpuRTCommandBuffer* cmdBuffer) {
-    for (int i = 0; i < cmdBuffer->numDraws(); ++i) {
+void GrMockGpu::submit(GrOpsRenderPass* renderPass) {
+    for (int i = 0; i < static_cast<GrMockOpsRenderPass*>(renderPass)->numDraws(); ++i) {
         fStats.incNumDraws();
     }
+    delete renderPass;
 }
 
 GrMockGpu::GrMockGpu(GrContext* context, const GrMockOptions& options,
diff --git a/src/gpu/mock/GrMockGpu.h b/src/gpu/mock/GrMockGpu.h
index 26edf8a..c0ab9c5 100644
--- a/src/gpu/mock/GrMockGpu.h
+++ b/src/gpu/mock/GrMockGpu.h
@@ -14,7 +14,7 @@
 #include "src/gpu/GrRenderTarget.h"
 #include "src/gpu/GrSemaphore.h"
 
-class GrMockGpuRTCommandBuffer;
+class GrMockOpsRenderPass;
 struct GrMockOptions;
 class GrPipeline;
 
@@ -24,12 +24,9 @@
 
     ~GrMockGpu() override {}
 
-    GrGpuRTCommandBuffer* getCommandBuffer(
-                                    GrRenderTarget*, GrSurfaceOrigin, const SkRect&,
-                                    const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
-                                    const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override;
-
-    GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) override;
+    GrOpsRenderPass* getOpsRenderPass(GrRenderTarget*, GrSurfaceOrigin, const SkRect&,
+                                      const GrOpsRenderPass::LoadAndStoreInfo&,
+                                      const GrOpsRenderPass::StencilLoadAndStoreInfo&) override;
 
     GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; }
     bool waitFence(GrFence, uint64_t) override { return true; }
@@ -45,15 +42,13 @@
     void waitSemaphore(sk_sp<GrSemaphore> semaphore) override {}
     sk_sp<GrSemaphore> prepareTextureForCrossContextUsage(GrTexture*) override { return nullptr; }
 
-    void submit(GrGpuCommandBuffer* buffer) override;
+    void submit(GrOpsRenderPass* renderPass) override;
 
     void checkFinishProcs() override {}
 
 private:
     GrMockGpu(GrContext* context, const GrMockOptions&, const GrContextOptions&);
 
-    void submitCommandBuffer(const GrMockGpuRTCommandBuffer*);
-
     void onResetContext(uint32_t resetBits) override {}
 
     void querySampleLocations(GrRenderTarget*, SkTArray<SkPoint>* sampleLocations) override;
diff --git a/src/gpu/mock/GrMockGpuCommandBuffer.h b/src/gpu/mock/GrMockOpsRenderPass.h
similarity index 67%
rename from src/gpu/mock/GrMockGpuCommandBuffer.h
rename to src/gpu/mock/GrMockOpsRenderPass.h
index 7cc4ea1..863f989 100644
--- a/src/gpu/mock/GrMockGpuCommandBuffer.h
+++ b/src/gpu/mock/GrMockOpsRenderPass.h
@@ -5,32 +5,18 @@
  * found in the LICENSE file.
  */
 
-#ifndef GrMockGpuCommandBuffer_DEFINED
-#define GrMockGpuCommandBuffer_DEFINED
+#ifndef GrMockOpsRenderPass_DEFINED
+#define GrMockOpsRenderPass_DEFINED
 
-#include "src/gpu/GrGpuCommandBuffer.h"
+#include "src/gpu/GrOpsRenderPass.h"
 
 #include "src/gpu/GrTexturePriv.h"
 #include "src/gpu/mock/GrMockGpu.h"
 
-class GrMockGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer {
+class GrMockOpsRenderPass : public GrOpsRenderPass {
 public:
-    GrMockGpuTextureCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin)
-        : INHERITED(texture, origin) {
-    }
-
-    ~GrMockGpuTextureCommandBuffer() override {}
-
-    void insertEventMarker(const char*) override {}
-
-private:
-    typedef GrGpuTextureCommandBuffer INHERITED;
-};
-
-class GrMockGpuRTCommandBuffer : public GrGpuRTCommandBuffer {
-public:
-    GrMockGpuRTCommandBuffer(GrMockGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
-                             LoadAndStoreInfo colorInfo)
+    GrMockOpsRenderPass(GrMockGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
+                        LoadAndStoreInfo colorInfo)
             : INHERITED(rt, origin)
             , fGpu(gpu)
             , fColorLoadOp(colorInfo.fLoadOp) {
@@ -71,7 +57,7 @@
     GrLoadOp fColorLoadOp;
     int fNumDraws = 0;
 
-    typedef GrGpuRTCommandBuffer INHERITED;
+    typedef GrOpsRenderPass INHERITED;
 };
 
 #endif
diff --git a/src/gpu/mtl/GrMtlCommandBuffer.h b/src/gpu/mtl/GrMtlCommandBuffer.h
index 01157ed..f04e278 100644
--- a/src/gpu/mtl/GrMtlCommandBuffer.h
+++ b/src/gpu/mtl/GrMtlCommandBuffer.h
@@ -14,7 +14,7 @@
 
 class GrMtlGpu;
 class GrMtlPipelineState;
-class GrMtlGpuRTCommandBuffer;
+class GrMtlOpsRenderPass;
 
 class GrMtlCommandBuffer {
 public:
@@ -26,7 +26,7 @@
     id<MTLBlitCommandEncoder> getBlitCommandEncoder();
     id<MTLRenderCommandEncoder> getRenderCommandEncoder(MTLRenderPassDescriptor*,
                                                         const GrMtlPipelineState*,
-                                                        GrMtlGpuRTCommandBuffer* gpuCommandBuffer);
+                                                        GrMtlOpsRenderPass* opsRenderPass);
 
     void addCompletedHandler(MTLCommandBufferHandler block) {
         [fCmdBuffer addCompletedHandler:block];
diff --git a/src/gpu/mtl/GrMtlCommandBuffer.mm b/src/gpu/mtl/GrMtlCommandBuffer.mm
index c6b3480..45d6a0a 100644
--- a/src/gpu/mtl/GrMtlCommandBuffer.mm
+++ b/src/gpu/mtl/GrMtlCommandBuffer.mm
@@ -6,8 +6,9 @@
  */
 
 #include "src/gpu/mtl/GrMtlCommandBuffer.h"
+
 #include "src/gpu/mtl/GrMtlGpu.h"
-#include "src/gpu/mtl/GrMtlGpuCommandBuffer.h"
+#include "src/gpu/mtl/GrMtlOpsRenderPass.h"
 #include "src/gpu/mtl/GrMtlPipelineState.h"
 
 #if !__has_feature(objc_arc)
@@ -70,7 +71,7 @@
 
 id<MTLRenderCommandEncoder> GrMtlCommandBuffer::getRenderCommandEncoder(
         MTLRenderPassDescriptor* descriptor, const GrMtlPipelineState* pipelineState,
-        GrMtlGpuRTCommandBuffer* gpuCommandBuffer) {
+        GrMtlOpsRenderPass* opsRenderPass) {
     if (nil != fPreviousRenderPassDescriptor) {
         if (compatible(fPreviousRenderPassDescriptor.colorAttachments[0],
                        descriptor.colorAttachments[0], pipelineState) &&
@@ -82,8 +83,8 @@
 
     this->endAllEncoding();
     fActiveRenderCommandEncoder = [fCmdBuffer renderCommandEncoderWithDescriptor:descriptor];
-    if (gpuCommandBuffer) {
-        gpuCommandBuffer->initRenderState(fActiveRenderCommandEncoder);
+    if (opsRenderPass) {
+        opsRenderPass->initRenderState(fActiveRenderCommandEncoder);
     }
     fPreviousRenderPassDescriptor = descriptor;
 
diff --git a/src/gpu/mtl/GrMtlGpu.h b/src/gpu/mtl/GrMtlGpu.h
index 420264b..25a2c73 100644
--- a/src/gpu/mtl/GrMtlGpu.h
+++ b/src/gpu/mtl/GrMtlGpu.h
@@ -19,7 +19,7 @@
 
 #import <Metal/Metal.h>
 
-class GrMtlGpuRTCommandBuffer;
+class GrMtlOpsRenderPass;
 class GrMtlTexture;
 class GrSemaphore;
 struct GrMtlBackendContext;
@@ -80,16 +80,13 @@
     bool onCopySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRect,
                        const SkIPoint& dstPoint) override;
 
-    GrGpuRTCommandBuffer* getCommandBuffer(
-                                    GrRenderTarget*, GrSurfaceOrigin, const SkRect& bounds,
-                                    const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
-                                    const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override;
-
-    GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) override;
+    GrOpsRenderPass* getOpsRenderPass(GrRenderTarget*, GrSurfaceOrigin, const SkRect& bounds,
+                                      const GrOpsRenderPass::LoadAndStoreInfo&,
+                                      const GrOpsRenderPass::StencilLoadAndStoreInfo&) override;
 
     SkSL::Compiler* shaderCompiler() const { return fCompiler.get(); }
 
-    void submit(GrGpuCommandBuffer* buffer) override;
+    void submit(GrOpsRenderPass* renderPass) override;
 
     GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; }
     bool waitFence(GrFence, uint64_t) override { return true; }
diff --git a/src/gpu/mtl/GrMtlGpu.mm b/src/gpu/mtl/GrMtlGpu.mm
index 364e72a..aba9e67 100644
--- a/src/gpu/mtl/GrMtlGpu.mm
+++ b/src/gpu/mtl/GrMtlGpu.mm
@@ -14,7 +14,7 @@
 #include "src/gpu/GrTexturePriv.h"
 #include "src/gpu/mtl/GrMtlBuffer.h"
 #include "src/gpu/mtl/GrMtlCommandBuffer.h"
-#include "src/gpu/mtl/GrMtlGpuCommandBuffer.h"
+#include "src/gpu/mtl/GrMtlOpsRenderPass.h"
 #include "src/gpu/mtl/GrMtlTexture.h"
 #include "src/gpu/mtl/GrMtlTextureRenderTarget.h"
 #include "src/gpu/mtl/GrMtlUtil.h"
@@ -140,25 +140,17 @@
     fDevice = nil;
 }
 
-GrGpuRTCommandBuffer* GrMtlGpu::getCommandBuffer(
+GrOpsRenderPass* GrMtlGpu::getOpsRenderPass(
             GrRenderTarget* renderTarget, GrSurfaceOrigin origin, const SkRect& bounds,
-            const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
-            const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
-    return new GrMtlGpuRTCommandBuffer(this, renderTarget, origin, bounds, colorInfo, stencilInfo);
+            const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+            const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
+    return new GrMtlOpsRenderPass(this, renderTarget, origin, bounds, colorInfo, stencilInfo);
 }
 
-GrGpuTextureCommandBuffer* GrMtlGpu::getCommandBuffer(GrTexture* texture,
-                                                      GrSurfaceOrigin origin) {
-    return new GrMtlGpuTextureCommandBuffer(texture, origin);
-}
-
-void GrMtlGpu::submit(GrGpuCommandBuffer* buffer) {
-    GrMtlGpuRTCommandBuffer* mtlRTCmdBuffer =
-            reinterpret_cast<GrMtlGpuRTCommandBuffer*>(buffer->asRTCommandBuffer());
-    if (mtlRTCmdBuffer) {
-        mtlRTCmdBuffer->submit();
-    }
-    delete buffer;
+void GrMtlGpu::submit(GrOpsRenderPass* renderPass) {
+    GrMtlOpsRenderPass* mtlRenderPass = reinterpret_cast<GrMtlOpsRenderPass*>(renderPass);
+    mtlRenderPass->submit();
+    delete renderPass;
 }
 
 GrMtlCommandBuffer* GrMtlGpu::commandBuffer() {
diff --git a/src/gpu/mtl/GrMtlGpuCommandBuffer.h b/src/gpu/mtl/GrMtlOpsRenderPass.h
similarity index 75%
rename from src/gpu/mtl/GrMtlGpuCommandBuffer.h
rename to src/gpu/mtl/GrMtlOpsRenderPass.h
index eb60f4e..5736db3 100644
--- a/src/gpu/mtl/GrMtlGpuCommandBuffer.h
+++ b/src/gpu/mtl/GrMtlOpsRenderPass.h
@@ -5,12 +5,12 @@
  * found in the LICENSE file.
  */
 
-#ifndef GrMtlGpuCommandBuffer_DEFINED
-#define GrMtlGpuCommandBuffer_DEFINED
+#ifndef GrMtlOpsRenderPass_DEFINED
+#define GrMtlOpsRenderPass_DEFINED
 
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrMesh.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/mtl/GrMtlGpu.h"
 
 #import <Metal/Metal.h>
@@ -20,28 +20,14 @@
 class GrMtlPipelineState;
 class GrMtlRenderTarget;
 
-class GrMtlGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer {
+class GrMtlOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImpl {
 public:
-    GrMtlGpuTextureCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin)
-            : INHERITED(texture, origin) {
-    }
+    GrMtlOpsRenderPass(GrMtlGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
+                       const SkRect& bounds,
+                       const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+                       const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo);
 
-    ~GrMtlGpuTextureCommandBuffer() override {}
-
-    void insertEventMarker(const char* msg) override {}
-
-private:
-    typedef GrGpuTextureCommandBuffer INHERITED;
-};
-
-class GrMtlGpuRTCommandBuffer : public GrGpuRTCommandBuffer, private GrMesh::SendToGpuImpl {
-public:
-    GrMtlGpuRTCommandBuffer(GrMtlGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
-                            const SkRect& bounds,
-                            const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
-                            const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo);
-
-    ~GrMtlGpuRTCommandBuffer() override;
+    ~GrMtlOpsRenderPass() override;
 
     void begin() override {}
     void end() override {}
@@ -77,8 +63,8 @@
 
     void onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) override;
 
-    void setupRenderPass(const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
-                         const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo);
+    void setupRenderPass(const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+                         const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo);
 
     void bindGeometry(const GrBuffer* vertexBuffer, size_t vertexOffset,
                       const GrBuffer* instanceBuffer);
@@ -124,7 +110,7 @@
         size_t fOffset;
     } fBufferBindings[kNumBindings];
 
-    typedef GrGpuRTCommandBuffer INHERITED;
+    typedef GrOpsRenderPass INHERITED;
 };
 
 #endif
diff --git a/src/gpu/mtl/GrMtlGpuCommandBuffer.mm b/src/gpu/mtl/GrMtlOpsRenderPass.mm
similarity index 82%
rename from src/gpu/mtl/GrMtlGpuCommandBuffer.mm
rename to src/gpu/mtl/GrMtlOpsRenderPass.mm
index 049485d..f9754fe 100644
--- a/src/gpu/mtl/GrMtlGpuCommandBuffer.mm
+++ b/src/gpu/mtl/GrMtlOpsRenderPass.mm
@@ -5,7 +5,7 @@
  * found in the LICENSE file.
  */
 
-#include "src/gpu/mtl/GrMtlGpuCommandBuffer.h"
+#include "src/gpu/mtl/GrMtlOpsRenderPass.h"
 
 #include "src/gpu/GrColor.h"
 #include "src/gpu/GrFixedClip.h"
@@ -21,10 +21,10 @@
 #error This file must be compiled with Arc. Use -fobjc-arc flag
 #endif
 
-GrMtlGpuRTCommandBuffer::GrMtlGpuRTCommandBuffer(
+GrMtlOpsRenderPass::GrMtlOpsRenderPass(
         GrMtlGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin, const SkRect& bounds,
-        const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
-        const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo)
+        const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+        const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo)
         : INHERITED(rt, origin)
         , fGpu(gpu)
 #ifdef SK_DEBUG
@@ -34,11 +34,11 @@
     this->setupRenderPass(colorInfo, stencilInfo);
 }
 
-GrMtlGpuRTCommandBuffer::~GrMtlGpuRTCommandBuffer() {
+GrMtlOpsRenderPass::~GrMtlOpsRenderPass() {
     SkASSERT(nil == fActiveRenderCmdEncoder);
 }
 
-void GrMtlGpuRTCommandBuffer::precreateCmdEncoder() {
+void GrMtlOpsRenderPass::precreateCmdEncoder() {
     // For clears, we may not have an associated draw. So we prepare a cmdEncoder that
     // will be submitted whether there's a draw or not.
     SkASSERT(nil == fActiveRenderCmdEncoder);
@@ -48,7 +48,7 @@
     SkASSERT(nil != cmdEncoder);
 }
 
-void GrMtlGpuRTCommandBuffer::submit() {
+void GrMtlOpsRenderPass::submit() {
     if (!fRenderTarget) {
         return;
     }
@@ -57,7 +57,7 @@
     fGpu->submitIndirectCommandBuffer(fRenderTarget, fOrigin, &iBounds);
 }
 
-GrMtlPipelineState* GrMtlGpuRTCommandBuffer::prepareDrawState(
+GrMtlPipelineState* GrMtlOpsRenderPass::prepareDrawState(
         const GrPrimitiveProcessor& primProc,
         const GrPipeline& pipeline,
         const GrPipeline::FixedDynamicState* fixedDynamicState,
@@ -85,7 +85,7 @@
     return pipelineState;
 }
 
-void GrMtlGpuRTCommandBuffer::onDraw(const GrPrimitiveProcessor& primProc,
+void GrMtlOpsRenderPass::onDraw(const GrPrimitiveProcessor& primProc,
                                      const GrPipeline& pipeline,
                                      const GrPipeline::FixedDynamicState* fixedDynamicState,
                                      const GrPipeline::DynamicStateArrays* dynamicStateArrays,
@@ -195,7 +195,7 @@
     fBounds.join(bounds);
 }
 
-void GrMtlGpuRTCommandBuffer::onClear(const GrFixedClip& clip, const SkPMColor4f& color) {
+void GrMtlOpsRenderPass::onClear(const GrFixedClip& clip, const SkPMColor4f& color) {
     // if we end up here from absClear, the clear bounds may be bigger than the RT proxy bounds -
     // but in that case, scissor should be enabled, so this check should still succeed
     SkASSERT(!clip.scissorEnabled() || clip.scissorRect().contains(fRTBounds));
@@ -206,7 +206,7 @@
     fRenderPassDesc.colorAttachments[0].loadAction = MTLLoadActionLoad;
 }
 
-void GrMtlGpuRTCommandBuffer::onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
+void GrMtlOpsRenderPass::onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
     SkASSERT(!clip.hasWindowRectangles());
 
     GrStencilAttachment* sb = fRenderTarget->renderTargetPriv().getStencilAttachment();
@@ -228,7 +228,7 @@
     fRenderPassDesc.stencilAttachment.loadAction = MTLLoadActionLoad;
 }
 
-void GrMtlGpuRTCommandBuffer::initRenderState(id<MTLRenderCommandEncoder> encoder) {
+void GrMtlOpsRenderPass::initRenderState(id<MTLRenderCommandEncoder> encoder) {
     [encoder pushDebugGroup:@"initRenderState"];
     [encoder setFrontFacingWinding:MTLWindingCounterClockwise];
     // Strictly speaking we shouldn't have to set this, as the default viewport is the size of
@@ -241,9 +241,9 @@
     [encoder popDebugGroup];
 }
 
-void GrMtlGpuRTCommandBuffer::setupRenderPass(
-        const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
-        const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
+void GrMtlOpsRenderPass::setupRenderPass(
+        const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+        const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
     const static MTLLoadAction mtlLoadAction[] {
         MTLLoadActionLoad,
         MTLLoadActionClear,
@@ -324,9 +324,9 @@
     return mtlPrimitiveType[static_cast<int>(primitiveType)];
 }
 
-void GrMtlGpuRTCommandBuffer::bindGeometry(const GrBuffer* vertexBuffer,
-                                           size_t vertexOffset,
-                                           const GrBuffer* instanceBuffer) {
+void GrMtlOpsRenderPass::bindGeometry(const GrBuffer* vertexBuffer,
+                                      size_t vertexOffset,
+                                      const GrBuffer* instanceBuffer) {
     size_t bufferIndex = GrMtlUniformHandler::kLastUniformBinding + 1;
     if (vertexBuffer) {
         SkASSERT(!vertexBuffer->isCpuBuffer());
@@ -344,10 +344,10 @@
     }
 }
 
-void GrMtlGpuRTCommandBuffer::sendMeshToGpu(GrPrimitiveType primitiveType,
-                                            const GrBuffer* vertexBuffer,
-                                            int vertexCount,
-                                            int baseVertex) {
+void GrMtlOpsRenderPass::sendMeshToGpu(GrPrimitiveType primitiveType,
+                                       const GrBuffer* vertexBuffer,
+                                       int vertexCount,
+                                       int baseVertex) {
     this->bindGeometry(vertexBuffer, 0, nullptr);
 
     SkASSERT(primitiveType != GrPrimitiveType::kLinesAdjacency); // Geometry shaders not supported.
@@ -356,15 +356,15 @@
                                 vertexCount:vertexCount];
 }
 
-void GrMtlGpuRTCommandBuffer::sendIndexedMeshToGpu(GrPrimitiveType primitiveType,
-                                                   const GrBuffer* indexBuffer,
-                                                   int indexCount,
-                                                   int baseIndex,
-                                                   uint16_t /*minIndexValue*/,
-                                                   uint16_t /*maxIndexValue*/,
-                                                   const GrBuffer* vertexBuffer,
-                                                   int baseVertex,
-                                                   GrPrimitiveRestart restart) {
+void GrMtlOpsRenderPass::sendIndexedMeshToGpu(GrPrimitiveType primitiveType,
+                                              const GrBuffer* indexBuffer,
+                                              int indexCount,
+                                              int baseIndex,
+                                              uint16_t /*minIndexValue*/,
+                                              uint16_t /*maxIndexValue*/,
+                                              const GrBuffer* vertexBuffer,
+                                              int baseVertex,
+                                              GrPrimitiveRestart restart) {
     this->bindGeometry(vertexBuffer, fCurrentVertexStride*baseVertex, nullptr);
 
     SkASSERT(primitiveType != GrPrimitiveType::kLinesAdjacency); // Geometry shaders not supported.
@@ -388,13 +388,13 @@
     fGpu->stats()->incNumDraws();
 }
 
-void GrMtlGpuRTCommandBuffer::sendInstancedMeshToGpu(GrPrimitiveType primitiveType,
-                                                     const GrBuffer* vertexBuffer,
-                                                     int vertexCount,
-                                                     int baseVertex,
-                                                     const GrBuffer* instanceBuffer,
-                                                     int instanceCount,
-                                                     int baseInstance) {
+void GrMtlOpsRenderPass::sendInstancedMeshToGpu(GrPrimitiveType primitiveType,
+                                                const GrBuffer* vertexBuffer,
+                                                int vertexCount,
+                                                int baseVertex,
+                                                const GrBuffer* instanceBuffer,
+                                                int instanceCount,
+                                                int baseInstance) {
     this->bindGeometry(vertexBuffer, 0, instanceBuffer);
 
     SkASSERT(primitiveType != GrPrimitiveType::kLinesAdjacency); // Geometry shaders not supported.
@@ -405,15 +405,15 @@
                                baseInstance:baseInstance];
 }
 
-void GrMtlGpuRTCommandBuffer::sendIndexedInstancedMeshToGpu(GrPrimitiveType primitiveType,
-                                                            const GrBuffer* indexBuffer,
-                                                            int indexCount,
-                                                            int baseIndex,
-                                                            const GrBuffer* vertexBuffer,
-                                                            int baseVertex,
-                                                            const GrBuffer* instanceBuffer,
-                                                            int instanceCount,
-                                                            int baseInstance,
+void GrMtlOpsRenderPass::sendIndexedInstancedMeshToGpu(GrPrimitiveType primitiveType,
+                                                       const GrBuffer* indexBuffer,
+                                                       int indexCount,
+                                                       int baseIndex,
+                                                       const GrBuffer* vertexBuffer,
+                                                       int baseVertex,
+                                                       const GrBuffer* instanceBuffer,
+                                                       int instanceCount,
+                                                       int baseInstance,
                                                             GrPrimitiveRestart restart) {
     this->bindGeometry(vertexBuffer, 0, instanceBuffer);
 
@@ -441,10 +441,10 @@
     fGpu->stats()->incNumDraws();
 }
 
-void GrMtlGpuRTCommandBuffer::setVertexBuffer(id<MTLRenderCommandEncoder> encoder,
-                                              const GrMtlBuffer* buffer,
-                                              size_t vertexOffset,
-                                              size_t index) {
+void GrMtlOpsRenderPass::setVertexBuffer(id<MTLRenderCommandEncoder> encoder,
+                                         const GrMtlBuffer* buffer,
+                                         size_t vertexOffset,
+                                         size_t index) {
     SkASSERT(index < 4);
     id<MTLBuffer> mtlVertexBuffer = buffer->mtlBuffer();
     SkASSERT(mtlVertexBuffer);
@@ -464,7 +464,7 @@
     }
 }
 
-void GrMtlGpuRTCommandBuffer::resetBufferBindings() {
+void GrMtlOpsRenderPass::resetBufferBindings() {
     for (size_t i = 0; i < kNumBindings; ++i) {
         fBufferBindings[i].fBuffer = nil;
     }
diff --git a/src/gpu/ops/GrClearOp.cpp b/src/gpu/ops/GrClearOp.cpp
index 34e15de..287fc7d 100644
--- a/src/gpu/ops/GrClearOp.cpp
+++ b/src/gpu/ops/GrClearOp.cpp
@@ -8,9 +8,9 @@
 #include "src/gpu/ops/GrClearOp.h"
 
 #include "include/private/GrRecordingContext.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrMemoryPool.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/GrProxyProvider.h"
 #include "src/gpu/GrRecordingContextPriv.h"
 
@@ -60,6 +60,6 @@
 }
 
 void GrClearOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) {
-    SkASSERT(state->rtCommandBuffer());
-    state->rtCommandBuffer()->clear(fClip, fColor);
+    SkASSERT(state->opsRenderPass());
+    state->opsRenderPass()->clear(fClip, fColor);
 }
diff --git a/src/gpu/ops/GrClearStencilClipOp.cpp b/src/gpu/ops/GrClearStencilClipOp.cpp
index dfe8268..7ca4063 100644
--- a/src/gpu/ops/GrClearStencilClipOp.cpp
+++ b/src/gpu/ops/GrClearStencilClipOp.cpp
@@ -8,9 +8,9 @@
 #include "src/gpu/ops/GrClearStencilClipOp.h"
 
 #include "include/private/GrRecordingContext.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrMemoryPool.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/GrRecordingContextPriv.h"
 
 std::unique_ptr<GrOp> GrClearStencilClipOp::Make(GrRecordingContext* context,
@@ -23,6 +23,6 @@
 }
 
 void GrClearStencilClipOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) {
-    SkASSERT(state->rtCommandBuffer());
-    state->rtCommandBuffer()->clearStencilClip(fClip, fInsideStencilMask);
+    SkASSERT(state->opsRenderPass());
+    state->opsRenderPass()->clearStencilClip(fClip, fInsideStencilMask);
 }
diff --git a/src/gpu/ops/GrDebugMarkerOp.cpp b/src/gpu/ops/GrDebugMarkerOp.cpp
index ddf6b3b..8c255cd 100644
--- a/src/gpu/ops/GrDebugMarkerOp.cpp
+++ b/src/gpu/ops/GrDebugMarkerOp.cpp
@@ -9,9 +9,9 @@
 
 #include "include/private/GrRecordingContext.h"
 #include "src/gpu/GrCaps.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrMemoryPool.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/GrRecordingContextPriv.h"
 
 std::unique_ptr<GrOp> GrDebugMarkerOp::Make(GrRecordingContext* context,
@@ -25,6 +25,6 @@
 void GrDebugMarkerOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) {
     //SkDebugf("%s\n", fStr.c_str());
     if (state->caps().gpuTracingSupport()) {
-        state->commandBuffer()->insertEventMarker(fStr.c_str());
+        state->opsRenderPass()->insertEventMarker(fStr.c_str());
     }
 }
diff --git a/src/gpu/ops/GrDrawableOp.cpp b/src/gpu/ops/GrDrawableOp.cpp
index 6f89d74..66a63f9 100644
--- a/src/gpu/ops/GrDrawableOp.cpp
+++ b/src/gpu/ops/GrDrawableOp.cpp
@@ -9,9 +9,9 @@
 
 #include "include/core/SkDrawable.h"
 #include "include/private/GrRecordingContext.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrMemoryPool.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/GrRecordingContextPriv.h"
 
 std::unique_ptr<GrDrawableOp> GrDrawableOp::Make(
@@ -29,6 +29,6 @@
 }
 
 void GrDrawableOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) {
-    SkASSERT(state->commandBuffer());
-    state->rtCommandBuffer()->executeDrawable(std::move(fDrawable));
+    SkASSERT(state->opsRenderPass());
+    state->opsRenderPass()->executeDrawable(std::move(fDrawable));
 }
diff --git a/src/gpu/ops/GrFillRRectOp.cpp b/src/gpu/ops/GrFillRRectOp.cpp
index fc3bce4..b671f07 100644
--- a/src/gpu/ops/GrFillRRectOp.cpp
+++ b/src/gpu/ops/GrFillRRectOp.cpp
@@ -10,9 +10,9 @@
 #include "include/private/GrRecordingContext.h"
 #include "src/core/SkRRectPriv.h"
 #include "src/gpu/GrCaps.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
 #include "src/gpu/GrMemoryPool.h"
 #include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
 #include "src/gpu/GrRecordingContextPriv.h"
 #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
 #include "src/gpu/glsl/GrGLSLGeometryProcessor.h"
@@ -760,7 +760,7 @@
             std::move(indexBuffer), indexCount, fInstanceBuffer, fInstanceCount, fBaseInstance,
             GrPrimitiveRestart::kNo);
     mesh->setVertexData(std::move(vertexBuffer));
-    flushState->rtCommandBuffer()->draw(
+    flushState->opsRenderPass()->draw(
             *proc, *pipeline, fixedDynamicState, nullptr, mesh, 1, this->bounds());
 }
 
diff --git a/src/gpu/ops/GrMeshDrawOp.cpp b/src/gpu/ops/GrMeshDrawOp.cpp
index 6695058..0ba8e43 100644
--- a/src/gpu/ops/GrMeshDrawOp.cpp
+++ b/src/gpu/ops/GrMeshDrawOp.cpp
@@ -5,11 +5,12 @@
  * found in the LICENSE file.
  */
 
-#include "src/gpu/GrGpuCommandBuffer.h"
-#include "src/gpu/GrOpFlushState.h"
-#include "src/gpu/GrResourceProvider.h"
 #include "src/gpu/ops/GrMeshDrawOp.h"
 
+#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
+#include "src/gpu/GrResourceProvider.h"
+
 GrMeshDrawOp::GrMeshDrawOp(uint32_t classID) : INHERITED(classID) {}
 
 void GrMeshDrawOp::onPrepare(GrOpFlushState* state) { this->onPrepareDraws(state); }
diff --git a/src/gpu/ops/GrOp.h b/src/gpu/ops/GrOp.h
index 7aff59d..0578994 100644
--- a/src/gpu/ops/GrOp.h
+++ b/src/gpu/ops/GrOp.h
@@ -19,8 +19,8 @@
 #include <new>
 
 class GrCaps;
-class GrGpuCommandBuffer;
 class GrOpFlushState;
+class GrOpsRenderPass;
 
 /**
  * GrOp is the base class for all Ganesh deferred GPU operations. To facilitate reordering and to
diff --git a/src/gpu/vk/GrVkCommandPool.h b/src/gpu/vk/GrVkCommandPool.h
index 58c5eb7..fd44d62 100644
--- a/src/gpu/vk/GrVkCommandPool.h
+++ b/src/gpu/vk/GrVkCommandPool.h
@@ -8,7 +8,6 @@
 #ifndef GrVkCommandPool_DEFINED
 #define GrVkCommandPool_DEFINED
 
-#include "src/gpu/vk/GrVkGpuCommandBuffer.h"
 #include "src/gpu/vk/GrVkInterface.h"
 #include "src/gpu/vk/GrVkResource.h"
 #include "src/gpu/vk/GrVkResourceProvider.h"
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index 13f603a..4f6c785 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -27,11 +27,11 @@
 #include "src/gpu/vk/GrVkAMDMemoryAllocator.h"
 #include "src/gpu/vk/GrVkCommandBuffer.h"
 #include "src/gpu/vk/GrVkCommandPool.h"
-#include "src/gpu/vk/GrVkGpuCommandBuffer.h"
 #include "src/gpu/vk/GrVkImage.h"
 #include "src/gpu/vk/GrVkIndexBuffer.h"
 #include "src/gpu/vk/GrVkInterface.h"
 #include "src/gpu/vk/GrVkMemory.h"
+#include "src/gpu/vk/GrVkOpsRenderPass.h"
 #include "src/gpu/vk/GrVkPipeline.h"
 #include "src/gpu/vk/GrVkPipelineState.h"
 #include "src/gpu/vk/GrVkRenderPass.h"
@@ -318,33 +318,23 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-GrGpuRTCommandBuffer* GrVkGpu::getCommandBuffer(
+GrOpsRenderPass* GrVkGpu::getOpsRenderPass(
             GrRenderTarget* rt, GrSurfaceOrigin origin, const SkRect& bounds,
-            const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
-            const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
-    if (!fCachedRTCommandBuffer) {
-        fCachedRTCommandBuffer.reset(new GrVkGpuRTCommandBuffer(this));
+            const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+            const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
+    if (!fCachedOpsRenderPass) {
+        fCachedOpsRenderPass.reset(new GrVkOpsRenderPass(this));
     }
 
-    fCachedRTCommandBuffer->set(rt, origin, colorInfo, stencilInfo);
-    return fCachedRTCommandBuffer.get();
-}
-
-GrGpuTextureCommandBuffer* GrVkGpu::getCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin) {
-    if (!fCachedTexCommandBuffer) {
-        fCachedTexCommandBuffer.reset(new GrVkGpuTextureCommandBuffer(this));
-    }
-
-    fCachedTexCommandBuffer->set(texture, origin);
-    return fCachedTexCommandBuffer.get();
+    fCachedOpsRenderPass->set(rt, origin, colorInfo, stencilInfo);
+    return fCachedOpsRenderPass.get();
 }
 
 void GrVkGpu::submitCommandBuffer(SyncQueue sync, GrGpuFinishedProc finishedProc,
                                   GrGpuFinishedContext finishedContext) {
     TRACE_EVENT0("skia.gpu", TRACE_FUNC);
     SkASSERT(fCurrentCmdBuffer);
-    SkASSERT(!fCachedRTCommandBuffer || !fCachedRTCommandBuffer->isActive());
-    SkASSERT(!fCachedTexCommandBuffer || !fCachedTexCommandBuffer->isActive());
+    SkASSERT(!fCachedOpsRenderPass || !fCachedOpsRenderPass->isActive());
 
     if (!fCurrentCmdBuffer->hasWork() && kForce_SyncQueue != sync &&
         !fSemaphoresToSignal.count() && !fSemaphoresToWaitOn.count()) {
@@ -2528,18 +2518,11 @@
     this->didWriteToSurface(target, origin, &bounds);
 }
 
-void GrVkGpu::submit(GrGpuCommandBuffer* buffer) {
-    if (buffer->asRTCommandBuffer()) {
-        SkASSERT(fCachedRTCommandBuffer.get() == buffer);
+void GrVkGpu::submit(GrOpsRenderPass* renderPass) {
+        SkASSERT(fCachedOpsRenderPass.get() == renderPass);
 
-        fCachedRTCommandBuffer->submit();
-        fCachedRTCommandBuffer->reset();
-    } else {
-        SkASSERT(fCachedTexCommandBuffer.get() == buffer);
-
-        fCachedTexCommandBuffer->submit();
-        fCachedTexCommandBuffer->reset();
-    }
+        fCachedOpsRenderPass->submit();
+        fCachedOpsRenderPass->reset();
 }
 
 GrFence SK_WARN_UNUSED_RESULT GrVkGpu::insertFence() {
diff --git a/src/gpu/vk/GrVkGpu.h b/src/gpu/vk/GrVkGpu.h
index b0252cd..e6c558c 100644
--- a/src/gpu/vk/GrVkGpu.h
+++ b/src/gpu/vk/GrVkGpu.h
@@ -23,12 +23,11 @@
 
 class GrVkBufferImpl;
 class GrVkCommandPool;
-class GrVkGpuRTCommandBuffer;
-class GrVkGpuTextureCommandBuffer;
 class GrVkMemoryAllocator;
 class GrVkPipeline;
 class GrVkPipelineState;
 class GrVkPrimaryCommandBuffer;
+class GrVkOpsRenderPass;
 class GrVkRenderPass;
 class GrVkSecondaryCommandBuffer;
 class GrVkTexture;
@@ -102,13 +101,10 @@
     GrStencilAttachment* createStencilAttachmentForRenderTarget(
             const GrRenderTarget*, int width, int height, int numStencilSamples) override;
 
-    GrGpuRTCommandBuffer* getCommandBuffer(
+    GrOpsRenderPass* getOpsRenderPass(
             GrRenderTarget*, GrSurfaceOrigin, const SkRect&,
-            const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
-            const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override;
-
-    GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) override;
-
+            const GrOpsRenderPass::LoadAndStoreInfo&,
+            const GrOpsRenderPass::StencilLoadAndStoreInfo&) override;
 
     void addBufferMemoryBarrier(const GrVkResource*,
                                 VkPipelineStageFlags srcStageMask,
@@ -144,7 +140,7 @@
                                       GrVkRenderTarget*, GrSurfaceOrigin,
                                       const SkIRect& bounds);
 
-    void submit(GrGpuCommandBuffer*) override;
+    void submit(GrOpsRenderPass*) override;
 
     GrFence SK_WARN_UNUSED_RESULT insertFence() override;
     bool waitFence(GrFence, uint64_t timeout) override;
@@ -315,8 +311,7 @@
 
     GrProtected                                           fProtectedContext;
 
-    std::unique_ptr<GrVkGpuRTCommandBuffer>               fCachedRTCommandBuffer;
-    std::unique_ptr<GrVkGpuTextureCommandBuffer>          fCachedTexCommandBuffer;
+    std::unique_ptr<GrVkOpsRenderPass>                    fCachedOpsRenderPass;
 
     typedef GrGpu INHERITED;
 };
diff --git a/src/gpu/vk/GrVkGpuCommandBuffer.cpp b/src/gpu/vk/GrVkOpsRenderPass.cpp
similarity index 90%
rename from src/gpu/vk/GrVkGpuCommandBuffer.cpp
rename to src/gpu/vk/GrVkOpsRenderPass.cpp
index b280820..6862436 100644
--- a/src/gpu/vk/GrVkGpuCommandBuffer.cpp
+++ b/src/gpu/vk/GrVkOpsRenderPass.cpp
@@ -5,7 +5,7 @@
 * found in the LICENSE file.
 */
 
-#include "src/gpu/vk/GrVkGpuCommandBuffer.h"
+#include "src/gpu/vk/GrVkOpsRenderPass.h"
 
 #include "include/core/SkDrawable.h"
 #include "include/core/SkRect.h"
@@ -48,19 +48,6 @@
 
 /////////////////////////////////////////////////////////////////////////////
 
-void GrVkGpuTextureCommandBuffer::insertEventMarker(const char* msg) {
-    // TODO: does Vulkan have a correlate?
-}
-
-void GrVkGpuTextureCommandBuffer::submit() {
-    GrVkPrimaryCommandBufferTask::Args taskArgs{fGpu, fTexture};
-    for (auto& task : fTasks) {
-        task.execute(taskArgs);
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
 void get_vk_load_store_ops(GrLoadOp loadOpIn, GrStoreOp storeOpIn,
                            VkAttachmentLoadOp* loadOp, VkAttachmentStoreOp* storeOp) {
     switch (loadOpIn) {
@@ -91,9 +78,9 @@
     }
 }
 
-GrVkGpuRTCommandBuffer::GrVkGpuRTCommandBuffer(GrVkGpu* gpu) : fGpu(gpu) {}
+GrVkOpsRenderPass::GrVkOpsRenderPass(GrVkGpu* gpu) : fGpu(gpu) {}
 
-void GrVkGpuRTCommandBuffer::init() {
+void GrVkOpsRenderPass::init() {
     GrVkRenderPass::LoadStoreOps vkColorOps(fVkColorLoadOp, fVkColorStoreOp);
     GrVkRenderPass::LoadStoreOps vkStencilOps(fVkStencilLoadOp, fVkStencilStoreOp);
 
@@ -137,7 +124,7 @@
     cbInfo.currentCmdBuf()->begin(fGpu, vkRT->framebuffer(), cbInfo.fRenderPass);
 }
 
-void GrVkGpuRTCommandBuffer::initWrapped() {
+void GrVkOpsRenderPass::initWrapped() {
     CommandBufferInfo& cbInfo = fCommandBufferInfos.push_back();
     SkASSERT(fCommandBufferInfos.count() == 1);
     fCurrentCmdInfo = 0;
@@ -153,19 +140,19 @@
     cbInfo.currentCmdBuf()->begin(fGpu, nullptr, cbInfo.fRenderPass);
 }
 
-GrVkGpuRTCommandBuffer::~GrVkGpuRTCommandBuffer() {
+GrVkOpsRenderPass::~GrVkOpsRenderPass() {
     this->reset();
 }
 
-GrGpu* GrVkGpuRTCommandBuffer::gpu() { return fGpu; }
+GrGpu* GrVkOpsRenderPass::gpu() { return fGpu; }
 
-void GrVkGpuRTCommandBuffer::end() {
+void GrVkOpsRenderPass::end() {
     if (fCurrentCmdInfo >= 0) {
         fCommandBufferInfos[fCurrentCmdInfo].currentCmdBuf()->end(fGpu);
     }
 }
 
-void GrVkGpuRTCommandBuffer::submit() {
+void GrVkOpsRenderPass::submit() {
     if (!fRenderTarget) {
         return;
     }
@@ -265,9 +252,9 @@
     SkASSERT(currPreCmd == fPreCommandBufferTasks.end());
 }
 
-void GrVkGpuRTCommandBuffer::set(GrRenderTarget* rt, GrSurfaceOrigin origin,
-                                 const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
-                                 const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
+void GrVkOpsRenderPass::set(GrRenderTarget* rt, GrSurfaceOrigin origin,
+                            const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+                            const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
     SkASSERT(!fRenderTarget);
     SkASSERT(fCommandBufferInfos.empty());
     SkASSERT(-1 == fCurrentCmdInfo);
@@ -296,7 +283,7 @@
     this->init();
 }
 
-void GrVkGpuRTCommandBuffer::reset() {
+void GrVkOpsRenderPass::reset() {
     for (int i = 0; i < fCommandBufferInfos.count(); ++i) {
         CommandBufferInfo& cbInfo = fCommandBufferInfos[i];
         if (cbInfo.fCommandBuffer) {
@@ -317,18 +304,18 @@
 #endif
 }
 
-bool GrVkGpuRTCommandBuffer::wrapsSecondaryCommandBuffer() const {
+bool GrVkOpsRenderPass::wrapsSecondaryCommandBuffer() const {
     GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(fRenderTarget);
     return vkRT->wrapsSecondaryCommandBuffer();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 
-void GrVkGpuRTCommandBuffer::insertEventMarker(const char* msg) {
+void GrVkOpsRenderPass::insertEventMarker(const char* msg) {
     // TODO: does Vulkan have a correlate?
 }
 
-void GrVkGpuRTCommandBuffer::onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
+void GrVkOpsRenderPass::onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
     SkASSERT(!clip.hasWindowRectangles());
 
     CommandBufferInfo& cbInfo = fCommandBufferInfos[fCurrentCmdInfo];
@@ -388,7 +375,7 @@
     }
 }
 
-void GrVkGpuRTCommandBuffer::onClear(const GrFixedClip& clip, const SkPMColor4f& color) {
+void GrVkOpsRenderPass::onClear(const GrFixedClip& clip, const SkPMColor4f& color) {
     GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(fRenderTarget);
 
     // parent class should never let us get here with no RT
@@ -469,7 +456,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 
-void GrVkGpuRTCommandBuffer::addAdditionalRenderPass() {
+void GrVkOpsRenderPass::addAdditionalRenderPass() {
     GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(fRenderTarget);
 
     fCommandBufferInfos[fCurrentCmdInfo].currentCmdBuf()->end(fGpu);
@@ -504,7 +491,7 @@
     cbInfo.currentCmdBuf()->begin(fGpu, vkRT->framebuffer(), cbInfo.fRenderPass);
 }
 
-void GrVkGpuRTCommandBuffer::inlineUpload(GrOpFlushState* state,
+void GrVkOpsRenderPass::inlineUpload(GrOpFlushState* state,
                                           GrDeferredTextureUploadFn& upload) {
     if (!fCommandBufferInfos[fCurrentCmdInfo].fIsEmpty) {
         this->addAdditionalRenderPass();
@@ -516,7 +503,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 
-void GrVkGpuRTCommandBuffer::bindGeometry(const GrGpuBuffer* indexBuffer,
+void GrVkOpsRenderPass::bindGeometry(const GrGpuBuffer* indexBuffer,
                                           const GrGpuBuffer* vertexBuffer,
                                           const GrGpuBuffer* instanceBuffer) {
     GrVkSecondaryCommandBuffer* currCmdBuf = fCommandBufferInfos[fCurrentCmdInfo].currentCmdBuf();
@@ -552,7 +539,7 @@
     }
 }
 
-GrVkPipelineState* GrVkGpuRTCommandBuffer::prepareDrawState(
+GrVkPipelineState* GrVkOpsRenderPass::prepareDrawState(
         const GrPrimitiveProcessor& primProc,
         const GrPipeline& pipeline,
         const GrPipeline::FixedDynamicState* fixedDynamicState,
@@ -616,7 +603,7 @@
     return pipelineState;
 }
 
-void GrVkGpuRTCommandBuffer::onDraw(const GrPrimitiveProcessor& primProc,
+void GrVkOpsRenderPass::onDraw(const GrPrimitiveProcessor& primProc,
                                     const GrPipeline& pipeline,
                                     const GrPipeline::FixedDynamicState* fixedDynamicState,
                                     const GrPipeline::DynamicStateArrays* dynamicStateArrays,
@@ -722,20 +709,20 @@
     cbInfo.fIsEmpty = false;
 }
 
-void GrVkGpuRTCommandBuffer::appendSampledTexture(GrTexture* tex) {
+void GrVkOpsRenderPass::appendSampledTexture(GrTexture* tex) {
     SkASSERT(!tex->isProtected() || (fRenderTarget->isProtected() && fGpu->protectedContext()));
     GrVkTexture* vkTex = static_cast<GrVkTexture*>(tex);
 
     fCommandBufferInfos[fCurrentCmdInfo].fSampledTextures.push_back(sk_ref_sp(vkTex));
 }
 
-void GrVkGpuRTCommandBuffer::sendInstancedMeshToGpu(GrPrimitiveType,
-                                                    const GrBuffer* vertexBuffer,
-                                                    int vertexCount,
-                                                    int baseVertex,
-                                                    const GrBuffer* instanceBuffer,
-                                                    int instanceCount,
-                                                    int baseInstance) {
+void GrVkOpsRenderPass::sendInstancedMeshToGpu(GrPrimitiveType,
+                                               const GrBuffer* vertexBuffer,
+                                               int vertexCount,
+                                               int baseVertex,
+                                               const GrBuffer* instanceBuffer,
+                                               int instanceCount,
+                                               int baseInstance) {
     CommandBufferInfo& cbInfo = fCommandBufferInfos[fCurrentCmdInfo];
     SkASSERT(!vertexBuffer || !vertexBuffer->isCpuBuffer());
     SkASSERT(!instanceBuffer || !instanceBuffer->isCpuBuffer());
@@ -746,16 +733,16 @@
     fGpu->stats()->incNumDraws();
 }
 
-void GrVkGpuRTCommandBuffer::sendIndexedInstancedMeshToGpu(GrPrimitiveType,
-                                                           const GrBuffer* indexBuffer,
-                                                           int indexCount,
-                                                           int baseIndex,
-                                                           const GrBuffer* vertexBuffer,
-                                                           int baseVertex,
-                                                           const GrBuffer* instanceBuffer,
-                                                           int instanceCount,
-                                                           int baseInstance,
-                                                           GrPrimitiveRestart restart) {
+void GrVkOpsRenderPass::sendIndexedInstancedMeshToGpu(GrPrimitiveType,
+                                                      const GrBuffer* indexBuffer,
+                                                      int indexCount,
+                                                      int baseIndex,
+                                                      const GrBuffer* vertexBuffer,
+                                                      int baseVertex,
+                                                      const GrBuffer* instanceBuffer,
+                                                      int instanceCount,
+                                                      int baseInstance,
+                                                      GrPrimitiveRestart restart) {
     SkASSERT(restart == GrPrimitiveRestart::kNo);
     CommandBufferInfo& cbInfo = fCommandBufferInfos[fCurrentCmdInfo];
     SkASSERT(!vertexBuffer || !vertexBuffer->isCpuBuffer());
@@ -772,7 +759,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 
-void GrVkGpuRTCommandBuffer::executeDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler> drawable) {
+void GrVkOpsRenderPass::executeDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler> drawable) {
     GrVkRenderTarget* target = static_cast<GrVkRenderTarget*>(fRenderTarget);
 
     GrVkImage* targetImage = target->msaaImage() ? target->msaaImage() : target;
diff --git a/src/gpu/vk/GrVkGpuCommandBuffer.h b/src/gpu/vk/GrVkOpsRenderPass.h
similarity index 76%
rename from src/gpu/vk/GrVkGpuCommandBuffer.h
rename to src/gpu/vk/GrVkOpsRenderPass.h
index c24eebd..0e68f80 100644
--- a/src/gpu/vk/GrVkGpuCommandBuffer.h
+++ b/src/gpu/vk/GrVkOpsRenderPass.h
@@ -5,10 +5,10 @@
 * found in the LICENSE file.
 */
 
-#ifndef GrVkGpuCommandBuffer_DEFINED
-#define GrVkGpuCommandBuffer_DEFINED
+#ifndef GrVkOpsRenderPass_DEFINED
+#define GrVkOpsRenderPass_DEFINED
 
-#include "src/gpu/GrGpuCommandBuffer.h"
+#include "src/gpu/GrOpsRenderPass.h"
 
 #include "include/gpu/GrTypes.h"
 #include "include/gpu/vk/GrVkTypes.h"
@@ -41,55 +41,11 @@
     GrVkPrimaryCommandBufferTask& operator=(const GrVkPrimaryCommandBufferTask&) = delete;
 };
 
-class GrVkGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer {
+class GrVkOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImpl {
 public:
-    GrVkGpuTextureCommandBuffer(GrVkGpu* gpu) : fGpu(gpu) {}
+    GrVkOpsRenderPass(GrVkGpu*);
 
-    void insertEventMarker(const char*) override;
-
-    void reset() {
-        fTasks.reset();
-        fTexture = nullptr;
-#ifdef SK_DEBUG
-        fIsActive = false;
-#endif
-    }
-
-    void setVk(GrTexture* tex, GrSurfaceOrigin origin) {
-#ifdef SK_DEBUG
-        fIsActive = true;
-#endif
-        this->INHERITED::set(tex, origin);
-    }
-
-#ifdef SK_DEBUG
-    bool isActive() const { return fIsActive; }
-#endif
-
-    void submit();
-
-private:
-    GrVkGpu*                                    fGpu;
-    GrTRecorder<GrVkPrimaryCommandBufferTask>   fTasks{1024};
-
-#ifdef SK_DEBUG
-    // When we are actively recording into the GrVkGpuCommandBuffer we set this flag to true. This
-    // then allows us to assert that we never submit a primary command buffer to the queue while in
-    // a recording state. This is needed since when we submit to the queue we change command pools
-    // and may trigger the old one to be reset, but a recording GrVkGpuCommandBuffer may still have
-    // a outstanding secondary command buffer allocated from that pool that we'll try to access
-    // after the pool as been reset.
-    bool fIsActive = false;
-#endif
-
-    typedef GrGpuTextureCommandBuffer INHERITED;
-};
-
-class GrVkGpuRTCommandBuffer : public GrGpuRTCommandBuffer, private GrMesh::SendToGpuImpl {
-public:
-    GrVkGpuRTCommandBuffer(GrVkGpu*);
-
-    ~GrVkGpuRTCommandBuffer() override;
+    ~GrVkOpsRenderPass() override;
 
     void begin() override { }
     void end() override;
@@ -101,8 +57,8 @@
     void executeDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler>) override;
 
     void set(GrRenderTarget*, GrSurfaceOrigin,
-             const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
-             const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&);
+             const GrOpsRenderPass::LoadAndStoreInfo&,
+             const GrOpsRenderPass::StencilLoadAndStoreInfo&);
     void reset();
 
     void submit();
@@ -213,16 +169,16 @@
     int                                         fCurrentCmdInfo = -1;
 
 #ifdef SK_DEBUG
-    // When we are actively recording into the GrVkGpuCommandBuffer we set this flag to true. This
+    // When we are actively recording into the GrVkOpsRenderPass we set this flag to true. This
     // then allows us to assert that we never submit a primary command buffer to the queue while in
     // a recording state. This is needed since when we submit to the queue we change command pools
-    // and may trigger the old one to be reset, but a recording GrVkGpuCommandBuffer may still have
+    // and may trigger the old one to be reset, but a recording GrVkOpsRenderPass may still have
     // a outstanding secondary command buffer allocated from that pool that we'll try to access
     // after the pool as been reset.
     bool fIsActive = false;
 #endif
 
-    typedef GrGpuRTCommandBuffer INHERITED;
+    typedef GrOpsRenderPass INHERITED;
 };
 
 #endif