GrSWMaskHelper and GrSoftwarePathRenderer only need the textureProvider (not GrContext)
authorrobertphillips <robertphillips@google.com>
Fri, 20 May 2016 13:38:43 +0000 (06:38 -0700)
committerCommit bot <commit-bot@chromium.org>
Fri, 20 May 2016 13:38:43 +0000 (06:38 -0700)
This is split out of: https://codereview.chromium.org/1988923002/ (Declassify GrClipMaskManager and Remove GrRenderTarget and GrDrawTarget from GrPipelineBuilder)

BUG=skia:

Review-Url: https://codereview.chromium.org/1993403002

src/gpu/GrClipMaskManager.cpp
src/gpu/GrClipMaskManager.h
src/gpu/GrDrawingManager.cpp
src/gpu/GrSWMaskHelper.cpp
src/gpu/GrSWMaskHelper.h
src/gpu/GrSoftwarePathRenderer.cpp
src/gpu/GrSoftwarePathRenderer.h

index 81b6fe861435138cc34267d53626bd8cca56c691..df58a9251f6e9b54c7d3a696d6268d18d6061fb7 100644 (file)
@@ -384,7 +384,7 @@ bool GrClipMaskManager::setupClipping(const GrPipelineBuilder& pipelineBuilder,
         if (UseSWOnlyPath(this->getContext(), pipelineBuilder, rt, clipToMaskOffset, elements)) {
             // The clip geometry is complex enough that it will be more efficient to create it
             // entirely in software
-            result = CreateSoftwareClipMask(this->getContext(),
+            result = CreateSoftwareClipMask(this->getContext()->textureProvider(),
                                             genID,
                                             initialState,
                                             elements,
@@ -791,7 +791,7 @@ bool GrClipMaskManager::createStencilClipMask(GrRenderTarget* rt,
 
 ////////////////////////////////////////////////////////////////////////////////
 sk_sp<GrTexture> GrClipMaskManager::CreateSoftwareClipMask(
-                                                    GrContext* context,
+                                                    GrTextureProvider* texProvider,
                                                     int32_t elementsGenID,
                                                     GrReducedClip::InitialState initialState,
                                                     const GrReducedClip::ElementList& elements,
@@ -799,8 +799,7 @@ sk_sp<GrTexture> GrClipMaskManager::CreateSoftwareClipMask(
                                                     const SkIRect& clipSpaceIBounds) {
     GrUniqueKey key;
     GetClipMaskKey(elementsGenID, clipSpaceIBounds, &key);
-    GrResourceProvider* resourceProvider = context->resourceProvider();
-    if (GrTexture* texture = resourceProvider->findAndRefTextureByUniqueKey(key)) {
+    if (GrTexture* texture = texProvider->findAndRefTextureByUniqueKey(key)) {
         return sk_sp<GrTexture>(texture);
     }
 
@@ -808,7 +807,7 @@ sk_sp<GrTexture> GrClipMaskManager::CreateSoftwareClipMask(
     // the top left corner of the resulting rect to the top left of the texture.
     SkIRect maskSpaceIBounds = SkIRect::MakeWH(clipSpaceIBounds.width(), clipSpaceIBounds.height());
 
-    GrSWMaskHelper helper(context);
+    GrSWMaskHelper helper(texProvider);
 
     // Set the matrix so that rendered clip elements are transformed to mask space from clip
     // space.
@@ -857,7 +856,7 @@ sk_sp<GrTexture> GrClipMaskManager::CreateSoftwareClipMask(
     desc.fHeight = clipSpaceIBounds.height();
     desc.fConfig = kAlpha_8_GrPixelConfig;
 
-    sk_sp<GrTexture> result(context->resourceProvider()->createApproxTexture(desc, 0));
+    sk_sp<GrTexture> result(texProvider->createApproxTexture(desc));
     if (!result) {
         return nullptr;
     }
index d546a76136dfb4ff794a47c1b4703e92b62f24f3..f7f7e5c0e1e18f68fbef53fb1f0584b3ed538da8 100644 (file)
@@ -9,12 +9,7 @@
 
 #include "GrPipelineBuilder.h"
 #include "GrReducedClip.h"
-#include "GrTexture.h"
 #include "SkClipStack.h"
-#include "SkDeque.h"
-#include "SkPath.h"
-#include "SkRefCnt.h"
-#include "SkTLList.h"
 #include "SkTypes.h"
 
 class GrAppliedClip;
@@ -24,7 +19,7 @@ class GrPathRenderer;
 class GrPathRendererChain;
 class GrResourceProvider;
 class GrTexture;
-class SkPath;
+class GrTextureProvider;
 
 /**
  * The clip mask creator handles the generation of the clip mask. If anti
@@ -93,7 +88,7 @@ private:
                                                 const SkIRect& clipSpaceIBounds);
 
     // Similar to createAlphaClipMask but it rasterizes in SW and uploads to the result texture.
-    static sk_sp<GrTexture> CreateSoftwareClipMask(GrContext*,
+    static sk_sp<GrTexture> CreateSoftwareClipMask(GrTextureProvider*,
                                                    int32_t elementsGenID,
                                                    GrReducedClip::InitialState initialState,
                                                    const GrReducedClip::ElementList& elements,
index 1b01b7afdad950cb574c12e6c212562c776ec25c..ea5c18bf79fcf4934274fbc2cd5c9219c3d2320c 100644 (file)
@@ -151,7 +151,7 @@ GrPathRenderer* GrDrawingManager::getPathRenderer(const GrPathRenderer::CanDrawP
     GrPathRenderer* pr = fPathRendererChain->getPathRenderer(args, drawType, stencilSupport);
     if (!pr && allowSW) {
         if (!fSoftwarePathRenderer) {
-            fSoftwarePathRenderer = new GrSoftwarePathRenderer(fContext);
+            fSoftwarePathRenderer = new GrSoftwarePathRenderer(fContext->textureProvider());
         }
         pr = fSoftwarePathRenderer;
     }
index 4486bb079cb9d4187c8e757ce3ba0cf26cbff687..849a9338ed81cbd5d4d60680546650eae5fc620e 100644 (file)
@@ -104,7 +104,7 @@ GrTexture* GrSWMaskHelper::createTexture() {
     desc.fHeight = fPixels.height();
     desc.fConfig = kAlpha_8_GrPixelConfig;
 
-    return fContext->textureProvider()->createApproxTexture(desc);
+    return fTexProvider->createApproxTexture(desc);
 }
 
 /**
@@ -134,13 +134,13 @@ void GrSWMaskHelper::toSDF(unsigned char* sdf) {
  * and uploads the result to a scratch texture. Returns the resulting
  * texture on success; nullptr on failure.
  */
-GrTexture* GrSWMaskHelper::DrawPathMaskToTexture(GrContext* context,
+GrTexture* GrSWMaskHelper::DrawPathMaskToTexture(GrTextureProvider* texProvider,
                                                  const SkPath& path,
                                                  const GrStyle& style,
                                                  const SkIRect& resultBounds,
                                                  bool antiAlias,
                                                  const SkMatrix* matrix) {
-    GrSWMaskHelper helper(context);
+    GrSWMaskHelper helper(texProvider);
 
     if (!helper.init(resultBounds, matrix)) {
         return nullptr;
index b329dd627e0af065be3dbd60999f57ea93827594..355379e697fb3bd7df3c72382b26ddc39b9ef478 100644 (file)
@@ -19,7 +19,7 @@
 #include "SkTypes.h"
 
 class GrClip;
-class GrContext;
+class GrTextureProvider;
 class GrTexture;
 class SkPath;
 class SkStrokeRec;
@@ -41,7 +41,7 @@ class GrDrawTarget;
  */
 class GrSWMaskHelper : SkNoncopyable {
 public:
-    GrSWMaskHelper(GrContext* context) : fContext(context) { }
+    GrSWMaskHelper(GrTextureProvider* texProvider) : fTexProvider(texProvider) { }
 
     // set up the internal state in preparation for draws. Since many masks
     // may be accumulated in the helper during creation, "resultBounds"
@@ -69,7 +69,7 @@ public:
 
     // Canonical usage utility that draws a single path and uploads it
     // to the GPU. The result is returned.
-    static GrTexture* DrawPathMaskToTexture(GrContext* context,
+    static GrTexture* DrawPathMaskToTexture(GrTextureProvider*,
                                             const SkPath& path,
                                             const GrStyle& style,
                                             const SkIRect& resultBounds,
@@ -99,11 +99,11 @@ private:
     // result (i.e., right size & format)
     GrTexture* createTexture();
 
-    GrContext*      fContext;
-    SkMatrix        fMatrix;
+    GrTextureProvider*  fTexProvider;
+    SkMatrix            fMatrix;
     SkAutoPixmapStorage fPixels;
-    SkDraw          fDraw;
-    SkRasterClip    fRasterClip;
+    SkDraw              fDraw;
+    SkRasterClip        fRasterClip;
 
     typedef SkNoncopyable INHERITED;
 };
index d964e1f42f65c0c5e1851d7ec87cf0ae69a7ba1e..aefaf27308e0b51d25501c66d1073512c6d503dc 100644 (file)
@@ -6,13 +6,13 @@
  */
 
 #include "GrSoftwarePathRenderer.h"
-#include "GrContext.h"
 #include "GrSWMaskHelper.h"
+#include "GrTextureProvider.h"
 #include "batches/GrRectBatchFactory.h"
 
 ////////////////////////////////////////////////////////////////////////////////
 bool GrSoftwarePathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const {
-    return SkToBool(fContext);
+    return SkToBool(fTexProvider);
 }
 
 namespace {
@@ -21,22 +21,17 @@ namespace {
 // gets device coord bounds of path (not considering the fill) and clip. The
 // path bounds will be a subset of the clip bounds. returns false if
 // path bounds would be empty.
-bool get_path_and_clip_bounds(const GrPipelineBuilder* pipelineBuilder,
+bool get_path_and_clip_bounds(int width, int height,
                               const GrClip& clip,
                               const SkPath& path,
                               const SkMatrix& matrix,
                               SkIRect* devPathBounds,
                               SkIRect* devClipBounds) {
     // compute bounds as intersection of rt size, clip, and path
-    const GrRenderTarget* rt = pipelineBuilder->getRenderTarget();
-    if (nullptr == rt) {
-        return false;
-    }
-
-    clip.getConservativeBounds(rt->width(), rt->height(), devClipBounds);
+    clip.getConservativeBounds(width, height, devClipBounds);
 
     if (devClipBounds->isEmpty()) {
-        *devPathBounds = SkIRect::MakeWH(rt->width(), rt->height());
+        *devPathBounds = SkIRect::MakeWH(width, height);
         return false;
     }
 
@@ -112,12 +107,15 @@ void draw_around_inv_path(GrDrawTarget* target,
 // return true on success; false on failure
 bool GrSoftwarePathRenderer::onDrawPath(const DrawPathArgs& args) {
     GR_AUDIT_TRAIL_AUTO_FRAME(args.fTarget->getAuditTrail(), "GrSoftwarePathRenderer::onDrawPath");
-    if (nullptr == fContext) {
+    if (!fTexProvider || !args.fPipelineBuilder->getRenderTarget()) {
         return false;
     }
 
+    const int width = args.fPipelineBuilder->getRenderTarget()->width();
+    const int height = args.fPipelineBuilder->getRenderTarget()->height();
+
     SkIRect devPathBounds, devClipBounds;
-    if (!get_path_and_clip_bounds(args.fPipelineBuilder, *args.fClip, *args.fPath,
+    if (!get_path_and_clip_bounds(width, height, *args.fClip, *args.fPath,
                                   *args.fViewMatrix, &devPathBounds, &devClipBounds)) {
         if (args.fPath->isInverseFillType()) {
             draw_around_inv_path(args.fTarget, args.fPipelineBuilder, *args.fClip, args.fColor,
@@ -127,7 +125,7 @@ bool GrSoftwarePathRenderer::onDrawPath(const DrawPathArgs& args) {
     }
 
     SkAutoTUnref<GrTexture> texture(
-            GrSWMaskHelper::DrawPathMaskToTexture(fContext, *args.fPath, *args.fStyle,
+            GrSWMaskHelper::DrawPathMaskToTexture(fTexProvider, *args.fPath, *args.fStyle,
                                                   devPathBounds,
                                                   args.fAntiAlias, args.fViewMatrix));
     if (nullptr == texture) {
index 578911954cf2c9550df75ad15e80b31bc15827f5..edc47ce2c97dbd4b704e5471aad9c481a1d0e41a 100644 (file)
@@ -10,7 +10,7 @@
 
 #include "GrPathRenderer.h"
 
-class GrContext;
+class GrTextureProvider;
 
 /**
  * This class uses the software side to render a path to an SkBitmap and
@@ -18,9 +18,8 @@ class GrContext;
  */
 class GrSoftwarePathRenderer : public GrPathRenderer {
 public:
-    GrSoftwarePathRenderer(GrContext* context)
-        : fContext(context) {
-    }
+    GrSoftwarePathRenderer(GrTextureProvider* texProvider) : fTexProvider(texProvider) { }
+
 private:
     StencilSupport onGetStencilSupport(const SkPath&) const override {
         return GrPathRenderer::kNoSupport_StencilSupport;
@@ -31,7 +30,7 @@ private:
     bool onDrawPath(const DrawPathArgs&) override;
 
 private:
-    GrContext*     fContext;
+    GrTextureProvider*     fTexProvider;
 
     typedef GrPathRenderer INHERITED;
 };