diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp
index 7628847..688c592 100644
--- a/tests/GLProgramsTest.cpp
+++ b/tests/GLProgramsTest.cpp
@@ -323,7 +323,7 @@
 
         GrPaint grPaint;
 
-        std::unique_ptr<GrDrawOp> op(GrRandomDrawOp(&random, context));
+        std::unique_ptr<GrMeshDrawOp> op(GrRandomDrawOp(&random, context));
         SkASSERT(op);
 
         GrProcessorTestData ptd(&random, context, renderTargetContext.get(), dummyTextures);
@@ -336,8 +336,8 @@
         static constexpr GrAAType kAATypes[] = {GrAAType::kNone, GrAAType::kCoverage};
         GrAAType aaType = kAATypes[random.nextULessThan(SK_ARRAY_COUNT(kAATypes))];
 
-        renderTargetContext->priv().testingOnly_addDrawOp(std::move(grPaint), aaType, std::move(op),
-                                                          uss, snapToCenters);
+        renderTargetContext->priv().testingOnly_addMeshDrawOp(std::move(grPaint), aaType,
+                                                              std::move(op), uss, snapToCenters);
     }
     // Flush everything, test passes if flush is successful(ie, no asserts are hit, no crashes)
     drawingManager->flush();
@@ -358,7 +358,7 @@
     for (int i = 0; i < fpFactoryCnt; ++i) {
         // Since FP factories internally randomize, call each 10 times.
         for (int j = 0; j < 10; ++j) {
-            std::unique_ptr<GrDrawOp> op(GrRandomDrawOp(&random, context));
+            std::unique_ptr<GrMeshDrawOp> op(GrRandomDrawOp(&random, context));
             SkASSERT(op);
             GrProcessorTestData ptd(&random, context, renderTargetContext.get(), dummyTextures);
             GrPaint grPaint;
@@ -370,8 +370,8 @@
                 BlockInputFragmentProcessor::Make(std::move(fp)));
             grPaint.addColorFragmentProcessor(std::move(blockFP));
 
-            renderTargetContext->priv().testingOnly_addDrawOp(std::move(grPaint), GrAAType::kNone,
-                                                              std::move(op));
+            renderTargetContext->priv().testingOnly_addMeshDrawOp(
+                    std::move(grPaint), GrAAType::kNone, std::move(op));
             drawingManager->flush();
         }
     }
