diff --git a/BUILD.gn b/BUILD.gn
index 77b8786..f14126b 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1982,6 +1982,9 @@
     if (skia_use_gl) {
       sources += gl_gm_sources
     }
+    if (!skia_enable_oga) {
+      sources -= oga_gm_sources
+    }
     deps = [
       ":etc1",
       ":flags",
@@ -2100,6 +2103,9 @@
   import("gn/samples.gni")
   test_lib("samples") {
     sources = samples_sources
+    if (!skia_enable_oga) {
+      sources -= oga_samples_sources
+    }
     public_deps = [ ":tool_utils" ]
     deps = [
       ":flags",
diff --git a/gm/trickycubicstrokes.cpp b/gm/trickycubicstrokes.cpp
index 778f61e..400de8b 100644
--- a/gm/trickycubicstrokes.cpp
+++ b/gm/trickycubicstrokes.cpp
@@ -18,10 +18,11 @@
 #include "include/core/SkTypes.h"
 #include "include/gpu/GrContextOptions.h"
 #include "include/gpu/GrDirectContext.h"
+#include "include/utils/SkRandom.h"
 #include "src/core/SkGeometry.h"
 #include "src/gpu/GrDirectContextPriv.h"
 #include "src/gpu/GrDrawingManager.h"
-#include "src/gpu/tessellate/GrTessellationPathRenderer.h"
+#include "src/gpu/GrRecordingContextPriv.h"
 
 static constexpr float kStrokeWidth = 30;
 static constexpr int kCellSize = 200;
@@ -179,6 +180,9 @@
     draw_test(canvas, SkPaint::kRound_Cap, SkPaint::kRound_Join);
 }
 
+#if GR_OGA
+#include "src/gpu/tessellate/GrTessellationPathRenderer.h"
+
 class TrickyCubicStrokes_tess_segs_5 : public skiagm::GM {
     SkString onShortName() override {
         return SkString("trickycubicstrokes_tess_segs_5");
@@ -236,3 +240,4 @@
 };
 
 DEF_GM( return new TrickyCubicStrokes_tess_segs_5; )
+#endif // GR_OGA
diff --git a/gn/gm.gni b/gn/gm.gni
index 5f41519..dad3380 100644
--- a/gn/gm.gni
+++ b/gn/gm.gni
@@ -309,7 +309,6 @@
   "$_gm/polygonoffset.cpp",
   "$_gm/polygons.cpp",
   "$_gm/postercircle.cpp",
-  "$_gm/preservefillrule.cpp",
   "$_gm/quadpaths.cpp",
   "$_gm/radial_gradient_precision.cpp",
   "$_gm/rasterhandleallocator.cpp",
@@ -404,7 +403,6 @@
   "$_gm/vertices.cpp",
   "$_gm/verylargebitmap.cpp",
   "$_gm/wacky_yuv_formats.cpp",
-  "$_gm/widebuttcaps.cpp",
   "$_gm/windowrectangles.cpp",
   "$_gm/xfermodeimagefilter.cpp",
   "$_gm/xfermodes.cpp",
@@ -416,3 +414,10 @@
 ]
 
 gl_gm_sources = [ "$_gm/rectangletexture.cpp" ]
+
+oga_gm_sources = [
+  "$_gm/preservefillrule.cpp",
+  "$_gm/widebuttcaps.cpp",
+]
+
+gm_sources += oga_gm_sources
diff --git a/gn/gpu.gni b/gn/gpu.gni
index e12b086..c6a2a66 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -139,10 +139,6 @@
   "$_src/gpu/GrOpsTask.h",
   "$_src/gpu/GrPaint.cpp",
   "$_src/gpu/GrPaint.h",
-  "$_src/gpu/GrPathRenderer.cpp",
-  "$_src/gpu/GrPathRenderer.h",
-  "$_src/gpu/GrPathRendererChain.cpp",
-  "$_src/gpu/GrPathRendererChain.h",
   "$_src/gpu/GrPersistentCacheUtils.cpp",
   "$_src/gpu/GrPersistentCacheUtils.h",
   "$_src/gpu/GrPipeline.cpp",
@@ -205,8 +201,6 @@
   "$_src/gpu/GrShaderVar.cpp",
   "$_src/gpu/GrShaderVar.h",
   "$_src/gpu/GrSimpleMesh.h",
-  "$_src/gpu/GrSoftwarePathRenderer.cpp",
-  "$_src/gpu/GrSoftwarePathRenderer.h",
   "$_src/gpu/GrStagingBufferManager.cpp",
   "$_src/gpu/GrStagingBufferManager.h",
   "$_src/gpu/GrStencilSettings.cpp",
@@ -355,24 +349,14 @@
   "$_src/gpu/geometry/GrStyledShape.cpp",
   "$_src/gpu/geometry/GrStyledShape.h",
   "$_src/gpu/geometry/GrWangsFormula.h",
-  "$_src/gpu/ops/GrAAConvexPathRenderer.cpp",
-  "$_src/gpu/ops/GrAAConvexPathRenderer.h",
   "$_src/gpu/ops/GrAAConvexTessellator.cpp",
   "$_src/gpu/ops/GrAAConvexTessellator.h",
-  "$_src/gpu/ops/GrAAHairLinePathRenderer.cpp",
-  "$_src/gpu/ops/GrAAHairLinePathRenderer.h",
-  "$_src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp",
-  "$_src/gpu/ops/GrAALinearizingConvexPathRenderer.h",
   "$_src/gpu/ops/GrAtlasTextOp.cpp",
   "$_src/gpu/ops/GrAtlasTextOp.h",
   "$_src/gpu/ops/GrClearOp.cpp",
   "$_src/gpu/ops/GrClearOp.h",
-  "$_src/gpu/ops/GrDashLinePathRenderer.cpp",
-  "$_src/gpu/ops/GrDashLinePathRenderer.h",
   "$_src/gpu/ops/GrDashOp.cpp",
   "$_src/gpu/ops/GrDashOp.h",
-  "$_src/gpu/ops/GrDefaultPathRenderer.cpp",
-  "$_src/gpu/ops/GrDefaultPathRenderer.h",
   "$_src/gpu/ops/GrDrawAtlasOp.cpp",
   "$_src/gpu/ops/GrDrawAtlasOp.h",
   "$_src/gpu/ops/GrDrawOp.h",
@@ -404,16 +388,12 @@
   "$_src/gpu/ops/GrSimpleMeshDrawOpHelperWithStencil.h",
   "$_src/gpu/ops/GrSmallPathAtlasMgr.cpp",
   "$_src/gpu/ops/GrSmallPathAtlasMgr.h",
-  "$_src/gpu/ops/GrSmallPathRenderer.cpp",
-  "$_src/gpu/ops/GrSmallPathRenderer.h",
   "$_src/gpu/ops/GrSmallPathShapeData.cpp",
   "$_src/gpu/ops/GrSmallPathShapeData.h",
   "$_src/gpu/ops/GrStrokeRectOp.cpp",
   "$_src/gpu/ops/GrStrokeRectOp.h",
   "$_src/gpu/ops/GrTextureOp.cpp",
   "$_src/gpu/ops/GrTextureOp.h",
-  "$_src/gpu/ops/GrTriangulatingPathRenderer.cpp",
-  "$_src/gpu/ops/GrTriangulatingPathRenderer.h",
 
   # gradients
   "$_src/gpu/gradients/GrGradientBitmapCache.cpp",
@@ -463,7 +443,6 @@
   "$_src/gpu/tessellate/GrStrokeTessellateOp.cpp",
   "$_src/gpu/tessellate/GrStrokeTessellateOp.h",
   "$_src/gpu/tessellate/GrStrokeTessellator.h",
-  "$_src/gpu/tessellate/GrTessellationPathRenderer.cpp",
   "$_src/gpu/tessellate/GrTessellationPathRenderer.h",
   "$_src/gpu/tessellate/GrVectorXform.h",
 
@@ -637,12 +616,37 @@
   "$_src/gpu/GrClipStack.h",
   "$_src/gpu/GrClipStackClip.cpp",
   "$_src/gpu/GrClipStackClip.h",
+  "$_src/gpu/GrPathRenderer.cpp",
+  "$_src/gpu/GrPathRenderer.h",
+  "$_src/gpu/GrPathRendererChain.cpp",
+  "$_src/gpu/GrPathRendererChain.h",
   "$_src/gpu/GrReducedClip.cpp",
   "$_src/gpu/GrReducedClip.h",
+  "$_src/gpu/GrSoftwarePathRenderer.cpp",
+  "$_src/gpu/GrSoftwarePathRenderer.h",
   "$_src/gpu/GrStencilClip.h",
   "$_src/gpu/GrStencilMaskHelper.cpp",
   "$_src/gpu/GrStencilMaskHelper.h",
 
+  # Ops
+  "$_src/gpu/ops/GrAAConvexPathRenderer.cpp",
+  "$_src/gpu/ops/GrAAConvexPathRenderer.h",
+  "$_src/gpu/ops/GrAAHairLinePathRenderer.cpp",
+  "$_src/gpu/ops/GrAAHairLinePathRenderer.h",
+  "$_src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp",
+  "$_src/gpu/ops/GrAALinearizingConvexPathRenderer.h",
+  "$_src/gpu/ops/GrDashLinePathRenderer.cpp",
+  "$_src/gpu/ops/GrDashLinePathRenderer.h",
+  "$_src/gpu/ops/GrDefaultPathRenderer.cpp",
+  "$_src/gpu/ops/GrDefaultPathRenderer.h",
+  "$_src/gpu/ops/GrSmallPathRenderer.cpp",
+  "$_src/gpu/ops/GrSmallPathRenderer.h",
+  "$_src/gpu/ops/GrTriangulatingPathRenderer.cpp",
+  "$_src/gpu/ops/GrTriangulatingPathRenderer.h",
+
+  # tessellate
+  "$_src/gpu/tessellate/GrTessellationPathRenderer.cpp",
+
   # Sk files
   "$_src/gpu/SkGpuDevice.cpp",
   "$_src/gpu/SkGpuDevice.h",
diff --git a/gn/samples.gni b/gn/samples.gni
index 693283d..61ab5c4 100644
--- a/gn/samples.gni
+++ b/gn/samples.gni
@@ -54,7 +54,6 @@
   "$_samplecode/SamplePathClip.cpp",
   "$_samplecode/SamplePathEffects.cpp",
   "$_samplecode/SamplePathOverstroke.cpp",
-  "$_samplecode/SamplePathTessellators.cpp",
   "$_samplecode/SamplePathText.cpp",
   "$_samplecode/SamplePolyToPoly.cpp",
   "$_samplecode/SampleQuadStroker.cpp",
@@ -83,3 +82,7 @@
   "$_samplecode/SampleXfermodesBlur.cpp",
   "$_samplecode/vertexdump.cpp",
 ]
+
+oga_samples_sources = [ "$_samplecode/SamplePathTessellators.cpp" ]
+
+samples_sources += oga_samples_sources
diff --git a/gn/tests.gni b/gn/tests.gni
index b339806..257a3cd 100644
--- a/gn/tests.gni
+++ b/gn/tests.gni
@@ -99,7 +99,6 @@
   "$_tests/GpuRectanizerTest.cpp",
   "$_tests/GrAHardwareBufferTest.cpp",
   "$_tests/GrBlockAllocatorTest.cpp",
-  "$_tests/GrCCPRTest.cpp",
   "$_tests/GrContextAbandonTest.cpp",
   "$_tests/GrContextFactoryTest.cpp",
   "$_tests/GrContextOOM.cpp",
@@ -189,7 +188,6 @@
   "$_tests/PathBuilderTest.cpp",
   "$_tests/PathCoverageTest.cpp",
   "$_tests/PathMeasureTest.cpp",
-  "$_tests/PathRendererCacheTests.cpp",
   "$_tests/PathTest.cpp",
   "$_tests/PictureBBHTest.cpp",
   "$_tests/PictureShaderTest.cpp",
@@ -427,6 +425,10 @@
   "$_tests/WangsFormulaTest.cpp",
 ]
 
-oga_tests_sources = [ "$_tests/GrClipStackTest.cpp" ]
+oga_tests_sources = [
+  "$_tests/GrCCPRTest.cpp",
+  "$_tests/GrClipStackTest.cpp",
+  "$_tests/PathRendererCacheTests.cpp",
+]
 
 tests_sources += oga_tests_sources
diff --git a/src/gpu/GrBlurUtils.cpp b/src/gpu/GrBlurUtils.cpp
index 7cb5db9..3cf2493 100644
--- a/src/gpu/GrBlurUtils.cpp
+++ b/src/gpu/GrBlurUtils.cpp
@@ -14,7 +14,6 @@
 #include "src/gpu/GrFixedClip.h"
 #include "src/gpu/GrProxyProvider.h"
 #include "src/gpu/GrRecordingContextPriv.h"
-#include "src/gpu/GrSoftwarePathRenderer.h"
 #include "src/gpu/GrStyle.h"
 #include "src/gpu/GrSurfaceDrawContext.h"
 #include "src/gpu/GrTextureProxy.h"
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp
index 2c2d3e3..d5b73c9 100644
--- a/src/gpu/GrDrawingManager.cpp
+++ b/src/gpu/GrDrawingManager.cpp
@@ -30,7 +30,6 @@
 #include "src/gpu/GrRenderTaskCluster.h"
 #include "src/gpu/GrResourceAllocator.h"
 #include "src/gpu/GrResourceProvider.h"
-#include "src/gpu/GrSoftwarePathRenderer.h"
 #include "src/gpu/GrSurfaceContext.h"
 #include "src/gpu/GrSurfaceDrawContext.h"
 #include "src/gpu/GrSurfaceProxyPriv.h"
@@ -47,16 +46,30 @@
 #include "src/gpu/text/GrSDFTControl.h"
 #include "src/image/SkSurface_Gpu.h"
 
+#if GR_OGA
+#include "src/gpu/GrSoftwarePathRenderer.h"
+#endif
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-GrDrawingManager::GrDrawingManager(GrRecordingContext* context,
+#if GR_OGA
+GrDrawingManager::GrDrawingManager(GrRecordingContext* rContext,
                                    const GrPathRendererChain::Options& optionsForPathRendererChain,
                                    bool reduceOpsTaskSplitting)
-        : fContext(context)
+        : fContext(rContext)
         , fOptionsForPathRendererChain(optionsForPathRendererChain)
         , fPathRendererChain(nullptr)
         , fSoftwarePathRenderer(nullptr)
-        , fFlushing(false)
-        , fReduceOpsTaskSplitting(reduceOpsTaskSplitting) { }
+        , fReduceOpsTaskSplitting(reduceOpsTaskSplitting) {
+}
+
+#else
+
+GrDrawingManager::GrDrawingManager(GrRecordingContext* rContext, bool reduceOpsTaskSplitting)
+        : fContext(rContext)
+        , fReduceOpsTaskSplitting(reduceOpsTaskSplitting) {
+}
+
+#endif
 
 GrDrawingManager::~GrDrawingManager() {
     this->closeAllTasks();
@@ -75,9 +88,11 @@
         }
     }
 
+#if GR_OGA
     // a path renderer may be holding onto resources
     fPathRendererChain = nullptr;
     fSoftwarePathRenderer = nullptr;
+#endif
 }
 
 // MDB TODO: make use of the 'proxies' parameter.
@@ -586,11 +601,13 @@
 
     fContext->priv().detachProgramData(&ddl->fProgramData);
 
+#if GR_OGA
     if (fPathRendererChain) {
         if (auto ccpr = fPathRendererChain->getCoverageCountingPathRenderer()) {
             ddl->fPendingPaths = ccpr->detachPendingPaths();
         }
     }
+#endif
 
     SkDEBUGCODE(this->validate());
 }
@@ -626,11 +643,13 @@
     // The lazy proxy that references it (in the DDL opsTasks) will then steal its GrTexture.
     ddl->fLazyProxyData->fReplayDest = newDest.get();
 
+#if GR_OGA
     if (ddl->fPendingPaths.size()) {
         GrCoverageCountingPathRenderer* ccpr = this->getCoverageCountingPathRenderer();
 
         ccpr->mergePendingPaths(ddl->fPendingPaths);
     }
+#endif
 
     // Add a task to handle drawing and lifetime management of the DDL.
     SkDEBUGCODE(auto ddlTask =) this->appendTask(sk_make_sp<GrDDLTask>(this,
@@ -878,6 +897,7 @@
     return true;
 }
 
+#if GR_OGA
 /*
  * This method finds a path renderer that can draw the specified path on
  * the provided target.
@@ -936,6 +956,8 @@
     return fPathRendererChain->getTessellationPathRenderer();
 }
 
+#endif // GR_OGA
+
 void GrDrawingManager::flushIfNecessary() {
     auto direct = fContext->asDirectContext();
     if (!direct) {
diff --git a/src/gpu/GrDrawingManager.h b/src/gpu/GrDrawingManager.h
index 6e5e077..e18a812 100644
--- a/src/gpu/GrDrawingManager.h
+++ b/src/gpu/GrDrawingManager.h
@@ -15,11 +15,14 @@
 #include "src/gpu/GrBufferAllocPool.h"
 #include "src/gpu/GrDeferredUpload.h"
 #include "src/gpu/GrHashMapWithCache.h"
-#include "src/gpu/GrPathRenderer.h"
-#include "src/gpu/GrPathRendererChain.h"
 #include "src/gpu/GrResourceCache.h"
 #include "src/gpu/GrSurfaceProxy.h"
 
+#if GR_OGA
+#include "src/gpu/GrPathRenderer.h"
+#include "src/gpu/GrPathRendererChain.h"
+#endif
+
 // Enabling this will print out which path renderers are being chosen
 #define GR_PATH_RENDERER_SPEW 0
 
@@ -103,6 +106,7 @@
 
     GrRecordingContext* getContext() { return fContext; }
 
+#if GR_OGA
     GrPathRenderer* getPathRenderer(const GrPathRenderer::CanDrawPathArgs& args,
                                     bool allowSW,
                                     GrPathRendererChain::DrawType drawType,
@@ -117,6 +121,7 @@
     // Returns a direct pointer to the tessellation path renderer, or null if it is not supported
     // and turned on.
     GrTessellationPathRenderer* getTessellationPathRenderer();
+#endif
 
     void flushIfNecessary();
 
@@ -131,10 +136,12 @@
 
 #if GR_TEST_UTILS
     void testingOnly_removeOnFlushCallbackObject(GrOnFlushCallbackObject*);
+#if GR_OGA
     GrPathRendererChain::Options testingOnly_getOptionsForPathRendererChain() {
         return fOptionsForPathRendererChain;
     }
 #endif
+#endif
 
     GrRenderTask* getLastRenderTask(const GrSurfaceProxy*) const;
     GrOpsTask* getLastOpsTask(const GrSurfaceProxy*) const;
@@ -146,9 +153,13 @@
                        SkIPoint offset);
 
 private:
+#if GR_OGA
     GrDrawingManager(GrRecordingContext*,
                      const GrPathRendererChain::Options&,
                      bool reduceOpsTaskSplitting);
+#else
+    GrDrawingManager(GrRecordingContext*, bool reduceOpsTaskSplitting);
+#endif
 
     bool wasAbandoned() const;
 
@@ -190,7 +201,6 @@
     static const int kNumDFTOptions = 2;      // DFT or no DFT
 
     GrRecordingContext*               fContext;
-    GrPathRendererChain::Options      fOptionsForPathRendererChain;
 
     // This cache is used by both the vertex and index pools. It reuses memory across multiple
     // flushes.
@@ -204,11 +214,14 @@
     // These are the new renderTasks generated by the onFlush CBs
     SkSTArray<4, sk_sp<GrRenderTask>> fOnFlushRenderTasks;
 
+#if GR_OGA
+    GrPathRendererChain::Options         fOptionsForPathRendererChain;
     std::unique_ptr<GrPathRendererChain> fPathRendererChain;
-    sk_sp<GrSoftwarePathRenderer>     fSoftwarePathRenderer;
+    sk_sp<GrSoftwarePathRenderer>        fSoftwarePathRenderer;
+#endif
 
     GrTokenTracker                    fTokenTracker;
-    bool                              fFlushing;
+    bool                              fFlushing = false;
     const bool                        fReduceOpsTaskSplitting;
 
     SkTArray<GrOnFlushCallbackObject*> fOnFlushCBObjects;
diff --git a/src/gpu/GrRecordingContext.cpp b/src/gpu/GrRecordingContext.cpp
index 501f01e..e078ae3 100644
--- a/src/gpu/GrRecordingContext.cpp
+++ b/src/gpu/GrRecordingContext.cpp
@@ -61,6 +61,7 @@
         return false;
     }
 
+#if GR_OGA
     GrPathRendererChain::Options prcOptions;
     prcOptions.fAllowPathMaskCaching = this->options().fAllowPathMaskCaching;
 #if GR_TEST_UTILS
@@ -70,6 +71,7 @@
     if (this->options().fDisableDistanceFieldPaths) {
         prcOptions.fGpuPathRenderers &= ~GpuPathRenderers::kSmall;
     }
+#endif
 
     bool reduceOpsTaskSplitting = false;
     if (this->caps()->avoidReorderingRenderTasks()) {
@@ -80,7 +82,9 @@
         reduceOpsTaskSplitting = false;
     }
     fDrawingManager.reset(new GrDrawingManager(this,
+#if GR_OGA
                                                prcOptions,
+#endif
                                                reduceOpsTaskSplitting));
     return true;
 }
diff --git a/src/gpu/GrSurfaceDrawContext.cpp b/src/gpu/GrSurfaceDrawContext.cpp
index 5a58dac..de18ac6 100644
--- a/src/gpu/GrSurfaceDrawContext.cpp
+++ b/src/gpu/GrSurfaceDrawContext.cpp
@@ -40,7 +40,6 @@
 #include "src/gpu/GrImageContextPriv.h"
 #include "src/gpu/GrImageInfo.h"
 #include "src/gpu/GrMemoryPool.h"
-#include "src/gpu/GrPathRenderer.h"
 #include "src/gpu/GrProxyProvider.h"
 #include "src/gpu/GrRenderTarget.h"
 #include "src/gpu/GrResourceProvider.h"
@@ -73,6 +72,10 @@
 #include "src/gpu/text/GrSDFTControl.h"
 #include "src/gpu/text/GrTextBlobCache.h"
 
+#if GR_OGA
+#include "src/gpu/GrPathRenderer.h"
+#endif
+
 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this->drawingManager()->getContext())
 #define ASSERT_SINGLE_OWNER        GR_ASSERT_SINGLE_OWNER(this->singleOwner())
 #define RETURN_IF_ABANDONED        if (fContext->abandoned()) { return; }
@@ -874,6 +877,7 @@
                                        GrAA doStencilMSAA,
                                        const SkMatrix& viewMatrix,
                                        const SkPath& path) {
+#if GR_OGA
     SkIRect clipBounds = clip ? clip->getConservativeBounds()
                               : SkIRect::MakeSize(this->dimensions());
     GrStyledShape shape(path, GrStyledShape::DoSimplify::kNo);
@@ -905,6 +909,9 @@
     args.fDoStencilMSAA = doStencilMSAA;
     pr->stencilPath(args);
     return true;
+#else
+    return false;
+#endif // GR_OGA
 }
 
 void GrSurfaceDrawContext::drawTextureSet(const GrClip* clip,
@@ -1532,9 +1539,11 @@
                                      /* attemptDrawSimple */ true);
 }
 
+#if GR_OGA
 static SkIRect get_clip_bounds(const GrSurfaceDrawContext* rtc, const GrClip* clip) {
     return clip ? clip->getConservativeBounds() : SkIRect::MakeWH(rtc->width(), rtc->height());
 }
+#endif // GR_OGA
 
 bool GrSurfaceDrawContext::drawAndStencilPath(const GrHardClip* clip,
                                               const GrUserStencilSettings* ss,
@@ -1543,6 +1552,7 @@
                                               GrAA aa,
                                               const SkMatrix& viewMatrix,
                                               const SkPath& path) {
+#if GR_OGA
     ASSERT_SINGLE_OWNER
     RETURN_FALSE_IF_ABANDONED
     SkDEBUGCODE(this->validate();)
@@ -1601,6 +1611,9 @@
                                       this->colorInfo().isLinearlyBlended()};
     pr->drawPath(args);
     return true;
+#else
+    return false;
+#endif
 }
 
 SkBudgeted GrSurfaceDrawContext::isBudgeted() const {
@@ -1722,6 +1735,7 @@
                                                       const SkMatrix& viewMatrix,
                                                       GrStyledShape&& shape,
                                                       bool attemptDrawSimple) {
+#if GR_OGA
     ASSERT_SINGLE_OWNER
     RETURN_IF_ABANDONED
     GR_CREATE_TRACE_MARKER_CONTEXT("GrSurfaceDrawContext", "internalDrawPath", fContext);
@@ -1830,6 +1844,7 @@
                                       aaType,
                                       this->colorInfo().isLinearlyBlended()};
     pr->drawPath(args);
+#endif
 }
 
 static void op_bounds(SkRect* bounds, const GrOp* op) {
diff --git a/src/gpu/GrSurfaceDrawContext.h b/src/gpu/GrSurfaceDrawContext.h
index 85ca777..f03f291 100644
--- a/src/gpu/GrSurfaceDrawContext.h
+++ b/src/gpu/GrSurfaceDrawContext.h
@@ -29,6 +29,7 @@
 class GrCoverageCountingPathRenderer;
 class GrDrawOp;
 class GrDstProxyView;
+class GrHardClip;
 class GrOp;
 class GrRenderTarget;
 class GrStyledShape;
diff --git a/src/gpu/ccpr/GrCoverageCountingPathRenderer.h b/src/gpu/ccpr/GrCoverageCountingPathRenderer.h
index b39f3d9..f32b544 100644
--- a/src/gpu/ccpr/GrCoverageCountingPathRenderer.h
+++ b/src/gpu/ccpr/GrCoverageCountingPathRenderer.h
@@ -11,7 +11,6 @@
 #include <map>
 #include "src/gpu/GrOnFlushResourceProvider.h"
 #include "src/gpu/GrOpsTask.h"
-#include "src/gpu/GrPathRenderer.h"
 #include "src/gpu/ccpr/GrCCPerFlushResources.h"
 #include "src/gpu/ccpr/GrCCPerOpsTaskPaths.h"
 
diff --git a/src/gpu/tessellate/GrTessellationPathRenderer.h b/src/gpu/tessellate/GrTessellationPathRenderer.h
index c8d5ed8..5850f6a 100644
--- a/src/gpu/tessellate/GrTessellationPathRenderer.h
+++ b/src/gpu/tessellate/GrTessellationPathRenderer.h
@@ -8,6 +8,10 @@
 #ifndef GrTessellationPathRenderer_DEFINED
 #define GrTessellationPathRenderer_DEFINED
 
+#include "include/gpu/GrTypes.h"
+
+#if GR_OGA
+
 #include "src/core/SkIPoint16.h"
 #include "src/gpu/GrDynamicAtlas.h"
 #include "src/gpu/GrOnFlushResourceProvider.h"
@@ -88,4 +92,23 @@
 
 GR_MAKE_BITFIELD_CLASS_OPS(GrTessellationPathRenderer::PathFlags);
 
+#else // GR_OGA
+
+class GrTessellationPathRenderer {
+public:
+    // We send these flags to the internal path filling Ops to control how a path gets rendered.
+    enum class PathFlags {
+        kNone = 0,
+        kStencilOnly = (1 << 0),
+        kWireframe = (1 << 1)
+    };
+
+    static bool IsSupported(const GrCaps&) { return false; }
+
+};
+
+GR_MAKE_BITFIELD_CLASS_OPS(GrTessellationPathRenderer::PathFlags);
+
+#endif // GR_OGA
+
 #endif
diff --git a/tests/PathRendererCacheTests.cpp b/tests/PathRendererCacheTests.cpp
index fbd6750..2d50353 100644
--- a/tests/PathRendererCacheTests.cpp
+++ b/tests/PathRendererCacheTests.cpp
@@ -83,10 +83,10 @@
     dContext->setResourceCacheLimit(8000000);
     GrResourceCache* cache = dContext->priv().getResourceCache();
 
-    auto rtc = GrSurfaceDrawContext::Make(
+    auto sdc = GrSurfaceDrawContext::Make(
             dContext.get(), GrColorType::kRGBA_8888, nullptr, SkBackingFit::kApprox, {800, 800},
             SkSurfaceProps(), 1, GrMipmapped::kNo, GrProtected::kNo, kTopLeft_GrSurfaceOrigin);
-    if (!rtc) {
+    if (!sdc) {
         return;
     }
 
@@ -97,7 +97,7 @@
     REPORTER_ASSERT(reporter, cache_non_scratch_resources_equals(cache, 0));
 
     // Draw the path, check that new resource count matches expectations
-    draw_path(dContext.get(), rtc.get(), path, pathRenderer.get(), aaType, style);
+    draw_path(dContext.get(), sdc.get(), path, pathRenderer.get(), aaType, style);
     dContext->flushAndSubmit();
     REPORTER_ASSERT(reporter, cache_non_scratch_resources_equals(cache, expected));
 
@@ -120,13 +120,13 @@
     REPORTER_ASSERT(reporter, SkPathPriv::GenIDChangeListenersCount(path) == 0);
     for (int i = 0; i < 20; ++i) {
         float scaleX = 1 + ((float)i + 1)/20.f;
-        draw_path(dContext.get(), rtc.get(), path, pathRenderer.get(), aaType, style, scaleX);
+        draw_path(dContext.get(), sdc.get(), path, pathRenderer.get(), aaType, style, scaleX);
     }
     dContext->flushAndSubmit();
     REPORTER_ASSERT(reporter, SkPathPriv::GenIDChangeListenersCount(path) == 20);
     cache->purgeUnlockedResources();
     // The listeners don't actually purge until we try to add another one.
-    draw_path(dContext.get(), rtc.get(), path, pathRenderer.get(), aaType, style);
+    draw_path(dContext.get(), sdc.get(), path, pathRenderer.get(), aaType, style);
     REPORTER_ASSERT(reporter, SkPathPriv::GenIDChangeListenersCount(path) == 1);
 }
 
diff --git a/tests/TriangulatingPathRendererTests.cpp b/tests/TriangulatingPathRendererTests.cpp
index 1d2da56..91efe89 100644
--- a/tests/TriangulatingPathRendererTests.cpp
+++ b/tests/TriangulatingPathRendererTests.cpp
@@ -17,7 +17,6 @@
 #include "src/gpu/GrSurfaceDrawContext.h"
 #include "src/gpu/effects/GrPorterDuffXferProcessor.h"
 #include "src/gpu/geometry/GrStyledShape.h"
-#include "src/gpu/ops/GrTriangulatingPathRenderer.h"
 #include "src/shaders/SkShaderBase.h"
 #include "tools/ToolUtils.h"
 #include <map>
@@ -485,6 +484,9 @@
     },
 };
 
+#if GR_OGA
+#include "src/gpu/ops/GrTriangulatingPathRenderer.h"
+
 // A simple concave path. Test this with a non-invertible matrix.
 static SkPath create_path_17() {
     SkPath path;
@@ -774,6 +776,8 @@
     test_path(ctx, rtc.get(), create_path_46(), SkMatrix(), GrAAType::kCoverage);
 }
 
+#endif // GR_OGA
+
 namespace {
 
 class SimpleVertexAllocator : public GrEagerVertexAllocator {
diff --git a/tools/gpu/GrTest.cpp b/tools/gpu/GrTest.cpp
index ac03100..b76ce0e 100644
--- a/tools/gpu/GrTest.cpp
+++ b/tools/gpu/GrTest.cpp
@@ -56,26 +56,29 @@
                                     GrRecordingContext*, GrSurfaceDrawContext*, int)
 #define DRAW_OP_TEST_ENTRY(Op) Op##__Test
 
+#if GR_OGA
 DRAW_OP_TEST_EXTERN(AAConvexPathOp);
 DRAW_OP_TEST_EXTERN(AAFlatteningConvexPathOp);
 DRAW_OP_TEST_EXTERN(AAHairlineOp);
+DRAW_OP_TEST_EXTERN(DefaultPathOp);
+DRAW_OP_TEST_EXTERN(SmallPathOp);
+DRAW_OP_TEST_EXTERN(TriangulatingPathOp);
+#endif // GR_OGA
+
 DRAW_OP_TEST_EXTERN(AAStrokeRectOp);
 DRAW_OP_TEST_EXTERN(CircleOp);
 DRAW_OP_TEST_EXTERN(DashOp);
-DRAW_OP_TEST_EXTERN(DefaultPathOp);
+DRAW_OP_TEST_EXTERN(DrawAtlasOp);
+DRAW_OP_TEST_EXTERN(DrawVerticesOp);
 DRAW_OP_TEST_EXTERN(DIEllipseOp);
 DRAW_OP_TEST_EXTERN(EllipseOp);
 DRAW_OP_TEST_EXTERN(FillRectOp);
 DRAW_OP_TEST_EXTERN(GrAtlasTextOp);
-DRAW_OP_TEST_EXTERN(DrawAtlasOp);
-DRAW_OP_TEST_EXTERN(DrawVerticesOp);
 DRAW_OP_TEST_EXTERN(NonAALatticeOp);
 DRAW_OP_TEST_EXTERN(NonAAStrokeRectOp);
-DRAW_OP_TEST_EXTERN(ShadowRRectOp);
-DRAW_OP_TEST_EXTERN(SmallPathOp);
 DRAW_OP_TEST_EXTERN(RegionOp);
 DRAW_OP_TEST_EXTERN(RRectOp);
-DRAW_OP_TEST_EXTERN(TriangulatingPathOp);
+DRAW_OP_TEST_EXTERN(ShadowRRectOp);
 DRAW_OP_TEST_EXTERN(TextureOp);
 
 void GrDrawRandomOp(SkRandom* random, GrSurfaceDrawContext* surfaceDrawContext, GrPaint&& paint) {
@@ -83,26 +86,29 @@
     using MakeDrawOpFn = GrOp::Owner (GrPaint&&, SkRandom*,
                                       GrRecordingContext*, GrSurfaceDrawContext*, int numSamples);
     static constexpr MakeDrawOpFn* gFactories[] = {
+#if GR_OGA
             DRAW_OP_TEST_ENTRY(AAConvexPathOp),
             DRAW_OP_TEST_ENTRY(AAFlatteningConvexPathOp),
             DRAW_OP_TEST_ENTRY(AAHairlineOp),
+            DRAW_OP_TEST_ENTRY(DefaultPathOp),
+            DRAW_OP_TEST_ENTRY(SmallPathOp),
+            DRAW_OP_TEST_ENTRY(TriangulatingPathOp),
+#endif // GR_OGA
+
             DRAW_OP_TEST_ENTRY(AAStrokeRectOp),
             DRAW_OP_TEST_ENTRY(CircleOp),
             DRAW_OP_TEST_ENTRY(DashOp),
-            DRAW_OP_TEST_ENTRY(DefaultPathOp),
+            DRAW_OP_TEST_ENTRY(DrawAtlasOp),
+            DRAW_OP_TEST_ENTRY(DrawVerticesOp),
             DRAW_OP_TEST_ENTRY(DIEllipseOp),
             DRAW_OP_TEST_ENTRY(EllipseOp),
             DRAW_OP_TEST_ENTRY(FillRectOp),
             DRAW_OP_TEST_ENTRY(GrAtlasTextOp),
-            DRAW_OP_TEST_ENTRY(DrawAtlasOp),
-            DRAW_OP_TEST_ENTRY(DrawVerticesOp),
             DRAW_OP_TEST_ENTRY(NonAALatticeOp),
             DRAW_OP_TEST_ENTRY(NonAAStrokeRectOp),
-            DRAW_OP_TEST_ENTRY(ShadowRRectOp),
-            DRAW_OP_TEST_ENTRY(SmallPathOp),
             DRAW_OP_TEST_ENTRY(RegionOp),
             DRAW_OP_TEST_ENTRY(RRectOp),
-            DRAW_OP_TEST_ENTRY(TriangulatingPathOp),
+            DRAW_OP_TEST_ENTRY(ShadowRRectOp),
             DRAW_OP_TEST_ENTRY(TextureOp),
     };
 
