diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp
index 68aa9d0..7a8c5b2 100644
--- a/gm/convexpolyeffect.cpp
+++ b/gm/convexpolyeffect.cpp
@@ -20,8 +20,8 @@
 #include "SkGeometry.h"
 #include "SkTLList.h"
 
+#include "batches/GrMeshDrawOp.h"
 #include "batches/GrTestBatch.h"
-#include "batches/GrVertexBatch.h"
 
 #include "effects/GrConvexPolyEffect.h"
 
diff --git a/gn/gpu.gni b/gn/gpu.gni
index cb58a8f..e87ea7c 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -285,8 +285,8 @@
   "$_src/gpu/batches/GrStencilPathBatch.h",
   "$_src/gpu/batches/GrTessellatingPathRenderer.cpp",
   "$_src/gpu/batches/GrTessellatingPathRenderer.h",
-  "$_src/gpu/batches/GrVertexBatch.cpp",
-  "$_src/gpu/batches/GrVertexBatch.h",
+  "$_src/gpu/batches/GrMeshDrawOp.cpp",
+  "$_src/gpu/batches/GrMeshDrawOp.h",
 
   "$_src/gpu/effects/Gr1DKernelEffect.h",
   "$_src/gpu/effects/GrConfigConversionEffect.cpp",
diff --git a/src/gpu/GrBatchFlushState.h b/src/gpu/GrBatchFlushState.h
index f075dfb..e449140 100644
--- a/src/gpu/GrBatchFlushState.h
+++ b/src/gpu/GrBatchFlushState.h
@@ -10,7 +10,7 @@
 
 #include "GrBufferAllocPool.h"
 #include "GrGpu.h"
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 
 class GrGpuCommandBuffer;
 class GrResourceProvider;
@@ -130,12 +130,12 @@
  * upload must occur before. The upload will then occur between the draw that requires the new
  * data but after the token that requires the old data.
  *
- * TODO: Currently the token/upload interface is spread over GrDrawOp, GrVertexBatch,
- * GrDrawOp::Target, and GrVertexBatch::Target. However, the interface at the GrDrawOp
- * level is not complete and isn't useful. We should push it down to GrVertexBatch until it
- * is required at the GrDrawOp level.
+ * TODO: Currently the token/upload interface is spread over GrDrawOp, GrMeshDrawOp,
+ * GrDrawOp::Target, and GrMeshDrawOp::Target. However, the interface at the GrDrawOp level is not
+ * complete and isn't useful. We should push it down to GrMeshDrawOp until it is required at the
+ * GrDrawOp level.
  */
- 
+
 /**
  * GrDrawOp instances use this object to allocate space for their geometry and to issue the draws
  * that render their batch.
@@ -180,11 +180,11 @@
     GrDrawOp*           fBatch;
 };
 
-/** Extension of GrDrawOp::Target for use by GrVertexBatch. Adds the ability to create vertex
+/** Extension of GrDrawOp::Target for use by GrMeshDrawOp. Adds the ability to create vertex
     draws. */
-class GrVertexBatch::Target : public GrDrawOp::Target {
+class GrMeshDrawOp::Target : public GrDrawOp::Target {
 public:
-    Target(GrBatchFlushState* state, GrVertexBatch* batch) : INHERITED(state, batch) {}
+    Target(GrBatchFlushState* state, GrMeshDrawOp* batch) : INHERITED(state, batch) {}
 
     void draw(const GrGeometryProcessor* gp, const GrMesh& mesh);
 
@@ -204,7 +204,7 @@
     }
 
 private:
-    GrVertexBatch* vertexBatch() { return static_cast<GrVertexBatch*>(this->batch()); }
+    GrMeshDrawOp* vertexBatch() { return static_cast<GrMeshDrawOp*>(this->batch()); }
     typedef GrDrawOp::Target INHERITED;
 };
 
diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp
index 4adccf9..735b92f 100644
--- a/src/gpu/GrOvalRenderer.cpp
+++ b/src/gpu/GrOvalRenderer.cpp
@@ -17,14 +17,14 @@
 #include "GrStyle.h"
 #include "SkRRect.h"
 #include "SkStrokeRec.h"
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
 #include "glsl/GrGLSLGeometryProcessor.h"
 #include "glsl/GrGLSLProgramDataManager.h"
-#include "glsl/GrGLSLVarying.h"
-#include "glsl/GrGLSLVertexShaderBuilder.h"
 #include "glsl/GrGLSLUniformHandler.h"
 #include "glsl/GrGLSLUtil.h"
+#include "glsl/GrGLSLVarying.h"
+#include "glsl/GrGLSLVertexShaderBuilder.h"
 
 // TODO(joshualitt) - Break this file up during GrOp post implementation cleanup
 
@@ -597,7 +597,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-class CircleBatch : public GrVertexBatch {
+class CircleBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -1143,12 +1143,12 @@
     bool                         fClipPlaneIsect;
     bool                         fClipPlaneUnion;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
 
-class EllipseBatch : public GrVertexBatch {
+class EllipseBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
     static GrDrawOp* Create(GrColor color, const SkMatrix& viewMatrix, const SkRect& ellipse,
@@ -1374,12 +1374,12 @@
     SkMatrix                     fViewMatrixIfUsingLocalCoords;
     SkSTArray<1, Geometry, true> fGeoData;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 /////////////////////////////////////////////////////////////////////////////////////////////////
 
-class DIEllipseBatch : public GrVertexBatch {
+class DIEllipseBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -1598,7 +1598,7 @@
     bool                         fUsesLocalCoords;
     SkSTArray<1, Geometry, true> fGeoData;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1721,7 +1721,7 @@
 //   each vertex is also given the normalized x & y distance from the interior rect's edge
 //      the GP takes the min of those depths +1 to get the normalized distance to the outer edge
 
-class RRectCircleRendererBatch : public GrVertexBatch {
+class RRectCircleRendererBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -2055,7 +2055,7 @@
     int                          fIndexCount;
     bool                         fAllFill;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 static const int kNumRRectsInIndexBuffer = 256;
@@ -2081,7 +2081,7 @@
     };
 }
 
-class RRectEllipseRendererBatch : public GrVertexBatch {
+class RRectEllipseRendererBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -2309,7 +2309,7 @@
     SkMatrix                        fViewMatrixIfUsingLocalCoords;
     SkSTArray<1, Geometry, true>    fGeoData;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 static GrDrawOp* create_rrect_batch(GrColor color,
diff --git a/src/gpu/batches/GrAAConvexPathRenderer.cpp b/src/gpu/batches/GrAAConvexPathRenderer.cpp
index 6c01901..0107e27 100644
--- a/src/gpu/batches/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/batches/GrAAConvexPathRenderer.cpp
@@ -16,13 +16,13 @@
 #include "GrGeometryProcessor.h"
 #include "GrInvariantOutput.h"
 #include "GrPathUtils.h"
-#include "GrProcessor.h"
 #include "GrPipelineBuilder.h"
+#include "GrProcessor.h"
 #include "SkGeometry.h"
 #include "SkPathPriv.h"
 #include "SkString.h"
 #include "SkTraceEvent.h"
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
 #include "glsl/GrGLSLGeometryProcessor.h"
 #include "glsl/GrGLSLProgramDataManager.h"
@@ -732,7 +732,7 @@
     return MakeForDeviceSpace(color, coverage, localCoords, viewMatrix);
 }
 
-class AAConvexPathBatch : public GrVertexBatch {
+class AAConvexPathBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
     AAConvexPathBatch(GrColor color, const SkMatrix& viewMatrix, const SkPath& path)
@@ -988,7 +988,7 @@
     BatchTracker fBatch;
     SkSTArray<1, Geometry, true> fGeoData;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 bool GrAAConvexPathRenderer::onDrawPath(const DrawPathArgs& args) {
diff --git a/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp b/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp
index d56254d..b06c503 100644
--- a/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp
+++ b/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp
@@ -13,10 +13,10 @@
 #include "GrContext.h"
 #include "GrPipelineBuilder.h"
 #include "GrResourceProvider.h"
-#include "GrSurfacePriv.h"
 #include "GrSWMaskHelper.h"
+#include "GrSurfacePriv.h"
 #include "GrTexturePriv.h"
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 #include "effects/GrDistanceFieldGeoProc.h"
 
 #include "SkDistanceFieldGen.h"
@@ -118,7 +118,7 @@
 // padding around path bounds to allow for antialiased pixels
 static const SkScalar kAntiAliasPad = 1.0f;
 
-class AADistanceFieldPathBatch : public GrVertexBatch {
+class AADistanceFieldPathBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -299,14 +299,9 @@
         this->flush(target, &flushInfo);
     }
 
-    bool addPathToAtlas(GrVertexBatch::Target* target,
-                        FlushInfo* flushInfo,
-                        GrBatchAtlas* atlas,
-                        ShapeData* shapeData,
-                        const GrShape& shape,
-                        bool antiAlias,
-                        uint32_t dimension,
-                        SkScalar scale) const {
+    bool addPathToAtlas(GrMeshDrawOp::Target* target, FlushInfo* flushInfo, GrBatchAtlas* atlas,
+                        ShapeData* shapeData, const GrShape& shape, bool antiAlias,
+                        uint32_t dimension, SkScalar scale) const {
         const SkRect& bounds = shape.bounds();
 
         // generate bounding rect for bitmap draw
@@ -462,7 +457,7 @@
                                   vertexStride);
     }
 
-    void flush(GrVertexBatch::Target* target, FlushInfo* flushInfo) const {
+    void flush(GrMeshDrawOp::Target* target, FlushInfo* flushInfo) const {
         if (flushInfo->fInstancesToFlush) {
             GrMesh mesh;
             int maxInstancesPerDraw =
@@ -517,7 +512,7 @@
     ShapeDataList* fShapeList;
     bool fGammaCorrect;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 bool GrAADistanceFieldPathRenderer::onDrawPath(const DrawPathArgs& args) {
diff --git a/src/gpu/batches/GrAAFillRectBatch.cpp b/src/gpu/batches/GrAAFillRectBatch.cpp
index 042b374..826c7fd 100644
--- a/src/gpu/batches/GrAAFillRectBatch.cpp
+++ b/src/gpu/batches/GrAAFillRectBatch.cpp
@@ -10,10 +10,10 @@
 #include "GrBatchFlushState.h"
 #include "GrColor.h"
 #include "GrDefaultGeoProcFactory.h"
+#include "GrMeshDrawOp.h"
 #include "GrResourceKey.h"
 #include "GrResourceProvider.h"
 #include "GrTypes.h"
-#include "GrVertexBatch.h"
 #include "SkMatrix.h"
 #include "SkRect.h"
 
@@ -157,7 +157,7 @@
         }
     }
 }
-class AAFillRectBatch : public GrVertexBatch {
+class AAFillRectBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -339,7 +339,7 @@
     SkSTArray<4 * sizeof(RectWithLocalMatrixInfo), uint8_t, true> fRectData;
     int fRectCnt;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 namespace GrAAFillRectBatch {
diff --git a/src/gpu/batches/GrAAHairLinePathRenderer.cpp b/src/gpu/batches/GrAAHairLinePathRenderer.cpp
index 67fa00d..624be6e 100644
--- a/src/gpu/batches/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/batches/GrAAHairLinePathRenderer.cpp
@@ -21,7 +21,7 @@
 #include "SkStroke.h"
 #include "SkTemplates.h"
 
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 
 #include "effects/GrBezierEffect.h"
 
@@ -675,7 +675,7 @@
     return true;
 }
 
-class AAHairlineBatch : public GrVertexBatch {
+class AAHairlineBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -798,7 +798,7 @@
     BatchTracker fBatch;
     SkSTArray<1, Geometry, true> fGeoData;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 void AAHairlineBatch::onPrepareDraws(Target* target) const {
diff --git a/src/gpu/batches/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/batches/GrAALinearizingConvexPathRenderer.cpp
index a91f7f6..f3a76cb 100644
--- a/src/gpu/batches/GrAALinearizingConvexPathRenderer.cpp
+++ b/src/gpu/batches/GrAALinearizingConvexPathRenderer.cpp
@@ -15,14 +15,14 @@
 #include "GrGeometryProcessor.h"
 #include "GrInvariantOutput.h"
 #include "GrPathUtils.h"
-#include "GrProcessor.h"
 #include "GrPipelineBuilder.h"
+#include "GrProcessor.h"
 #include "GrStyle.h"
 #include "SkGeometry.h"
+#include "SkPathPriv.h"
 #include "SkString.h"
 #include "SkTraceEvent.h"
-#include "SkPathPriv.h"
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 #include "glsl/GrGLSLGeometryProcessor.h"
 
 static const int DEFAULT_BUFFER_SIZE = 100;
@@ -123,7 +123,7 @@
     return MakeForDeviceSpace(color, coverage, localCoords, viewMatrix);
 }
 
-class AAFlatteningConvexPathBatch : public GrVertexBatch {
+class AAFlatteningConvexPathBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -190,7 +190,7 @@
         fBatch.fCanTweakAlphaForCoverage = overrides.canTweakAlphaForCoverage();
     }
 
-    void draw(GrVertexBatch::Target* target, const GrGeometryProcessor* gp, int vertexCount,
+    void draw(GrMeshDrawOp::Target* target, const GrGeometryProcessor* gp, int vertexCount,
               size_t vertexStride, void* vertices, int indexCount, uint16_t* indices) const {
         if (vertexCount == 0 || indexCount == 0) {
             return;
@@ -337,7 +337,7 @@
     BatchTracker fBatch;
     SkSTArray<1, Geometry, true> fGeoData;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 bool GrAALinearizingConvexPathRenderer::onDrawPath(const DrawPathArgs& args) {
diff --git a/src/gpu/batches/GrAAStrokeRectBatch.cpp b/src/gpu/batches/GrAAStrokeRectBatch.cpp
index dc93146..fcdb7c0 100644
--- a/src/gpu/batches/GrAAStrokeRectBatch.cpp
+++ b/src/gpu/batches/GrAAStrokeRectBatch.cpp
@@ -116,7 +116,7 @@
     return MakeForDeviceSpace(color, coverage, localCoords, viewMatrix);
 }
 
-class AAStrokeRectBatch : public GrVertexBatch {
+class AAStrokeRectBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -241,7 +241,7 @@
     SkMatrix fViewMatrix;
     bool fMiterStroke;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 void AAStrokeRectBatch::initBatchTracker(const GrXPOverridesForBatch& overrides) {
diff --git a/src/gpu/batches/GrAnalyticRectBatch.cpp b/src/gpu/batches/GrAnalyticRectBatch.cpp
index eed11b9..ff68000 100644
--- a/src/gpu/batches/GrAnalyticRectBatch.cpp
+++ b/src/gpu/batches/GrAnalyticRectBatch.cpp
@@ -15,15 +15,14 @@
 #include "GrResourceProvider.h"
 #include "SkRRect.h"
 #include "SkStrokeRec.h"
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
 #include "glsl/GrGLSLGeometryProcessor.h"
-#include "glsl/GrGLSLGeometryProcessor.h"
 #include "glsl/GrGLSLProgramDataManager.h"
-#include "glsl/GrGLSLVarying.h"
-#include "glsl/GrGLSLVertexShaderBuilder.h"
 #include "glsl/GrGLSLUniformHandler.h"
 #include "glsl/GrGLSLUtil.h"
+#include "glsl/GrGLSLVarying.h"
+#include "glsl/GrGLSLVertexShaderBuilder.h"
 
 namespace {
 
@@ -234,7 +233,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-class AnalyticRectBatch : public GrVertexBatch {
+class AnalyticRectBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -385,7 +384,7 @@
     SkMatrix                     fViewMatrixIfUsingLocalCoords;
     SkSTArray<1, Geometry, true> fGeoData;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 GrDrawOp* GrAnalyticRectBatch::CreateAnalyticRectBatch(GrColor color,
diff --git a/src/gpu/batches/GrAtlasTextBatch.cpp b/src/gpu/batches/GrAtlasTextBatch.cpp
index df81e2c..75bbfca 100644
--- a/src/gpu/batches/GrAtlasTextBatch.cpp
+++ b/src/gpu/batches/GrAtlasTextBatch.cpp
@@ -170,7 +170,7 @@
     this->flush(target, &flushInfo);
 }
 
-void GrAtlasTextBatch::flush(GrVertexBatch::Target* target, FlushInfo* flushInfo) const {
+void GrAtlasTextBatch::flush(GrMeshDrawOp::Target* target, FlushInfo* flushInfo) const {
     GrMesh mesh;
     int maxGlyphsPerDraw =
         static_cast<int>(flushInfo->fIndexBuffer->gpuMemorySize() / sizeof(uint16_t) / 6);
diff --git a/src/gpu/batches/GrAtlasTextBatch.h b/src/gpu/batches/GrAtlasTextBatch.h
index ca715a7..7109ede 100644
--- a/src/gpu/batches/GrAtlasTextBatch.h
+++ b/src/gpu/batches/GrAtlasTextBatch.h
@@ -8,12 +8,12 @@
 #ifndef GrAtlasTextBatch_DEFINED
 #define GrAtlasTextBatch_DEFINED
 
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 
 #include "text/GrAtlasTextContext.h"
 #include "text/GrDistanceFieldAdjustTable.h"
 
-class GrAtlasTextBatch : public GrVertexBatch {
+class GrAtlasTextBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -145,7 +145,7 @@
                kLCDDistanceField_MaskType == fMaskType;
     }
 
-    inline void flush(GrVertexBatch::Target* target, FlushInfo* flushInfo) const;
+    inline void flush(GrMeshDrawOp::Target* target, FlushInfo* flushInfo) const;
 
     GrColor color() const { return fBatch.fColor; }
     const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; }
@@ -191,7 +191,7 @@
 
     friend class GrBlobRegenHelper; // Needs to trigger flushes
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 /*
@@ -200,12 +200,9 @@
  */
 class GrBlobRegenHelper {
 public:
-    GrBlobRegenHelper(const GrAtlasTextBatch* batch,
-                      GrVertexBatch::Target* target,
+    GrBlobRegenHelper(const GrAtlasTextBatch* batch, GrMeshDrawOp::Target* target,
                       GrAtlasTextBatch::FlushInfo* flushInfo)
-        : fBatch(batch)
-        , fTarget(target)
-        , fFlushInfo(flushInfo) {}
+        : fBatch(batch), fTarget(target), fFlushInfo(flushInfo) {}
 
     void flush();
 
@@ -215,7 +212,7 @@
 
 private:
     const GrAtlasTextBatch* fBatch;
-    GrVertexBatch::Target* fTarget;
+    GrMeshDrawOp::Target* fTarget;
     GrAtlasTextBatch::FlushInfo* fFlushInfo;
 };
 
diff --git a/src/gpu/batches/GrDefaultPathRenderer.cpp b/src/gpu/batches/GrDefaultPathRenderer.cpp
index 884c37b..e41818d 100644
--- a/src/gpu/batches/GrDefaultPathRenderer.cpp
+++ b/src/gpu/batches/GrDefaultPathRenderer.cpp
@@ -21,8 +21,8 @@
 #include "SkTLazy.h"
 #include "SkTraceEvent.h"
 
+#include "batches/GrMeshDrawOp.h"
 #include "batches/GrRectBatchFactory.h"
-#include "batches/GrVertexBatch.h"
 
 GrDefaultPathRenderer::GrDefaultPathRenderer(bool separateStencilSupport,
                                              bool stencilWrapOpsSupport)
@@ -94,7 +94,7 @@
     }
 }
 
-class DefaultPathBatch : public GrVertexBatch {
+class DefaultPathBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -419,7 +419,7 @@
     BatchTracker fBatch;
     SkSTArray<1, Geometry, true> fGeoData;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 bool GrDefaultPathRenderer::internalDrawPath(GrRenderTargetContext* renderTargetContext,
diff --git a/src/gpu/batches/GrDrawAtlasBatch.h b/src/gpu/batches/GrDrawAtlasBatch.h
index 449882c..6022587 100644
--- a/src/gpu/batches/GrDrawAtlasBatch.h
+++ b/src/gpu/batches/GrDrawAtlasBatch.h
@@ -10,9 +10,9 @@
 
 #include "GrColor.h"
 #include "GrDefaultGeoProcFactory.h"
-#include "GrVertexBatch.h"
+#include "GrMeshDrawOp.h"
 
-class GrDrawAtlasBatch : public GrVertexBatch {
+class GrDrawAtlasBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -71,7 +71,7 @@
     bool     fCoverageIgnored;
     bool     fHasColors;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 #endif
diff --git a/src/gpu/batches/GrDrawVerticesBatch.h b/src/gpu/batches/GrDrawVerticesBatch.h
index 821321a..26f23b5 100644
--- a/src/gpu/batches/GrDrawVerticesBatch.h
+++ b/src/gpu/batches/GrDrawVerticesBatch.h
@@ -9,8 +9,8 @@
 #define GrDrawVerticesBatch_DEFINED
 
 #include "GrColor.h"
+#include "GrMeshDrawOp.h"
 #include "GrTypes.h"
-#include "GrVertexBatch.h"
 #include "SkMatrix.h"
 #include "SkRect.h"
 #include "SkTDArray.h"
@@ -18,7 +18,7 @@
 class GrBatchFlushState;
 struct GrInitInvariantOutput;
 
-class GrDrawVerticesBatch : public GrVertexBatch {
+class GrDrawVerticesBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -74,7 +74,7 @@
 
     SkSTArray<1, Mesh, true> fMeshes;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 #endif
diff --git a/src/gpu/batches/GrMSAAPathRenderer.cpp b/src/gpu/batches/GrMSAAPathRenderer.cpp
index 1a345c0..5aa8f37 100644
--- a/src/gpu/batches/GrMSAAPathRenderer.cpp
+++ b/src/gpu/batches/GrMSAAPathRenderer.cpp
@@ -12,20 +12,20 @@
 #include "GrClip.h"
 #include "GrDefaultGeoProcFactory.h"
 #include "GrFixedClip.h"
+#include "GrMesh.h"
 #include "GrPathStencilSettings.h"
 #include "GrPathUtils.h"
 #include "GrPipelineBuilder.h"
-#include "GrMesh.h"
 #include "SkGeometry.h"
 #include "SkTraceEvent.h"
-#include "glsl/GrGLSLGeometryProcessor.h"
+#include "batches/GrMeshDrawOp.h"
+#include "batches/GrRectBatchFactory.h"
+#include "gl/GrGLVaryingHandler.h"
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
-#include "glsl/GrGLSLVertexShaderBuilder.h"
+#include "glsl/GrGLSLGeometryProcessor.h"
 #include "glsl/GrGLSLProgramDataManager.h"
 #include "glsl/GrGLSLUtil.h"
-#include "gl/GrGLVaryingHandler.h"
-#include "batches/GrRectBatchFactory.h"
-#include "batches/GrVertexBatch.h"
+#include "glsl/GrGLSLVertexShaderBuilder.h"
 
 static const float kTolerance = 0.5f;
 
@@ -214,7 +214,7 @@
     typedef GrGeometryProcessor INHERITED;
 };
 
-class MSAAPathBatch : public GrVertexBatch {
+class MSAAPathBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -557,7 +557,7 @@
     int fMaxQuadIndices;
     bool fIsIndexed;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 bool GrMSAAPathRenderer::internalDrawPath(GrRenderTargetContext* renderTargetContext,
diff --git a/src/gpu/batches/GrVertexBatch.cpp b/src/gpu/batches/GrMeshDrawOp.cpp
similarity index 64%
rename from src/gpu/batches/GrVertexBatch.cpp
rename to src/gpu/batches/GrMeshDrawOp.cpp
index 37bdcac..4f6b939 100644
--- a/src/gpu/batches/GrVertexBatch.cpp
+++ b/src/gpu/batches/GrMeshDrawOp.cpp
@@ -5,24 +5,22 @@
  * found in the LICENSE file.
  */
 
-#include "GrVertexBatch.h"
+#include "GrMeshDrawOp.h"
 #include "GrBatchFlushState.h"
 #include "GrResourceProvider.h"
 
-GrVertexBatch::GrVertexBatch(uint32_t classID)
-    : INHERITED(classID)
-    , fBaseDrawToken(GrDrawOpUploadToken::AlreadyFlushedToken()) {
-}
+GrMeshDrawOp::GrMeshDrawOp(uint32_t classID)
+    : INHERITED(classID), fBaseDrawToken(GrDrawOpUploadToken::AlreadyFlushedToken()) {}
 
-void GrVertexBatch::onPrepare(GrBatchFlushState* state) {
+void GrMeshDrawOp::onPrepare(GrBatchFlushState* state) {
     Target target(state, this);
     this->onPrepareDraws(&target);
 }
 
-void* GrVertexBatch::InstancedHelper::init(Target* target, GrPrimitiveType primType,
-                                           size_t vertexStride, const GrBuffer* indexBuffer,
-                                           int verticesPerInstance, int indicesPerInstance,
-                                           int instancesToDraw) {
+void* GrMeshDrawOp::InstancedHelper::init(Target* target, GrPrimitiveType primType,
+                                          size_t vertexStride, const GrBuffer* indexBuffer,
+                                          int verticesPerInstance, int indicesPerInstance,
+                                          int instancesToDraw) {
     SkASSERT(target);
     if (!indexBuffer) {
         return nullptr;
@@ -30,7 +28,8 @@
     const GrBuffer* vertexBuffer;
     int firstVertex;
     int vertexCount = verticesPerInstance * instancesToDraw;
-    void* vertices = target->makeVertexSpace(vertexStride, vertexCount, &vertexBuffer, &firstVertex);
+    void* vertices =
+            target->makeVertexSpace(vertexStride, vertexCount, &vertexBuffer, &firstVertex);
     if (!vertices) {
         SkDebugf("Vertices could not be allocated for instanced rendering.");
         return nullptr;
@@ -39,21 +38,18 @@
     size_t ibSize = indexBuffer->gpuMemorySize();
     int maxInstancesPerDraw = static_cast<int>(ibSize / (sizeof(uint16_t) * indicesPerInstance));
 
-    fMesh.initInstanced(primType, vertexBuffer, indexBuffer,
-        firstVertex, verticesPerInstance, indicesPerInstance, instancesToDraw,
-        maxInstancesPerDraw);
+    fMesh.initInstanced(primType, vertexBuffer, indexBuffer, firstVertex, verticesPerInstance,
+                        indicesPerInstance, instancesToDraw, maxInstancesPerDraw);
     return vertices;
 }
 
-void GrVertexBatch::InstancedHelper::recordDraw(Target* target, const GrGeometryProcessor* gp) {
+void GrMeshDrawOp::InstancedHelper::recordDraw(Target* target, const GrGeometryProcessor* gp) {
     SkASSERT(fMesh.instanceCount());
     target->draw(gp, fMesh);
 }
 
-void* GrVertexBatch::QuadHelper::init(Target* target, size_t vertexStride,
-                                      int quadsToDraw) {
-    sk_sp<const GrBuffer> quadIndexBuffer(
-        target->resourceProvider()->refQuadIndexBuffer());
+void* GrMeshDrawOp::QuadHelper::init(Target* target, size_t vertexStride, int quadsToDraw) {
+    sk_sp<const GrBuffer> quadIndexBuffer(target->resourceProvider()->refQuadIndexBuffer());
     if (!quadIndexBuffer) {
         SkDebugf("Could not get quad index buffer.");
         return nullptr;
@@ -63,7 +59,7 @@
                                  quadsToDraw);
 }
 
-void GrVertexBatch::onDraw(GrBatchFlushState* state, const SkRect& bounds) {
+void GrMeshDrawOp::onDraw(GrBatchFlushState* state, const SkRect& bounds) {
     int currUploadIdx = 0;
     int currMeshIdx = 0;
 
@@ -75,7 +71,7 @@
                fInlineUploads[currUploadIdx].fUploadBeforeToken == drawToken) {
             state->commandBuffer()->inlineUpload(state, fInlineUploads[currUploadIdx++].fUpload);
         }
-        const QueuedDraw &draw = fQueuedDraws[currDrawIdx];
+        const QueuedDraw& draw = fQueuedDraws[currDrawIdx];
         state->commandBuffer()->draw(*this->pipeline(), *draw.fGeometryProcessor.get(),
                                      fMeshes.begin() + currMeshIdx, draw.fMeshCnt, bounds);
         currMeshIdx += draw.fMeshCnt;
@@ -89,13 +85,13 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-void GrVertexBatch::Target::draw(const GrGeometryProcessor* gp, const GrMesh& mesh) {
-    GrVertexBatch* batch = this->vertexBatch();
+void GrMeshDrawOp::Target::draw(const GrGeometryProcessor* gp, const GrMesh& mesh) {
+    GrMeshDrawOp* batch = this->vertexBatch();
     batch->fMeshes.push_back(mesh);
     if (!batch->fQueuedDraws.empty()) {
         // If the last draw shares a geometry processor and there are no intervening uploads,
         // add this mesh to it.
-        GrVertexBatch::QueuedDraw& lastDraw = this->vertexBatch()->fQueuedDraws.back();
+        GrMeshDrawOp::QueuedDraw& lastDraw = this->vertexBatch()->fQueuedDraws.back();
         if (lastDraw.fGeometryProcessor == gp &&
             (batch->fInlineUploads.empty() ||
              batch->fInlineUploads.back().fUploadBeforeToken != this->nextDrawToken())) {
@@ -103,7 +99,7 @@
             return;
         }
     }
-    GrVertexBatch::QueuedDraw& draw = this->vertexBatch()->fQueuedDraws.push_back();
+    GrMeshDrawOp::QueuedDraw& draw = this->vertexBatch()->fQueuedDraws.push_back();
     GrDrawOpUploadToken token = this->state()->issueDrawToken();
     draw.fGeometryProcessor.reset(gp);
     draw.fMeshCnt = 1;
diff --git a/src/gpu/batches/GrVertexBatch.h b/src/gpu/batches/GrMeshDrawOp.h
similarity index 89%
rename from src/gpu/batches/GrVertexBatch.h
rename to src/gpu/batches/GrMeshDrawOp.h
index f5945e2..b0292ae 100644
--- a/src/gpu/batches/GrVertexBatch.h
+++ b/src/gpu/batches/GrMeshDrawOp.h
@@ -18,28 +18,28 @@
 class GrBatchFlushState;
 
 /**
- * Base class for vertex-based GrBatches.
+ * Base class for mesh-drawing GrDrawOps.
  */
-class GrVertexBatch : public GrDrawOp {
+class GrMeshDrawOp : public GrDrawOp {
 public:
     class Target;
 
-    GrVertexBatch(uint32_t classID);
+    GrMeshDrawOp(uint32_t classID);
 
 protected:
     /** Helper for rendering instances using an instanced index index buffer. This class creates the
         space for the vertices and flushes the draws to the batch target. */
-   class InstancedHelper {
-   public:
+    class InstancedHelper {
+    public:
         InstancedHelper() {}
         /** Returns the allocated storage for the vertices. The caller should populate the vertices
             before calling recordDraws(). */
-        void* init(Target*, GrPrimitiveType, size_t vertexStride,
-                   const GrBuffer*, int verticesPerInstance, int indicesPerInstance,
-                   int instancesToDraw);
+        void* init(Target*, GrPrimitiveType, size_t vertexStride, const GrBuffer*,
+                   int verticesPerInstance, int indicesPerInstance, int instancesToDraw);
 
         /** Call after init() to issue draws to the batch target.*/
         void recordDraw(Target*, const GrGeometryProcessor*);
+
     private:
         GrMesh fMesh;
     };
@@ -57,6 +57,7 @@
         void* init(Target*, size_t vertexStride, int quadsToDraw);
 
         using InstancedHelper::recordDraw;
+
     private:
         typedef InstancedHelper INHERITED;
     };
@@ -82,7 +83,7 @@
     // fQueuedDraws[i]'s token is fBaseDrawToken + i.
     GrDrawOpUploadToken fBaseDrawToken;
 
-    SkSTArray<4, GrMesh>           fMeshes;
+    SkSTArray<4, GrMesh> fMeshes;
     SkSTArray<4, QueuedDraw, true> fQueuedDraws;
 
     typedef GrDrawOp INHERITED;
diff --git a/src/gpu/batches/GrNinePatch.cpp b/src/gpu/batches/GrNinePatch.cpp
index f9a6601..a99a073 100644
--- a/src/gpu/batches/GrNinePatch.cpp
+++ b/src/gpu/batches/GrNinePatch.cpp
@@ -9,8 +9,8 @@
 
 #include "GrBatchFlushState.h"
 #include "GrDefaultGeoProcFactory.h"
+#include "GrMeshDrawOp.h"
 #include "GrResourceProvider.h"
-#include "GrVertexBatch.h"
 #include "SkBitmap.h"
 #include "SkLatticeIter.h"
 #include "SkRect.h"
@@ -23,7 +23,7 @@
     return GrDefaultGeoProcFactory::Make(color, coverage, localCoords, SkMatrix::I());
 }
 
-class GrNonAANinePatchBatch : public GrVertexBatch {
+class GrNonAANinePatchBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -176,7 +176,7 @@
     int fImageHeight;
     SkSTArray<1, Patch, true> fPatches;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 namespace GrNinePatch {
diff --git a/src/gpu/batches/GrNonAAFillRectBatch.cpp b/src/gpu/batches/GrNonAAFillRectBatch.cpp
index db6499b..175b556 100644
--- a/src/gpu/batches/GrNonAAFillRectBatch.cpp
+++ b/src/gpu/batches/GrNonAAFillRectBatch.cpp
@@ -10,10 +10,10 @@
 #include "GrBatchFlushState.h"
 #include "GrColor.h"
 #include "GrDefaultGeoProcFactory.h"
+#include "GrMeshDrawOp.h"
 #include "GrPrimitiveProcessor.h"
-#include "GrResourceProvider.h"
 #include "GrQuad.h"
-#include "GrVertexBatch.h"
+#include "GrResourceProvider.h"
 
 #include "SkMatrixPriv.h"
 
@@ -71,7 +71,7 @@
     }
 }
 
-class NonAAFillRectBatch : public GrVertexBatch {
+class NonAAFillRectBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -187,7 +187,7 @@
     GrXPOverridesForBatch fOverrides;
     SkSTArray<1, RectInfo, true> fRects;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 namespace GrNonAAFillRectBatch {
diff --git a/src/gpu/batches/GrNonAAFillRectPerspectiveBatch.cpp b/src/gpu/batches/GrNonAAFillRectPerspectiveBatch.cpp
index dddd23c..8698e8f 100644
--- a/src/gpu/batches/GrNonAAFillRectPerspectiveBatch.cpp
+++ b/src/gpu/batches/GrNonAAFillRectPerspectiveBatch.cpp
@@ -10,10 +10,10 @@
 #include "GrBatchFlushState.h"
 #include "GrColor.h"
 #include "GrDefaultGeoProcFactory.h"
+#include "GrMeshDrawOp.h"
 #include "GrPrimitiveProcessor.h"
-#include "GrResourceProvider.h"
 #include "GrQuad.h"
-#include "GrVertexBatch.h"
+#include "GrResourceProvider.h"
 
 static const int kVertsPerInstance = 4;
 static const int kIndicesPerInstance = 6;
@@ -90,7 +90,7 @@
 }
 
 // We handle perspective in the local matrix or viewmatrix with special batches
-class GrNonAAFillRectPerspectiveBatch : public GrVertexBatch {
+class GrNonAAFillRectPerspectiveBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -229,7 +229,7 @@
     SkMatrix fLocalMatrix;
     SkMatrix fViewMatrix;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 namespace GrNonAAFillRectBatch {
diff --git a/src/gpu/batches/GrNonAAStrokeRectBatch.cpp b/src/gpu/batches/GrNonAAStrokeRectBatch.cpp
index 9017b80..4649edf 100644
--- a/src/gpu/batches/GrNonAAStrokeRectBatch.cpp
+++ b/src/gpu/batches/GrNonAAStrokeRectBatch.cpp
@@ -7,11 +7,11 @@
 
 #include "GrNonAAStrokeRectBatch.h"
 
-#include "GrBatchTest.h"
 #include "GrBatchFlushState.h"
+#include "GrBatchTest.h"
 #include "GrColor.h"
 #include "GrDefaultGeoProcFactory.h"
-#include "GrVertexBatch.h"
+#include "GrMeshDrawOp.h"
 #include "SkRandom.h"
 
 /*  create a triangle strip that strokes the specified rect. There are 8
@@ -45,7 +45,7 @@
            (stroke.getJoin() == SkPaint::kMiter_Join && stroke.getMiter() > SK_ScalarSqrt2);
 }
 
-class NonAAStrokeRectBatch : public GrVertexBatch {
+class NonAAStrokeRectBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -183,8 +183,7 @@
     const static int kVertsPerHairlineRect = 5;
     const static int kVertsPerStrokeRect = 10;
 
-
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 namespace GrNonAAStrokeRectBatch {
diff --git a/src/gpu/batches/GrPLSPathRenderer.cpp b/src/gpu/batches/GrPLSPathRenderer.cpp
index 1cccc10..f233ccc 100644
--- a/src/gpu/batches/GrPLSPathRenderer.cpp
+++ b/src/gpu/batches/GrPLSPathRenderer.cpp
@@ -7,27 +7,27 @@
 
 #include "GrPLSPathRenderer.h"
 
+#include "GrBatchFlushState.h"
+#include "GrBatchTest.h"
+#include "GrCaps.h"
+#include "GrContext.h"
+#include "GrDefaultGeoProcFactory.h"
+#include "GrInvariantOutput.h"
+#include "GrPLSGeometryProcessor.h"
+#include "GrPathUtils.h"
+#include "GrPipelineBuilder.h"
+#include "GrProcessor.h"
+#include "GrStyle.h"
+#include "GrTessellator.h"
 #include "SkChunkAlloc.h"
 #include "SkGeometry.h"
 #include "SkPathPriv.h"
 #include "SkString.h"
 #include "SkTSort.h"
 #include "SkTraceEvent.h"
-#include "GrBatchFlushState.h"
-#include "GrBatchTest.h"
-#include "GrCaps.h"
-#include "GrContext.h"
-#include "GrDefaultGeoProcFactory.h"
-#include "GrPLSGeometryProcessor.h"
-#include "GrInvariantOutput.h"
-#include "GrPathUtils.h"
-#include "GrProcessor.h"
-#include "GrPipelineBuilder.h"
-#include "GrStyle.h"
-#include "GrTessellator.h"
-#include "batches/GrVertexBatch.h"
-#include "glsl/GrGLSLGeometryProcessor.h"
+#include "batches/GrMeshDrawOp.h"
 #include "gl/builders/GrGLProgramBuilder.h"
+#include "glsl/GrGLSLGeometryProcessor.h"
 #include "glsl/GrGLSLPLSPathRendering.h"
 
 GrPLSPathRenderer::GrPLSPathRenderer() {
@@ -763,7 +763,7 @@
             path.getFillType() == SkPath::FillType::kWinding_FillType;
 }
 
-class PLSPathBatch : public GrVertexBatch {
+class PLSPathBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
     PLSPathBatch(GrColor color, const SkPath& path, const SkMatrix& viewMatrix)
@@ -924,7 +924,7 @@
     GrColor fColor;
     SkPath fPath;
     SkMatrix fViewMatrix;
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 SkDEBUGCODE(bool inPLSDraw = false;)
diff --git a/src/gpu/batches/GrRegionBatch.cpp b/src/gpu/batches/GrRegionBatch.cpp
index d7bef06..5f9877e 100644
--- a/src/gpu/batches/GrRegionBatch.cpp
+++ b/src/gpu/batches/GrRegionBatch.cpp
@@ -7,10 +7,10 @@
 
 #include "GrRegionBatch.h"
 
-#include "GrDefaultGeoProcFactory.h"
 #include "GrBatchFlushState.h"
+#include "GrDefaultGeoProcFactory.h"
+#include "GrMeshDrawOp.h"
 #include "GrResourceProvider.h"
-#include "GrVertexBatch.h"
 #include "SkMatrixPriv.h"
 #include "SkRegion.h"
 
@@ -50,7 +50,7 @@
     }
 }
 
-class RegionBatch : public GrVertexBatch {
+class RegionBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -155,7 +155,7 @@
     GrXPOverridesForBatch fOverrides;
     SkSTArray<1, RegionInfo, true> fRegions;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 namespace GrRegionBatch {
diff --git a/src/gpu/batches/GrShadowRRectBatch.cpp b/src/gpu/batches/GrShadowRRectBatch.cpp
index ba5c629..84e2a15 100755
--- a/src/gpu/batches/GrShadowRRectBatch.cpp
+++ b/src/gpu/batches/GrShadowRRectBatch.cpp
@@ -59,7 +59,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-class ShadowCircleBatch : public GrVertexBatch {
+class ShadowCircleBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -399,7 +399,7 @@
     int                          fVertCount;
     int                          fIndexCount;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -504,7 +504,7 @@
 //   each vertex is also given the normalized x & y distance from the interior rect's edge
 //      the GP takes the min of those depths +1 to get the normalized distance to the outer edge
 
-class ShadowCircularRRectBatch : public GrVertexBatch {
+class ShadowCircularRRectBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -828,7 +828,7 @@
     int                          fVertCount;
     int                          fIndexCount;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/batches/GrTessellatingPathRenderer.cpp b/src/gpu/batches/GrTessellatingPathRenderer.cpp
index eaa0b84..6e78c11 100644
--- a/src/gpu/batches/GrTessellatingPathRenderer.cpp
+++ b/src/gpu/batches/GrTessellatingPathRenderer.cpp
@@ -20,7 +20,7 @@
 #include "GrTessellator.h"
 #include "SkGeometry.h"
 
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 
 #include <stdio.h>
 
@@ -103,12 +103,8 @@
 
 class DynamicVertexAllocator : public GrTessellator::VertexAllocator {
 public:
-    DynamicVertexAllocator(size_t stride, GrVertexBatch::Target* target)
-      : VertexAllocator(stride)
-      , fTarget(target)
-      , fVertexBuffer(nullptr)
-      , fVertices(nullptr) {
-    }
+    DynamicVertexAllocator(size_t stride, GrMeshDrawOp::Target* target)
+        : VertexAllocator(stride), fTarget(target), fVertexBuffer(nullptr), fVertices(nullptr) {}
     void* lock(int vertexCount) override {
         fVertexCount = vertexCount;
         fVertices = fTarget->makeVertexSpace(stride(), vertexCount, &fVertexBuffer, &fFirstVertex);
@@ -121,7 +117,7 @@
     const GrBuffer* vertexBuffer() const { return fVertexBuffer; }
     int firstVertex() const { return fFirstVertex; }
 private:
-    GrVertexBatch::Target* fTarget;
+    GrMeshDrawOp::Target* fTarget;
     const GrBuffer* fVertexBuffer;
     int fVertexCount;
     int fFirstVertex;
@@ -160,7 +156,7 @@
     return true;
 }
 
-class TessellatingPathBatch : public GrVertexBatch {
+class TessellatingPathBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -354,7 +350,7 @@
     bool                    fAntiAlias;
     GrXPOverridesForBatch   fPipelineInfo;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 bool GrTessellatingPathRenderer::onDrawPath(const DrawPathArgs& args) {
diff --git a/src/gpu/batches/GrTestBatch.h b/src/gpu/batches/GrTestBatch.h
index 9d76c43..700e1c8 100644
--- a/src/gpu/batches/GrTestBatch.h
+++ b/src/gpu/batches/GrTestBatch.h
@@ -11,13 +11,13 @@
 #include "GrBatchFlushState.h"
 #include "GrGeometryProcessor.h"
 
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 
 /*
  * A simple solid color batch only for testing purposes which actually doesn't batch at all. It
  * saves having to fill out some boiler plate methods.
  */
-class GrTestBatch : public GrVertexBatch {
+class GrTestBatch : public GrMeshDrawOp {
 public:
     virtual const char* name() const override = 0;
 
@@ -60,7 +60,7 @@
     GrColor       fColor;
     Optimizations fOptimizations;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 #endif
diff --git a/src/gpu/effects/GrDashingEffect.cpp b/src/gpu/effects/GrDashingEffect.cpp
index f3a6323..311bad3 100644
--- a/src/gpu/effects/GrDashingEffect.cpp
+++ b/src/gpu/effects/GrDashingEffect.cpp
@@ -10,15 +10,15 @@
 #include "GrBatchFlushState.h"
 #include "GrBatchTest.h"
 #include "GrCaps.h"
-#include "GrGeometryProcessor.h"
 #include "GrContext.h"
 #include "GrCoordTransform.h"
 #include "GrDefaultGeoProcFactory.h"
+#include "GrGeometryProcessor.h"
 #include "GrInvariantOutput.h"
 #include "GrProcessor.h"
 #include "GrStyle.h"
 #include "SkGr.h"
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
 #include "glsl/GrGLSLGeometryProcessor.h"
 #include "glsl/GrGLSLProgramDataManager.h"
@@ -238,7 +238,7 @@
                                                const SkMatrix& localMatrix,
                                                bool usesLocalCoords);
 
-class DashBatch : public GrVertexBatch {
+class DashBatch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
     struct Geometry {
@@ -704,7 +704,7 @@
     BatchTracker fBatch;
     SkSTArray<1, Geometry, true> fGeoData;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 
 GrDrawOp* GrDashingEffect::CreateDashLineBatch(GrColor color,
diff --git a/tests/GrPorterDuffTest.cpp b/tests/GrPorterDuffTest.cpp
index f471937..27573b0 100644
--- a/tests/GrPorterDuffTest.cpp
+++ b/tests/GrPorterDuffTest.cpp
@@ -14,7 +14,7 @@
 #include "GrGpu.h"
 #include "GrResourceProvider.h"
 #include "GrXferProcessor.h"
-#include "batches/GrVertexBatch.h"
+#include "batches/GrMeshDrawOp.h"
 #include "effects/GrPorterDuffXferProcessor.h"
 #include "gl/GrGLCaps.h"
 
@@ -1090,7 +1090,7 @@
 }
 
 static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const GrCaps& caps) {
-    class TestLCDCoverageBatch: public GrVertexBatch {
+    class TestLCDCoverageBatch : public GrMeshDrawOp {
     public:
         DEFINE_OP_CLASS_ID
 
@@ -1109,7 +1109,7 @@
         bool onCombineIfPossible(GrOp*, const GrCaps&) override  { return false; }
         void onPrepareDraws(Target*) const override {}
 
-        typedef GrVertexBatch INHERITED;
+        typedef GrMeshDrawOp INHERITED;
     } testLCDCoverageBatch;
 
     GrPipelineOptimizations opts;
diff --git a/tests/PrimitiveProcessorTest.cpp b/tests/PrimitiveProcessorTest.cpp
index 00c0bff..10891b7 100644
--- a/tests/PrimitiveProcessorTest.cpp
+++ b/tests/PrimitiveProcessorTest.cpp
@@ -12,20 +12,20 @@
 
 #if SK_SUPPORT_GPU
 #include "GrBatchFlushState.h"
-#include "GrRenderTargetContext.h"
-#include "GrRenderTargetContextPriv.h"
 #include "GrContext.h"
 #include "GrGeometryProcessor.h"
 #include "GrGpu.h"
+#include "GrRenderTargetContext.h"
+#include "GrRenderTargetContextPriv.h"
 #include "GrTextureProvider.h"
-#include "glsl/GrGLSLGeometryProcessor.h"
-#include "glsl/GrGLSLFragmentShaderBuilder.h"
-#include "glsl/GrGLSLVarying.h"
-#include "batches/GrVertexBatch.h"
 #include "SkString.h"
+#include "batches/GrMeshDrawOp.h"
+#include "glsl/GrGLSLFragmentShaderBuilder.h"
+#include "glsl/GrGLSLGeometryProcessor.h"
+#include "glsl/GrGLSLVarying.h"
 
 namespace {
-class Batch : public GrVertexBatch {
+class Batch : public GrMeshDrawOp {
 public:
     DEFINE_OP_CLASS_ID
 
@@ -97,7 +97,7 @@
 
     int fNumAttribs;
 
-    typedef GrVertexBatch INHERITED;
+    typedef GrMeshDrawOp INHERITED;
 };
 }
 
