diff options
author | 2018-01-20 14:49:21 +0000 | |
---|---|---|
committer | 2018-01-20 14:49:30 +0000 | |
commit | 4f7f197c09443232f02cd81f3ac7fb5a216acd05 (patch) | |
tree | 6a91b2fa6ead9aa6cce3355500ed85ba9b7dc126 | |
parent | 3d628fe00a7d6cf4a375d758e7436f104d11417d (diff) |
Revert "use GrFPArgs for maskfilters"
This reverts commit a99b39399522658d7e5ddee97d0e45aa9fceaf89.
Reason for revert: try to unblock android roller
Original change's description:
> use GrFPArgs for maskfilters
>
> Bug: skia:
> Change-Id: I8516a3b0f6d8301c51f0861c65b9fe8f692fc5e5
> Reviewed-on: https://skia-review.googlesource.com/97260
> Commit-Queue: Mike Reed <reed@google.com>
> Reviewed-by: Brian Salomon <bsalomon@google.com>
TBR=egdaniel@google.com,bsalomon@google.com,reed@google.com
Change-Id: Iefe8ed19bba75df86173dec53f5ed4f1ea8724d0
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/97581
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
-rw-r--r-- | include/core/SkMaskFilter.h | 27 | ||||
-rw-r--r-- | src/core/SkMaskFilter.cpp | 19 | ||||
-rw-r--r-- | src/effects/SkRRectsGaussianEdgeMaskFilter.cpp | 17 | ||||
-rw-r--r-- | src/gpu/GrBlurUtils.cpp | 2 | ||||
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 6 | ||||
-rw-r--r-- | src/gpu/SkGr.cpp | 10 |
6 files changed, 27 insertions, 54 deletions
diff --git a/include/core/SkMaskFilter.h b/include/core/SkMaskFilter.h index 3e10dc9ad3..1714d17bca 100644 --- a/include/core/SkMaskFilter.h +++ b/include/core/SkMaskFilter.h @@ -6,6 +6,7 @@ * found in the LICENSE file. */ + #ifndef SkMaskFilter_DEFINED #define SkMaskFilter_DEFINED @@ -17,7 +18,6 @@ class GrClip; class GrContext; -struct GrFPArgs; class GrRenderTargetContext; class GrPaint; class GrFragmentProcessor; @@ -69,18 +69,16 @@ public: #if SK_SUPPORT_GPU /** - * Returns a processor if the filter can be expressed a single-pass GrProcessor without - * requiring an explicit input mask. Per-pixel, the effect receives the incoming mask's - * coverage as the input color and outputs the filtered covereage value. This means that each - * pixel's filtered coverage must only depend on the unfiltered mask value for that pixel and - * not on surrounding values. - */ - std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs& args) const; - - /** - * Returns true iff asFragmentProcessor() will return a processor + * Returns true if the filter can be expressed a single-pass GrProcessor without requiring an + * explicit input mask. Per-pixel, the effect receives the incoming mask's coverage as + * the input color and outputs the filtered covereage value. This means that each pixel's + * filtered coverage must only depend on the unfiltered mask value for that pixel and not on + * surrounding values. + * + * If effect is non-NULL, a new GrProcessor instance is stored in it. The caller assumes + * ownership of the effect and must unref it. */ - bool hasFragmentProcessor() const; + virtual bool asFragmentProcessor(GrFragmentProcessor**) const { return false; } /** * If asFragmentProcessor() fails the filter may be implemented on the GPU by a subclass @@ -181,11 +179,6 @@ public: protected: SkMaskFilter() {} -#if SK_SUPPORT_GPU - virtual std::unique_ptr<GrFragmentProcessor> onAsFragmentProcessor(const GrFPArgs&) const; - virtual bool onHasFragmentProcessor() const; -#endif - enum FilterReturn { kFalse_FilterReturn, kTrue_FilterReturn, diff --git a/src/core/SkMaskFilter.cpp b/src/core/SkMaskFilter.cpp index b8aadec10c..fb6d47bffe 100644 --- a/src/core/SkMaskFilter.cpp +++ b/src/core/SkMaskFilter.cpp @@ -17,7 +17,6 @@ #if SK_SUPPORT_GPU #include "GrTextureProxy.h" -#include "GrFragmentProcessor.h" #endif SkMaskFilter::NinePatch::~NinePatch() { @@ -302,24 +301,6 @@ SkMaskFilter::filterRectsToNine(const SkRect[], int count, const SkMatrix&, } #if SK_SUPPORT_GPU -std::unique_ptr<GrFragmentProcessor> SkMaskFilter::asFragmentProcessor(const GrFPArgs& args) const { - auto fp = this->onAsFragmentProcessor(args); - if (fp) { - SkASSERT(this->hasFragmentProcessor()); - } else { - SkASSERT(!this->hasFragmentProcessor()); - } - return fp; -} -bool SkMaskFilter::hasFragmentProcessor() const { - return this->onHasFragmentProcessor(); -} - -std::unique_ptr<GrFragmentProcessor> SkMaskFilter::onAsFragmentProcessor(const GrFPArgs&) const { - return nullptr; -} -bool SkMaskFilter::onHasFragmentProcessor() const { return false; } - bool SkMaskFilter::canFilterMaskGPU(const SkRRect& devRRect, const SkIRect& clipBounds, const SkMatrix& ctm, diff --git a/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp b/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp index 09739c0813..27bf09fd7c 100644 --- a/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp +++ b/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp @@ -32,17 +32,16 @@ public: bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, SkIPoint* margin) const override; +#if SK_SUPPORT_GPU + bool asFragmentProcessor(GrFragmentProcessor**) const override; +#endif + SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkRRectsGaussianEdgeMaskFilterImpl) protected: void flatten(SkWriteBuffer&) const override; -#if SK_SUPPORT_GPU - std::unique_ptr<GrFragmentProcessor> onAsFragmentProcessor(const GrFPArgs& args) const override; - bool onHasFragmentProcessor() const override { return true; } -#endif - private: SkRRect fFirst; SkRRect fSecond; @@ -510,10 +509,12 @@ private: }; //////////////////////////////////////////////////////////////////////////// +bool SkRRectsGaussianEdgeMaskFilterImpl::asFragmentProcessor(GrFragmentProcessor** fp) const { + if (fp) { + *fp = RRectsGaussianEdgeFP::Make(fFirst, fSecond, fRadius).release(); + } -std::unique_ptr<GrFragmentProcessor> -SkRRectsGaussianEdgeMaskFilterImpl::onAsFragmentProcessor(const GrFPArgs& args) const { - return RRectsGaussianEdgeFP::Make(fFirst, fSecond, fRadius); + return true; } #endif diff --git a/src/gpu/GrBlurUtils.cpp b/src/gpu/GrBlurUtils.cpp index aff3647f6c..dcd4a99ece 100644 --- a/src/gpu/GrBlurUtils.cpp +++ b/src/gpu/GrBlurUtils.cpp @@ -298,7 +298,7 @@ void GrBlurUtils::drawPathWithMaskFilter(GrContext* context, } GrAA aa = GrAA(paint.isAntiAlias()); SkMaskFilter* mf = paint.getMaskFilter(); - if (mf && !mf->hasFragmentProcessor()) { + if (mf && !mf->asFragmentProcessor(nullptr)) { // The MaskFilter wasn't already handled in SkPaintToGrPaint draw_path_with_mask_filter(context, renderTargetContext, clip, std::move(grPaint), aa, viewMatrix, mf, style, path, pathIsMutable); diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 3f7dcb41e0..8d6e55c1f6 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -403,10 +403,8 @@ void SkGpuDevice::drawRRect(const SkRRect& rrect, const SkPaint& paint) { } SkMaskFilter* mf = paint.getMaskFilter(); - if (mf) { - if (mf->hasFragmentProcessor()) { - mf = nullptr; // already handled in SkPaintToGrPaint - } + if (mf && mf->asFragmentProcessor(nullptr)) { + mf = nullptr; // already handled in SkPaintToGrPaint } GrStyle style(paint); diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index 9342cd676b..58dbb10df0 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -375,8 +375,6 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, // Convert SkPaint color to 4f format, including optional linearizing and gamut conversion. GrColor4f origColor = SkColorToUnpremulGrColor4f(skPaint.getColor(), colorSpaceInfo); - const GrFPArgs fpArgs(context, &viewM, nullptr, skPaint.getFilterQuality(), &colorSpaceInfo); - // Setup the initial color considering the shader, the SkPaint color, and the presence or not // of per-vertex colors. std::unique_ptr<GrFragmentProcessor> shaderFP; @@ -384,7 +382,8 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, if (shaderProcessor) { shaderFP = std::move(*shaderProcessor); } else if (const auto* shader = as_SB(skPaint.getShader())) { - shaderFP = shader->asFragmentProcessor(fpArgs); + shaderFP = shader->asFragmentProcessor(GrFPArgs( + context, &viewM, nullptr, skPaint.getFilterQuality(), &colorSpaceInfo)); } } @@ -479,8 +478,9 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, SkMaskFilter* maskFilter = skPaint.getMaskFilter(); if (maskFilter) { - if (auto mfFP = maskFilter->asFragmentProcessor(fpArgs)) { - grPaint->addCoverageFragmentProcessor(std::move(mfFP)); + GrFragmentProcessor* mfFP; + if (maskFilter->asFragmentProcessor(&mfFP)) { + grPaint->addCoverageFragmentProcessor(std::unique_ptr<GrFragmentProcessor>(mfFP)); } } |