Move Software and Small PathRenderers to skgpu::v1 namespace
Bug: skia:11837
Change-Id: Ia34f1840aaa7360ea9a3ca40fef5cb96b68c6ca3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/439781
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
diff --git a/src/gpu/ops/SoftwarePathRenderer.h b/src/gpu/ops/SoftwarePathRenderer.h
new file mode 100644
index 0000000..169bcdd
--- /dev/null
+++ b/src/gpu/ops/SoftwarePathRenderer.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SoftwarePathRenderer_DEFINED
+#define SoftwarePathRenderer_DEFINED
+
+#include "src/gpu/GrPathRenderer.h"
+#include "src/gpu/GrSurfaceProxyView.h"
+
+class GrProxyProvider;
+
+namespace skgpu::v1 {
+
+/**
+ * This class uses the software side to render a path to an SkBitmap and
+ * then uploads the result to the gpu
+ */
+class SoftwarePathRenderer final : public GrPathRenderer {
+public:
+ const char* name() const override { return "SW"; }
+
+ SoftwarePathRenderer(GrProxyProvider* proxyProvider, bool allowCaching)
+ : fProxyProvider(proxyProvider)
+ , fAllowCaching(allowCaching) {
+ }
+
+ static bool GetShapeAndClipBounds(SurfaceDrawContext*,
+ const GrClip*,
+ const GrStyledShape&,
+ const SkMatrix& viewMatrix,
+ SkIRect* unclippedDevShapeBounds,
+ SkIRect* clippedDevShapeBounds,
+ SkIRect* devClipBounds);
+
+private:
+ static void DrawNonAARect(SurfaceDrawContext*,
+ GrPaint&&,
+ const GrUserStencilSettings&,
+ const GrClip*,
+ const SkMatrix& viewMatrix,
+ const SkRect& rect,
+ const SkMatrix& localMatrix);
+ static void DrawAroundInvPath(SurfaceDrawContext*,
+ GrPaint&&,
+ const GrUserStencilSettings&,
+ const GrClip*,
+ const SkMatrix& viewMatrix,
+ const SkIRect& devClipBounds,
+ const SkIRect& devPathBounds);
+
+ // This utility draws a path mask using a provided paint. The rectangle is drawn in device
+ // space. The 'viewMatrix' will be used to ensure the correct local coords are provided to
+ // any fragment processors in the paint.
+ static void DrawToTargetWithShapeMask(GrSurfaceProxyView,
+ SurfaceDrawContext*,
+ GrPaint&&,
+ const GrUserStencilSettings&,
+ const GrClip*,
+ const SkMatrix& viewMatrix,
+ const SkIPoint& textureOriginInDeviceSpace,
+ const SkIRect& deviceSpaceRectToDraw);
+
+ StencilSupport onGetStencilSupport(const GrStyledShape&) const override {
+ return GrPathRenderer::kNoSupport_StencilSupport;
+ }
+
+ CanDrawPath onCanDrawPath(const CanDrawPathArgs&) const override;
+
+ bool onDrawPath(const DrawPathArgs&) override;
+
+private:
+ GrProxyProvider* fProxyProvider;
+ bool fAllowCaching;
+
+ using INHERITED = GrPathRenderer;
+};
+
+} // namespace skgpu::v1
+
+#endif // SoftwarePathRenderer_DEFINED