diff options
author | Brian Salomon <bsalomon@google.com> | 2017-08-11 09:40:37 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-08-11 14:13:26 +0000 |
commit | aff329b8e9b239bca1d93b13a914fbef45ccf7fe (patch) | |
tree | 06ba42a557c6695f145bcf4956c981fc87af55ff | |
parent | e2cbd0451832ec71d1b498e0f64d02b7d096b2b7 (diff) |
Make GrFragmentProcessor be non-refcounted and use std::unique_ptr.
Change-Id: I985e54a071338e99292a5aa2f42c92bc115b4008
Reviewed-on: https://skia-review.googlesource.com/32760
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
143 files changed, 1195 insertions, 1176 deletions
diff --git a/gm/bigrrectaaeffect.cpp b/gm/bigrrectaaeffect.cpp index e60cfdf7b8..da89f45e1f 100644 --- a/gm/bigrrectaaeffect.cpp +++ b/gm/bigrrectaaeffect.cpp @@ -77,7 +77,7 @@ protected: SkRRect rrect = fRRect; rrect.offset(SkIntToScalar(x + kGap), SkIntToScalar(y + kGap)); - sk_sp<GrFragmentProcessor> fp(GrRRectEffect::Make(edgeType, rrect)); + std::unique_ptr<GrFragmentProcessor> fp(GrRRectEffect::Make(edgeType, rrect)); SkASSERT(fp); if (fp) { GrPaint grPaint; diff --git a/gm/constcolorprocessor.cpp b/gm/constcolorprocessor.cpp index 39926a98eb..6e6ed0dc18 100644 --- a/gm/constcolorprocessor.cpp +++ b/gm/constcolorprocessor.cpp @@ -106,7 +106,7 @@ protected: GrConstColorProcessor::InputMode mode = (GrConstColorProcessor::InputMode) m; GrColor4f color = GrColor4f::FromGrColor(kColors[procColor]); - sk_sp<GrFragmentProcessor> fp(GrConstColorProcessor::Make(color, mode)); + auto fp = GrConstColorProcessor::Make(color, mode); grPaint.addColorFragmentProcessor(std::move(fp)); renderTargetContext->priv().testingOnly_addDrawOp( diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp index 414acaac5b..dcde1045c9 100644 --- a/gm/convexpolyeffect.cpp +++ b/gm/convexpolyeffect.cpp @@ -191,7 +191,7 @@ protected: path->transform(m, &p); GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; - sk_sp<GrFragmentProcessor> fp(GrConvexPolyEffect::Make(edgeType, p)); + std::unique_ptr<GrFragmentProcessor> fp(GrConvexPolyEffect::Make(edgeType, p)); if (!fp) { continue; } @@ -231,7 +231,7 @@ protected: SkRect rect = *iter.get(); rect.offset(x, y); GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; - sk_sp<GrFragmentProcessor> fp(GrConvexPolyEffect::Make(edgeType, rect)); + std::unique_ptr<GrFragmentProcessor> fp(GrConvexPolyEffect::Make(edgeType, rect)); if (!fp) { continue; } diff --git a/gm/rrects.cpp b/gm/rrects.cpp index 3124895a49..399085034a 100644 --- a/gm/rrects.cpp +++ b/gm/rrects.cpp @@ -106,7 +106,7 @@ protected: SkRRect rrect = fRRects[curRRect]; rrect.offset(SkIntToScalar(x), SkIntToScalar(y)); GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; - sk_sp<GrFragmentProcessor> fp(GrRRectEffect::Make(edgeType, rrect)); + auto fp = GrRRectEffect::Make(edgeType, rrect); if (fp) { GrPaint grPaint; grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); diff --git a/gm/texturedomaineffect.cpp b/gm/texturedomaineffect.cpp index 68260dee0f..930e2682c6 100644 --- a/gm/texturedomaineffect.cpp +++ b/gm/texturedomaineffect.cpp @@ -122,12 +122,10 @@ protected: GrTextureDomain::Mode mode = (GrTextureDomain::Mode) m; GrPaint grPaint; grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); - sk_sp<GrFragmentProcessor> fp( - GrTextureDomainEffect::Make( - proxy, - nullptr, textureMatrices[tm], - GrTextureDomain::MakeTexelDomainForMode(texelDomains[d], mode), - mode, GrSamplerParams::kNone_FilterMode)); + auto fp = GrTextureDomainEffect::Make( + proxy, nullptr, textureMatrices[tm], + GrTextureDomain::MakeTexelDomainForMode(texelDomains[d], mode), mode, + GrSamplerParams::kNone_FilterMode); if (!fp) { continue; diff --git a/gm/windowrectangles.cpp b/gm/windowrectangles.cpp index dc5b93dbe0..f656b23aa0 100644 --- a/gm/windowrectangles.cpp +++ b/gm/windowrectangles.cpp @@ -149,18 +149,20 @@ private: */ class AlphaOnlyClip final : public MaskOnlyClipBase { public: - AlphaOnlyClip(sk_sp<GrTextureProxy> mask, int x, int y) { - int w = mask->width(), h = mask->height(); - fFP = GrDeviceSpaceTextureDecalFragmentProcessor::Make(std::move(mask), - SkIRect::MakeWH(w, h), {x, y}); - } + AlphaOnlyClip(sk_sp<GrTextureProxy> mask, int x, int y) : fMask(mask), fX(x), fY(y) {} + private: bool apply(GrContext*, GrRenderTargetContext*, bool, bool, GrAppliedClip* out, SkRect* bounds) const override { - out->addCoverageFP(fFP); + int w = fMask->width(); + int h = fMask->height(); + out->addCoverageFP(GrDeviceSpaceTextureDecalFragmentProcessor::Make( + fMask, SkIRect::MakeWH(w, h), {fX, fY})); return true; } - sk_sp<GrFragmentProcessor> fFP; + sk_sp<GrTextureProxy> fMask; + int fX; + int fY; }; /** diff --git a/gm/yuvtorgbeffect.cpp b/gm/yuvtorgbeffect.cpp index 5a9ccddb71..001c53d701 100644 --- a/gm/yuvtorgbeffect.cpp +++ b/gm/yuvtorgbeffect.cpp @@ -118,7 +118,7 @@ protected: {1, 2, 0}, {2, 0, 1}, {2, 1, 0}}; for (int i = 0; i < 6; ++i) { - sk_sp<GrFragmentProcessor> fp( + std::unique_ptr<GrFragmentProcessor> fp( GrYUVEffect::MakeYUVToRGB(proxy[indices[i][0]], proxy[indices[i][1]], proxy[indices[i][2]], @@ -247,13 +247,12 @@ protected: GrPaint grPaint; grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); - sk_sp<GrFragmentProcessor> fp( - GrYUVEffect::MakeYUVToRGB(proxy[0], proxy[1], proxy[2], sizes, - static_cast<SkYUVColorSpace>(space), true)); + auto fp = GrYUVEffect::MakeYUVToRGB(proxy[0], proxy[1], proxy[2], sizes, + static_cast<SkYUVColorSpace>(space), true); if (fp) { SkMatrix viewMatrix; viewMatrix.setTranslate(x, y); - grPaint.addColorFragmentProcessor(fp); + grPaint.addColorFragmentProcessor(std::move(fp)); renderTargetContext->priv().testingOnly_addDrawOp(GrRectOpFactory::MakeNonAAFill( std::move(grPaint), viewMatrix, renderRect, GrAAType::kNone)); } diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h index 68142a29de..3241a2b311 100644 --- a/include/core/SkColorFilter.h +++ b/include/core/SkColorFilter.h @@ -131,8 +131,8 @@ public: * * A null return indicates that the color filter isn't implemented for the GPU backend. */ - virtual sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, - SkColorSpace* dstColorSpace) const; + virtual std::unique_ptr<GrFragmentProcessor> asFragmentProcessor( + GrContext*, SkColorSpace* dstColorSpace) const; #endif bool affectsTransparentBlack() const { diff --git a/include/core/SkImageFilter.h b/include/core/SkImageFilter.h index 9fd370dad6..d9b0fb04ab 100644 --- a/include/core/SkImageFilter.h +++ b/include/core/SkImageFilter.h @@ -152,7 +152,7 @@ public: #if SK_SUPPORT_GPU static sk_sp<SkSpecialImage> DrawWithFP(GrContext* context, - sk_sp<GrFragmentProcessor> fp, + std::unique_ptr<GrFragmentProcessor> fp, const SkIRect& bounds, const OutputProperties& outputProperties); #endif diff --git a/include/effects/SkLumaColorFilter.h b/include/effects/SkLumaColorFilter.h index dc27ec3beb..1c35fc492a 100644 --- a/include/effects/SkLumaColorFilter.h +++ b/include/effects/SkLumaColorFilter.h @@ -29,7 +29,8 @@ public: static sk_sp<SkColorFilter> Make(); #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*, + SkColorSpace*) const override; #endif SK_TO_STRING_OVERRIDE() diff --git a/include/effects/SkToSRGBColorFilter.h b/include/effects/SkToSRGBColorFilter.h index c4d51446ef..431cc02583 100644 --- a/include/effects/SkToSRGBColorFilter.h +++ b/include/effects/SkToSRGBColorFilter.h @@ -22,7 +22,8 @@ public: static sk_sp<SkColorFilter> Make(sk_sp<SkColorSpace> srcColorSpace); #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*, + SkColorSpace*) const override; #endif SK_TO_STRING_OVERRIDE() diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h index 233a54f0b3..61446875cc 100644 --- a/include/gpu/GrContext.h +++ b/include/gpu/GrContext.h @@ -386,10 +386,10 @@ private: * use the specialized round-trip effects from GrConfigConversionEffect, otherwise they * create effects that do naive multiply or divide. */ - sk_sp<GrFragmentProcessor> createPMToUPMEffect(sk_sp<GrFragmentProcessor>, - bool useConfigConversionEffect); - sk_sp<GrFragmentProcessor> createUPMToPMEffect(sk_sp<GrFragmentProcessor>, - bool useConfigConversionEffect); + std::unique_ptr<GrFragmentProcessor> createPMToUPMEffect(std::unique_ptr<GrFragmentProcessor>, + bool useConfigConversionEffect); + std::unique_ptr<GrFragmentProcessor> createUPMToPMEffect(std::unique_ptr<GrFragmentProcessor>, + bool useConfigConversionEffect); /** * Returns true if createPMtoUPMEffect and createUPMToPMEffect will succeed for non-sRGB 8888 diff --git a/include/gpu/GrTypes.h b/include/gpu/GrTypes.h index 68c5327a91..9b683aa7ad 100644 --- a/include/gpu/GrTypes.h +++ b/include/gpu/GrTypes.h @@ -712,5 +712,4 @@ enum class GrSemaphoresSubmitted : int { kYes, }; - #endif diff --git a/include/private/GrTypesPriv.h b/include/private/GrTypesPriv.h index 05c1341ca2..2bed765de7 100644 --- a/include/private/GrTypesPriv.h +++ b/include/private/GrTypesPriv.h @@ -603,9 +603,10 @@ enum class GrBackendObjectOwnership : bool { kOwned = true }; -template <typename T> T * const * sk_sp_address_as_pointer_address(sk_sp<T> const * sp) { - static_assert(sizeof(T*) == sizeof(sk_sp<T>), "sk_sp not expected size."); - return reinterpret_cast<T * const *>(sp); +template <typename T> +T* const* unique_ptr_address_as_pointer_address(std::unique_ptr<T> const* up) { + static_assert(sizeof(T*) == sizeof(std::unique_ptr<T>), "unique_ptr not expected size."); + return reinterpret_cast<T* const*>(up); } /* diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp index 4291644506..22b8221506 100644 --- a/src/core/SkColorFilter.cpp +++ b/src/core/SkColorFilter.cpp @@ -36,7 +36,8 @@ bool SkColorFilter::asComponentTable(SkBitmap*) const { } #if SK_SUPPORT_GPU -sk_sp<GrFragmentProcessor> SkColorFilter::asFragmentProcessor(GrContext*, SkColorSpace*) const { +std::unique_ptr<GrFragmentProcessor> SkColorFilter::asFragmentProcessor(GrContext*, + SkColorSpace*) const { return nullptr; } #endif @@ -119,14 +120,14 @@ public: } #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext* context, - SkColorSpace* dstColorSpace) const override { - sk_sp<GrFragmentProcessor> innerFP(fInner->asFragmentProcessor(context, dstColorSpace)); - sk_sp<GrFragmentProcessor> outerFP(fOuter->asFragmentProcessor(context, dstColorSpace)); + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor( + GrContext* context, SkColorSpace* dstColorSpace) const override { + auto innerFP = fInner->asFragmentProcessor(context, dstColorSpace); + auto outerFP = fOuter->asFragmentProcessor(context, dstColorSpace); if (!innerFP || !outerFP) { return nullptr; } - sk_sp<GrFragmentProcessor> series[] = { std::move(innerFP), std::move(outerFP) }; + std::unique_ptr<GrFragmentProcessor> series[] = { std::move(innerFP), std::move(outerFP) }; return GrFragmentProcessor::RunInSeries(series, 2); } #endif @@ -215,7 +216,8 @@ public: SkSRGBGammaColorFilter(Direction dir) : fDir(dir) {} #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext* x, SkColorSpace* cs) const override { + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext* x, + SkColorSpace* cs) const override { // wish our caller would let us know if our input was opaque... GrSRGBEffect::Alpha alpha = GrSRGBEffect::Alpha::kPremul; switch (fDir) { diff --git a/src/core/SkColorMatrixFilterRowMajor255.cpp b/src/core/SkColorMatrixFilterRowMajor255.cpp index 9262e5bf5d..e2d6c37118 100644 --- a/src/core/SkColorMatrixFilterRowMajor255.cpp +++ b/src/core/SkColorMatrixFilterRowMajor255.cpp @@ -183,15 +183,15 @@ SkColorMatrixFilterRowMajor255::makeComposed(sk_sp<SkColorFilter> innerFilter) c class ColorMatrixEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(const SkScalar matrix[20]) { - return sk_sp<GrFragmentProcessor>(new ColorMatrixEffect(matrix)); + static std::unique_ptr<GrFragmentProcessor> Make(const SkScalar matrix[20]) { + return std::unique_ptr<GrFragmentProcessor>(new ColorMatrixEffect(matrix)); } const char* name() const override { return "Color Matrix"; } GR_DECLARE_FRAGMENT_PROCESSOR_TEST - sk_sp<GrFragmentProcessor> clone() const override { return Make(fMatrix); } + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(fMatrix); } private: class GLSLProcessor : public GrGLSLFragmentProcessor { @@ -284,7 +284,7 @@ private: GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ColorMatrixEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> ColorMatrixEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> ColorMatrixEffect::TestCreate(GrProcessorTestData* d) { SkScalar colorMatrix[20]; for (size_t i = 0; i < SK_ARRAY_COUNT(colorMatrix); ++i) { colorMatrix[i] = d->fRandom->nextSScalar1(); @@ -294,8 +294,8 @@ sk_sp<GrFragmentProcessor> ColorMatrixEffect::TestCreate(GrProcessorTestData* d) #endif -sk_sp<GrFragmentProcessor> SkColorMatrixFilterRowMajor255::asFragmentProcessor( - GrContext*, SkColorSpace*) const { +std::unique_ptr<GrFragmentProcessor> SkColorMatrixFilterRowMajor255::asFragmentProcessor( + GrContext*, SkColorSpace*) const { return ColorMatrixEffect::Make(fMatrix); } diff --git a/src/core/SkColorMatrixFilterRowMajor255.h b/src/core/SkColorMatrixFilterRowMajor255.h index 7a1471ae23..7767646d2d 100644 --- a/src/core/SkColorMatrixFilterRowMajor255.h +++ b/src/core/SkColorMatrixFilterRowMajor255.h @@ -23,7 +23,8 @@ public: sk_sp<SkColorFilter> makeComposed(sk_sp<SkColorFilter>) const override; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*, + SkColorSpace*) const override; #endif SK_TO_STRING_OVERRIDE() diff --git a/src/core/SkGpuBlurUtils.cpp b/src/core/SkGpuBlurUtils.cpp index 5121cc53ec..b328eea75a 100644 --- a/src/core/SkGpuBlurUtils.cpp +++ b/src/core/SkGpuBlurUtils.cpp @@ -81,7 +81,7 @@ static void convolve_gaussian_1d(GrRenderTargetContext* renderTargetContext, GrPaint paint; paint.setGammaCorrect(renderTargetContext->isGammaCorrect()); - sk_sp<GrFragmentProcessor> conv(GrGaussianConvolutionFragmentProcessor::Make( + std::unique_ptr<GrFragmentProcessor> conv(GrGaussianConvolutionFragmentProcessor::Make( std::move(proxy), direction, radius, sigma, mode, bounds)); paint.addColorFragmentProcessor(std::move(conv)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); @@ -109,9 +109,8 @@ static void convolve_gaussian_2d(GrRenderTargetContext* renderTargetContext, GrPaint paint; paint.setGammaCorrect(renderTargetContext->isGammaCorrect()); - sk_sp<GrFragmentProcessor> conv(GrMatrixConvolutionEffect::MakeGaussian( - std::move(proxy), srcBounds, size, 1.0, 0.0, kernelOffset, - mode, true, sigmaX, sigmaY)); + auto conv = GrMatrixConvolutionEffect::MakeGaussian(std::move(proxy), srcBounds, size, 1.0, 0.0, + kernelOffset, mode, true, sigmaX, sigmaY); paint.addColorFragmentProcessor(std::move(conv)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); renderTargetContext->fillRectWithLocalMatrix(clip, std::move(paint), GrAA::kNo, SkMatrix::I(), @@ -280,13 +279,12 @@ sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, SkRect domain = SkRect::Make(localSrcBounds); domain.inset((i < scaleFactorX) ? SK_ScalarHalf : 0.0f, (i < scaleFactorY) ? SK_ScalarHalf : 0.0f); - sk_sp<GrFragmentProcessor> fp(GrTextureDomainEffect::Make( - std::move(srcProxy), - nullptr, - SkMatrix::I(), - domain, - modeForScaling, - GrSamplerParams::kBilerp_FilterMode)); + auto fp = GrTextureDomainEffect::Make(std::move(srcProxy), + nullptr, + SkMatrix::I(), + domain, + modeForScaling, + GrSamplerParams::kBilerp_FilterMode); paint.addColorFragmentProcessor(std::move(fp)); srcRect.offset(-srcOffset); srcOffset.set(0, 0); @@ -402,13 +400,12 @@ sk_sp<GrRenderTargetContext> GaussianBlur(GrContext* context, if (GrTextureDomain::kIgnore_Mode != mode) { SkRect domain = SkRect::Make(localSrcBounds); - sk_sp<GrFragmentProcessor> fp(GrTextureDomainEffect::Make( - std::move(srcProxy), - nullptr, - SkMatrix::I(), - domain, - modeForScaling, - GrSamplerParams::kBilerp_FilterMode)); + auto fp = GrTextureDomainEffect::Make(std::move(srcProxy), + nullptr, + SkMatrix::I(), + domain, + modeForScaling, + GrSamplerParams::kBilerp_FilterMode); paint.addColorFragmentProcessor(std::move(fp)); } else { // FIXME: this should be mitchell, not bilinear. diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp index cc0f1e9f81..7301442d81 100644 --- a/src/core/SkImageFilter.cpp +++ b/src/core/SkImageFilter.cpp @@ -291,7 +291,7 @@ bool SkImageFilter::canComputeFastBounds() const { #if SK_SUPPORT_GPU sk_sp<SkSpecialImage> SkImageFilter::DrawWithFP(GrContext* context, - sk_sp<GrFragmentProcessor> fp, + std::unique_ptr<GrFragmentProcessor> fp, const SkIRect& bounds, const OutputProperties& outputProperties) { GrPaint paint; diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp index 2d2fa93933..1e2e8de73b 100644 --- a/src/core/SkModeColorFilter.cpp +++ b/src/core/SkModeColorFilter.cpp @@ -97,17 +97,15 @@ sk_sp<SkColorFilter> SkModeColorFilter::onMakeColorSpace(SkColorSpaceXformer* xf #include "effects/GrConstColorProcessor.h" #include "SkGr.h" -sk_sp<GrFragmentProcessor> SkModeColorFilter::asFragmentProcessor( - GrContext*, SkColorSpace* dstColorSpace) const { +std::unique_ptr<GrFragmentProcessor> SkModeColorFilter::asFragmentProcessor( + GrContext*, SkColorSpace* dstColorSpace) const { if (SkBlendMode::kDst == fMode) { return nullptr; } - sk_sp<GrFragmentProcessor> constFP( - GrConstColorProcessor::Make(SkColorToPremulGrColor4f(fColor, dstColorSpace), - GrConstColorProcessor::kIgnore_InputMode)); - sk_sp<GrFragmentProcessor> fp( - GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(constFP), fMode)); + auto constFP = GrConstColorProcessor::Make(SkColorToPremulGrColor4f(fColor, dstColorSpace), + GrConstColorProcessor::kIgnore_InputMode); + auto fp = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(constFP), fMode); if (!fp) { return nullptr; } diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h index ea503ac0d6..c5bd785c99 100644 --- a/src/core/SkModeColorFilter.h +++ b/src/core/SkModeColorFilter.h @@ -27,7 +27,8 @@ public: #endif #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*, + SkColorSpace*) const override; #endif SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter) diff --git a/src/effects/GrAlphaThresholdFragmentProcessor.cpp b/src/effects/GrAlphaThresholdFragmentProcessor.cpp index 731ca99d3b..8c3afb7aff 100644 --- a/src/effects/GrAlphaThresholdFragmentProcessor.cpp +++ b/src/effects/GrAlphaThresholdFragmentProcessor.cpp @@ -123,12 +123,12 @@ GrAlphaThresholdFragmentProcessor::GrAlphaThresholdFragmentProcessor( this->addCoordTransform(&fImageCoordTransform); this->addCoordTransform(&fMaskCoordTransform); } -sk_sp<GrFragmentProcessor> GrAlphaThresholdFragmentProcessor::clone() const { - return sk_sp<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor(*this)); +std::unique_ptr<GrFragmentProcessor> GrAlphaThresholdFragmentProcessor::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor(*this)); } GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrAlphaThresholdFragmentProcessor); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrAlphaThresholdFragmentProcessor::TestCreate( +std::unique_ptr<GrFragmentProcessor> GrAlphaThresholdFragmentProcessor::TestCreate( GrProcessorTestData* testData) { sk_sp<GrTextureProxy> bmpProxy = testData->textureProxy(GrProcessorUnitTest::kSkiaPMTextureIdx); sk_sp<GrTextureProxy> maskProxy = testData->textureProxy(GrProcessorUnitTest::kAlphaTextureIdx); diff --git a/src/effects/GrAlphaThresholdFragmentProcessor.fp b/src/effects/GrAlphaThresholdFragmentProcessor.fp index e930ed9a58..481549e6b5 100644 --- a/src/effects/GrAlphaThresholdFragmentProcessor.fp +++ b/src/effects/GrAlphaThresholdFragmentProcessor.fp @@ -13,18 +13,14 @@ in uniform float outerThreshold; } @make { - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> image, - sk_sp<GrColorSpaceXform> colorXform, - sk_sp<GrTextureProxy> mask, - float innerThreshold, - float outerThreshold, - const SkIRect& bounds) { - return sk_sp<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor(image, - colorXform, - mask, - innerThreshold, - outerThreshold, - bounds)); + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> image, + sk_sp<GrColorSpaceXform> colorXform, + sk_sp<GrTextureProxy> mask, + float innerThreshold, + float outerThreshold, + const SkIRect& bounds) { + return std::unique_ptr<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor( + image, colorXform, mask, innerThreshold, outerThreshold, bounds)); } } @@ -89,4 +85,4 @@ void main() { std::move(maskProxy), innerThresh, outerThresh, bounds); -}
\ No newline at end of file +} diff --git a/src/effects/GrAlphaThresholdFragmentProcessor.h b/src/effects/GrAlphaThresholdFragmentProcessor.h index 78424d0359..3b649516c1 100644 --- a/src/effects/GrAlphaThresholdFragmentProcessor.h +++ b/src/effects/GrAlphaThresholdFragmentProcessor.h @@ -24,19 +24,19 @@ public: float innerThreshold() const { return fInnerThreshold; } float outerThreshold() const { return fOuterThreshold; } - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> image, - sk_sp<GrColorSpaceXform> - colorXform, - sk_sp<GrTextureProxy> - mask, - float innerThreshold, - float outerThreshold, - const SkIRect& bounds) { - return sk_sp<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor( + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> image, + sk_sp<GrColorSpaceXform> + colorXform, + sk_sp<GrTextureProxy> + mask, + float innerThreshold, + float outerThreshold, + const SkIRect& bounds) { + return std::unique_ptr<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor( image, colorXform, mask, innerThreshold, outerThreshold, bounds)); } GrAlphaThresholdFragmentProcessor(const GrAlphaThresholdFragmentProcessor& src); - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; const char* name() const override { return "AlphaThresholdFragmentProcessor"; } private: diff --git a/src/effects/GrCircleBlurFragmentProcessor.cpp b/src/effects/GrCircleBlurFragmentProcessor.cpp index 68ba0af0d4..7cec3cc431 100644 --- a/src/effects/GrCircleBlurFragmentProcessor.cpp +++ b/src/effects/GrCircleBlurFragmentProcessor.cpp @@ -206,9 +206,8 @@ static sk_sp<GrTextureProxy> create_profile_texture(GrResourceProvider* resource return blurProfile; } -sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make(GrResourceProvider* resourceProvider, - const SkRect& circle, - float sigma) { +std::unique_ptr<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make( + GrResourceProvider* resourceProvider, const SkRect& circle, float sigma) { float solidRadius; float textureRadius; sk_sp<GrTextureProxy> profile( @@ -216,7 +215,7 @@ sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make(GrResourceProvide if (!profile) { return nullptr; } - return sk_sp<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor( + return std::unique_ptr<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor( circle, textureRadius, solidRadius, std::move(profile), resourceProvider)); } #include "glsl/GrGLSLColorSpaceXformHelper.h" @@ -295,12 +294,12 @@ GrCircleBlurFragmentProcessor::GrCircleBlurFragmentProcessor( this->initClassID<GrCircleBlurFragmentProcessor>(); this->addTextureSampler(&fBlurProfileSampler); } -sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::clone() const { - return sk_sp<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(*this)); +std::unique_ptr<GrFragmentProcessor> GrCircleBlurFragmentProcessor::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(*this)); } GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrCircleBlurFragmentProcessor); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::TestCreate( +std::unique_ptr<GrFragmentProcessor> GrCircleBlurFragmentProcessor::TestCreate( GrProcessorTestData* testData) { SkScalar wh = testData->fRandom->nextRangeScalar(100.f, 1000.f); SkScalar sigma = testData->fRandom->nextRangeF(1.f, 10.f); diff --git a/src/effects/GrCircleBlurFragmentProcessor.fp b/src/effects/GrCircleBlurFragmentProcessor.fp index 01e5426dc0..856a468b6c 100644 --- a/src/effects/GrCircleBlurFragmentProcessor.fp +++ b/src/effects/GrCircleBlurFragmentProcessor.fp @@ -18,8 +18,8 @@ uniform float4 circleData; } @make { - static sk_sp<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider, - const SkRect& circle, float sigma); + static std::unique_ptr<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider, + const SkRect& circle, float sigma); } @setData(data) { @@ -256,10 +256,8 @@ uniform float4 circleData; return blurProfile; } - sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make( - GrResourceProvider* resourceProvider, - const SkRect& circle, - float sigma) { + std::unique_ptr<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make( + GrResourceProvider* resourceProvider, const SkRect& circle, float sigma) { float solidRadius; float textureRadius; sk_sp<GrTextureProxy> profile(create_profile_texture(resourceProvider, circle, sigma, @@ -267,11 +265,8 @@ uniform float4 circleData; if (!profile) { return nullptr; } - return sk_sp<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(circle, - textureRadius, - solidRadius, - std::move(profile), - resourceProvider)); + return std::unique_ptr<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor( + circle, textureRadius, solidRadius, std::move(profile), resourceProvider)); } } @@ -289,4 +284,4 @@ void main() { SkScalar sigma = testData->fRandom->nextRangeF(1.f,10.f); SkRect circle = SkRect::MakeWH(wh, wh); return GrCircleBlurFragmentProcessor::Make(testData->resourceProvider(), circle, sigma); -}
\ No newline at end of file +} diff --git a/src/effects/GrCircleBlurFragmentProcessor.h b/src/effects/GrCircleBlurFragmentProcessor.h index 9ef204d403..e98714b4b0 100644 --- a/src/effects/GrCircleBlurFragmentProcessor.h +++ b/src/effects/GrCircleBlurFragmentProcessor.h @@ -21,10 +21,10 @@ public: float textureRadius() const { return fTextureRadius; } float solidRadius() const { return fSolidRadius; } - static sk_sp<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider, - const SkRect& circle, float sigma); + static std::unique_ptr<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider, + const SkRect& circle, float sigma); GrCircleBlurFragmentProcessor(const GrCircleBlurFragmentProcessor& src); - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; const char* name() const override { return "CircleBlurFragmentProcessor"; } private: diff --git a/src/effects/SkAlphaThresholdFilter.cpp b/src/effects/SkAlphaThresholdFilter.cpp index e46be12067..634e6ae08b 100644 --- a/src/effects/SkAlphaThresholdFilter.cpp +++ b/src/effects/SkAlphaThresholdFilter.cpp @@ -173,13 +173,12 @@ sk_sp<SkSpecialImage> SkAlphaThresholdFilterImpl::onFilterImage(SkSpecialImage* sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(input->getColorSpace(), outProps.colorSpace()); - sk_sp<GrFragmentProcessor> fp(GrAlphaThresholdFragmentProcessor::Make( - std::move(inputProxy), - std::move(colorSpaceXform), - std::move(maskProxy), - fInnerThreshold, - fOuterThreshold, - bounds)); + auto fp = GrAlphaThresholdFragmentProcessor::Make(std::move(inputProxy), + std::move(colorSpaceXform), + std::move(maskProxy), + fInnerThreshold, + fOuterThreshold, + bounds); if (!fp) { return nullptr; } diff --git a/src/effects/SkArithmeticImageFilter.cpp b/src/effects/SkArithmeticImageFilter.cpp index 41bafb889c..34df27546c 100644 --- a/src/effects/SkArithmeticImageFilter.cpp +++ b/src/effects/SkArithmeticImageFilter.cpp @@ -207,9 +207,10 @@ sk_sp<SkSpecialImage> ArithmeticImageFilterImpl::onFilterImage(SkSpecialImage* s namespace { class ArithmeticFP : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(float k1, float k2, float k3, float k4, - bool enforcePMColor, sk_sp<GrFragmentProcessor> dst) { - return sk_sp<GrFragmentProcessor>( + static std::unique_ptr<GrFragmentProcessor> Make(float k1, float k2, float k3, float k4, + bool enforcePMColor, + std::unique_ptr<GrFragmentProcessor> dst) { + return std::unique_ptr<GrFragmentProcessor>( new ArithmeticFP(k1, k2, k3, k4, enforcePMColor, std::move(dst))); } @@ -223,7 +224,7 @@ public: return str; } - sk_sp<GrFragmentProcessor> clone() const override { + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(fK1, fK2, fK3, fK4, fEnforcePMColor, this->childProcessor(0).clone()); } @@ -291,7 +292,7 @@ private: // This could implement the const input -> const output optimization but it's unlikely to help. ArithmeticFP(float k1, float k2, float k3, float k4, bool enforcePMColor, - sk_sp<GrFragmentProcessor> dst) + std::unique_ptr<GrFragmentProcessor> dst) : INHERITED(kNone_OptimizationFlags) , fK1(k1) , fK2(k2) @@ -313,14 +314,14 @@ private: } #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> ArithmeticFP::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> ArithmeticFP::TestCreate(GrProcessorTestData* d) { float k1 = d->fRandom->nextF(); float k2 = d->fRandom->nextF(); float k3 = d->fRandom->nextF(); float k4 = d->fRandom->nextF(); bool enforcePMColor = d->fRandom->nextBool(); - sk_sp<GrFragmentProcessor> dst(GrProcessorUnitTest::MakeChildFP(d)); + std::unique_ptr<GrFragmentProcessor> dst(GrProcessorUnitTest::MakeChildFP(d)); return ArithmeticFP::Make(k1, k2, k3, k4, enforcePMColor, std::move(dst)); } #endif @@ -350,7 +351,7 @@ sk_sp<SkSpecialImage> ArithmeticImageFilterImpl::filterImageGPU( } GrPaint paint; - sk_sp<GrFragmentProcessor> bgFP; + std::unique_ptr<GrFragmentProcessor> bgFP; if (backgroundProxy) { SkMatrix backgroundMatrix = SkMatrix::MakeTrans(-SkIntToScalar(backgroundOffset.fX), @@ -371,14 +372,13 @@ sk_sp<SkSpecialImage> ArithmeticImageFilterImpl::filterImageGPU( -SkIntToScalar(foregroundOffset.fY)); sk_sp<GrColorSpaceXform> fgXform = GrColorSpaceXform::Make(foreground->getColorSpace(), outputProperties.colorSpace()); - sk_sp<GrFragmentProcessor> foregroundFP(GrTextureDomainEffect::Make( - std::move(foregroundProxy), std::move(fgXform), - foregroundMatrix, - GrTextureDomain::MakeTexelDomain(foreground->subset()), - GrTextureDomain::kDecal_Mode, GrSamplerParams::kNone_FilterMode)); + auto foregroundFP = GrTextureDomainEffect::Make( + std::move(foregroundProxy), std::move(fgXform), foregroundMatrix, + GrTextureDomain::MakeTexelDomain(foreground->subset()), + GrTextureDomain::kDecal_Mode, GrSamplerParams::kNone_FilterMode); paint.addColorFragmentProcessor(std::move(foregroundFP)); - sk_sp<GrFragmentProcessor> xferFP = + std::unique_ptr<GrFragmentProcessor> xferFP = ArithmeticFP::Make(fK[0], fK[1], fK[2], fK[3], fEnforcePMColor, std::move(bgFP)); // A null 'xferFP' here means kSrc_Mode was used in which case we can just proceed diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp index f927cc7470..2fc10ede40 100644 --- a/src/effects/SkBlurMaskFilter.cpp +++ b/src/effects/SkBlurMaskFilter.cpp @@ -769,8 +769,8 @@ public: const char* name() const override { return "RectBlur"; } - static sk_sp<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider, - const SkRect& rect, float sigma) { + static std::unique_ptr<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider, + const SkRect& rect, float sigma) { int doubleProfileSize = SkScalarCeilToInt(12*sigma); if (doubleProfileSize >= rect.width() || doubleProfileSize >= rect.height()) { @@ -803,12 +803,12 @@ public: precision = kDefault_GrSLPrecision; } - return sk_sp<GrFragmentProcessor>(new GrRectBlurEffect(rect, sigma, - std::move(blurProfile), precision)); + return std::unique_ptr<GrFragmentProcessor>( + new GrRectBlurEffect(rect, sigma, std::move(blurProfile), precision)); } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrRectBlurEffect( + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrRectBlurEffect( fRect, fSigma, sk_ref_sp(fBlurProfileSampler.proxy()), fPrecision)); } @@ -1009,7 +1009,7 @@ bool GrRectBlurEffect::onIsEqual(const GrFragmentProcessor& sBase) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRectBlurEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrRectBlurEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrRectBlurEffect::TestCreate(GrProcessorTestData* d) { float sigma = d->fRandom->nextRangeF(3,8); float width = d->fRandom->nextRangeF(200,300); float height = d->fRandom->nextRangeF(200,300); @@ -1039,7 +1039,7 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrContext* context, SkScalar xformedSigma = this->computeXformedSigma(viewMatrix); GrResourceProvider* resourceProvider = context->resourceProvider(); - sk_sp<GrFragmentProcessor> fp; + std::unique_ptr<GrFragmentProcessor> fp; SkRect rect; if (path.isRect(&rect)) { @@ -1076,9 +1076,9 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrContext* context, class GrRRectBlurEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(GrContext*, - float sigma, float xformedSigma, - const SkRRect& srcRRect, const SkRRect& devRRect); + static std::unique_ptr<GrFragmentProcessor> Make(GrContext*, float sigma, float xformedSigma, + const SkRRect& srcRRect, + const SkRRect& devRRect); ~GrRRectBlurEffect() override {} const char* name() const override { return "GrRRectBlur"; } @@ -1086,7 +1086,7 @@ public: const SkRRect& getRRect() const { return fRRect; } float getSigma() const { return fSigma; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; @@ -1171,9 +1171,10 @@ static sk_sp<GrTextureProxy> find_or_create_rrect_blur_mask(GrContext* context, return mask; } -sk_sp<GrFragmentProcessor> GrRRectBlurEffect::Make(GrContext* context, - float sigma, float xformedSigma, - const SkRRect& srcRRect, const SkRRect& devRRect) { +std::unique_ptr<GrFragmentProcessor> GrRRectBlurEffect::Make(GrContext* context, float sigma, + float xformedSigma, + const SkRRect& srcRRect, + const SkRRect& devRRect) { SkASSERT(!devRRect.isCircle() && !devRRect.isRect()); // Should've been caught up-stream // TODO: loosen this up @@ -1208,9 +1209,8 @@ sk_sp<GrFragmentProcessor> GrRRectBlurEffect::Make(GrContext* context, return nullptr; } - return sk_sp<GrFragmentProcessor>(new GrRRectBlurEffect(xformedSigma, - devRRect, - std::move(mask))); + return std::unique_ptr<GrFragmentProcessor>( + new GrRRectBlurEffect(xformedSigma, devRRect, std::move(mask))); } GrRRectBlurEffect::GrRRectBlurEffect(float sigma, const SkRRect& rrect, @@ -1223,8 +1223,8 @@ GrRRectBlurEffect::GrRRectBlurEffect(float sigma, const SkRRect& rrect, this->addTextureSampler(&fNinePatchSampler); } -sk_sp<GrFragmentProcessor> GrRRectBlurEffect::clone() const { - return sk_sp<GrFragmentProcessor>( +std::unique_ptr<GrFragmentProcessor> GrRRectBlurEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>( new GrRRectBlurEffect(fSigma, fRRect, sk_ref_sp(fNinePatchSampler.proxy()))); } @@ -1240,7 +1240,7 @@ bool GrRRectBlurEffect::onIsEqual(const GrFragmentProcessor& other) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRRectBlurEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrRRectBlurEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrRRectBlurEffect::TestCreate(GrProcessorTestData* d) { SkScalar w = d->fRandom->nextRangeScalar(100.f, 1000.f); SkScalar h = d->fRandom->nextRangeScalar(100.f, 1000.f); SkScalar r = d->fRandom->nextRangeF(1.f, 9.f); @@ -1372,7 +1372,7 @@ bool SkBlurMaskFilterImpl::directFilterRRectMaskGPU(GrContext* context, SkScalar xformedSigma = this->computeXformedSigma(viewMatrix); if (devRRect.isRect() || devRRect.isCircle()) { - sk_sp<GrFragmentProcessor> fp; + std::unique_ptr<GrFragmentProcessor> fp; if (devRRect.isRect()) { SkScalar pad = 3.0f * xformedSigma; const SkRect dstCoverageRect = devRRect.rect().makeOutset(pad, pad); @@ -1404,8 +1404,7 @@ bool SkBlurMaskFilterImpl::directFilterRRectMaskGPU(GrContext* context, return true; } - sk_sp<GrFragmentProcessor> fp(GrRRectBlurEffect::Make(context, fSigma, xformedSigma, - srcRRect, devRRect)); + auto fp = GrRRectBlurEffect::Make(context, fSigma, xformedSigma, srcRRect, devRRect); if (!fp) { return false; } diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp index 0bd6c2ca68..43a39413e1 100644 --- a/src/effects/SkColorMatrixFilter.cpp +++ b/src/effects/SkColorMatrixFilter.cpp @@ -66,8 +66,8 @@ public: Factory getFactory() const override { return fMatrixFilter->getFactory(); } #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext* ctx, - SkColorSpace* cs) const override { + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext* ctx, + SkColorSpace* cs) const override { return fMatrixFilter->asFragmentProcessor(ctx, cs); } #endif diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp index 626ff9f8b6..ff17af1a48 100644 --- a/src/effects/SkDisplacementMapEffect.cpp +++ b/src/effects/SkDisplacementMapEffect.cpp @@ -164,17 +164,15 @@ void SkDisplacementMapEffect::flatten(SkWriteBuffer& buffer) const { #if SK_SUPPORT_GPU class GrDisplacementMapEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make( - SkDisplacementMapEffect::ChannelSelectorType xChannelSelector, - SkDisplacementMapEffect::ChannelSelectorType yChannelSelector, SkVector scale, - sk_sp<GrTextureProxy> displacement, const SkMatrix& offsetMatrix, - sk_sp<GrTextureProxy> color, - sk_sp<GrColorSpaceXform> colorSpaceXform, const SkISize& colorDimensions) { - return sk_sp<GrFragmentProcessor>( - new GrDisplacementMapEffect(xChannelSelector, yChannelSelector, scale, - std::move(displacement), - offsetMatrix, std::move(color), std::move(colorSpaceXform), - colorDimensions)); + static std::unique_ptr<GrFragmentProcessor> Make( + SkDisplacementMapEffect::ChannelSelectorType xChannelSelector, + SkDisplacementMapEffect::ChannelSelectorType yChannelSelector, SkVector scale, + sk_sp<GrTextureProxy> displacement, const SkMatrix& offsetMatrix, + sk_sp<GrTextureProxy> color, sk_sp<GrColorSpaceXform> colorSpaceXform, + const SkISize& colorDimensions) { + return std::unique_ptr<GrFragmentProcessor>(new GrDisplacementMapEffect( + xChannelSelector, yChannelSelector, scale, std::move(displacement), offsetMatrix, + std::move(color), std::move(colorSpaceXform), colorDimensions)); } ~GrDisplacementMapEffect() override; @@ -191,7 +189,7 @@ public: const GrTextureDomain& domain() const { return fDomain; } GrColorSpaceXform* colorSpaceXform() const { return fColorSpaceXform.get(); } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; private: static OptimizationFlags OptimizationFlags(GrPixelConfig colorConfig); @@ -504,8 +502,8 @@ GrDisplacementMapEffect::GrDisplacementMapEffect(const GrDisplacementMapEffect& GrDisplacementMapEffect::~GrDisplacementMapEffect() {} -sk_sp<GrFragmentProcessor> GrDisplacementMapEffect::clone() const { - return sk_sp<GrFragmentProcessor>(new GrDisplacementMapEffect(*this)); +std::unique_ptr<GrFragmentProcessor> GrDisplacementMapEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrDisplacementMapEffect(*this)); } bool GrDisplacementMapEffect::onIsEqual(const GrFragmentProcessor& sBase) const { @@ -520,7 +518,7 @@ bool GrDisplacementMapEffect::onIsEqual(const GrFragmentProcessor& sBase) const GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDisplacementMapEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrDisplacementMapEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrDisplacementMapEffect::TestCreate(GrProcessorTestData* d) { int texIdxDispl = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; int texIdxColor = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : diff --git a/src/effects/SkHighContrastFilter.cpp b/src/effects/SkHighContrastFilter.cpp index 6d9853e556..3de7603c74 100644 --- a/src/effects/SkHighContrastFilter.cpp +++ b/src/effects/SkHighContrastFilter.cpp @@ -35,7 +35,8 @@ public: ~SkHighContrast_Filter() override {} #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*, + SkColorSpace*) const override; #endif void onAppendStages(SkRasterPipeline* p, @@ -166,15 +167,15 @@ SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END #if SK_SUPPORT_GPU class HighContrastFilterEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(const SkHighContrastConfig& config) { - return sk_sp<GrFragmentProcessor>(new HighContrastFilterEffect(config)); + static std::unique_ptr<GrFragmentProcessor> Make(const SkHighContrastConfig& config) { + return std::unique_ptr<GrFragmentProcessor>(new HighContrastFilterEffect(config)); } const char* name() const override { return "HighContrastFilter"; } const SkHighContrastConfig& config() const { return fConfig; } - sk_sp<GrFragmentProcessor> clone() const override { return Make(fConfig); } + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(fConfig); } private: HighContrastFilterEffect(const SkHighContrastConfig& config) @@ -353,7 +354,8 @@ void GLHighContrastFilterEffect::emitCode(EmitArgs& args) { fragBuilder->codeAppendf("%s = color;", args.fOutputColor); } -sk_sp<GrFragmentProcessor> SkHighContrast_Filter::asFragmentProcessor(GrContext*, SkColorSpace*) const { +std::unique_ptr<GrFragmentProcessor> SkHighContrast_Filter::asFragmentProcessor( + GrContext*, SkColorSpace*) const { return HighContrastFilterEffect::Make(fConfig); } #endif diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp index 817f96fd15..fa02104627 100644 --- a/src/effects/SkLightingImageFilter.cpp +++ b/src/effects/SkLightingImageFilter.cpp @@ -411,10 +411,11 @@ protected: const SkIRect& bounds, const SkMatrix& matrix, const OutputProperties& outputProperties) const; - virtual sk_sp<GrFragmentProcessor> makeFragmentProcessor(sk_sp<GrTextureProxy>, - const SkMatrix&, - const SkIRect* srcBounds, - BoundaryMode boundaryMode) const = 0; + virtual std::unique_ptr<GrFragmentProcessor> makeFragmentProcessor( + sk_sp<GrTextureProxy>, + const SkMatrix&, + const SkIRect* srcBounds, + BoundaryMode boundaryMode) const = 0; #endif private: #if SK_SUPPORT_GPU @@ -442,9 +443,7 @@ void SkLightingImageFilterInternal::drawRect(GrRenderTargetContext* renderTarget SkRect srcRect = dstRect.makeOffset(SkIntToScalar(bounds.x()), SkIntToScalar(bounds.y())); GrPaint paint; paint.setGammaCorrect(renderTargetContext->isGammaCorrect()); - sk_sp<GrFragmentProcessor> fp(this->makeFragmentProcessor(std::move(srcProxy), - matrix, srcBounds, - boundaryMode)); + auto fp = this->makeFragmentProcessor(std::move(srcProxy), matrix, srcBounds, boundaryMode); paint.addColorFragmentProcessor(std::move(fp)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); renderTargetContext->fillRectToRect(clip, std::move(paint), GrAA::kNo, SkMatrix::I(), dstRect, @@ -541,9 +540,10 @@ protected: sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> makeFragmentProcessor(sk_sp<GrTextureProxy>, - const SkMatrix&, const SkIRect* bounds, - BoundaryMode) const override; + std::unique_ptr<GrFragmentProcessor> makeFragmentProcessor(sk_sp<GrTextureProxy>, + const SkMatrix&, + const SkIRect* bounds, + BoundaryMode) const override; #endif private: @@ -578,9 +578,10 @@ protected: sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> makeFragmentProcessor(sk_sp<GrTextureProxy>, - const SkMatrix&, const SkIRect* bounds, - BoundaryMode) const override; + std::unique_ptr<GrFragmentProcessor> makeFragmentProcessor(sk_sp<GrTextureProxy>, + const SkMatrix&, + const SkIRect* bounds, + BoundaryMode) const override; #endif private: @@ -623,22 +624,22 @@ private: class GrDiffuseLightingEffect : public GrLightingEffect { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<const SkImageFilterLight> light, - SkScalar surfaceScale, - const SkMatrix& matrix, - SkScalar kd, - BoundaryMode boundaryMode, - const SkIRect* srcBounds) { - return sk_sp<GrFragmentProcessor>( + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<const SkImageFilterLight> light, + SkScalar surfaceScale, + const SkMatrix& matrix, + SkScalar kd, + BoundaryMode boundaryMode, + const SkIRect* srcBounds) { + return std::unique_ptr<GrFragmentProcessor>( new GrDiffuseLightingEffect(std::move(proxy), std::move(light), surfaceScale, matrix, kd, boundaryMode, srcBounds)); } const char* name() const override { return "DiffuseLighting"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrDiffuseLightingEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrDiffuseLightingEffect(*this)); } SkScalar kd() const { return fKD; } @@ -668,23 +669,23 @@ private: class GrSpecularLightingEffect : public GrLightingEffect { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<const SkImageFilterLight> light, - SkScalar surfaceScale, - const SkMatrix& matrix, - SkScalar ks, - SkScalar shininess, - BoundaryMode boundaryMode, - const SkIRect* srcBounds) { - return sk_sp<GrFragmentProcessor>( + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<const SkImageFilterLight> light, + SkScalar surfaceScale, + const SkMatrix& matrix, + SkScalar ks, + SkScalar shininess, + BoundaryMode boundaryMode, + const SkIRect* srcBounds) { + return std::unique_ptr<GrFragmentProcessor>( new GrSpecularLightingEffect(std::move(proxy), std::move(light), surfaceScale, matrix, ks, shininess, boundaryMode, srcBounds)); } const char* name() const override { return "SpecularLighting"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrSpecularLightingEffect>(new GrSpecularLightingEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrSpecularLightingEffect(*this)); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; @@ -1373,11 +1374,11 @@ void SkDiffuseLightingImageFilter::toString(SkString* str) const { #endif #if SK_SUPPORT_GPU -sk_sp<GrFragmentProcessor> SkDiffuseLightingImageFilter::makeFragmentProcessor( - sk_sp<GrTextureProxy> proxy, - const SkMatrix& matrix, - const SkIRect* srcBounds, - BoundaryMode boundaryMode) const { +std::unique_ptr<GrFragmentProcessor> SkDiffuseLightingImageFilter::makeFragmentProcessor( + sk_sp<GrTextureProxy> proxy, + const SkMatrix& matrix, + const SkIRect* srcBounds, + BoundaryMode boundaryMode) const { SkScalar scale = this->surfaceScale() * 255; return GrDiffuseLightingEffect::Make(std::move(proxy), this->refLight(), scale, matrix, this->kd(), boundaryMode, srcBounds); @@ -1529,11 +1530,11 @@ void SkSpecularLightingImageFilter::toString(SkString* str) const { #endif #if SK_SUPPORT_GPU -sk_sp<GrFragmentProcessor> SkSpecularLightingImageFilter::makeFragmentProcessor( - sk_sp<GrTextureProxy> proxy, - const SkMatrix& matrix, - const SkIRect* srcBounds, - BoundaryMode boundaryMode) const { +std::unique_ptr<GrFragmentProcessor> SkSpecularLightingImageFilter::makeFragmentProcessor( + sk_sp<GrTextureProxy> proxy, + const SkMatrix& matrix, + const SkIRect* srcBounds, + BoundaryMode boundaryMode) const { SkScalar scale = this->surfaceScale() * 255; return GrSpecularLightingEffect::Make(std::move(proxy), this->refLight(), scale, matrix, this->ks(), this->shininess(), boundaryMode, srcBounds); @@ -1794,7 +1795,7 @@ static SkImageFilterLight* create_random_light(SkRandom* random) { } } -sk_sp<GrFragmentProcessor> GrDiffuseLightingEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrDiffuseLightingEffect::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp<GrTextureProxy> proxy = d->textureProxy(texIdx); @@ -2020,7 +2021,7 @@ GrGLSLFragmentProcessor* GrSpecularLightingEffect::onCreateGLSLInstance() const GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSpecularLightingEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrSpecularLightingEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrSpecularLightingEffect::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp<GrTextureProxy> proxy = d->textureProxy(texIdx); diff --git a/src/effects/SkLumaColorFilter.cpp b/src/effects/SkLumaColorFilter.cpp index 2a065b3720..4422733b61 100644 --- a/src/effects/SkLumaColorFilter.cpp +++ b/src/effects/SkLumaColorFilter.cpp @@ -45,13 +45,13 @@ void SkLumaColorFilter::toString(SkString* str) const { #if SK_SUPPORT_GPU class LumaColorFilterEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make() { - return sk_sp<GrFragmentProcessor>(new LumaColorFilterEffect); + static std::unique_ptr<GrFragmentProcessor> Make() { + return std::unique_ptr<GrFragmentProcessor>(new LumaColorFilterEffect); } const char* name() const override { return "Luminance-to-Alpha"; } - sk_sp<GrFragmentProcessor> clone() const override { return Make(); } + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(); } private: class GLSLProcessor : public GrGLSLFragmentProcessor { @@ -103,7 +103,8 @@ private: typedef GrFragmentProcessor INHERITED; }; -sk_sp<GrFragmentProcessor> SkLumaColorFilter::asFragmentProcessor(GrContext*, SkColorSpace*) const { +std::unique_ptr<GrFragmentProcessor> SkLumaColorFilter::asFragmentProcessor(GrContext*, + SkColorSpace*) const { return LumaColorFilterEffect::Make(); } #endif diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp index 7b03307264..ba019699a0 100644 --- a/src/effects/SkMagnifierImageFilter.cpp +++ b/src/effects/SkMagnifierImageFilter.cpp @@ -49,27 +49,25 @@ sk_sp<SkImageFilter> SkMagnifierImageFilter::Make(const SkRect& srcRect, SkScala #if SK_SUPPORT_GPU class GrMagnifierEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> colorSpaceXform, - const SkIRect& bounds, - const SkRect& srcRect, - float xInvZoom, - float yInvZoom, - float xInvInset, - float yInvInset) { - return sk_sp<GrFragmentProcessor>(new GrMagnifierEffect(std::move(proxy), - std::move(colorSpaceXform), - bounds, srcRect, - xInvZoom, yInvZoom, - xInvInset, yInvInset)); + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> colorSpaceXform, + const SkIRect& bounds, + const SkRect& srcRect, + float xInvZoom, + float yInvZoom, + float xInvInset, + float yInvInset) { + return std::unique_ptr<GrFragmentProcessor>( + new GrMagnifierEffect(std::move(proxy), std::move(colorSpaceXform), bounds, srcRect, + xInvZoom, yInvZoom, xInvInset, yInvInset)); } ~GrMagnifierEffect() override {} const char* name() const override { return "Magnifier"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrMagnifierEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrMagnifierEffect(*this)); } SkString dumpInfo() const override { @@ -285,7 +283,7 @@ GrGLSLFragmentProcessor* GrMagnifierEffect::onCreateGLSLInstance() const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrMagnifierEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrMagnifierEffect::TestCreate(GrProcessorTestData* d) { sk_sp<GrTextureProxy> proxy = d->textureProxy(0); const int kMaxWidth = 200; const int kMaxHeight = 200; @@ -298,15 +296,14 @@ sk_sp<GrFragmentProcessor> GrMagnifierEffect::TestCreate(GrProcessorTestData* d) SkIRect bounds = SkIRect::MakeWH(SkIntToScalar(kMaxWidth), SkIntToScalar(kMaxHeight)); SkRect srcRect = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height)); - sk_sp<GrFragmentProcessor> effect(GrMagnifierEffect::Make( - std::move(proxy), - std::move(colorSpaceXform), - bounds, - srcRect, - srcRect.width() / bounds.width(), - srcRect.height() / bounds.height(), - bounds.width() / inset, - bounds.height() / inset)); + auto effect = GrMagnifierEffect::Make(std::move(proxy), + std::move(colorSpaceXform), + bounds, + srcRect, + srcRect.width() / bounds.width(), + srcRect.height() / bounds.height(), + bounds.width() / inset, + bounds.height() / inset); SkASSERT(effect); return effect; } @@ -388,15 +385,14 @@ sk_sp<SkSpecialImage> SkMagnifierImageFilter::onFilterImage(SkSpecialImage* sour SkColorSpace* dstColorSpace = ctx.outputProperties().colorSpace(); sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(input->getColorSpace(), dstColorSpace); - sk_sp<GrFragmentProcessor> fp(GrMagnifierEffect::Make( - std::move(inputProxy), - std::move(colorSpaceXform), - bounds, - fSrcRect, - invXZoom, - invYZoom, - bounds.width() * invInset, - bounds.height() * invInset)); + auto fp = GrMagnifierEffect::Make(std::move(inputProxy), + std::move(colorSpaceXform), + bounds, + fSrcRect, + invXZoom, + invYZoom, + bounds.width() * invInset, + bounds.height() * invInset); if (!fp) { return nullptr; } diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp index b94ece514d..ce84f3ea10 100644 --- a/src/effects/SkMatrixConvolutionImageFilter.cpp +++ b/src/effects/SkMatrixConvolutionImageFilter.cpp @@ -316,15 +316,15 @@ sk_sp<SkSpecialImage> SkMatrixConvolutionImageFilter::onFilterImage(SkSpecialIma offset->fY = bounds.top(); bounds.offset(-inputOffset); - sk_sp<GrFragmentProcessor> fp(GrMatrixConvolutionEffect::Make(std::move(inputProxy), - bounds, - fKernelSize, - fKernel, - fGain, - fBias, - fKernelOffset, - convert_tilemodes(fTileMode), - fConvolveAlpha)); + auto fp = GrMatrixConvolutionEffect::Make(std::move(inputProxy), + bounds, + fKernelSize, + fKernel, + fGain, + fBias, + fKernelOffset, + convert_tilemodes(fTileMode), + fConvolveAlpha); if (!fp) { return nullptr; } diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp index a29bca31e6..1585c9d352 100644 --- a/src/effects/SkMorphologyImageFilter.cpp +++ b/src/effects/SkMorphologyImageFilter.cpp @@ -142,16 +142,16 @@ public: enum class Direction { kX, kY }; enum class Type { kErode, kDilate }; - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, Direction dir, int radius, - Type type) { - return sk_sp<GrFragmentProcessor>( + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, Direction dir, + int radius, Type type) { + return std::unique_ptr<GrFragmentProcessor>( new GrMorphologyEffect(std::move(proxy), dir, radius, type, nullptr)); } - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, Direction dir, int radius, - Type type, const float bounds[2]) { - return sk_sp<GrFragmentProcessor>(new GrMorphologyEffect(std::move(proxy), - dir, radius, type, bounds)); + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, Direction dir, + int radius, Type type, const float bounds[2]) { + return std::unique_ptr<GrFragmentProcessor>( + new GrMorphologyEffect(std::move(proxy), dir, radius, type, bounds)); } Type type() const { return fType; } @@ -163,8 +163,8 @@ public: const char* name() const override { return "Morphology"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrMorphologyEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrMorphologyEffect(*this)); } private: @@ -382,7 +382,7 @@ bool GrMorphologyEffect::onIsEqual(const GrFragmentProcessor& sBase) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMorphologyEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrMorphologyEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrMorphologyEffect::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp<GrTextureProxy> proxy = d->textureProxy(texIdx); diff --git a/src/effects/SkOverdrawColorFilter.cpp b/src/effects/SkOverdrawColorFilter.cpp index 4eb9bfcaeb..8ca699e89f 100644 --- a/src/effects/SkOverdrawColorFilter.cpp +++ b/src/effects/SkOverdrawColorFilter.cpp @@ -73,12 +73,12 @@ SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END class OverdrawFragmentProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(const SkPMColor* colors); + static std::unique_ptr<GrFragmentProcessor> Make(const SkPMColor* colors); const char* name() const override { return "Overdraw"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new OverdrawFragmentProcessor(fColors)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new OverdrawFragmentProcessor(fColors)); } private: @@ -108,12 +108,12 @@ private: typedef GrGLSLFragmentProcessor INHERITED; }; -sk_sp<GrFragmentProcessor> SkOverdrawColorFilter::asFragmentProcessor(GrContext*, - SkColorSpace*) const { +std::unique_ptr<GrFragmentProcessor> SkOverdrawColorFilter::asFragmentProcessor( + GrContext*, SkColorSpace*) const { return OverdrawFragmentProcessor::Make(fColors); } -sk_sp<GrFragmentProcessor> OverdrawFragmentProcessor::Make(const SkPMColor* colors) { +std::unique_ptr<GrFragmentProcessor> OverdrawFragmentProcessor::Make(const SkPMColor* colors) { GrColor4f grColors[SkOverdrawColorFilter::kNumColors]; for (int i = 0; i < SkOverdrawColorFilter::kNumColors; i++) { grColors[i] = GrColor4f::FromGrColor(GrColorPackRGBA(SkGetPackedR32(colors[i]), @@ -122,7 +122,7 @@ sk_sp<GrFragmentProcessor> OverdrawFragmentProcessor::Make(const SkPMColor* colo SkGetPackedA32(colors[i]))); } - return sk_sp<GrFragmentProcessor>(new OverdrawFragmentProcessor(grColors)); + return std::unique_ptr<GrFragmentProcessor>(new OverdrawFragmentProcessor(grColors)); } // This could implement the constant input -> constant output optimization, but we don't really diff --git a/src/effects/SkOverdrawColorFilter.h b/src/effects/SkOverdrawColorFilter.h index 2840a09690..0948f7080d 100644 --- a/src/effects/SkOverdrawColorFilter.h +++ b/src/effects/SkOverdrawColorFilter.h @@ -28,7 +28,8 @@ public: } #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*, + SkColorSpace*) const override; #endif void toString(SkString* str) const override; diff --git a/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp b/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp index 8b1856a14a..2f045f1c9d 100644 --- a/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp +++ b/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp @@ -204,15 +204,16 @@ public: kSimpleCircular_Mode, }; - static sk_sp<GrFragmentProcessor> Make(const SkRRect& first, const SkRRect& second, - SkScalar radius) { - return sk_sp<GrFragmentProcessor>(new RRectsGaussianEdgeFP(first, second, radius)); + static std::unique_ptr<GrFragmentProcessor> Make(const SkRRect& first, const SkRRect& second, + SkScalar radius) { + return std::unique_ptr<GrFragmentProcessor>( + new RRectsGaussianEdgeFP(first, second, radius)); } const char* name() const override { return "RRectsGaussianEdgeFP"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new RRectsGaussianEdgeFP(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new RRectsGaussianEdgeFP(*this)); } const SkRRect& first() const { return fFirst; } diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp index 0fb91094f9..2101bd65c9 100644 --- a/src/effects/SkTableColorFilter.cpp +++ b/src/effects/SkTableColorFilter.cpp @@ -86,7 +86,8 @@ public: sk_sp<SkColorFilter> makeComposed(sk_sp<SkColorFilter> inner) const override; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*, + SkColorSpace*) const override; #endif SK_TO_STRING_OVERRIDE() @@ -330,7 +331,7 @@ sk_sp<SkColorFilter> SkTable_ColorFilter::makeComposed(sk_sp<SkColorFilter> inne class ColorTableEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(GrContext* context, const SkBitmap& bitmap); + static std::unique_ptr<GrFragmentProcessor> Make(GrContext* context, const SkBitmap& bitmap); ~ColorTableEffect() override; @@ -339,7 +340,7 @@ public: const GrTextureStripAtlas* atlas() const { return fAtlas; } int atlasRow() const { return fRow; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; @@ -443,7 +444,8 @@ void GLColorTableEffect::emitCode(EmitArgs& args) { } /////////////////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, const SkBitmap& bitmap) { +std::unique_ptr<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, + const SkBitmap& bitmap) { GrTextureStripAtlas::Desc desc; desc.fWidth = bitmap.width(); desc.fHeight = 128; @@ -467,7 +469,7 @@ sk_sp<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, const SkBi return nullptr; } - return sk_sp<GrFragmentProcessor>(new ColorTableEffect(std::move(proxy), atlas, row)); + return std::unique_ptr<GrFragmentProcessor>(new ColorTableEffect(std::move(proxy), atlas, row)); } ColorTableEffect::ColorTableEffect(sk_sp<GrTextureProxy> proxy, GrTextureStripAtlas* atlas, int row) @@ -485,9 +487,9 @@ ColorTableEffect::~ColorTableEffect() { } } -sk_sp<GrFragmentProcessor> ColorTableEffect::clone() const { +std::unique_ptr<GrFragmentProcessor> ColorTableEffect::clone() const { fAtlas->lockRow(fRow); - return sk_sp<GrFragmentProcessor>( + return std::unique_ptr<GrFragmentProcessor>( new ColorTableEffect(sk_ref_sp(fTextureSampler.proxy()), fAtlas, fRow)); } @@ -515,7 +517,7 @@ bool ColorTableEffect::onIsEqual(const GrFragmentProcessor& other) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ColorTableEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> ColorTableEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> ColorTableEffect::TestCreate(GrProcessorTestData* d) { int flags = 0; uint8_t luts[256][4]; do { @@ -537,14 +539,14 @@ sk_sp<GrFragmentProcessor> ColorTableEffect::TestCreate(GrProcessorTestData* d) (flags & (1 << 3)) ? luts[3] : nullptr )); sk_sp<SkColorSpace> colorSpace = GrTest::TestColorSpace(d->fRandom); - sk_sp<GrFragmentProcessor> fp = filter->asFragmentProcessor(d->context(), colorSpace.get()); + auto fp = filter->asFragmentProcessor(d->context(), colorSpace.get()); SkASSERT(fp); return fp; } #endif -sk_sp<GrFragmentProcessor> SkTable_ColorFilter::asFragmentProcessor(GrContext* context, - SkColorSpace*) const { +std::unique_ptr<GrFragmentProcessor> SkTable_ColorFilter::asFragmentProcessor(GrContext* context, + SkColorSpace*) const { SkBitmap bitmap; this->asComponentTable(&bitmap); diff --git a/src/effects/SkToSRGBColorFilter.cpp b/src/effects/SkToSRGBColorFilter.cpp index f2ffc088f7..150877f645 100644 --- a/src/effects/SkToSRGBColorFilter.cpp +++ b/src/effects/SkToSRGBColorFilter.cpp @@ -86,8 +86,8 @@ void SkToSRGBColorFilter::toString(SkString* str) const { #endif #if SK_SUPPORT_GPU -sk_sp<GrFragmentProcessor> SkToSRGBColorFilter::asFragmentProcessor(GrContext*, - SkColorSpace*) const { +std::unique_ptr<GrFragmentProcessor> SkToSRGBColorFilter::asFragmentProcessor(GrContext*, + SkColorSpace*) const { return GrNonlinearColorSpaceXformEffect::Make(fSrcColorSpace.get(), SkColorSpace::MakeSRGB().get()); } diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp index f0c70a2a5c..e1033cfe9f 100644 --- a/src/effects/SkXfermodeImageFilter.cpp +++ b/src/effects/SkXfermodeImageFilter.cpp @@ -54,7 +54,8 @@ protected: void drawForeground(SkCanvas* canvas, SkSpecialImage*, const SkIRect&) const; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> makeFGFrag(sk_sp<GrFragmentProcessor> bgFP) const; + std::unique_ptr<GrFragmentProcessor> makeFGFrag( + std::unique_ptr<GrFragmentProcessor> bgFP) const; #endif private: @@ -243,7 +244,7 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter_Base::filterImageGPU( } GrPaint paint; - sk_sp<GrFragmentProcessor> bgFP; + std::unique_ptr<GrFragmentProcessor> bgFP; if (backgroundProxy) { SkMatrix bgMatrix = SkMatrix::MakeTrans(-SkIntToScalar(backgroundOffset.fX), @@ -266,15 +267,13 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter_Base::filterImageGPU( -SkIntToScalar(foregroundOffset.fY)); sk_sp<GrColorSpaceXform> fgXform = GrColorSpaceXform::Make(foreground->getColorSpace(), outputProperties.colorSpace()); - sk_sp<GrFragmentProcessor> foregroundFP(GrTextureDomainEffect::Make( - std::move(foregroundProxy), - std::move(fgXform), fgMatrix, - GrTextureDomain::MakeTexelDomain(foreground->subset()), - GrTextureDomain::kDecal_Mode, - GrSamplerParams::kNone_FilterMode)); + auto foregroundFP = GrTextureDomainEffect::Make( + std::move(foregroundProxy), std::move(fgXform), fgMatrix, + GrTextureDomain::MakeTexelDomain(foreground->subset()), + GrTextureDomain::kDecal_Mode, GrSamplerParams::kNone_FilterMode); paint.addColorFragmentProcessor(std::move(foregroundFP)); - sk_sp<GrFragmentProcessor> xferFP = this->makeFGFrag(std::move(bgFP)); + std::unique_ptr<GrFragmentProcessor> xferFP = this->makeFGFrag(std::move(bgFP)); // A null 'xferFP' here means kSrc_Mode was used in which case we can just proceed if (xferFP) { @@ -307,8 +306,8 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter_Base::filterImageGPU( renderTargetContext->refColorSpace()); } -sk_sp<GrFragmentProcessor> -SkXfermodeImageFilter_Base::makeFGFrag(sk_sp<GrFragmentProcessor> bgFP) const { +std::unique_ptr<GrFragmentProcessor> SkXfermodeImageFilter_Base::makeFGFrag( + std::unique_ptr<GrFragmentProcessor> bgFP) const { return GrXfermodeFragmentProcessor::MakeFromDstProcessor(std::move(bgFP), fMode); } diff --git a/src/gpu/GrAppliedClip.h b/src/gpu/GrAppliedClip.h index 7ef3346ed3..bcf6eb9ce8 100644 --- a/src/gpu/GrAppliedClip.h +++ b/src/gpu/GrAppliedClip.h @@ -27,7 +27,7 @@ public: const GrScissorState& scissorState() const { return fScissorState; } const GrWindowRectsState& windowRectsState() const { return fWindowRectsState; } GrFragmentProcessor* clipCoverageFragmentProcessor() const { return fClipCoverageFP.get(); } - sk_sp<GrFragmentProcessor> detachClipCoverageFragmentProcessor() { + std::unique_ptr<GrFragmentProcessor> detachClipCoverageFragmentProcessor() { return std::move(fClipCoverageFP); } bool hasStencilClip() const { return SkClipStack::kInvalidGenID != fClipStackID; } @@ -51,9 +51,9 @@ public: fWindowRectsState.set(windows, mode); } - void addCoverageFP(sk_sp<GrFragmentProcessor> fp) { + void addCoverageFP(std::unique_ptr<GrFragmentProcessor> fp) { SkASSERT(!fClipCoverageFP); - fClipCoverageFP = fp; + fClipCoverageFP = std::move(fp); } void addStencilClip(uint32_t clipStackID) { @@ -85,7 +85,7 @@ public: private: GrScissorState fScissorState; GrWindowRectsState fWindowRectsState; - sk_sp<GrFragmentProcessor> fClipCoverageFP; + std::unique_ptr<GrFragmentProcessor> fClipCoverageFP; uint32_t fClipStackID = SkClipStack::kInvalidGenID; }; diff --git a/src/gpu/GrClipStackClip.cpp b/src/gpu/GrClipStackClip.cpp index 49d56351b6..0b07fd5c70 100644 --- a/src/gpu/GrClipStackClip.cpp +++ b/src/gpu/GrClipStackClip.cpp @@ -73,8 +73,8 @@ void GrClipStackClip::getConservativeBounds(int width, int height, SkIRect* devR //////////////////////////////////////////////////////////////////////////////// // set up the draw state to enable the aa clipping mask. -static sk_sp<GrFragmentProcessor> create_fp_for_mask(sk_sp<GrTextureProxy> mask, - const SkIRect &devBound) { +static std::unique_ptr<GrFragmentProcessor> create_fp_for_mask(sk_sp<GrTextureProxy> mask, + const SkIRect& devBound) { SkIRect domainTexels = SkIRect::MakeWH(devBound.width(), devBound.height()); return GrDeviceSpaceTextureDecalFragmentProcessor::Make(std::move(mask), domainTexels, {devBound.fLeft, devBound.fTop}); @@ -174,9 +174,9 @@ bool GrClipStackClip::UseSWOnlyPath(GrContext* context, static bool get_analytic_clip_processor(const ElementList& elements, bool abortIfAA, const SkRect& drawDevBounds, - sk_sp<GrFragmentProcessor>* resultFP) { + std::unique_ptr<GrFragmentProcessor>* resultFP) { SkASSERT(elements.count() <= kMaxAnalyticElements); - SkSTArray<kMaxAnalyticElements, sk_sp<GrFragmentProcessor>> fps; + SkSTArray<kMaxAnalyticElements, std::unique_ptr<GrFragmentProcessor>> fps; ElementList::Iter iter(elements); while (iter.get()) { SkClipOp op = iter.get()->getOp(); @@ -302,7 +302,7 @@ bool GrClipStackClip::apply(GrContext* context, GrRenderTargetContext* renderTar // is multisampled. disallowAnalyticAA = useHWAA || hasUserStencilSettings; } - sk_sp<GrFragmentProcessor> clipFP; + std::unique_ptr<GrFragmentProcessor> clipFP; if ((reducedClip.requiresAA() || avoidStencilBuffers) && get_analytic_clip_processor(reducedClip.elements(), disallowAnalyticAA, devBounds, &clipFP)) { diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp index efa8e8c610..d5c82c64da 100644 --- a/src/gpu/GrContext.cpp +++ b/src/gpu/GrContext.cpp @@ -479,8 +479,7 @@ bool GrContextPriv::writeSurfacePixels(GrSurfaceContext* dst, } if (tempProxy) { - sk_sp<GrFragmentProcessor> fp = GrSimpleTextureEffect::Make( - tempProxy, nullptr, SkMatrix::I()); + auto fp = GrSimpleTextureEffect::Make(tempProxy, nullptr, SkMatrix::I()); if (premulOnGpu) { fp = fContext->createUPMToPMEffect(std::move(fp), useConfigConversionEffect); } @@ -607,8 +606,7 @@ bool GrContextPriv::readSurfacePixels(GrSurfaceContext* src, if (tempRTC) { SkMatrix textureMatrix = SkMatrix::MakeTrans(SkIntToScalar(left), SkIntToScalar(top)); sk_sp<GrTextureProxy> proxy = src->asTextureProxyRef(); - sk_sp<GrFragmentProcessor> fp = GrSimpleTextureEffect::Make( - std::move(proxy), nullptr, textureMatrix); + auto fp = GrSimpleTextureEffect::Make(std::move(proxy), nullptr, textureMatrix); if (unpremulOnGpu) { fp = fContext->createPMToUPMEffect(std::move(fp), useConfigConversionEffect); // We no longer need to do this on CPU after the read back. @@ -922,8 +920,8 @@ bool GrContext::abandoned() const { return fDrawingManager->wasAbandoned(); } -sk_sp<GrFragmentProcessor> GrContext::createPMToUPMEffect(sk_sp<GrFragmentProcessor> fp, - bool useConfigConversionEffect) { +std::unique_ptr<GrFragmentProcessor> GrContext::createPMToUPMEffect( + std::unique_ptr<GrFragmentProcessor> fp, bool useConfigConversionEffect) { ASSERT_SINGLE_OWNER // We have specialized effects that guarantee round-trip conversion for some formats if (useConfigConversionEffect) { @@ -941,8 +939,8 @@ sk_sp<GrFragmentProcessor> GrContext::createPMToUPMEffect(sk_sp<GrFragmentProces } } -sk_sp<GrFragmentProcessor> GrContext::createUPMToPMEffect(sk_sp<GrFragmentProcessor> fp, - bool useConfigConversionEffect) { +std::unique_ptr<GrFragmentProcessor> GrContext::createUPMToPMEffect( + std::unique_ptr<GrFragmentProcessor> fp, bool useConfigConversionEffect) { ASSERT_SINGLE_OWNER // We have specialized effects that guarantee round-trip conversion for these formats if (useConfigConversionEffect) { diff --git a/src/gpu/GrFragmentProcessor.cpp b/src/gpu/GrFragmentProcessor.cpp index 44b14add2d..060cde5302 100644 --- a/src/gpu/GrFragmentProcessor.cpp +++ b/src/gpu/GrFragmentProcessor.cpp @@ -16,14 +16,6 @@ #include "glsl/GrGLSLProgramDataManager.h" #include "glsl/GrGLSLUniformHandler.h" -GrFragmentProcessor::~GrFragmentProcessor() { - // If we got here then our ref count must have reached zero, so we will have converted refs - // to pending executions for all children. - for (int i = 0; i < fChildProcessors.count(); ++i) { - fChildProcessors[i]->completedExecution(); - } -} - bool GrFragmentProcessor::isEqual(const GrFragmentProcessor& that) const { if (this->classID() != that.classID() || !this->hasSameSamplersAndAccesses(that)) { @@ -75,7 +67,15 @@ bool GrFragmentProcessor::instantiate(GrResourceProvider* resourceProvider) cons return true; } -int GrFragmentProcessor::registerChildProcessor(sk_sp<GrFragmentProcessor> child) { +void GrFragmentProcessor::markPendingExecution() const { + INHERITED::addPendingIOs(); + INHERITED::removeRefs(); + for (int i = 0; i < this->numChildProcessors(); ++i) { + this->childProcessor(i).markPendingExecution(); + } +} + +int GrFragmentProcessor::registerChildProcessor(std::unique_ptr<GrFragmentProcessor> child) { this->combineRequiredFeatures(*child); if (child->usesLocalCoords()) { @@ -83,19 +83,11 @@ int GrFragmentProcessor::registerChildProcessor(sk_sp<GrFragmentProcessor> child } int index = fChildProcessors.count(); - fChildProcessors.push_back(child.release()); + fChildProcessors.push_back(std::move(child)); return index; } -void GrFragmentProcessor::notifyRefCntIsZero() const { - // See comment above GrProgramElement for a detailed explanation of why we do this. - for (int i = 0; i < fChildProcessors.count(); ++i) { - fChildProcessors[i]->addPendingExecution(); - fChildProcessors[i]->unref(); - } -} - bool GrFragmentProcessor::hasSameTransforms(const GrFragmentProcessor& that) const { if (this->numCoordTransforms() != that.numCoordTransforms()) { return false; @@ -109,8 +101,8 @@ bool GrFragmentProcessor::hasSameTransforms(const GrFragmentProcessor& that) con return true; } -sk_sp<GrFragmentProcessor> GrFragmentProcessor::MulOutputByInputAlpha( - sk_sp<GrFragmentProcessor> fp) { +std::unique_ptr<GrFragmentProcessor> GrFragmentProcessor::MulOutputByInputAlpha( + std::unique_ptr<GrFragmentProcessor> fp) { if (!fp) { return nullptr; } @@ -121,13 +113,13 @@ namespace { class PremulInputFragmentProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make() { - return sk_sp<GrFragmentProcessor>(new PremulInputFragmentProcessor); + static std::unique_ptr<GrFragmentProcessor> Make() { + return std::unique_ptr<GrFragmentProcessor>(new PremulInputFragmentProcessor); } const char* name() const override { return "PremultiplyInput"; } - sk_sp<GrFragmentProcessor> clone() const override { return Make(); } + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(); } private: PremulInputFragmentProcessor() @@ -163,13 +155,13 @@ private: class UnpremulInputFragmentProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make() { - return sk_sp<GrFragmentProcessor>(new UnpremulInputFragmentProcessor); + static std::unique_ptr<GrFragmentProcessor> Make() { + return std::unique_ptr<GrFragmentProcessor>(new UnpremulInputFragmentProcessor); } const char* name() const override { return "UnpremultiplyInput"; } - sk_sp<GrFragmentProcessor> clone() const override { return Make(); } + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(); } private: UnpremulInputFragmentProcessor() @@ -206,42 +198,48 @@ private: } -sk_sp<GrFragmentProcessor> GrFragmentProcessor::PremulInput(sk_sp<GrFragmentProcessor> fp) { +std::unique_ptr<GrFragmentProcessor> GrFragmentProcessor::PremulInput( + std::unique_ptr<GrFragmentProcessor> fp) { if (!fp) { return nullptr; } - sk_sp<GrFragmentProcessor> fpPipeline[] = { PremulInputFragmentProcessor::Make(), fp}; + std::unique_ptr<GrFragmentProcessor> fpPipeline[] = { PremulInputFragmentProcessor::Make(), + std::move(fp) }; return GrFragmentProcessor::RunInSeries(fpPipeline, 2); } -sk_sp<GrFragmentProcessor> GrFragmentProcessor::PremulOutput(sk_sp<GrFragmentProcessor> fp) { +std::unique_ptr<GrFragmentProcessor> GrFragmentProcessor::PremulOutput( + std::unique_ptr<GrFragmentProcessor> fp) { if (!fp) { return nullptr; } - sk_sp<GrFragmentProcessor> fpPipeline[] = { fp, PremulInputFragmentProcessor::Make() }; + std::unique_ptr<GrFragmentProcessor> fpPipeline[] = { std::move(fp), + PremulInputFragmentProcessor::Make() }; return GrFragmentProcessor::RunInSeries(fpPipeline, 2); } -sk_sp<GrFragmentProcessor> GrFragmentProcessor::UnpremulOutput(sk_sp<GrFragmentProcessor> fp) { +std::unique_ptr<GrFragmentProcessor> GrFragmentProcessor::UnpremulOutput( + std::unique_ptr<GrFragmentProcessor> fp) { if (!fp) { return nullptr; } - sk_sp<GrFragmentProcessor> fpPipeline[] = { fp, UnpremulInputFragmentProcessor::Make() }; + std::unique_ptr<GrFragmentProcessor> fpPipeline[] = { std::move(fp), + UnpremulInputFragmentProcessor::Make() }; return GrFragmentProcessor::RunInSeries(fpPipeline, 2); } -sk_sp<GrFragmentProcessor> GrFragmentProcessor::SwizzleOutput(sk_sp<GrFragmentProcessor> fp, - const GrSwizzle& swizzle) { +std::unique_ptr<GrFragmentProcessor> GrFragmentProcessor::SwizzleOutput( + std::unique_ptr<GrFragmentProcessor> fp, const GrSwizzle& swizzle) { class SwizzleFragmentProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(const GrSwizzle& swizzle) { - return sk_sp<GrFragmentProcessor>(new SwizzleFragmentProcessor(swizzle)); + static std::unique_ptr<GrFragmentProcessor> Make(const GrSwizzle& swizzle) { + return std::unique_ptr<GrFragmentProcessor>(new SwizzleFragmentProcessor(swizzle)); } const char* name() const override { return "Swizzle"; } const GrSwizzle& swizzle() const { return fSwizzle; } - sk_sp<GrFragmentProcessor> clone() const override { return Make(fSwizzle); } + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(fSwizzle); } private: SwizzleFragmentProcessor(const GrSwizzle& swizzle) @@ -289,30 +287,32 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::SwizzleOutput(sk_sp<GrFragmentPr if (GrSwizzle::RGBA() == swizzle) { return fp; } - sk_sp<GrFragmentProcessor> fpPipeline[] = { fp, SwizzleFragmentProcessor::Make(swizzle) }; + std::unique_ptr<GrFragmentProcessor> fpPipeline[] = { std::move(fp), + SwizzleFragmentProcessor::Make(swizzle) }; return GrFragmentProcessor::RunInSeries(fpPipeline, 2); } -sk_sp<GrFragmentProcessor> GrFragmentProcessor::MakeInputPremulAndMulByOutput( - sk_sp<GrFragmentProcessor> fp) { - +std::unique_ptr<GrFragmentProcessor> GrFragmentProcessor::MakeInputPremulAndMulByOutput( + std::unique_ptr<GrFragmentProcessor> fp) { class PremulFragmentProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrFragmentProcessor> processor) { - return sk_sp<GrFragmentProcessor>(new PremulFragmentProcessor(std::move(processor))); + static std::unique_ptr<GrFragmentProcessor> Make( + std::unique_ptr<GrFragmentProcessor> processor) { + return std::unique_ptr<GrFragmentProcessor>( + new PremulFragmentProcessor(std::move(processor))); } const char* name() const override { return "Premultiply"; } - sk_sp<GrFragmentProcessor> clone() const override { + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(this->childProcessor(0).clone()); } private: - PremulFragmentProcessor(sk_sp<GrFragmentProcessor> processor) + PremulFragmentProcessor(std::unique_ptr<GrFragmentProcessor> processor) : INHERITED(OptFlags(processor.get())) { this->initClassID<PremulFragmentProcessor>(); - this->registerChildProcessor(processor); + this->registerChildProcessor(std::move(processor)); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { @@ -363,18 +363,19 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::MakeInputPremulAndMulByOutput( ////////////////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> GrFragmentProcessor::OverrideInput(sk_sp<GrFragmentProcessor> fp, - GrColor4f color) { +std::unique_ptr<GrFragmentProcessor> GrFragmentProcessor::OverrideInput( + std::unique_ptr<GrFragmentProcessor> fp, GrColor4f color) { class ReplaceInputFragmentProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrFragmentProcessor> child, GrColor4f color) { - return sk_sp<GrFragmentProcessor>(new ReplaceInputFragmentProcessor(std::move(child), - color)); + static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> child, + GrColor4f color) { + return std::unique_ptr<GrFragmentProcessor>( + new ReplaceInputFragmentProcessor(std::move(child), color)); } const char* name() const override { return "Replace Color"; } - sk_sp<GrFragmentProcessor> clone() const override { + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(this->childProcessor(0).clone(), fColor); } @@ -411,7 +412,7 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::OverrideInput(sk_sp<GrFragmentPr return new GLFP; } - ReplaceInputFragmentProcessor(sk_sp<GrFragmentProcessor> child, GrColor4f color) + ReplaceInputFragmentProcessor(std::unique_ptr<GrFragmentProcessor> child, GrColor4f color) : INHERITED(OptFlags(child.get(), color)), fColor(color) { this->initClassID<ReplaceInputFragmentProcessor>(); this->registerChildProcessor(std::move(child)); @@ -451,18 +452,19 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::OverrideInput(sk_sp<GrFragmentPr return ReplaceInputFragmentProcessor::Make(std::move(fp), color); } -sk_sp<GrFragmentProcessor> GrFragmentProcessor::RunInSeries(sk_sp<GrFragmentProcessor>* series, - int cnt) { +std::unique_ptr<GrFragmentProcessor> GrFragmentProcessor::RunInSeries( + std::unique_ptr<GrFragmentProcessor>* series, int cnt) { class SeriesFragmentProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrFragmentProcessor>* children, int cnt) { - return sk_sp<GrFragmentProcessor>(new SeriesFragmentProcessor(children, cnt)); + static std::unique_ptr<GrFragmentProcessor> Make( + std::unique_ptr<GrFragmentProcessor>* children, int cnt) { + return std::unique_ptr<GrFragmentProcessor>(new SeriesFragmentProcessor(children, cnt)); } const char* name() const override { return "Series"; } - sk_sp<GrFragmentProcessor> clone() const override { - SkSTArray<4, sk_sp<GrFragmentProcessor>> children(this->numChildProcessors()); + std::unique_ptr<GrFragmentProcessor> clone() const override { + SkSTArray<4, std::unique_ptr<GrFragmentProcessor>> children(this->numChildProcessors()); for (int i = 0; i < this->numChildProcessors(); ++i) { if (!children.push_back(this->childProcessor(i).clone())) { return nullptr; @@ -492,7 +494,7 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::RunInSeries(sk_sp<GrFragmentProc return new GLFP; } - SeriesFragmentProcessor(sk_sp<GrFragmentProcessor>* children, int cnt) + SeriesFragmentProcessor(std::unique_ptr<GrFragmentProcessor>* children, int cnt) : INHERITED(OptFlags(children, cnt)) { SkASSERT(cnt > 1); this->initClassID<SeriesFragmentProcessor>(); @@ -501,7 +503,7 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::RunInSeries(sk_sp<GrFragmentProc } } - static OptimizationFlags OptFlags(sk_sp<GrFragmentProcessor>* children, int cnt) { + static OptimizationFlags OptFlags(std::unique_ptr<GrFragmentProcessor>* children, int cnt) { OptimizationFlags flags = kAll_OptimizationFlags; for (int i = 0; i < cnt && flags != kNone_OptimizationFlags; ++i) { flags &= children[i]->optimizationFlags(); @@ -527,18 +529,18 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::RunInSeries(sk_sp<GrFragmentProc return nullptr; } if (1 == cnt) { - return series[0]; + return std::move(series[0]); } // Run the through the series, do the invariant output processing, and look for eliminations. GrProcessorAnalysisColor inputColor; inputColor.setToUnknown(); - GrColorFragmentProcessorAnalysis info(inputColor, sk_sp_address_as_pointer_address(series), + GrColorFragmentProcessorAnalysis info(inputColor, unique_ptr_address_as_pointer_address(series), cnt); - SkTArray<sk_sp<GrFragmentProcessor>> replacementSeries; + SkTArray<std::unique_ptr<GrFragmentProcessor>> replacementSeries; GrColor4f knownColor; int leadingFPsToEliminate = info.initialProcessorsToEliminate(&knownColor); if (leadingFPsToEliminate) { - sk_sp<GrFragmentProcessor> colorFP( + std::unique_ptr<GrFragmentProcessor> colorFP( GrConstColorProcessor::Make(knownColor, GrConstColorProcessor::kIgnore_InputMode)); if (leadingFPsToEliminate == cnt) { return colorFP; diff --git a/src/gpu/GrFragmentProcessor.h b/src/gpu/GrFragmentProcessor.h index 0784031d30..29a302b100 100644 --- a/src/gpu/GrFragmentProcessor.h +++ b/src/gpu/GrFragmentProcessor.h @@ -23,7 +23,7 @@ class GrSwizzle; GrCoordTransforms to receive a transformation of the local coordinates that map from local space to the fragment being processed. */ -class GrFragmentProcessor : public GrResourceIOProcessor, public GrProgramElement { +class GrFragmentProcessor : public GrResourceIOProcessor { public: /** * In many instances (e.g. SkShader::asFragmentProcessor() implementations) it is desirable to @@ -33,7 +33,8 @@ public: * does so by returning a parent FP that multiplies the passed in FPs output by the parent's * input alpha. The passed in FP will not receive an input color. */ - static sk_sp<GrFragmentProcessor> MulOutputByInputAlpha(sk_sp<GrFragmentProcessor>); + static std::unique_ptr<GrFragmentProcessor> MulOutputByInputAlpha( + std::unique_ptr<GrFragmentProcessor>); /** * This assumes that the input color to the returned processor will be unpremul and that the @@ -41,38 +42,42 @@ public: * The result of the returned processor is a premul of its input color modulated by the child * processor's premul output. */ - static sk_sp<GrFragmentProcessor> MakeInputPremulAndMulByOutput(sk_sp<GrFragmentProcessor>); + static std::unique_ptr<GrFragmentProcessor> MakeInputPremulAndMulByOutput( + std::unique_ptr<GrFragmentProcessor>); /** * Returns a parent fragment processor that adopts the passed fragment processor as a child. * The parent will ignore its input color and instead feed the passed in color as input to the * child. */ - static sk_sp<GrFragmentProcessor> OverrideInput(sk_sp<GrFragmentProcessor>, GrColor4f); + static std::unique_ptr<GrFragmentProcessor> OverrideInput(std::unique_ptr<GrFragmentProcessor>, + GrColor4f); /** * Returns a fragment processor that premuls the input before calling the passed in fragment * processor. */ - static sk_sp<GrFragmentProcessor> PremulInput(sk_sp<GrFragmentProcessor>); + static std::unique_ptr<GrFragmentProcessor> PremulInput(std::unique_ptr<GrFragmentProcessor>); /** * Returns a fragment processor that calls the passed in fragment processor, and then premuls * the output. */ - static sk_sp<GrFragmentProcessor> PremulOutput(sk_sp<GrFragmentProcessor>); + static std::unique_ptr<GrFragmentProcessor> PremulOutput(std::unique_ptr<GrFragmentProcessor>); /** * Returns a fragment processor that calls the passed in fragment processor, and then unpremuls * the output. */ - static sk_sp<GrFragmentProcessor> UnpremulOutput(sk_sp<GrFragmentProcessor>); + static std::unique_ptr<GrFragmentProcessor> UnpremulOutput( + std::unique_ptr<GrFragmentProcessor>); /** * Returns a fragment processor that calls the passed in fragment processor, and then swizzles * the output. */ - static sk_sp<GrFragmentProcessor> SwizzleOutput(sk_sp<GrFragmentProcessor>, const GrSwizzle&); + static std::unique_ptr<GrFragmentProcessor> SwizzleOutput(std::unique_ptr<GrFragmentProcessor>, + const GrSwizzle&); /** * Returns a fragment processor that runs the passed in array of fragment processors in a @@ -82,15 +87,14 @@ public: * * The array elements with be moved. */ - static sk_sp<GrFragmentProcessor> RunInSeries(sk_sp<GrFragmentProcessor>*, int cnt); - - ~GrFragmentProcessor() override; + static std::unique_ptr<GrFragmentProcessor> RunInSeries(std::unique_ptr<GrFragmentProcessor>*, + int cnt); /** * Makes a copy of this fragment processor that draws equivalently to the original. * If the processor has child processors they are cloned as well. */ - virtual sk_sp<GrFragmentProcessor> clone() const = 0; + virtual std::unique_ptr<GrFragmentProcessor> clone() const = 0; GrGLSLFragmentProcessor* createGLSLInstance() const; @@ -117,6 +121,8 @@ public: bool instantiate(GrResourceProvider*) const; + void markPendingExecution() const; + /** Do any of the coordtransforms for this processor require local coords? */ bool usesLocalCoords() const { return SkToBool(fFlags & kUsesLocalCoords_Flag); } @@ -309,15 +315,9 @@ protected: * processors will allow the ProgramBuilder to automatically handle their transformed coords and * texture accesses and mangle their uniform and output color names. */ - int registerChildProcessor(sk_sp<GrFragmentProcessor> child); + int registerChildProcessor(std::unique_ptr<GrFragmentProcessor> child); private: - void addPendingIOs() const override { GrResourceIOProcessor::addPendingIOs(); } - void removeRefs() const override { GrResourceIOProcessor::removeRefs(); } - void pendingIOComplete() const override { GrResourceIOProcessor::pendingIOComplete(); } - - void notifyRefCntIsZero() const final; - virtual GrColor4f constantOutputForConstantInput(GrColor4f /* inputColor */) const { SkFAIL("Subclass must override this if advertising this optimization."); return GrColor4f::TransparentBlack(); @@ -350,11 +350,7 @@ private: SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms; - /** - * This is not SkSTArray<1, sk_sp<GrFragmentProcessor>> because this class holds strong - * references until notifyRefCntIsZero and then it holds pending executions. - */ - SkSTArray<1, GrFragmentProcessor*, true> fChildProcessors; + SkSTArray<1, std::unique_ptr<GrFragmentProcessor>, true> fChildProcessors; typedef GrResourceIOProcessor INHERITED; }; diff --git a/src/gpu/GrPaint.h b/src/gpu/GrPaint.h index 1ab01f3ce4..ae19cad176 100644 --- a/src/gpu/GrPaint.h +++ b/src/gpu/GrPaint.h @@ -91,7 +91,7 @@ public: /** * Appends an additional color processor to the color computation. */ - void addColorFragmentProcessor(sk_sp<GrFragmentProcessor> fp) { + void addColorFragmentProcessor(std::unique_ptr<GrFragmentProcessor> fp) { SkASSERT(fp); fColorFragmentProcessors.push_back(std::move(fp)); fTrivial = false; @@ -100,7 +100,7 @@ public: /** * Appends an additional coverage processor to the coverage computation. */ - void addCoverageFragmentProcessor(sk_sp<GrFragmentProcessor> fp) { + void addCoverageFragmentProcessor(std::unique_ptr<GrFragmentProcessor> fp) { SkASSERT(fp); fCoverageFragmentProcessors.push_back(std::move(fp)); fTrivial = false; @@ -157,8 +157,8 @@ private: friend class GrProcessorSet; const GrXPFactory* fXPFactory = nullptr; - SkSTArray<4, sk_sp<GrFragmentProcessor>> fColorFragmentProcessors; - SkSTArray<2, sk_sp<GrFragmentProcessor>> fCoverageFragmentProcessors; + SkSTArray<4, std::unique_ptr<GrFragmentProcessor>> fColorFragmentProcessors; + SkSTArray<2, std::unique_ptr<GrFragmentProcessor>> fCoverageFragmentProcessors; bool fDisableOutputConversionToSRGB = false; bool fAllowSRGBInputs = false; bool fTrivial = true; diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp index a6e8fbad20..d07dd08624 100644 --- a/src/gpu/GrPipeline.cpp +++ b/src/gpu/GrPipeline.cpp @@ -58,22 +58,20 @@ GrPipeline::GrPipeline(const InitArgs& args, GrProcessorSet&& processors, fFragmentProcessors.reset(numTotalProcessors); int currFPIdx = 0; for (int i = 0; i < processors.numColorFragmentProcessors(); ++i, ++currFPIdx) { - const GrFragmentProcessor* fp = processors.colorFragmentProcessor(i); - fFragmentProcessors[currFPIdx].reset(fp); - if (!fp->instantiate(args.fResourceProvider)) { + fFragmentProcessors[currFPIdx] = processors.detachColorFragmentProcessor(i); + if (!fFragmentProcessors[currFPIdx]->instantiate(args.fResourceProvider)) { this->markAsBad(); } } for (int i = 0; i < processors.numCoverageFragmentProcessors(); ++i, ++currFPIdx) { - const GrFragmentProcessor* fp = processors.coverageFragmentProcessor(i); - fFragmentProcessors[currFPIdx].reset(fp); - if (!fp->instantiate(args.fResourceProvider)) { + fFragmentProcessors[currFPIdx] = processors.detachCoverageFragmentProcessor(i); + if (!fFragmentProcessors[currFPIdx]->instantiate(args.fResourceProvider)) { this->markAsBad(); } } if (clipFP) { - fFragmentProcessors[currFPIdx].reset(clipFP.get()); + fFragmentProcessors[currFPIdx] = std::move(clipFP); if (!fFragmentProcessors[currFPIdx]->instantiate(args.fResourceProvider)) { this->markAsBad(); } diff --git a/src/gpu/GrPipeline.h b/src/gpu/GrPipeline.h index 7583c6c839..c4319958a4 100644 --- a/src/gpu/GrPipeline.h +++ b/src/gpu/GrPipeline.h @@ -230,8 +230,7 @@ private: using RenderTargetProxy = GrPendingIOResource<GrRenderTargetProxy, kWrite_GrIOType>; using DstTextureProxy = GrPendingIOResource<GrTextureProxy, kRead_GrIOType>; - using PendingFragmentProcessor = GrPendingProgramElement<const GrFragmentProcessor>; - using FragmentProcessorArray = SkAutoSTArray<8, PendingFragmentProcessor>; + using FragmentProcessorArray = SkAutoSTArray<8, std::unique_ptr<const GrFragmentProcessor>>; DstTextureProxy fDstTextureProxy; SkIPoint fDstTextureOffset; diff --git a/src/gpu/GrProcessorSet.cpp b/src/gpu/GrProcessorSet.cpp index 20d6745cad..cb4a25f799 100644 --- a/src/gpu/GrProcessorSet.cpp +++ b/src/gpu/GrProcessorSet.cpp @@ -29,11 +29,11 @@ GrProcessorSet::GrProcessorSet(GrPaint&& paint) : fXP(paint.getXPFactory()) { int i = 0; for (auto& fp : paint.fColorFragmentProcessors) { SkASSERT(fp.get()); - fFragmentProcessors[i++] = fp.release(); + fFragmentProcessors[i++] = std::move(fp); } for (auto& fp : paint.fCoverageFragmentProcessors) { SkASSERT(fp.get()); - fFragmentProcessors[i++] = fp.release(); + fFragmentProcessors[i++] = std::move(fp); } } else { SkDebugf("Insane number of color fragment processors in paint. Dropping all processors."); @@ -47,14 +47,14 @@ GrProcessorSet::GrProcessorSet(SkBlendMode mode) , fFragmentProcessorOffset(0) , fFlags(0) {} -GrProcessorSet::GrProcessorSet(sk_sp<GrFragmentProcessor> colorFP) +GrProcessorSet::GrProcessorSet(std::unique_ptr<GrFragmentProcessor> colorFP) : fFragmentProcessors(1) , fXP((const GrXPFactory*)nullptr) , fColorFragmentProcessorCnt(1) , fFragmentProcessorOffset(0) , fFlags(0) { SkASSERT(colorFP); - fFragmentProcessors[0] = colorFP.release(); + fFragmentProcessors[0] = std::move(colorFP); } GrProcessorSet::GrProcessorSet(GrProcessorSet&& that) @@ -64,20 +64,14 @@ GrProcessorSet::GrProcessorSet(GrProcessorSet&& that) , fFlags(that.fFlags) { fFragmentProcessors.reset(that.fFragmentProcessors.count() - that.fFragmentProcessorOffset); for (int i = 0; i < fFragmentProcessors.count(); ++i) { - fFragmentProcessors[i] = that.fFragmentProcessors[i + that.fFragmentProcessorOffset]; + fFragmentProcessors[i] = + std::move(that.fFragmentProcessors[i + that.fFragmentProcessorOffset]); } that.fColorFragmentProcessorCnt = 0; that.fFragmentProcessors.reset(0); } GrProcessorSet::~GrProcessorSet() { - for (int i = fFragmentProcessorOffset; i < fFragmentProcessors.count(); ++i) { - if (this->isFinalized()) { - fFragmentProcessors[i]->completedExecution(); - } else { - fFragmentProcessors[i]->unref(); - } - } if (this->isFinalized() && this->xferProcessor()) { this->xferProcessor()->unref(); } @@ -173,8 +167,10 @@ GrProcessorSet::Analysis GrProcessorSet::finalize(const GrProcessorAnalysisColor analysis.fCompatibleWithCoverageAsAlpha = GrProcessorAnalysisCoverage::kLCD != coverageInput; const GrFragmentProcessor* clipFP = clip ? clip->clipCoverageFragmentProcessor() : nullptr; - const GrFragmentProcessor* const* fps = fFragmentProcessors.get() + fFragmentProcessorOffset; - GrColorFragmentProcessorAnalysis colorAnalysis(colorInput, fps, fColorFragmentProcessorCnt); + const std::unique_ptr<const GrFragmentProcessor>* fps = + fFragmentProcessors.get() + fFragmentProcessorOffset; + GrColorFragmentProcessorAnalysis colorAnalysis( + colorInput, unique_ptr_address_as_pointer_address(fps), fColorFragmentProcessorCnt); analysis.fCompatibleWithCoverageAsAlpha &= colorAnalysis.allProcessorsCompatibleWithCoverageAsAlpha(); fps += fColorFragmentProcessorCnt; @@ -236,12 +232,10 @@ GrProcessorSet::Analysis GrProcessorSet::finalize(const GrProcessorAnalysisColor analysis.fUsesLocalCoords = coverageUsesLocalCoords | colorAnalysis.usesLocalCoords(); } for (int i = 0; i < colorFPsToEliminate; ++i) { - fFragmentProcessors[i]->unref(); - fFragmentProcessors[i] = nullptr; + fFragmentProcessors[i].reset(nullptr); } for (int i = colorFPsToEliminate; i < fFragmentProcessors.count(); ++i) { - fFragmentProcessors[i]->addPendingExecution(); - fFragmentProcessors[i]->unref(); + fFragmentProcessors[i]->markPendingExecution(); } fFragmentProcessorOffset = colorFPsToEliminate; fColorFragmentProcessorCnt -= colorFPsToEliminate; diff --git a/src/gpu/GrProcessorSet.h b/src/gpu/GrProcessorSet.h index d3aaf6dd61..023c4dfd6b 100644 --- a/src/gpu/GrProcessorSet.h +++ b/src/gpu/GrProcessorSet.h @@ -25,7 +25,7 @@ private: public: GrProcessorSet(GrPaint&&); GrProcessorSet(SkBlendMode); - GrProcessorSet(sk_sp<GrFragmentProcessor> colorFP); + GrProcessorSet(std::unique_ptr<GrFragmentProcessor> colorFP); GrProcessorSet(GrProcessorSet&&); GrProcessorSet(const GrProcessorSet&) = delete; GrProcessorSet& operator=(const GrProcessorSet&) = delete; @@ -42,10 +42,11 @@ public: const GrFragmentProcessor* colorFragmentProcessor(int idx) const { SkASSERT(idx < fColorFragmentProcessorCnt); - return fFragmentProcessors[idx + fFragmentProcessorOffset]; + return fFragmentProcessors[idx + fFragmentProcessorOffset].get(); } const GrFragmentProcessor* coverageFragmentProcessor(int idx) const { - return fFragmentProcessors[idx + fColorFragmentProcessorCnt + fFragmentProcessorOffset]; + return fFragmentProcessors[idx + fColorFragmentProcessorCnt + + fFragmentProcessorOffset].get(); } const GrXferProcessor* xferProcessor() const { @@ -57,6 +58,16 @@ public: return sk_ref_sp(fXP.fProcessor); } + std::unique_ptr<const GrFragmentProcessor> detachColorFragmentProcessor(int idx) { + SkASSERT(idx < fColorFragmentProcessorCnt); + return std::move(fFragmentProcessors[idx + fFragmentProcessorOffset]); + } + + std::unique_ptr<const GrFragmentProcessor> detachCoverageFragmentProcessor(int idx) { + return std::move( + fFragmentProcessors[idx + fFragmentProcessorOffset + fColorFragmentProcessorCnt]); + } + /** Comparisons are only legal on finalized processor sets. */ bool operator==(const GrProcessorSet& that) const; bool operator!=(const GrProcessorSet& that) const { return !(*this == that); } @@ -168,7 +179,7 @@ private: return fXP.fFactory; } - SkAutoSTArray<4, const GrFragmentProcessor*> fFragmentProcessors; + SkAutoSTArray<4, std::unique_ptr<const GrFragmentProcessor>> fFragmentProcessors; XP fXP; uint8_t fColorFragmentProcessorCnt = 0; uint8_t fFragmentProcessorOffset = 0; diff --git a/src/gpu/GrProcessorUnitTest.cpp b/src/gpu/GrProcessorUnitTest.cpp index 563fd7c843..473903d8d8 100644 --- a/src/gpu/GrProcessorUnitTest.cpp +++ b/src/gpu/GrProcessorUnitTest.cpp @@ -10,9 +10,9 @@ #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrProcessorUnitTest::MakeChildFP(GrProcessorTestData* data) { +std::unique_ptr<GrFragmentProcessor> GrProcessorUnitTest::MakeChildFP(GrProcessorTestData* data) { #if SK_ALLOW_STATIC_GLOBAL_INITIALIZERS - sk_sp<GrFragmentProcessor> fp; + std::unique_ptr<GrFragmentProcessor> fp; do { fp = GrFragmentProcessorTestFactory::Make(data); SkASSERT(fp); diff --git a/src/gpu/GrProcessorUnitTest.h b/src/gpu/GrProcessorUnitTest.h index 73a2cf3279..739b2f0c26 100644 --- a/src/gpu/GrProcessorUnitTest.h +++ b/src/gpu/GrProcessorUnitTest.h @@ -35,7 +35,7 @@ enum { /** This allows parent FPs to implement a test create with known leaf children in order to avoid creating an unbounded FP tree which may overflow various shader limits. */ -sk_sp<GrFragmentProcessor> MakeChildFP(GrProcessorTestData*); +std::unique_ptr<GrFragmentProcessor> MakeChildFP(GrProcessorTestData*); } @@ -117,7 +117,7 @@ private: static SkTArray<GrProcessorTestFactory<ProcessorSmartPtr>*, true>* GetFactories(); }; -using GrFragmentProcessorTestFactory = GrProcessorTestFactory<sk_sp<GrFragmentProcessor>>; +using GrFragmentProcessorTestFactory = GrProcessorTestFactory<std::unique_ptr<GrFragmentProcessor>>; using GrGeometryProcessorTestFactory = GrProcessorTestFactory<sk_sp<GrGeometryProcessor>>; class GrXPFactoryTestFactory : private SkNoncopyable { @@ -151,7 +151,7 @@ private: #define GR_DECLARE_FRAGMENT_PROCESSOR_TEST \ static GrFragmentProcessorTestFactory gTestFactory SK_UNUSED; \ - static sk_sp<GrFragmentProcessor> TestCreate(GrProcessorTestData*); + static std::unique_ptr<GrFragmentProcessor> TestCreate(GrProcessorTestData*); #define GR_DECLARE_XP_FACTORY_TEST \ static GrXPFactoryTestFactory gTestFactory SK_UNUSED; \ @@ -175,7 +175,7 @@ private: // The unit test relies on static initializers. Just declare the TestCreate function so that // its definitions will compile. #define GR_DECLARE_FRAGMENT_PROCESSOR_TEST \ - static sk_sp<GrFragmentProcessor> TestCreate(GrProcessorTestData*); + static std::unique_ptr<GrFragmentProcessor> TestCreate(GrProcessorTestData*); #define GR_DEFINE_FRAGMENT_PROCESSOR_TEST(X) // The unit test relies on static initializers. Just declare the TestCreate function so that diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp index 10f21e8ed2..03b120c2c1 100644 --- a/src/gpu/GrRenderTargetContext.cpp +++ b/src/gpu/GrRenderTargetContext.cpp @@ -1205,12 +1205,12 @@ bool GrRenderTargetContext::drawFilledDRRect(const GrClip& clip, } // TODO these need to be a geometry processors - sk_sp<GrFragmentProcessor> innerEffect(GrRRectEffect::Make(innerEdgeType, *inner)); + std::unique_ptr<GrFragmentProcessor> innerEffect(GrRRectEffect::Make(innerEdgeType, *inner)); if (!innerEffect) { return false; } - sk_sp<GrFragmentProcessor> outerEffect(GrRRectEffect::Make(outerEdgeType, *outer)); + std::unique_ptr<GrFragmentProcessor> outerEffect(GrRRectEffect::Make(outerEdgeType, *outer)); if (!outerEffect) { return false; } diff --git a/src/gpu/GrRenderTargetContext.h b/src/gpu/GrRenderTargetContext.h index 2b9308a544..33a9d8be1e 100644 --- a/src/gpu/GrRenderTargetContext.h +++ b/src/gpu/GrRenderTargetContext.h @@ -390,8 +390,8 @@ private: friend class GrCCPRAtlas; // for access to addDrawOp friend class GrCoverageCountingPathRenderer; // for access to addDrawOp // for a unit test - friend void test_draw_op(GrRenderTargetContext*, - sk_sp<GrFragmentProcessor>, sk_sp<GrTextureProxy>); + friend void test_draw_op(GrRenderTargetContext*, std::unique_ptr<GrFragmentProcessor>, + sk_sp<GrTextureProxy>); void internalClear(const GrFixedClip&, const GrColor, bool canIgnoreClip); diff --git a/src/gpu/GrTextureAdjuster.cpp b/src/gpu/GrTextureAdjuster.cpp index 166cb9d54b..546ea67b60 100644 --- a/src/gpu/GrTextureAdjuster.cpp +++ b/src/gpu/GrTextureAdjuster.cpp @@ -105,14 +105,13 @@ sk_sp<GrTextureProxy> GrTextureAdjuster::refTextureProxySafeForParams( return copy; } -sk_sp<GrFragmentProcessor> GrTextureAdjuster::createFragmentProcessor( - const SkMatrix& origTextureMatrix, - const SkRect& origConstraintRect, - FilterConstraint filterConstraint, - bool coordsLimitedToConstraintRect, - const GrSamplerParams::FilterMode* filterOrNullForBicubic, - SkColorSpace* dstColorSpace) { - +std::unique_ptr<GrFragmentProcessor> GrTextureAdjuster::createFragmentProcessor( + const SkMatrix& origTextureMatrix, + const SkRect& origConstraintRect, + FilterConstraint filterConstraint, + bool coordsLimitedToConstraintRect, + const GrSamplerParams::FilterMode* filterOrNullForBicubic, + SkColorSpace* dstColorSpace) { SkMatrix textureMatrix = origTextureMatrix; const SkIRect* contentArea = this->contentAreaOrNull(); // Convert the constraintRect to be relative to the texture rather than the content area so diff --git a/src/gpu/GrTextureAdjuster.h b/src/gpu/GrTextureAdjuster.h index eb500f7929..fad533f30f 100644 --- a/src/gpu/GrTextureAdjuster.h +++ b/src/gpu/GrTextureAdjuster.h @@ -27,13 +27,13 @@ public: sk_sp<GrTextureProxy> refTextureProxySafeForParams(const GrSamplerParams&, SkIPoint* outOffset, SkScalar scaleAdjust[2]); - sk_sp<GrFragmentProcessor> createFragmentProcessor( - const SkMatrix& textureMatrix, - const SkRect& constraintRect, - FilterConstraint, - bool coordsLimitedToConstraintRect, - const GrSamplerParams::FilterMode* filterOrNullForBicubic, - SkColorSpace* dstColorSpace) override; + std::unique_ptr<GrFragmentProcessor> createFragmentProcessor( + const SkMatrix& textureMatrix, + const SkRect& constraintRect, + FilterConstraint, + bool coordsLimitedToConstraintRect, + const GrSamplerParams::FilterMode* filterOrNullForBicubic, + SkColorSpace* dstColorSpace) override; // We do not ref the texture nor the colorspace, so the caller must keep them in scope while // this Adjuster is alive. diff --git a/src/gpu/GrTextureMaker.cpp b/src/gpu/GrTextureMaker.cpp index 2962ddb4c2..7e257d8a78 100644 --- a/src/gpu/GrTextureMaker.cpp +++ b/src/gpu/GrTextureMaker.cpp @@ -76,14 +76,13 @@ sk_sp<GrTextureProxy> GrTextureMaker::refTextureProxyForParams(const GrSamplerPa return result; } -sk_sp<GrFragmentProcessor> GrTextureMaker::createFragmentProcessor( - const SkMatrix& textureMatrix, - const SkRect& constraintRect, - FilterConstraint filterConstraint, - bool coordsLimitedToConstraintRect, - const GrSamplerParams::FilterMode* filterOrNullForBicubic, - SkColorSpace* dstColorSpace) { - +std::unique_ptr<GrFragmentProcessor> GrTextureMaker::createFragmentProcessor( + const SkMatrix& textureMatrix, + const SkRect& constraintRect, + FilterConstraint filterConstraint, + bool coordsLimitedToConstraintRect, + const GrSamplerParams::FilterMode* filterOrNullForBicubic, + SkColorSpace* dstColorSpace) { const GrSamplerParams::FilterMode* fmForDetermineDomain = filterOrNullForBicubic; if (filterOrNullForBicubic && GrSamplerParams::kMipMap_FilterMode == *filterOrNullForBicubic && kYes_FilterConstraint == filterConstraint) { diff --git a/src/gpu/GrTextureMaker.h b/src/gpu/GrTextureMaker.h index 9e1e0dd96e..5055a8aae3 100644 --- a/src/gpu/GrTextureMaker.h +++ b/src/gpu/GrTextureMaker.h @@ -30,13 +30,13 @@ public: sk_sp<SkColorSpace>* texColorSpace, SkScalar scaleAdjust[2]); - sk_sp<GrFragmentProcessor> createFragmentProcessor( - const SkMatrix& textureMatrix, - const SkRect& constraintRect, - FilterConstraint filterConstraint, - bool coordsLimitedToConstraintRect, - const GrSamplerParams::FilterMode* filterOrNullForBicubic, - SkColorSpace* dstColorSpace) override; + std::unique_ptr<GrFragmentProcessor> createFragmentProcessor( + const SkMatrix& textureMatrix, + const SkRect& constraintRect, + FilterConstraint filterConstraint, + bool coordsLimitedToConstraintRect, + const GrSamplerParams::FilterMode* filterOrNullForBicubic, + SkColorSpace* dstColorSpace) override; protected: GrTextureMaker(GrContext* context, int width, int height, bool isAlphaOnly) diff --git a/src/gpu/GrTextureProducer.cpp b/src/gpu/GrTextureProducer.cpp index 78d143b435..92732238e6 100644 --- a/src/gpu/GrTextureProducer.cpp +++ b/src/gpu/GrTextureProducer.cpp @@ -218,13 +218,13 @@ GrTextureProducer::DomainMode GrTextureProducer::DetermineDomainMode( return kDomain_DomainMode; } -sk_sp<GrFragmentProcessor> GrTextureProducer::CreateFragmentProcessorForDomainAndFilter( - sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> colorSpaceXform, - const SkMatrix& textureMatrix, - DomainMode domainMode, - const SkRect& domain, - const GrSamplerParams::FilterMode* filterOrNullForBicubic) { +std::unique_ptr<GrFragmentProcessor> GrTextureProducer::CreateFragmentProcessorForDomainAndFilter( + sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> colorSpaceXform, + const SkMatrix& textureMatrix, + DomainMode domainMode, + const SkRect& domain, + const GrSamplerParams::FilterMode* filterOrNullForBicubic) { SkASSERT(kTightCopy_DomainMode != domainMode); if (filterOrNullForBicubic) { if (kDomain_DomainMode == domainMode) { diff --git a/src/gpu/GrTextureProducer.h b/src/gpu/GrTextureProducer.h index 6a32e2f76e..ccc0dae2ee 100644 --- a/src/gpu/GrTextureProducer.h +++ b/src/gpu/GrTextureProducer.h @@ -56,13 +56,13 @@ public: * @param filterOrNullForBicubic If non-null indicates the filter mode. If null means * use bicubic filtering. **/ - virtual sk_sp<GrFragmentProcessor> createFragmentProcessor( - const SkMatrix& textureMatrix, - const SkRect& constraintRect, - FilterConstraint filterConstraint, - bool coordsLimitedToConstraintRect, - const GrSamplerParams::FilterMode* filterOrNullForBicubic, - SkColorSpace* dstColorSpace) = 0; + virtual std::unique_ptr<GrFragmentProcessor> createFragmentProcessor( + const SkMatrix& textureMatrix, + const SkRect& constraintRect, + FilterConstraint filterConstraint, + bool coordsLimitedToConstraintRect, + const GrSamplerParams::FilterMode* filterOrNullForBicubic, + SkColorSpace* dstColorSpace) = 0; virtual ~GrTextureProducer() {} @@ -130,13 +130,13 @@ protected: const GrSamplerParams::FilterMode* filterModeOrNullForBicubic, SkRect* domainRect); - static sk_sp<GrFragmentProcessor> CreateFragmentProcessorForDomainAndFilter( - sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform>, - const SkMatrix& textureMatrix, - DomainMode, - const SkRect& domain, - const GrSamplerParams::FilterMode* filterOrNullForBicubic); + static std::unique_ptr<GrFragmentProcessor> CreateFragmentProcessorForDomainAndFilter( + sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform>, + const SkMatrix& textureMatrix, + DomainMode, + const SkRect& domain, + const GrSamplerParams::FilterMode* filterOrNullForBicubic); private: const int fWidth; diff --git a/src/gpu/GrYUVProvider.cpp b/src/gpu/GrYUVProvider.cpp index 12390aaab0..6b58d42cd7 100644 --- a/src/gpu/GrYUVProvider.cpp +++ b/src/gpu/GrYUVProvider.cpp @@ -134,11 +134,11 @@ sk_sp<GrTextureProxy> GrYUVProvider::refAsTextureProxy(GrContext* ctx, const GrS } GrPaint paint; - sk_sp<GrFragmentProcessor> yuvToRgbProcessor( - GrYUVEffect::MakeYUVToRGB(yuvTextureContexts[0]->asTextureProxyRef(), - yuvTextureContexts[1]->asTextureProxyRef(), - yuvTextureContexts[2]->asTextureProxyRef(), - yuvInfo.fSizeInfo.fSizes, yuvInfo.fColorSpace, false)); + auto yuvToRgbProcessor = + GrYUVEffect::MakeYUVToRGB(yuvTextureContexts[0]->asTextureProxyRef(), + yuvTextureContexts[1]->asTextureProxyRef(), + yuvTextureContexts[2]->asTextureProxyRef(), + yuvInfo.fSizeInfo.fSizes, yuvInfo.fColorSpace, false); paint.addColorFragmentProcessor(std::move(yuvToRgbProcessor)); // If we're decoding an sRGB image, the result of our linear math on the YUV planes is already @@ -158,10 +158,10 @@ sk_sp<GrTextureProxy> GrYUVProvider::refAsTextureProxy(GrContext* ctx, const GrS // If the caller expects the pixels in a different color space than the one from the image, // apply a color conversion to do this. - sk_sp<GrFragmentProcessor> colorConversionProcessor = + std::unique_ptr<GrFragmentProcessor> colorConversionProcessor = GrNonlinearColorSpaceXformEffect::Make(srcColorSpace, dstColorSpace); if (colorConversionProcessor) { - paint.addColorFragmentProcessor(colorConversionProcessor); + paint.addColorFragmentProcessor(std::move(colorConversionProcessor)); } paint.setPorterDuffXPFactory(SkBlendMode::kSrc); diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 607165cfd3..b0ca549992 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1028,7 +1028,7 @@ void SkGpuDevice::drawBitmapTile(const SkBitmap& bitmap, // Construct a GrPaint by setting the bitmap texture as the first effect and then configuring // the rest from the SkPaint. - sk_sp<GrFragmentProcessor> fp; + std::unique_ptr<GrFragmentProcessor> fp; if (needsTextureDomain && (SkCanvas::kStrict_SrcRectConstraint == constraint)) { // Use a constrained texture domain to avoid color bleeding @@ -1132,9 +1132,8 @@ void SkGpuDevice::drawSpecial(SkSpecialImage* special1, int left, int top, const sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(result->getColorSpace(), fRenderTargetContext->getColorSpace()); - sk_sp<GrFragmentProcessor> fp(GrSimpleTextureEffect::Make(std::move(proxy), - std::move(colorSpaceXform), - SkMatrix::I())); + auto fp = GrSimpleTextureEffect::Make(std::move(proxy), std::move(colorSpaceXform), + SkMatrix::I()); if (GrPixelConfigIsAlphaOnly(config)) { fp = GrFragmentProcessor::MakeInputPremulAndMulByOutput(std::move(fp)); } else { @@ -1416,11 +1415,10 @@ void SkGpuDevice::drawProducerNine(GrTextureProducer* producer, } static const GrSamplerParams::FilterMode kMode = GrSamplerParams::kNone_FilterMode; - sk_sp<GrFragmentProcessor> fp( - producer->createFragmentProcessor(SkMatrix::I(), - SkRect::MakeIWH(producer->width(), producer->height()), - GrTextureProducer::kNo_FilterConstraint, true, - &kMode, fRenderTargetContext->getColorSpace())); + auto fp = producer->createFragmentProcessor( + SkMatrix::I(), SkRect::MakeIWH(producer->width(), producer->height()), + GrTextureProducer::kNo_FilterConstraint, true, &kMode, + fRenderTargetContext->getColorSpace()); if (!fp) { return; } @@ -1474,11 +1472,10 @@ void SkGpuDevice::drawProducerLattice(GrTextureProducer* producer, CHECK_SHOULD_DRAW(); static const GrSamplerParams::FilterMode kMode = GrSamplerParams::kNone_FilterMode; - sk_sp<GrFragmentProcessor> fp( - producer->createFragmentProcessor(SkMatrix::I(), - SkRect::MakeIWH(producer->width(), producer->height()), - GrTextureProducer::kNo_FilterConstraint, true, - &kMode, fRenderTargetContext->getColorSpace())); + std::unique_ptr<GrFragmentProcessor> fp(producer->createFragmentProcessor( + SkMatrix::I(), SkRect::MakeIWH(producer->width(), producer->height()), + GrTextureProducer::kNo_FilterConstraint, true, &kMode, + fRenderTargetContext->getColorSpace())); if (!fp) { return; } diff --git a/src/gpu/SkGpuDevice_drawTexture.cpp b/src/gpu/SkGpuDevice_drawTexture.cpp index 48015a3906..6fa171113b 100644 --- a/src/gpu/SkGpuDevice_drawTexture.cpp +++ b/src/gpu/SkGpuDevice_drawTexture.cpp @@ -201,16 +201,16 @@ void SkGpuDevice::drawTextureProducerImpl(GrTextureProducer* producer, } textureMatrix = &tempMatrix; } - sk_sp<GrFragmentProcessor> fp(producer->createFragmentProcessor( - *textureMatrix, clippedSrcRect, constraintMode, coordsAllInsideSrcRect, filterMode, - fRenderTargetContext->getColorSpace())); + auto fp = producer->createFragmentProcessor(*textureMatrix, clippedSrcRect, constraintMode, + coordsAllInsideSrcRect, filterMode, + fRenderTargetContext->getColorSpace()); if (!fp) { return; } GrPaint grPaint; if (!SkPaintToGrPaintWithTexture(fContext.get(), fRenderTargetContext.get(), paint, viewMatrix, - fp, producer->isAlphaOnly(), &grPaint)) { + std::move(fp), producer->isAlphaOnly(), &grPaint)) { return; } GrAA aa = GrBoolToAA(paint.isAntiAlias()); diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index e426b95af0..c1fb2623b6 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -404,7 +404,7 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, GrRenderTargetContext* rtc, const SkPaint& skPaint, const SkMatrix& viewM, - sk_sp<GrFragmentProcessor>* shaderProcessor, + std::unique_ptr<GrFragmentProcessor>* shaderProcessor, SkBlendMode* primColorMode, GrPaint* grPaint) { grPaint->setAllowSRGBInputs(rtc->isGammaCorrect()); @@ -415,10 +415,10 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, // Setup the initial color considering the shader, the SkPaint color, and the presence or not // of per-vertex colors. - sk_sp<GrFragmentProcessor> shaderFP; + std::unique_ptr<GrFragmentProcessor> shaderFP; if (!primColorMode || blend_requires_shader(*primColorMode)) { if (shaderProcessor) { - shaderFP = *shaderProcessor; + shaderFP = std::move(*shaderProcessor); } else if (const auto* shader = as_SB(skPaint.getShader())) { shaderFP = shader->asFragmentProcessor( SkShaderBase::AsFPArgs(context, &viewM, nullptr, skPaint.getFilterQuality(), @@ -443,7 +443,7 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, // the GrPaint color will be ignored. GrColor4f shaderInput = origColor.opaque(); - shaderFP = GrFragmentProcessor::OverrideInput(shaderFP, shaderInput); + shaderFP = GrFragmentProcessor::OverrideInput(std::move(shaderFP), shaderInput); shaderFP = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(shaderFP), *primColorMode); @@ -470,9 +470,8 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, if (primColorMode) { // There is a blend between the primitive color and the paint color. The blend considers // the opaque paint color. The paint's alpha is applied to the post-blended color. - sk_sp<GrFragmentProcessor> processor( - GrConstColorProcessor::Make(origColor.opaque(), - GrConstColorProcessor::kIgnore_InputMode)); + auto processor = GrConstColorProcessor::Make(origColor.opaque(), + GrConstColorProcessor::kIgnore_InputMode); processor = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(processor), *primColorMode); if (processor) { @@ -510,8 +509,7 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, colorFilter->filterColor(skPaint.getColor()), nullptr, nullptr)); } } else { - sk_sp<GrFragmentProcessor> cfFP(colorFilter->asFragmentProcessor(context, - rtc->getColorSpace())); + auto cfFP = colorFilter->asFragmentProcessor(context, rtc->getColorSpace()); if (cfFP) { grPaint->addColorFragmentProcessor(std::move(cfFP)); } else { @@ -524,7 +522,7 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, if (maskFilter) { GrFragmentProcessor* mfFP; if (maskFilter->asFragmentProcessor(&mfFP)) { - grPaint->addCoverageFragmentProcessor(sk_sp<GrFragmentProcessor>(mfFP)); + grPaint->addCoverageFragmentProcessor(std::unique_ptr<GrFragmentProcessor>(mfFP)); } } @@ -559,7 +557,7 @@ bool SkPaintToGrPaint(GrContext* context, GrRenderTargetContext* rtc, const SkPa bool SkPaintToGrPaintReplaceShader(GrContext* context, GrRenderTargetContext* rtc, const SkPaint& skPaint, - sk_sp<GrFragmentProcessor> shaderFP, + std::unique_ptr<GrFragmentProcessor> shaderFP, GrPaint* grPaint) { if (!shaderFP) { return false; @@ -574,8 +572,8 @@ bool SkPaintToGrPaintNoShader(GrContext* context, const SkPaint& skPaint, GrPaint* grPaint) { // Use a ptr to a nullptr to to indicate that the SkShader is ignored and not replaced. - static sk_sp<GrFragmentProcessor> kNullShaderFP(nullptr); - static sk_sp<GrFragmentProcessor>* kIgnoreShader = &kNullShaderFP; + static std::unique_ptr<GrFragmentProcessor> kNullShaderFP(nullptr); + static std::unique_ptr<GrFragmentProcessor>* kIgnoreShader = &kNullShaderFP; return skpaint_to_grpaint_impl(context, rtc, skPaint, SkMatrix::I(), kIgnoreShader, nullptr, grPaint); } @@ -596,10 +594,10 @@ bool SkPaintToGrPaintWithTexture(GrContext* context, GrRenderTargetContext* rtc, const SkPaint& paint, const SkMatrix& viewM, - sk_sp<GrFragmentProcessor> fp, + std::unique_ptr<GrFragmentProcessor> fp, bool textureIsAlphaOnly, GrPaint* grPaint) { - sk_sp<GrFragmentProcessor> shaderFP; + std::unique_ptr<GrFragmentProcessor> shaderFP; if (textureIsAlphaOnly) { if (const auto* shader = as_SB(paint.getShader())) { shaderFP = shader->asFragmentProcessor( @@ -608,13 +606,13 @@ bool SkPaintToGrPaintWithTexture(GrContext* context, if (!shaderFP) { return false; } - sk_sp<GrFragmentProcessor> fpSeries[] = { std::move(shaderFP), std::move(fp) }; + std::unique_ptr<GrFragmentProcessor> fpSeries[] = { std::move(shaderFP), std::move(fp) }; shaderFP = GrFragmentProcessor::RunInSeries(fpSeries, 2); } else { - shaderFP = GrFragmentProcessor::MakeInputPremulAndMulByOutput(fp); + shaderFP = GrFragmentProcessor::MakeInputPremulAndMulByOutput(std::move(fp)); } } else { - shaderFP = GrFragmentProcessor::MulOutputByInputAlpha(fp); + shaderFP = GrFragmentProcessor::MulOutputByInputAlpha(std::move(fp)); } return SkPaintToGrPaintReplaceShader(context, rtc, paint, std::move(shaderFP), grPaint); diff --git a/src/gpu/SkGr.h b/src/gpu/SkGr.h index 1f7f2ad425..126dc4c66c 100644 --- a/src/gpu/SkGr.h +++ b/src/gpu/SkGr.h @@ -115,7 +115,7 @@ bool SkPaintToGrPaintNoShader(GrContext* context, bool SkPaintToGrPaintReplaceShader(GrContext*, GrRenderTargetContext*, const SkPaint& skPaint, - sk_sp<GrFragmentProcessor> shaderFP, + std::unique_ptr<GrFragmentProcessor> shaderFP, GrPaint* grPaint); /** Blends the SkPaint's shader (or color if no shader) with the color which specified via a @@ -143,7 +143,7 @@ bool SkPaintToGrPaintWithTexture(GrContext* context, GrRenderTargetContext* rtc, const SkPaint& paint, const SkMatrix& viewM, - sk_sp<GrFragmentProcessor> fp, + std::unique_ptr<GrFragmentProcessor> fp, bool textureIsAlphaOnly, GrPaint* grPaint); diff --git a/src/gpu/effects/GrBicubicEffect.cpp b/src/gpu/effects/GrBicubicEffect.cpp index 28fcd9e1dc..c8b302cbdd 100644 --- a/src/gpu/effects/GrBicubicEffect.cpp +++ b/src/gpu/effects/GrBicubicEffect.cpp @@ -188,7 +188,7 @@ bool GrBicubicEffect::onIsEqual(const GrFragmentProcessor& sBase) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrBicubicEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrBicubicEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrBicubicEffect::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp<GrColorSpaceXform> colorSpaceXform = GrTest::TestColorXform(d->fRandom); diff --git a/src/gpu/effects/GrBicubicEffect.h b/src/gpu/effects/GrBicubicEffect.h index 65e2c3dbba..7812f3fcb0 100644 --- a/src/gpu/effects/GrBicubicEffect.h +++ b/src/gpu/effects/GrBicubicEffect.h @@ -22,8 +22,8 @@ public: const char* name() const override { return "Bicubic"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrBicubicEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrBicubicEffect(*this)); } const GrTextureDomain& domain() const { return fDomain; } @@ -33,25 +33,23 @@ public: /** * Create a Mitchell filter effect with specified texture matrix and x/y tile modes. */ - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> colorSpaceXform, - const SkMatrix& matrix, - const SkShader::TileMode tileModes[2]) { - return sk_sp<GrFragmentProcessor>(new GrBicubicEffect(std::move(proxy), - std::move(colorSpaceXform), - matrix, tileModes)); + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> colorSpaceXform, + const SkMatrix& matrix, + const SkShader::TileMode tileModes[2]) { + return std::unique_ptr<GrFragmentProcessor>(new GrBicubicEffect( + std::move(proxy), std::move(colorSpaceXform), matrix, tileModes)); } /** * Create a Mitchell filter effect with a texture matrix and a domain. */ - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> colorSpaceXform, - const SkMatrix& matrix, - const SkRect& domain) { - return sk_sp<GrFragmentProcessor>(new GrBicubicEffect(std::move(proxy), - std::move(colorSpaceXform), - matrix, domain)); + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> colorSpaceXform, + const SkMatrix& matrix, + const SkRect& domain) { + return std::unique_ptr<GrFragmentProcessor>( + new GrBicubicEffect(std::move(proxy), std::move(colorSpaceXform), matrix, domain)); } /** diff --git a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp index 8c0ff64d27..1b5ea600f9 100644 --- a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp +++ b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp @@ -55,7 +55,7 @@ GrBlurredEdgeFragmentProcessor::GrBlurredEdgeFragmentProcessor( : INHERITED(src.optimizationFlags()), fMode(src.fMode) { this->initClassID<GrBlurredEdgeFragmentProcessor>(); } -sk_sp<GrFragmentProcessor> GrBlurredEdgeFragmentProcessor::clone() const { - return sk_sp<GrFragmentProcessor>(new GrBlurredEdgeFragmentProcessor(*this)); +std::unique_ptr<GrFragmentProcessor> GrBlurredEdgeFragmentProcessor::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrBlurredEdgeFragmentProcessor(*this)); } #endif diff --git a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.h b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.h index 677c285114..61cc53baa5 100644 --- a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.h +++ b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.h @@ -19,11 +19,11 @@ class GrBlurredEdgeFragmentProcessor : public GrFragmentProcessor { public: enum Mode { kGaussian_Mode = 0, kSmoothStep_Mode = 1 }; int mode() const { return fMode; } - static sk_sp<GrFragmentProcessor> Make(int mode) { - return sk_sp<GrFragmentProcessor>(new GrBlurredEdgeFragmentProcessor(mode)); + static std::unique_ptr<GrFragmentProcessor> Make(int mode) { + return std::unique_ptr<GrFragmentProcessor>(new GrBlurredEdgeFragmentProcessor(mode)); } GrBlurredEdgeFragmentProcessor(const GrBlurredEdgeFragmentProcessor& src); - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; const char* name() const override { return "BlurredEdgeFragmentProcessor"; } private: diff --git a/src/gpu/effects/GrCircleEffect.cpp b/src/gpu/effects/GrCircleEffect.cpp index 6fc47558c9..b764559ed4 100644 --- a/src/gpu/effects/GrCircleEffect.cpp +++ b/src/gpu/effects/GrCircleEffect.cpp @@ -95,12 +95,12 @@ GrCircleEffect::GrCircleEffect(const GrCircleEffect& src) , fRadius(src.fRadius) { this->initClassID<GrCircleEffect>(); } -sk_sp<GrFragmentProcessor> GrCircleEffect::clone() const { - return sk_sp<GrFragmentProcessor>(new GrCircleEffect(*this)); +std::unique_ptr<GrFragmentProcessor> GrCircleEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrCircleEffect(*this)); } GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrCircleEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrCircleEffect::TestCreate(GrProcessorTestData* testData) { +std::unique_ptr<GrFragmentProcessor> GrCircleEffect::TestCreate(GrProcessorTestData* testData) { SkPoint center; center.fX = testData->fRandom->nextRangeScalar(0.f, 1000.f); center.fY = testData->fRandom->nextRangeScalar(0.f, 1000.f); diff --git a/src/gpu/effects/GrCircleEffect.h b/src/gpu/effects/GrCircleEffect.h index 46e46f9575..0d88dcb099 100644 --- a/src/gpu/effects/GrCircleEffect.h +++ b/src/gpu/effects/GrCircleEffect.h @@ -20,11 +20,11 @@ public: int edgeType() const { return fEdgeType; } SkPoint center() const { return fCenter; } float radius() const { return fRadius; } - static sk_sp<GrFragmentProcessor> Make(int edgeType, SkPoint center, float radius) { - return sk_sp<GrFragmentProcessor>(new GrCircleEffect(edgeType, center, radius)); + static std::unique_ptr<GrFragmentProcessor> Make(int edgeType, SkPoint center, float radius) { + return std::unique_ptr<GrFragmentProcessor>(new GrCircleEffect(edgeType, center, radius)); } GrCircleEffect(const GrCircleEffect& src); - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; const char* name() const override { return "CircleEffect"; } private: diff --git a/src/gpu/effects/GrConfigConversionEffect.cpp b/src/gpu/effects/GrConfigConversionEffect.cpp index 880648199e..e784ed78fc 100644 --- a/src/gpu/effects/GrConfigConversionEffect.cpp +++ b/src/gpu/effects/GrConfigConversionEffect.cpp @@ -70,8 +70,8 @@ GrConfigConversionEffect::GrConfigConversionEffect(PMConversion pmConversion) this->initClassID<GrConfigConversionEffect>(); } -sk_sp<GrFragmentProcessor> GrConfigConversionEffect::clone() const { - return sk_sp<GrFragmentProcessor>(new GrConfigConversionEffect(fPMConversion)); +std::unique_ptr<GrFragmentProcessor> GrConfigConversionEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrConfigConversionEffect(fPMConversion)); } bool GrConfigConversionEffect::onIsEqual(const GrFragmentProcessor& s) const { @@ -84,9 +84,9 @@ bool GrConfigConversionEffect::onIsEqual(const GrFragmentProcessor& s) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrConfigConversionEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrConfigConversionEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrConfigConversionEffect::TestCreate(GrProcessorTestData* d) { PMConversion pmConv = static_cast<PMConversion>(d->fRandom->nextULessThan(kPMConversionCnt)); - return sk_sp<GrFragmentProcessor>(new GrConfigConversionEffect(pmConv)); + return std::unique_ptr<GrFragmentProcessor>(new GrConfigConversionEffect(pmConv)); } #endif @@ -158,11 +158,13 @@ bool GrConfigConversionEffect::TestForPreservingPMConversions(GrContext* context GrPaint paint1; GrPaint paint2; GrPaint paint3; - sk_sp<GrFragmentProcessor> pmToUPM(new GrConfigConversionEffect(kToUnpremul_PMConversion)); - sk_sp<GrFragmentProcessor> upmToPM(new GrConfigConversionEffect(kToPremul_PMConversion)); + std::unique_ptr<GrFragmentProcessor> pmToUPM( + new GrConfigConversionEffect(kToUnpremul_PMConversion)); + std::unique_ptr<GrFragmentProcessor> upmToPM( + new GrConfigConversionEffect(kToPremul_PMConversion)); paint1.addColorTextureProcessor(dataProxy, nullptr, SkMatrix::I()); - paint1.addColorFragmentProcessor(pmToUPM); + paint1.addColorFragmentProcessor(pmToUPM->clone()); paint1.setPorterDuffXPFactory(SkBlendMode::kSrc); readRTC->fillRectToRect(GrNoClip(), std::move(paint1), GrAA::kNo, SkMatrix::I(), kRect, kRect); @@ -199,12 +201,12 @@ bool GrConfigConversionEffect::TestForPreservingPMConversions(GrContext* context return true; } -sk_sp<GrFragmentProcessor> GrConfigConversionEffect::Make(sk_sp<GrFragmentProcessor> fp, - PMConversion pmConversion) { +std::unique_ptr<GrFragmentProcessor> GrConfigConversionEffect::Make( + std::unique_ptr<GrFragmentProcessor> fp, PMConversion pmConversion) { if (!fp) { return nullptr; } - sk_sp<GrFragmentProcessor> ccFP(new GrConfigConversionEffect(pmConversion)); - sk_sp<GrFragmentProcessor> fpPipeline[] = { fp, ccFP }; + std::unique_ptr<GrFragmentProcessor> ccFP(new GrConfigConversionEffect(pmConversion)); + std::unique_ptr<GrFragmentProcessor> fpPipeline[] = { std::move(fp), std::move(ccFP) }; return GrFragmentProcessor::RunInSeries(fpPipeline, 2); } diff --git a/src/gpu/effects/GrConfigConversionEffect.h b/src/gpu/effects/GrConfigConversionEffect.h index fe8f50bdf5..690fbd5ff7 100644 --- a/src/gpu/effects/GrConfigConversionEffect.h +++ b/src/gpu/effects/GrConfigConversionEffect.h @@ -29,11 +29,12 @@ public: * Returns a fragment processor that calls the passed in fragment processor, and then performs * the requested premul or unpremul conversion. */ - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrFragmentProcessor>, PMConversion); + static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor>, + PMConversion); const char* name() const override { return "Config Conversion"; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; PMConversion pmConversion() const { return fPMConversion; } diff --git a/src/gpu/effects/GrConstColorProcessor.cpp b/src/gpu/effects/GrConstColorProcessor.cpp index d5f4e3527f..08592244ca 100644 --- a/src/gpu/effects/GrConstColorProcessor.cpp +++ b/src/gpu/effects/GrConstColorProcessor.cpp @@ -62,7 +62,9 @@ private: /////////////////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> GrConstColorProcessor::clone() const { return Make(fColor, fMode); } +std::unique_ptr<GrFragmentProcessor> GrConstColorProcessor::clone() const { + return Make(fColor, fMode); +} GrColor4f GrConstColorProcessor::constantOutputForConstantInput(GrColor4f input) const { switch (fMode) { @@ -96,7 +98,7 @@ bool GrConstColorProcessor::onIsEqual(const GrFragmentProcessor& other) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrConstColorProcessor); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrConstColorProcessor::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrConstColorProcessor::TestCreate(GrProcessorTestData* d) { GrColor4f color; int colorPicker = d->fRandom->nextULessThan(3); switch (colorPicker) { diff --git a/src/gpu/effects/GrConstColorProcessor.h b/src/gpu/effects/GrConstColorProcessor.h index baf405a8fe..7079a8dffb 100644 --- a/src/gpu/effects/GrConstColorProcessor.h +++ b/src/gpu/effects/GrConstColorProcessor.h @@ -26,8 +26,8 @@ public: }; static const int kInputModeCnt = kLastInputMode + 1; - static sk_sp<GrFragmentProcessor> Make(GrColor4f color, InputMode mode) { - return sk_sp<GrFragmentProcessor>(new GrConstColorProcessor(color, mode)); + static std::unique_ptr<GrFragmentProcessor> Make(GrColor4f color, InputMode mode) { + return std::unique_ptr<GrFragmentProcessor>(new GrConstColorProcessor(color, mode)); } const char* name() const override { return "Color"; } @@ -38,7 +38,7 @@ public: return str; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; GrColor4f color() const { return fColor; } diff --git a/src/gpu/effects/GrConvexPolyEffect.cpp b/src/gpu/effects/GrConvexPolyEffect.cpp index bb61cc1f20..e61923c29e 100644 --- a/src/gpu/effects/GrConvexPolyEffect.cpp +++ b/src/gpu/effects/GrConvexPolyEffect.cpp @@ -19,15 +19,16 @@ class AARectEffect : public GrFragmentProcessor { public: const SkRect& getRect() const { return fRect; } - static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType edgeType, const SkRect& rect) { - return sk_sp<GrFragmentProcessor>(new AARectEffect(edgeType, rect)); + static std::unique_ptr<GrFragmentProcessor> Make(GrPrimitiveEdgeType edgeType, + const SkRect& rect) { + return std::unique_ptr<GrFragmentProcessor>(new AARectEffect(edgeType, rect)); } GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } const char* name() const override { return "AARect"; } - sk_sp<GrFragmentProcessor> clone() const override { return Make(fEdgeType, fRect); } + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(fEdgeType, fRect); } private: void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; @@ -58,12 +59,12 @@ private: GR_DEFINE_FRAGMENT_PROCESSOR_TEST(AARectEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> AARectEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> AARectEffect::TestCreate(GrProcessorTestData* d) { SkRect rect = SkRect::MakeLTRB(d->fRandom->nextSScalar1(), d->fRandom->nextSScalar1(), d->fRandom->nextSScalar1(), d->fRandom->nextSScalar1()); - sk_sp<GrFragmentProcessor> fp; + std::unique_ptr<GrFragmentProcessor> fp; do { GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt)); @@ -236,7 +237,8 @@ void GrGLConvexPolyEffect::GenKey(const GrProcessor& processor, const GrShaderCa ////////////////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> GrConvexPolyEffect::Make(GrPrimitiveEdgeType type, const SkPath& path) { +std::unique_ptr<GrFragmentProcessor> GrConvexPolyEffect::Make(GrPrimitiveEdgeType type, + const SkPath& path) { if (kHairlineAA_GrProcessorEdgeType == type) { return nullptr; } @@ -306,8 +308,8 @@ sk_sp<GrFragmentProcessor> GrConvexPolyEffect::Make(GrPrimitiveEdgeType type, co return Make(type, n, edges); } -sk_sp<GrFragmentProcessor> GrConvexPolyEffect::Make(GrPrimitiveEdgeType edgeType, - const SkRect& rect) { +std::unique_ptr<GrFragmentProcessor> GrConvexPolyEffect::Make(GrPrimitiveEdgeType edgeType, + const SkRect& rect) { if (kHairlineAA_GrProcessorEdgeType == edgeType){ return nullptr; } @@ -348,8 +350,8 @@ GrConvexPolyEffect::GrConvexPolyEffect(const GrConvexPolyEffect& that) memcpy(fEdges, that.fEdges, 3 * that.fEdgeCount * sizeof(SkScalar)); } -sk_sp<GrFragmentProcessor> GrConvexPolyEffect::clone() const { - return sk_sp<GrFragmentProcessor>(new GrConvexPolyEffect(*this)); +std::unique_ptr<GrFragmentProcessor> GrConvexPolyEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrConvexPolyEffect(*this)); } bool GrConvexPolyEffect::onIsEqual(const GrFragmentProcessor& other) const { @@ -364,14 +366,14 @@ bool GrConvexPolyEffect::onIsEqual(const GrFragmentProcessor& other) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrConvexPolyEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrConvexPolyEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrConvexPolyEffect::TestCreate(GrProcessorTestData* d) { int count = d->fRandom->nextULessThan(kMaxEdges) + 1; SkScalar edges[kMaxEdges * 3]; for (int i = 0; i < 3 * count; ++i) { edges[i] = d->fRandom->nextSScalar1(); } - sk_sp<GrFragmentProcessor> fp; + std::unique_ptr<GrFragmentProcessor> fp; do { GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt)); diff --git a/src/gpu/effects/GrConvexPolyEffect.h b/src/gpu/effects/GrConvexPolyEffect.h index f1f6ab0029..abb718e97f 100644 --- a/src/gpu/effects/GrConvexPolyEffect.h +++ b/src/gpu/effects/GrConvexPolyEffect.h @@ -38,30 +38,30 @@ public: * have to modify the effect/shaderbuilder interface to make it possible (e.g. give access * to the view matrix or untransformed positions in the fragment shader). */ - static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType edgeType, int n, - const SkScalar edges[]) { + static std::unique_ptr<GrFragmentProcessor> Make(GrPrimitiveEdgeType edgeType, int n, + const SkScalar edges[]) { if (n <= 0 || n > kMaxEdges || kHairlineAA_GrProcessorEdgeType == edgeType) { return nullptr; } - return sk_sp<GrFragmentProcessor>(new GrConvexPolyEffect(edgeType, n, edges)); + return std::unique_ptr<GrFragmentProcessor>(new GrConvexPolyEffect(edgeType, n, edges)); } /** * Creates an effect that clips against the path. If the path is not a convex polygon, is * inverse filled, or has too many edges, this will return nullptr. */ - static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkPath&); + static std::unique_ptr<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkPath&); /** * Creates an effect that fills inside the rect with AA edges.. */ - static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkRect&); + static std::unique_ptr<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkRect&); ~GrConvexPolyEffect() override; const char* name() const override { return "ConvexPoly"; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } diff --git a/src/gpu/effects/GrDitherEffect.cpp b/src/gpu/effects/GrDitherEffect.cpp index f2fc6784a2..d78af4ee5a 100644 --- a/src/gpu/effects/GrDitherEffect.cpp +++ b/src/gpu/effects/GrDitherEffect.cpp @@ -62,14 +62,14 @@ GrDitherEffect::GrDitherEffect(const GrDitherEffect& src) : INHERITED(src.optimizationFlags()), fRangeType(src.fRangeType) { this->initClassID<GrDitherEffect>(); } -sk_sp<GrFragmentProcessor> GrDitherEffect::clone() const { - return sk_sp<GrFragmentProcessor>(new GrDitherEffect(*this)); +std::unique_ptr<GrFragmentProcessor> GrDitherEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrDitherEffect(*this)); } GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDitherEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrDitherEffect::TestCreate(GrProcessorTestData* testData) { +std::unique_ptr<GrFragmentProcessor> GrDitherEffect::TestCreate(GrProcessorTestData* testData) { float range = testData->fRandom->nextRangeF(0.001f, 0.05f); - return sk_sp<GrFragmentProcessor>(new GrDitherEffect(range)); + return std::unique_ptr<GrFragmentProcessor>(new GrDitherEffect(range)); } #endif #endif diff --git a/src/gpu/effects/GrDitherEffect.fp b/src/gpu/effects/GrDitherEffect.fp index 7ec852e6b0..fe641c6132 100644 --- a/src/gpu/effects/GrDitherEffect.fp +++ b/src/gpu/effects/GrDitherEffect.fp @@ -2,7 +2,7 @@ layout(key) in int rangeType; @make { - static sk_sp<GrFragmentProcessor> Make(GrPixelConfig dstConfig) { + static std::unique_ptr<GrFragmentProcessor> Make(GrPixelConfig dstConfig) { int rangeType; switch (dstConfig) { case kGray_8_GrPixelConfig: @@ -27,7 +27,7 @@ layout(key) in int rangeType; case kAlpha_8_GrPixelConfig: return nullptr; } - return sk_sp<GrFragmentProcessor>(new GrDitherEffect(rangeType)); + return std::unique_ptr<GrFragmentProcessor>(new GrDitherEffect(rangeType)); } } @@ -68,5 +68,5 @@ void main() { @test(testData) { float range = testData->fRandom->nextRangeF(0.001f, 0.05f); - return sk_sp<GrFragmentProcessor>(new GrDitherEffect(range)); + return std::unique_ptr<GrFragmentProcessor>(new GrDitherEffect(range)); } diff --git a/src/gpu/effects/GrDitherEffect.h b/src/gpu/effects/GrDitherEffect.h index 529b5ec457..d428c3ced1 100644 --- a/src/gpu/effects/GrDitherEffect.h +++ b/src/gpu/effects/GrDitherEffect.h @@ -19,7 +19,7 @@ class GrDitherEffect : public GrFragmentProcessor { public: int rangeType() const { return fRangeType; } - static sk_sp<GrFragmentProcessor> Make(GrPixelConfig dstConfig) { + static std::unique_ptr<GrFragmentProcessor> Make(GrPixelConfig dstConfig) { int rangeType; switch (dstConfig) { case kGray_8_GrPixelConfig: @@ -44,10 +44,10 @@ public: case kAlpha_8_GrPixelConfig: return nullptr; } - return sk_sp<GrFragmentProcessor>(new GrDitherEffect(rangeType)); + return std::unique_ptr<GrFragmentProcessor>(new GrDitherEffect(rangeType)); } GrDitherEffect(const GrDitherEffect& src); - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; const char* name() const override { return "DitherEffect"; } private: diff --git a/src/gpu/effects/GrEllipseEffect.cpp b/src/gpu/effects/GrEllipseEffect.cpp index edf12d27dd..e9443a8d00 100644 --- a/src/gpu/effects/GrEllipseEffect.cpp +++ b/src/gpu/effects/GrEllipseEffect.cpp @@ -120,12 +120,12 @@ GrEllipseEffect::GrEllipseEffect(const GrEllipseEffect& src) , fRadii(src.fRadii) { this->initClassID<GrEllipseEffect>(); } -sk_sp<GrFragmentProcessor> GrEllipseEffect::clone() const { - return sk_sp<GrFragmentProcessor>(new GrEllipseEffect(*this)); +std::unique_ptr<GrFragmentProcessor> GrEllipseEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrEllipseEffect(*this)); } GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrEllipseEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrEllipseEffect::TestCreate(GrProcessorTestData* testData) { +std::unique_ptr<GrFragmentProcessor> GrEllipseEffect::TestCreate(GrProcessorTestData* testData) { SkPoint center; center.fX = testData->fRandom->nextRangeScalar(0.f, 1000.f); center.fY = testData->fRandom->nextRangeScalar(0.f, 1000.f); diff --git a/src/gpu/effects/GrEllipseEffect.h b/src/gpu/effects/GrEllipseEffect.h index 28586561da..1425f39945 100644 --- a/src/gpu/effects/GrEllipseEffect.h +++ b/src/gpu/effects/GrEllipseEffect.h @@ -20,11 +20,11 @@ public: int edgeType() const { return fEdgeType; } SkPoint center() const { return fCenter; } SkPoint radii() const { return fRadii; } - static sk_sp<GrFragmentProcessor> Make(int edgeType, SkPoint center, SkPoint radii) { - return sk_sp<GrFragmentProcessor>(new GrEllipseEffect(edgeType, center, radii)); + static std::unique_ptr<GrFragmentProcessor> Make(int edgeType, SkPoint center, SkPoint radii) { + return std::unique_ptr<GrFragmentProcessor>(new GrEllipseEffect(edgeType, center, radii)); } GrEllipseEffect(const GrEllipseEffect& src); - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; const char* name() const override { return "EllipseEffect"; } private: diff --git a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp index ac22a8c0ef..b54ca53f4e 100644 --- a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp +++ b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp @@ -255,7 +255,7 @@ bool GrGaussianConvolutionFragmentProcessor::onIsEqual(const GrFragmentProcessor GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrGaussianConvolutionFragmentProcessor); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrGaussianConvolutionFragmentProcessor::TestCreate( +std::unique_ptr<GrFragmentProcessor> GrGaussianConvolutionFragmentProcessor::TestCreate( GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; diff --git a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h index 74e9a94c2d..9850e605fb 100644 --- a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h +++ b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h @@ -22,14 +22,14 @@ public: enum class Direction { kX, kY }; /// Convolve with a Gaussian kernel - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - Direction dir, - int halfWidth, - float gaussianSigma, - GrTextureDomain::Mode mode, - int* bounds) { - return sk_sp<GrFragmentProcessor>(new GrGaussianConvolutionFragmentProcessor( - std::move(proxy), dir, halfWidth, gaussianSigma, mode, bounds)); + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + Direction dir, + int halfWidth, + float gaussianSigma, + GrTextureDomain::Mode mode, + int* bounds) { + return std::unique_ptr<GrFragmentProcessor>(new GrGaussianConvolutionFragmentProcessor( + std::move(proxy), dir, halfWidth, gaussianSigma, mode, bounds)); } const float* kernel() const { return fKernel; } @@ -44,8 +44,9 @@ public: const char* name() const override { return "GaussianConvolution"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrGaussianConvolutionFragmentProcessor(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>( + new GrGaussianConvolutionFragmentProcessor(*this)); } // This was decided based on the min allowed value for the max texture diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.cpp b/src/gpu/effects/GrMatrixConvolutionEffect.cpp index 030a926845..9d9a03ed4b 100644 --- a/src/gpu/effects/GrMatrixConvolutionEffect.cpp +++ b/src/gpu/effects/GrMatrixConvolutionEffect.cpp @@ -194,8 +194,8 @@ GrMatrixConvolutionEffect::GrMatrixConvolutionEffect(const GrMatrixConvolutionEf memcpy(fKernelOffset, that.fKernelOffset, sizeof(fKernelOffset)); } -sk_sp<GrFragmentProcessor> GrMatrixConvolutionEffect::clone() const { - return sk_sp<GrFragmentProcessor>(new GrMatrixConvolutionEffect(*this)); +std::unique_ptr<GrFragmentProcessor> GrMatrixConvolutionEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrMatrixConvolutionEffect(*this)); } void GrMatrixConvolutionEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, @@ -248,30 +248,30 @@ static void fill_in_2D_gaussian_kernel(float* kernel, int width, int height, } // Static function to create a 2D convolution -sk_sp<GrFragmentProcessor> GrMatrixConvolutionEffect::MakeGaussian( - sk_sp<GrTextureProxy> proxy, - const SkIRect& bounds, - const SkISize& kernelSize, - SkScalar gain, - SkScalar bias, - const SkIPoint& kernelOffset, - GrTextureDomain::Mode tileMode, - bool convolveAlpha, - SkScalar sigmaX, - SkScalar sigmaY) { +std::unique_ptr<GrFragmentProcessor> GrMatrixConvolutionEffect::MakeGaussian( + sk_sp<GrTextureProxy> proxy, + const SkIRect& bounds, + const SkISize& kernelSize, + SkScalar gain, + SkScalar bias, + const SkIPoint& kernelOffset, + GrTextureDomain::Mode tileMode, + bool convolveAlpha, + SkScalar sigmaX, + SkScalar sigmaY) { float kernel[MAX_KERNEL_SIZE]; fill_in_2D_gaussian_kernel(kernel, kernelSize.width(), kernelSize.height(), sigmaX, sigmaY); - return sk_sp<GrFragmentProcessor>( - new GrMatrixConvolutionEffect(std::move(proxy), bounds, kernelSize, - kernel, gain, bias, kernelOffset, tileMode, convolveAlpha)); + return std::unique_ptr<GrFragmentProcessor>( + new GrMatrixConvolutionEffect(std::move(proxy), bounds, kernelSize, kernel, gain, bias, + kernelOffset, tileMode, convolveAlpha)); } GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMatrixConvolutionEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrMatrixConvolutionEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrMatrixConvolutionEffect::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp<GrTextureProxy> proxy = d->textureProxy(texIdx); diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.h b/src/gpu/effects/GrMatrixConvolutionEffect.h index 9ece00ee5d..2e859b1cdd 100644 --- a/src/gpu/effects/GrMatrixConvolutionEffect.h +++ b/src/gpu/effects/GrMatrixConvolutionEffect.h @@ -16,30 +16,30 @@ class GrMatrixConvolutionEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - const SkIRect& bounds, - const SkISize& kernelSize, - const SkScalar* kernel, - SkScalar gain, - SkScalar bias, - const SkIPoint& kernelOffset, - GrTextureDomain::Mode tileMode, - bool convolveAlpha) { - return sk_sp<GrFragmentProcessor>( - new GrMatrixConvolutionEffect(std::move(proxy), bounds, kernelSize, - kernel, gain, bias, kernelOffset, tileMode, convolveAlpha)); + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + const SkIRect& bounds, + const SkISize& kernelSize, + const SkScalar* kernel, + SkScalar gain, + SkScalar bias, + const SkIPoint& kernelOffset, + GrTextureDomain::Mode tileMode, + bool convolveAlpha) { + return std::unique_ptr<GrFragmentProcessor>( + new GrMatrixConvolutionEffect(std::move(proxy), bounds, kernelSize, kernel, gain, + bias, kernelOffset, tileMode, convolveAlpha)); } - static sk_sp<GrFragmentProcessor> MakeGaussian(sk_sp<GrTextureProxy> proxy, - const SkIRect& bounds, - const SkISize& kernelSize, - SkScalar gain, - SkScalar bias, - const SkIPoint& kernelOffset, - GrTextureDomain::Mode tileMode, - bool convolveAlpha, - SkScalar sigmaX, - SkScalar sigmaY); + static std::unique_ptr<GrFragmentProcessor> MakeGaussian(sk_sp<GrTextureProxy> proxy, + const SkIRect& bounds, + const SkISize& kernelSize, + SkScalar gain, + SkScalar bias, + const SkIPoint& kernelOffset, + GrTextureDomain::Mode tileMode, + bool convolveAlpha, + SkScalar sigmaX, + SkScalar sigmaY); const SkIRect& bounds() const { return fBounds; } const SkISize& kernelSize() const { return fKernelSize; } @@ -52,7 +52,7 @@ public: const char* name() const override { return "MatrixConvolution"; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; private: GrMatrixConvolutionEffect(sk_sp<GrTextureProxy> proxy, diff --git a/src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp b/src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp index 6ae770b820..b30746acb7 100644 --- a/src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp +++ b/src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp @@ -173,8 +173,8 @@ GrNonlinearColorSpaceXformEffect::GrNonlinearColorSpaceXformEffect( memcpy(fDstTransferFnCoeffs, that.fDstTransferFnCoeffs, sizeof(fDstTransferFnCoeffs)); } -sk_sp<GrFragmentProcessor> GrNonlinearColorSpaceXformEffect::clone() const { - return sk_sp<GrFragmentProcessor>(new GrNonlinearColorSpaceXformEffect(*this)); +std::unique_ptr<GrFragmentProcessor> GrNonlinearColorSpaceXformEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrNonlinearColorSpaceXformEffect(*this)); } bool GrNonlinearColorSpaceXformEffect::onIsEqual(const GrFragmentProcessor& s) const { @@ -201,7 +201,8 @@ bool GrNonlinearColorSpaceXformEffect::onIsEqual(const GrFragmentProcessor& s) c GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrNonlinearColorSpaceXformEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrNonlinearColorSpaceXformEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrNonlinearColorSpaceXformEffect::TestCreate( + GrProcessorTestData* d) { // TODO: Generate a random variety of color spaces for this effect (it can handle wacky // transfer functions, etc...) sk_sp<SkColorSpace> srcSpace = SkColorSpace::MakeSRGBLinear(); @@ -221,8 +222,8 @@ GrGLSLFragmentProcessor* GrNonlinearColorSpaceXformEffect::onCreateGLSLInstance( return new GrGLNonlinearColorSpaceXformEffect(); } -sk_sp<GrFragmentProcessor> GrNonlinearColorSpaceXformEffect::Make(const SkColorSpace* src, - const SkColorSpace* dst) { +std::unique_ptr<GrFragmentProcessor> GrNonlinearColorSpaceXformEffect::Make( + const SkColorSpace* src, const SkColorSpace* dst) { if (!src || !dst || SkColorSpace::Equals(src, dst)) { // No conversion possible (or necessary) return nullptr; @@ -257,6 +258,6 @@ sk_sp<GrFragmentProcessor> GrNonlinearColorSpaceXformEffect::Make(const SkColorS } } - return sk_sp<GrFragmentProcessor>(new GrNonlinearColorSpaceXformEffect( - ops, srcTransferFn, dstTransferFn, srcToDstMtx)); + return std::unique_ptr<GrFragmentProcessor>( + new GrNonlinearColorSpaceXformEffect(ops, srcTransferFn, dstTransferFn, srcToDstMtx)); } diff --git a/src/gpu/effects/GrNonlinearColorSpaceXformEffect.h b/src/gpu/effects/GrNonlinearColorSpaceXformEffect.h index f57c64b93b..109ec10d89 100644 --- a/src/gpu/effects/GrNonlinearColorSpaceXformEffect.h +++ b/src/gpu/effects/GrNonlinearColorSpaceXformEffect.h @@ -27,11 +27,12 @@ public: * This will return nullptr if either space is nullptr, if both spaces are equal, or if either * space has a non-parametric transfer funcion (e.g. lookup table or A2B). */ - static sk_sp<GrFragmentProcessor> Make(const SkColorSpace* src, const SkColorSpace* dst); + static std::unique_ptr<GrFragmentProcessor> Make(const SkColorSpace* src, + const SkColorSpace* dst); const char* name() const override { return "NonlinearColorSpaceXform"; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; static const int kNumTransferFnCoeffs = 7; diff --git a/src/gpu/effects/GrOvalEffect.cpp b/src/gpu/effects/GrOvalEffect.cpp index 3180533146..efc86a4c08 100644 --- a/src/gpu/effects/GrOvalEffect.cpp +++ b/src/gpu/effects/GrOvalEffect.cpp @@ -11,7 +11,8 @@ #include "GrEllipseEffect.h" #include "SkRect.h" -sk_sp<GrFragmentProcessor> GrOvalEffect::Make(GrPrimitiveEdgeType edgeType, const SkRect& oval) { +std::unique_ptr<GrFragmentProcessor> GrOvalEffect::Make(GrPrimitiveEdgeType edgeType, + const SkRect& oval) { if (kHairlineAA_GrProcessorEdgeType == edgeType) { return nullptr; } diff --git a/src/gpu/effects/GrOvalEffect.h b/src/gpu/effects/GrOvalEffect.h index 3ff241a65d..1372f237a7 100644 --- a/src/gpu/effects/GrOvalEffect.h +++ b/src/gpu/effects/GrOvalEffect.h @@ -16,10 +16,12 @@ class GrFragmentProcessor; struct SkRect; namespace GrOvalEffect { - /** - * Creates an effect that performs clipping against an oval. - */ - sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkRect&); + +/** + * Creates an effect that performs clipping against an oval. + */ +std::unique_ptr<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkRect&); + }; #endif diff --git a/src/gpu/effects/GrRRectEffect.cpp b/src/gpu/effects/GrRRectEffect.cpp index 8dde914bb4..f253dfef86 100644 --- a/src/gpu/effects/GrRRectEffect.cpp +++ b/src/gpu/effects/GrRRectEffect.cpp @@ -45,14 +45,14 @@ public: // The flags are used to indicate which corners are circluar (unflagged corners are assumed to // be square). - static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, uint32_t circularCornerFlags, - const SkRRect&); + static std::unique_ptr<GrFragmentProcessor> Make(GrPrimitiveEdgeType, + uint32_t circularCornerFlags, const SkRRect&); ~CircularRRectEffect() override {} const char* name() const override { return "CircularRRect"; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; const SkRRect& getRRect() const { return fRRect; } @@ -78,14 +78,14 @@ private: typedef GrFragmentProcessor INHERITED; }; -sk_sp<GrFragmentProcessor> CircularRRectEffect::Make(GrPrimitiveEdgeType edgeType, - uint32_t circularCornerFlags, - const SkRRect& rrect) { +std::unique_ptr<GrFragmentProcessor> CircularRRectEffect::Make(GrPrimitiveEdgeType edgeType, + uint32_t circularCornerFlags, + const SkRRect& rrect) { if (kFillAA_GrProcessorEdgeType != edgeType && kInverseFillAA_GrProcessorEdgeType != edgeType) { return nullptr; } - return sk_sp<GrFragmentProcessor>( - new CircularRRectEffect(edgeType, circularCornerFlags, rrect)); + return std::unique_ptr<GrFragmentProcessor>( + new CircularRRectEffect(edgeType, circularCornerFlags, rrect)); } CircularRRectEffect::CircularRRectEffect(GrPrimitiveEdgeType edgeType, uint32_t circularCornerFlags, @@ -97,8 +97,8 @@ CircularRRectEffect::CircularRRectEffect(GrPrimitiveEdgeType edgeType, uint32_t this->initClassID<CircularRRectEffect>(); } -sk_sp<GrFragmentProcessor> CircularRRectEffect::clone() const { - return sk_sp<GrFragmentProcessor>( +std::unique_ptr<GrFragmentProcessor> CircularRRectEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>( new CircularRRectEffect(fEdgeType, fCircularCornerFlags, fRRect)); } @@ -113,13 +113,13 @@ bool CircularRRectEffect::onIsEqual(const GrFragmentProcessor& other) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircularRRectEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> CircularRRectEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> CircularRRectEffect::TestCreate(GrProcessorTestData* d) { SkScalar w = d->fRandom->nextRangeScalar(20.f, 1000.f); SkScalar h = d->fRandom->nextRangeScalar(20.f, 1000.f); SkScalar r = d->fRandom->nextRangeF(kRadiusMin, 9.f); SkRRect rrect; rrect.setRectXY(SkRect::MakeWH(w, h), r, r); - sk_sp<GrFragmentProcessor> fp; + std::unique_ptr<GrFragmentProcessor> fp; do { GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt); @@ -391,13 +391,13 @@ GrGLSLFragmentProcessor* CircularRRectEffect::onCreateGLSLInstance() const { class EllipticalRRectEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkRRect&); + static std::unique_ptr<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkRRect&); ~EllipticalRRectEffect() override {} const char* name() const override { return "EllipticalRRect"; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; const SkRRect& getRRect() const { return fRRect; } @@ -420,12 +420,12 @@ private: typedef GrFragmentProcessor INHERITED; }; -sk_sp<GrFragmentProcessor> -EllipticalRRectEffect::Make(GrPrimitiveEdgeType edgeType, const SkRRect& rrect) { +std::unique_ptr<GrFragmentProcessor> EllipticalRRectEffect::Make(GrPrimitiveEdgeType edgeType, + const SkRRect& rrect) { if (kFillAA_GrProcessorEdgeType != edgeType && kInverseFillAA_GrProcessorEdgeType != edgeType) { return nullptr; } - return sk_sp<GrFragmentProcessor>(new EllipticalRRectEffect(edgeType, rrect)); + return std::unique_ptr<GrFragmentProcessor>(new EllipticalRRectEffect(edgeType, rrect)); } EllipticalRRectEffect::EllipticalRRectEffect(GrPrimitiveEdgeType edgeType, const SkRRect& rrect) @@ -435,8 +435,8 @@ EllipticalRRectEffect::EllipticalRRectEffect(GrPrimitiveEdgeType edgeType, const this->initClassID<EllipticalRRectEffect>(); } -sk_sp<GrFragmentProcessor> EllipticalRRectEffect::clone() const { - return sk_sp<GrFragmentProcessor>(new EllipticalRRectEffect(fEdgeType, fRRect)); +std::unique_ptr<GrFragmentProcessor> EllipticalRRectEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new EllipticalRRectEffect(fEdgeType, fRRect)); } bool EllipticalRRectEffect::onIsEqual(const GrFragmentProcessor& other) const { @@ -449,7 +449,7 @@ bool EllipticalRRectEffect::onIsEqual(const GrFragmentProcessor& other) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(EllipticalRRectEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> EllipticalRRectEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> EllipticalRRectEffect::TestCreate(GrProcessorTestData* d) { SkScalar w = d->fRandom->nextRangeScalar(20.f, 1000.f); SkScalar h = d->fRandom->nextRangeScalar(20.f, 1000.f); SkVector r[4]; @@ -476,7 +476,7 @@ sk_sp<GrFragmentProcessor> EllipticalRRectEffect::TestCreate(GrProcessorTestData rrect.setRectXY(SkRect::MakeWH(w, h), r[SkRRect::kUpperLeft_Corner].fX, r[SkRRect::kUpperLeft_Corner].fY); } - sk_sp<GrFragmentProcessor> fp; + std::unique_ptr<GrFragmentProcessor> fp; do { GrPrimitiveEdgeType et = (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt); @@ -684,7 +684,8 @@ GrGLSLFragmentProcessor* EllipticalRRectEffect::onCreateGLSLInstance() const { ////////////////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> GrRRectEffect::Make(GrPrimitiveEdgeType edgeType, const SkRRect& rrect) { +std::unique_ptr<GrFragmentProcessor> GrRRectEffect::Make(GrPrimitiveEdgeType edgeType, + const SkRRect& rrect) { if (rrect.isRect()) { return GrConvexPolyEffect::Make(edgeType, rrect.getBounds()); } diff --git a/src/gpu/effects/GrRRectEffect.h b/src/gpu/effects/GrRRectEffect.h index 6ff2cc9735..fcd600ac4f 100644 --- a/src/gpu/effects/GrRRectEffect.h +++ b/src/gpu/effects/GrRRectEffect.h @@ -17,11 +17,13 @@ class GrProcessor; class SkRRect; namespace GrRRectEffect { - /** - * Creates an effect that performs anti-aliased clipping against a SkRRect. It doesn't support - * all varieties of SkRRect so the caller must check for a nullptr return. - */ - sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkRRect&); + +/** + * Creates an effect that performs anti-aliased clipping against a SkRRect. It doesn't support + * all varieties of SkRRect so the caller must check for a nullptr return. + */ +std::unique_ptr<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkRRect&); + }; #endif diff --git a/src/gpu/effects/GrSRGBEffect.cpp b/src/gpu/effects/GrSRGBEffect.cpp index 1cffb9eef0..f415a6cef1 100644 --- a/src/gpu/effects/GrSRGBEffect.cpp +++ b/src/gpu/effects/GrSRGBEffect.cpp @@ -85,7 +85,7 @@ GrSRGBEffect::GrSRGBEffect(Mode mode, Alpha alpha) this->initClassID<GrSRGBEffect>(); } -sk_sp<GrFragmentProcessor> GrSRGBEffect::clone() const { return Make(fMode, fAlpha); } +std::unique_ptr<GrFragmentProcessor> GrSRGBEffect::clone() const { return Make(fMode, fAlpha); } bool GrSRGBEffect::onIsEqual(const GrFragmentProcessor& s) const { const GrSRGBEffect& other = s.cast<GrSRGBEffect>(); @@ -119,7 +119,7 @@ GrColor4f GrSRGBEffect::constantOutputForConstantInput(GrColor4f color) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSRGBEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrSRGBEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrSRGBEffect::TestCreate(GrProcessorTestData* d) { Mode testMode = static_cast<Mode>(d->fRandom->nextRangeU(0, 1)); return GrSRGBEffect::Make(testMode, Alpha::kPremul); } diff --git a/src/gpu/effects/GrSRGBEffect.h b/src/gpu/effects/GrSRGBEffect.h index ef6fd28800..9b51fca7c6 100644 --- a/src/gpu/effects/GrSRGBEffect.h +++ b/src/gpu/effects/GrSRGBEffect.h @@ -25,8 +25,8 @@ public: /** * Creates an effect that applies the sRGB transfer function (or its inverse) */ - static sk_sp<GrFragmentProcessor> Make(Mode mode, Alpha alpha) { - return sk_sp<GrFragmentProcessor>(new GrSRGBEffect(mode, alpha)); + static std::unique_ptr<GrFragmentProcessor> Make(Mode mode, Alpha alpha) { + return std::unique_ptr<GrFragmentProcessor>(new GrSRGBEffect(mode, alpha)); } const char* name() const override { return "sRGB"; } @@ -34,7 +34,7 @@ public: Mode mode() const { return fMode; } Alpha alpha() const { return fAlpha; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; private: GrSRGBEffect(Mode mode, Alpha); diff --git a/src/gpu/effects/GrSimpleTextureEffect.cpp b/src/gpu/effects/GrSimpleTextureEffect.cpp index bd2b80529a..9a0017c8d1 100644 --- a/src/gpu/effects/GrSimpleTextureEffect.cpp +++ b/src/gpu/effects/GrSimpleTextureEffect.cpp @@ -80,12 +80,13 @@ GrSimpleTextureEffect::GrSimpleTextureEffect(const GrSimpleTextureEffect& src) this->addTextureSampler(&fImage); this->addCoordTransform(&fImageCoordTransform); } -sk_sp<GrFragmentProcessor> GrSimpleTextureEffect::clone() const { - return sk_sp<GrFragmentProcessor>(new GrSimpleTextureEffect(*this)); +std::unique_ptr<GrFragmentProcessor> GrSimpleTextureEffect::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrSimpleTextureEffect(*this)); } GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSimpleTextureEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrSimpleTextureEffect::TestCreate(GrProcessorTestData* testData) { +std::unique_ptr<GrFragmentProcessor> GrSimpleTextureEffect::TestCreate( + GrProcessorTestData* testData) { int texIdx = testData->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; static const SkShader::TileMode kTileModes[] = { diff --git a/src/gpu/effects/GrSimpleTextureEffect.fp b/src/gpu/effects/GrSimpleTextureEffect.fp index 6f7c818672..80824fe076 100644 --- a/src/gpu/effects/GrSimpleTextureEffect.fp +++ b/src/gpu/effects/GrSimpleTextureEffect.fp @@ -22,29 +22,29 @@ in float4x4 matrix; } @make { - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> colorSpaceXform, - const SkMatrix& matrix) { - return sk_sp<GrFragmentProcessor>( + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> colorSpaceXform, + const SkMatrix& matrix) { + return std::unique_ptr<GrFragmentProcessor>( new GrSimpleTextureEffect(std::move(proxy), std::move(colorSpaceXform), matrix, GrSamplerParams(SkShader::kClamp_TileMode, GrSamplerParams::kNone_FilterMode))); } /* clamp mode */ - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> colorSpaceXform, - const SkMatrix& matrix, - GrSamplerParams::FilterMode filterMode) { - return sk_sp<GrFragmentProcessor>( + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> colorSpaceXform, + const SkMatrix& matrix, + GrSamplerParams::FilterMode filterMode) { + return std::unique_ptr<GrFragmentProcessor>( new GrSimpleTextureEffect(std::move(proxy), std::move(colorSpaceXform), matrix, GrSamplerParams(SkShader::kClamp_TileMode, filterMode))); } - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> colorSpaceXform, - const SkMatrix& matrix, - const GrSamplerParams& p) { - return sk_sp<GrFragmentProcessor>( + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> colorSpaceXform, + const SkMatrix& matrix, + const GrSamplerParams& p) { + return std::unique_ptr<GrFragmentProcessor>( new GrSimpleTextureEffect(std::move(proxy), std::move(colorSpaceXform), matrix, p)); } } diff --git a/src/gpu/effects/GrSimpleTextureEffect.h b/src/gpu/effects/GrSimpleTextureEffect.h index 25ef1c5bd0..11564bb6e2 100644 --- a/src/gpu/effects/GrSimpleTextureEffect.h +++ b/src/gpu/effects/GrSimpleTextureEffect.h @@ -20,35 +20,35 @@ public: sk_sp<GrColorSpaceXform> colorXform() const { return fColorXform; } SkMatrix44 matrix() const { return fMatrix; } - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> - colorSpaceXform, - const SkMatrix& matrix) { - return sk_sp<GrFragmentProcessor>(new GrSimpleTextureEffect( + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> + colorSpaceXform, + const SkMatrix& matrix) { + return std::unique_ptr<GrFragmentProcessor>(new GrSimpleTextureEffect( std::move(proxy), std::move(colorSpaceXform), matrix, GrSamplerParams(SkShader::kClamp_TileMode, GrSamplerParams::kNone_FilterMode))); } - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> - colorSpaceXform, - const SkMatrix& matrix, - GrSamplerParams::FilterMode filterMode) { - return sk_sp<GrFragmentProcessor>( + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> + colorSpaceXform, + const SkMatrix& matrix, + GrSamplerParams::FilterMode filterMode) { + return std::unique_ptr<GrFragmentProcessor>( new GrSimpleTextureEffect(std::move(proxy), std::move(colorSpaceXform), matrix, GrSamplerParams(SkShader::kClamp_TileMode, filterMode))); } - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> - colorSpaceXform, - const SkMatrix& matrix, - const GrSamplerParams& p) { - return sk_sp<GrFragmentProcessor>( + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> + colorSpaceXform, + const SkMatrix& matrix, + const GrSamplerParams& p) { + return std::unique_ptr<GrFragmentProcessor>( new GrSimpleTextureEffect(std::move(proxy), std::move(colorSpaceXform), matrix, p)); } GrSimpleTextureEffect(const GrSimpleTextureEffect& src); - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; const char* name() const override { return "SimpleTextureEffect"; } private: diff --git a/src/gpu/effects/GrTextureDomain.cpp b/src/gpu/effects/GrTextureDomain.cpp index ee7985c14e..5101762bd9 100644 --- a/src/gpu/effects/GrTextureDomain.cpp +++ b/src/gpu/effects/GrTextureDomain.cpp @@ -206,21 +206,20 @@ inline GrFragmentProcessor::OptimizationFlags GrTextureDomainEffect::OptFlags( } } -sk_sp<GrFragmentProcessor> GrTextureDomainEffect::Make(sk_sp<GrTextureProxy> proxy, - sk_sp<GrColorSpaceXform> colorSpaceXform, - const SkMatrix& matrix, - const SkRect& domain, - GrTextureDomain::Mode mode, - GrSamplerParams::FilterMode filterMode) { +std::unique_ptr<GrFragmentProcessor> GrTextureDomainEffect::Make( + sk_sp<GrTextureProxy> proxy, + sk_sp<GrColorSpaceXform> colorSpaceXform, + const SkMatrix& matrix, + const SkRect& domain, + GrTextureDomain::Mode mode, + GrSamplerParams::FilterMode filterMode) { if (GrTextureDomain::kIgnore_Mode == mode || (GrTextureDomain::kClamp_Mode == mode && can_ignore_rect(proxy.get(), domain))) { return GrSimpleTextureEffect::Make(std::move(proxy), std::move(colorSpaceXform), matrix, filterMode); } else { - return sk_sp<GrFragmentProcessor>( - new GrTextureDomainEffect(std::move(proxy), - std::move(colorSpaceXform), - matrix, domain, mode, filterMode)); + return std::unique_ptr<GrFragmentProcessor>(new GrTextureDomainEffect( + std::move(proxy), std::move(colorSpaceXform), matrix, domain, mode, filterMode)); } } @@ -312,7 +311,7 @@ bool GrTextureDomainEffect::onIsEqual(const GrFragmentProcessor& sBase) const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrTextureDomainEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrTextureDomainEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrTextureDomainEffect::TestCreate(GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; sk_sp<GrTextureProxy> proxy = d->textureProxy(texIdx); @@ -337,11 +336,9 @@ sk_sp<GrFragmentProcessor> GrTextureDomainEffect::TestCreate(GrProcessorTestData #endif /////////////////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> GrDeviceSpaceTextureDecalFragmentProcessor::Make( - sk_sp<GrTextureProxy> proxy, - const SkIRect& subset, - const SkIPoint& deviceSpaceOffset) { - return sk_sp<GrFragmentProcessor>(new GrDeviceSpaceTextureDecalFragmentProcessor( +std::unique_ptr<GrFragmentProcessor> GrDeviceSpaceTextureDecalFragmentProcessor::Make( + sk_sp<GrTextureProxy> proxy, const SkIRect& subset, const SkIPoint& deviceSpaceOffset) { + return std::unique_ptr<GrFragmentProcessor>(new GrDeviceSpaceTextureDecalFragmentProcessor( std::move(proxy), subset, deviceSpaceOffset)); } @@ -369,8 +366,9 @@ GrDeviceSpaceTextureDecalFragmentProcessor::GrDeviceSpaceTextureDecalFragmentPro this->addTextureSampler(&fTextureSampler); } -sk_sp<GrFragmentProcessor> GrDeviceSpaceTextureDecalFragmentProcessor::clone() const { - return sk_sp<GrFragmentProcessor>(new GrDeviceSpaceTextureDecalFragmentProcessor(*this)); +std::unique_ptr<GrFragmentProcessor> GrDeviceSpaceTextureDecalFragmentProcessor::clone() const { + return std::unique_ptr<GrFragmentProcessor>( + new GrDeviceSpaceTextureDecalFragmentProcessor(*this)); } GrGLSLFragmentProcessor* GrDeviceSpaceTextureDecalFragmentProcessor::onCreateGLSLInstance() const { @@ -441,7 +439,7 @@ bool GrDeviceSpaceTextureDecalFragmentProcessor::onIsEqual(const GrFragmentProce GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDeviceSpaceTextureDecalFragmentProcessor); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrDeviceSpaceTextureDecalFragmentProcessor::TestCreate( +std::unique_ptr<GrFragmentProcessor> GrDeviceSpaceTextureDecalFragmentProcessor::TestCreate( GrProcessorTestData* d) { int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : GrProcessorUnitTest::kAlphaTextureIdx; diff --git a/src/gpu/effects/GrTextureDomain.h b/src/gpu/effects/GrTextureDomain.h index 10c2e563c0..0db7d2c202 100644 --- a/src/gpu/effects/GrTextureDomain.h +++ b/src/gpu/effects/GrTextureDomain.h @@ -153,17 +153,17 @@ protected: */ class GrTextureDomainEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy>, - sk_sp<GrColorSpaceXform>, - const SkMatrix&, - const SkRect& domain, - GrTextureDomain::Mode, - GrSamplerParams::FilterMode filterMode); + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy>, + sk_sp<GrColorSpaceXform>, + const SkMatrix&, + const SkRect& domain, + GrTextureDomain::Mode, + GrSamplerParams::FilterMode filterMode); const char* name() const override { return "TextureDomain"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrTextureDomainEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrTextureDomainEffect(*this)); } SkString dumpInfo() const override { @@ -207,9 +207,9 @@ private: class GrDeviceSpaceTextureDecalFragmentProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy>, - const SkIRect& subset, - const SkIPoint& deviceSpaceOffset); + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy>, + const SkIRect& subset, + const SkIPoint& deviceSpaceOffset); const char* name() const override { return "GrDeviceSpaceTextureDecalFragmentProcessor"; } @@ -223,7 +223,7 @@ public: return str; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; private: TextureSampler fTextureSampler; diff --git a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp index 490cb39990..f2c026fdfc 100644 --- a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp +++ b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp @@ -29,11 +29,11 @@ static inline bool does_cpu_blend_impl_match_gpu(SkBlendMode mode) { class ComposeTwoFragmentProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrFragmentProcessor> src, - sk_sp<GrFragmentProcessor> dst, - SkBlendMode mode) { - return sk_sp<GrFragmentProcessor>(new ComposeTwoFragmentProcessor(std::move(src), - std::move(dst), mode)); + static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> src, + std::unique_ptr<GrFragmentProcessor> dst, + SkBlendMode mode) { + return std::unique_ptr<GrFragmentProcessor>( + new ComposeTwoFragmentProcessor(std::move(src), std::move(dst), mode)); } const char* name() const override { return "ComposeTwo"; } @@ -50,16 +50,15 @@ public: return str; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; SkBlendMode getMode() const { return fMode; } private: - ComposeTwoFragmentProcessor(sk_sp<GrFragmentProcessor> src, - sk_sp<GrFragmentProcessor> dst, + ComposeTwoFragmentProcessor(std::unique_ptr<GrFragmentProcessor> src, + std::unique_ptr<GrFragmentProcessor> dst, SkBlendMode mode) - : INHERITED(OptFlags(src.get(), dst.get(), mode)) - , fMode(mode) { + : INHERITED(OptFlags(src.get(), dst.get(), mode)), fMode(mode) { this->initClassID<ComposeTwoFragmentProcessor>(); SkDEBUGCODE(int shaderAChildIndex = )this->registerChildProcessor(std::move(src)); SkDEBUGCODE(int shaderBChildIndex = )this->registerChildProcessor(std::move(dst)); @@ -182,24 +181,25 @@ private: GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ComposeTwoFragmentProcessor); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> ComposeTwoFragmentProcessor::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> ComposeTwoFragmentProcessor::TestCreate( + GrProcessorTestData* d) { // Create two random frag procs. - sk_sp<GrFragmentProcessor> fpA(GrProcessorUnitTest::MakeChildFP(d)); - sk_sp<GrFragmentProcessor> fpB(GrProcessorUnitTest::MakeChildFP(d)); + std::unique_ptr<GrFragmentProcessor> fpA(GrProcessorUnitTest::MakeChildFP(d)); + std::unique_ptr<GrFragmentProcessor> fpB(GrProcessorUnitTest::MakeChildFP(d)); SkBlendMode mode; do { mode = static_cast<SkBlendMode>(d->fRandom->nextRangeU(0, (int)SkBlendMode::kLastMode)); } while (SkBlendMode::kClear == mode || SkBlendMode::kSrc == mode || SkBlendMode::kDst == mode); - return sk_sp<GrFragmentProcessor>( - new ComposeTwoFragmentProcessor(std::move(fpA), std::move(fpB), mode)); + return std::unique_ptr<GrFragmentProcessor>( + new ComposeTwoFragmentProcessor(std::move(fpA), std::move(fpB), mode)); } #endif -sk_sp<GrFragmentProcessor> ComposeTwoFragmentProcessor::clone() const { +std::unique_ptr<GrFragmentProcessor> ComposeTwoFragmentProcessor::clone() const { auto src = this->childProcessor(0).clone(); auto dst = this->childProcessor(1).clone(); - return sk_sp<GrFragmentProcessor>( + return std::unique_ptr<GrFragmentProcessor>( new ComposeTwoFragmentProcessor(std::move(src), std::move(dst), fMode)); } @@ -242,8 +242,10 @@ void GLComposeTwoFragmentProcessor::emitCode(EmitArgs& args) { } } -sk_sp<GrFragmentProcessor> GrXfermodeFragmentProcessor::MakeFromTwoProcessors( - sk_sp<GrFragmentProcessor> src, sk_sp<GrFragmentProcessor> dst, SkBlendMode mode) { +std::unique_ptr<GrFragmentProcessor> GrXfermodeFragmentProcessor::MakeFromTwoProcessors( + std::unique_ptr<GrFragmentProcessor> src, + std::unique_ptr<GrFragmentProcessor> dst, + SkBlendMode mode) { switch (mode) { case SkBlendMode::kClear: return GrConstColorProcessor::Make(GrColor4f::TransparentBlack(), @@ -266,13 +268,13 @@ public: kSrc_Child, }; - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrFragmentProcessor> fp, SkBlendMode mode, - Child child) { + static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> fp, + SkBlendMode mode, Child child) { if (!fp) { return nullptr; } - return sk_sp<GrFragmentProcessor>(new ComposeOneFragmentProcessor(std::move(fp), - mode, child)); + return std::unique_ptr<GrFragmentProcessor>( + new ComposeOneFragmentProcessor(std::move(fp), mode, child)); } const char* name() const override { return "ComposeOne"; } @@ -290,7 +292,7 @@ public: return str; } - sk_sp<GrFragmentProcessor> clone() const override; + std::unique_ptr<GrFragmentProcessor> clone() const override; SkBlendMode mode() const { return fMode; } @@ -417,10 +419,9 @@ private: } private: - ComposeOneFragmentProcessor(sk_sp<GrFragmentProcessor> fp, SkBlendMode mode, Child child) - : INHERITED(OptFlags(fp.get(), mode, child)) - , fMode(mode) - , fChild(child) { + ComposeOneFragmentProcessor(std::unique_ptr<GrFragmentProcessor> fp, SkBlendMode mode, + Child child) + : INHERITED(OptFlags(fp.get(), mode, child)), fMode(mode), fChild(child) { this->initClassID<ComposeOneFragmentProcessor>(); SkDEBUGCODE(int dstIndex =) this->registerChildProcessor(std::move(fp)); SkASSERT(0 == dstIndex); @@ -474,11 +475,12 @@ private: GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ComposeOneFragmentProcessor); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> ComposeOneFragmentProcessor::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> ComposeOneFragmentProcessor::TestCreate( + GrProcessorTestData* d) { // Create one random frag procs. // For now, we'll prevent either children from being a shader with children to prevent the // possibility of an arbitrarily large tree of procs. - sk_sp<GrFragmentProcessor> dst(GrProcessorUnitTest::MakeChildFP(d)); + std::unique_ptr<GrFragmentProcessor> dst(GrProcessorUnitTest::MakeChildFP(d)); SkBlendMode mode; ComposeOneFragmentProcessor::Child child; do { @@ -486,7 +488,8 @@ sk_sp<GrFragmentProcessor> ComposeOneFragmentProcessor::TestCreate(GrProcessorTe child = d->fRandom->nextBool() ? kDst_Child : kSrc_Child; } while (SkBlendMode::kClear == mode || (SkBlendMode::kDst == mode && child == kSrc_Child) || (SkBlendMode::kSrc == mode && child == kDst_Child)); - return sk_sp<GrFragmentProcessor>(new ComposeOneFragmentProcessor(std::move(dst), mode, child)); + return std::unique_ptr<GrFragmentProcessor>( + new ComposeOneFragmentProcessor(std::move(dst), mode, child)); } #endif @@ -494,8 +497,8 @@ GrGLSLFragmentProcessor* ComposeOneFragmentProcessor::onCreateGLSLInstance() con return new GLComposeOneFragmentProcessor; } -sk_sp<GrFragmentProcessor> ComposeOneFragmentProcessor::clone() const { - return sk_sp<GrFragmentProcessor>( +std::unique_ptr<GrFragmentProcessor> ComposeOneFragmentProcessor::clone() const { + return std::unique_ptr<GrFragmentProcessor>( new ComposeOneFragmentProcessor(this->childProcessor(0).clone(), fMode, fChild)); } @@ -507,8 +510,8 @@ sk_sp<GrFragmentProcessor> ComposeOneFragmentProcessor::clone() const { // ignore the original input. This could be implemented as: // RunInSeries(ConstColor(GrColor_WHITE, kIgnoreInput), inputFP). -sk_sp<GrFragmentProcessor> GrXfermodeFragmentProcessor::MakeFromDstProcessor( - sk_sp<GrFragmentProcessor> dst, SkBlendMode mode) { +std::unique_ptr<GrFragmentProcessor> GrXfermodeFragmentProcessor::MakeFromDstProcessor( + std::unique_ptr<GrFragmentProcessor> dst, SkBlendMode mode) { switch (mode) { case SkBlendMode::kClear: return GrConstColorProcessor::Make(GrColor4f::TransparentBlack(), @@ -521,8 +524,8 @@ sk_sp<GrFragmentProcessor> GrXfermodeFragmentProcessor::MakeFromDstProcessor( } } -sk_sp<GrFragmentProcessor> GrXfermodeFragmentProcessor::MakeFromSrcProcessor( - sk_sp<GrFragmentProcessor> src, SkBlendMode mode) { +std::unique_ptr<GrFragmentProcessor> GrXfermodeFragmentProcessor::MakeFromSrcProcessor( + std::unique_ptr<GrFragmentProcessor> src, SkBlendMode mode) { switch (mode) { case SkBlendMode::kClear: return GrConstColorProcessor::Make(GrColor4f::TransparentBlack(), diff --git a/src/gpu/effects/GrXfermodeFragmentProcessor.h b/src/gpu/effects/GrXfermodeFragmentProcessor.h index edc5ae71e1..c5d0c599bb 100644 --- a/src/gpu/effects/GrXfermodeFragmentProcessor.h +++ b/src/gpu/effects/GrXfermodeFragmentProcessor.h @@ -14,22 +14,24 @@ class GrFragmentProcessor; namespace GrXfermodeFragmentProcessor { - /** The color input to the returned processor is treated as the src and the passed in processor - is the dst. */ - sk_sp<GrFragmentProcessor> MakeFromDstProcessor(sk_sp<GrFragmentProcessor> dst, - SkBlendMode mode); - - /** The color input to the returned processor is treated as the dst and the passed in processor - is the src. */ - sk_sp<GrFragmentProcessor> MakeFromSrcProcessor(sk_sp<GrFragmentProcessor> src, - SkBlendMode mode); - - /** Takes the input color, which is assumed to be unpremultiplied, passes it as an opaque color - to both src and dst. The outputs of a src and dst are blended using mode and the original - input's alpha is applied to the blended color to produce a premul output. */ - sk_sp<GrFragmentProcessor> MakeFromTwoProcessors(sk_sp<GrFragmentProcessor> src, - sk_sp<GrFragmentProcessor> dst, - SkBlendMode mode); + +/** The color input to the returned processor is treated as the src and the passed in processor is + the dst. */ +std::unique_ptr<GrFragmentProcessor> MakeFromDstProcessor(std::unique_ptr<GrFragmentProcessor> dst, + SkBlendMode mode); + +/** The color input to the returned processor is treated as the dst and the passed in processor is + the src. */ +std::unique_ptr<GrFragmentProcessor> MakeFromSrcProcessor(std::unique_ptr<GrFragmentProcessor> src, + SkBlendMode mode); + +/** Takes the input color, which is assumed to be unpremultiplied, passes it as an opaque color + to both src and dst. The outputs of a src and dst are blended using mode and the original + input's alpha is applied to the blended color to produce a premul output. */ +std::unique_ptr<GrFragmentProcessor> MakeFromTwoProcessors(std::unique_ptr<GrFragmentProcessor> src, + std::unique_ptr<GrFragmentProcessor> dst, + SkBlendMode mode); + }; #endif diff --git a/src/gpu/effects/GrYUVEffect.cpp b/src/gpu/effects/GrYUVEffect.cpp index 5b2eb7e3ae..80e87c2391 100644 --- a/src/gpu/effects/GrYUVEffect.cpp +++ b/src/gpu/effects/GrYUVEffect.cpp @@ -62,10 +62,11 @@ static const float kRec709InverseConversionMatrix[16] = { class YUVtoRGBEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> yProxy, - sk_sp<GrTextureProxy> uProxy, - sk_sp<GrTextureProxy> vProxy, const SkISize sizes[3], - SkYUVColorSpace colorSpace, bool nv12) { + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> yProxy, + sk_sp<GrTextureProxy> uProxy, + sk_sp<GrTextureProxy> vProxy, + const SkISize sizes[3], + SkYUVColorSpace colorSpace, bool nv12) { SkScalar w[3], h[3]; w[0] = SkIntToScalar(sizes[0].fWidth); h[0] = SkIntToScalar(sizes[0].fHeight); @@ -85,15 +86,15 @@ public: (sizes[2].fHeight != sizes[0].fHeight)) ? GrSamplerParams::kBilerp_FilterMode : GrSamplerParams::kNone_FilterMode; - return sk_sp<GrFragmentProcessor>(new YUVtoRGBEffect( - std::move(yProxy), std::move(uProxy), std::move(vProxy), - yuvMatrix, uvFilterMode, colorSpace, nv12)); + return std::unique_ptr<GrFragmentProcessor>( + new YUVtoRGBEffect(std::move(yProxy), std::move(uProxy), std::move(vProxy), + yuvMatrix, uvFilterMode, colorSpace, nv12)); } const char* name() const override { return "YUV to RGB"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new YUVtoRGBEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new YUVtoRGBEffect(*this)); } SkYUVColorSpace getColorSpace() const { return fColorSpace; } @@ -241,15 +242,16 @@ public: kV_OutputChannels }; - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrFragmentProcessor> rgbFP, - SkYUVColorSpace colorSpace, - OutputChannels output) { - return sk_sp<GrFragmentProcessor>(new RGBToYUVEffect(std::move(rgbFP), colorSpace, output)); + static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> rgbFP, + SkYUVColorSpace colorSpace, + OutputChannels output) { + return std::unique_ptr<GrFragmentProcessor>( + new RGBToYUVEffect(std::move(rgbFP), colorSpace, output)); } const char* name() const override { return "RGBToYUV"; } - sk_sp<GrFragmentProcessor> clone() const override { + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(this->childProcessor(0).clone(), fColorSpace, fOutputChannels); } @@ -353,7 +355,7 @@ public: }; private: - RGBToYUVEffect(sk_sp<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace, + RGBToYUVEffect(std::unique_ptr<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace, OutputChannels output) // This could advertise kConstantOutputForConstantInput, but doesn't seem useful. : INHERITED(kPreservesOpaqueInput_OptimizationFlag) @@ -393,42 +395,40 @@ private: ////////////////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> GrYUVEffect::MakeYUVToRGB(sk_sp<GrTextureProxy> yProxy, - sk_sp<GrTextureProxy> uProxy, - sk_sp<GrTextureProxy> vProxy, - const SkISize sizes[3], - SkYUVColorSpace colorSpace, bool nv12) { +std::unique_ptr<GrFragmentProcessor> GrYUVEffect::MakeYUVToRGB( + sk_sp<GrTextureProxy> yProxy, sk_sp<GrTextureProxy> uProxy, sk_sp<GrTextureProxy> vProxy, + const SkISize sizes[3], SkYUVColorSpace colorSpace, bool nv12) { SkASSERT(yProxy && uProxy && vProxy && sizes); return YUVtoRGBEffect::Make(std::move(yProxy), std::move(uProxy), std::move(vProxy), sizes, colorSpace, nv12); } -sk_sp<GrFragmentProcessor> -GrYUVEffect::MakeRGBToYUV(sk_sp<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace) { +std::unique_ptr<GrFragmentProcessor> GrYUVEffect::MakeRGBToYUV( + std::unique_ptr<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace) { SkASSERT(rgbFP); return RGBToYUVEffect::Make(std::move(rgbFP), colorSpace, RGBToYUVEffect::kYUV_OutputChannels); } -sk_sp<GrFragmentProcessor> -GrYUVEffect::MakeRGBToY(sk_sp<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace) { +std::unique_ptr<GrFragmentProcessor> GrYUVEffect::MakeRGBToY( + std::unique_ptr<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace) { SkASSERT(rgbFP); return RGBToYUVEffect::Make(std::move(rgbFP), colorSpace, RGBToYUVEffect::kY_OutputChannels); } -sk_sp<GrFragmentProcessor> -GrYUVEffect::MakeRGBToUV(sk_sp<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace) { +std::unique_ptr<GrFragmentProcessor> GrYUVEffect::MakeRGBToUV( + std::unique_ptr<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace) { SkASSERT(rgbFP); return RGBToYUVEffect::Make(std::move(rgbFP), colorSpace, RGBToYUVEffect::kUV_OutputChannels); } -sk_sp<GrFragmentProcessor> -GrYUVEffect::MakeRGBToU(sk_sp<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace) { +std::unique_ptr<GrFragmentProcessor> GrYUVEffect::MakeRGBToU( + std::unique_ptr<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace) { SkASSERT(rgbFP); return RGBToYUVEffect::Make(std::move(rgbFP), colorSpace, RGBToYUVEffect::kU_OutputChannels); } -sk_sp<GrFragmentProcessor> -GrYUVEffect::MakeRGBToV(sk_sp<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace) { +std::unique_ptr<GrFragmentProcessor> GrYUVEffect::MakeRGBToV( + std::unique_ptr<GrFragmentProcessor> rgbFP, SkYUVColorSpace colorSpace) { SkASSERT(rgbFP); return RGBToYUVEffect::Make(std::move(rgbFP), colorSpace, RGBToYUVEffect::kV_OutputChannels); } diff --git a/src/gpu/effects/GrYUVEffect.h b/src/gpu/effects/GrYUVEffect.h index ae62a16562..2ea41bf13c 100644 --- a/src/gpu/effects/GrYUVEffect.h +++ b/src/gpu/effects/GrYUVEffect.h @@ -18,32 +18,38 @@ namespace GrYUVEffect { * Creates an effect that performs color conversion from YUV to RGB. The input textures are * assumed to be kA8_GrPixelConfig. */ - sk_sp<GrFragmentProcessor> MakeYUVToRGB(sk_sp<GrTextureProxy> yProxy, - sk_sp<GrTextureProxy> uProxy, - sk_sp<GrTextureProxy> vProxy, const SkISize sizes[3], - SkYUVColorSpace colorSpace, bool nv12); +std::unique_ptr<GrFragmentProcessor> MakeYUVToRGB(sk_sp<GrTextureProxy> yProxy, + sk_sp<GrTextureProxy> uProxy, + sk_sp<GrTextureProxy> vProxy, + const SkISize sizes[3], + SkYUVColorSpace colorSpace, bool nv12); - /** - * Creates a processor that performs color conversion from the passed in processor's RGB - * channels to Y, U ,and V channels. The output color is (y, u, v, a) where a is the passed in - * processor's alpha output. - */ - sk_sp<GrFragmentProcessor> MakeRGBToYUV(sk_sp<GrFragmentProcessor>, SkYUVColorSpace); +/** + * Creates a processor that performs color conversion from the passed in processor's RGB + * channels to Y, U ,and V channels. The output color is (y, u, v, a) where a is the passed in + * processor's alpha output. + */ +std::unique_ptr<GrFragmentProcessor> MakeRGBToYUV(std::unique_ptr<GrFragmentProcessor>, + SkYUVColorSpace); - /** - * Creates a processor that performs color conversion from the passed in processor's RGB - * channels to U and V channels. The output color is (u, v, 0, a) where a is the passed in - * processor's alpha output. - */ - sk_sp<GrFragmentProcessor> MakeRGBToUV(sk_sp<GrFragmentProcessor>, SkYUVColorSpace); - /** - * Creates a processor that performs color conversion from the passed in fragment processors's - * RGB channels to Y, U, or V (replicated across all four output color channels). The alpha - * output of the passed in fragment processor is ignored. - */ - sk_sp<GrFragmentProcessor> MakeRGBToY(sk_sp<GrFragmentProcessor>, SkYUVColorSpace); - sk_sp<GrFragmentProcessor> MakeRGBToU(sk_sp<GrFragmentProcessor>, SkYUVColorSpace); - sk_sp<GrFragmentProcessor> MakeRGBToV(sk_sp<GrFragmentProcessor>, SkYUVColorSpace); +/** + * Creates a processor that performs color conversion from the passed in processor's RGB + * channels to U and V channels. The output color is (u, v, 0, a) where a is the passed in + * processor's alpha output. + */ +std::unique_ptr<GrFragmentProcessor> MakeRGBToUV(std::unique_ptr<GrFragmentProcessor>, + SkYUVColorSpace); +/** + * Creates a processor that performs color conversion from the passed in fragment processors's + * RGB channels to Y, U, or V (replicated across all four output color channels). The alpha + * output of the passed in fragment processor is ignored. + */ +std::unique_ptr<GrFragmentProcessor> MakeRGBToY(std::unique_ptr<GrFragmentProcessor>, + SkYUVColorSpace); +std::unique_ptr<GrFragmentProcessor> MakeRGBToU(std::unique_ptr<GrFragmentProcessor>, + SkYUVColorSpace); +std::unique_ptr<GrFragmentProcessor> MakeRGBToV(std::unique_ptr<GrFragmentProcessor>, + SkYUVColorSpace); }; #endif diff --git a/src/shaders/SkColorFilterShader.cpp b/src/shaders/SkColorFilterShader.cpp index a2d5433bad..bacfc37814 100644 --- a/src/shaders/SkColorFilterShader.cpp +++ b/src/shaders/SkColorFilterShader.cpp @@ -56,20 +56,19 @@ sk_sp<SkShader> SkColorFilterShader::onMakeColorSpace(SkColorSpaceXformer* xform #if SK_SUPPORT_GPU ///////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> SkColorFilterShader::asFragmentProcessor(const AsFPArgs& args) const { - - sk_sp<GrFragmentProcessor> fp1(as_SB(fShader)->asFragmentProcessor(args)); +std::unique_ptr<GrFragmentProcessor> SkColorFilterShader::asFragmentProcessor( + const AsFPArgs& args) const { + auto fp1 = as_SB(fShader)->asFragmentProcessor(args); if (!fp1) { return nullptr; } - sk_sp<GrFragmentProcessor> fp2(fFilter->asFragmentProcessor(args.fContext, - args.fDstColorSpace)); + auto fp2 = fFilter->asFragmentProcessor(args.fContext, args.fDstColorSpace); if (!fp2) { return fp1; } - sk_sp<GrFragmentProcessor> fpSeries[] = { std::move(fp1), std::move(fp2) }; + std::unique_ptr<GrFragmentProcessor> fpSeries[] = { std::move(fp1), std::move(fp2) }; return GrFragmentProcessor::RunInSeries(fpSeries, 2); } #endif diff --git a/src/shaders/SkColorFilterShader.h b/src/shaders/SkColorFilterShader.h index 3a1878fb2e..9cd199e7b1 100644 --- a/src/shaders/SkColorFilterShader.h +++ b/src/shaders/SkColorFilterShader.h @@ -18,7 +18,7 @@ public: SkColorFilterShader(sk_sp<SkShader> shader, sk_sp<SkColorFilter> filter); #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif SK_TO_STRING_OVERRIDE() diff --git a/src/shaders/SkColorShader.cpp b/src/shaders/SkColorShader.cpp index e718cb0fbf..33ebc53f3f 100644 --- a/src/shaders/SkColorShader.cpp +++ b/src/shaders/SkColorShader.cpp @@ -89,7 +89,8 @@ SkShader::GradientType SkColorShader::asAGradient(GradientInfo* info) const { #include "SkGr.h" #include "effects/GrConstColorProcessor.h" -sk_sp<GrFragmentProcessor> SkColorShader::asFragmentProcessor(const AsFPArgs& args) const { +std::unique_ptr<GrFragmentProcessor> SkColorShader::asFragmentProcessor( + const AsFPArgs& args) const { GrColor4f color = SkColorToPremulGrColor4f(fColor, args.fDstColorSpace); return GrConstColorProcessor::Make(color, GrConstColorProcessor::kModulateA_InputMode); } @@ -206,7 +207,8 @@ SkShader::GradientType SkColor4Shader::asAGradient(GradientInfo* info) const { #include "SkGr.h" #include "effects/GrConstColorProcessor.h" #include "GrColorSpaceXform.h" -sk_sp<GrFragmentProcessor> SkColor4Shader::asFragmentProcessor(const AsFPArgs& args) const { +std::unique_ptr<GrFragmentProcessor> SkColor4Shader::asFragmentProcessor( + const AsFPArgs& args) const { sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(fColorSpace.get(), args.fDstColorSpace); GrColor4f color = GrColor4f::FromSkColor4f(fColor4); diff --git a/src/shaders/SkColorShader.h b/src/shaders/SkColorShader.h index f1bd4784f2..7d035f5ce2 100644 --- a/src/shaders/SkColorShader.h +++ b/src/shaders/SkColorShader.h @@ -47,7 +47,7 @@ public: GradientType asAGradient(GradientInfo* info) const override; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif SK_TO_STRING_OVERRIDE() @@ -104,7 +104,7 @@ public: GradientType asAGradient(GradientInfo* info) const override; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif SK_TO_STRING_OVERRIDE() diff --git a/src/shaders/SkComposeShader.cpp b/src/shaders/SkComposeShader.cpp index 7b3714003c..9799a1c142 100644 --- a/src/shaders/SkComposeShader.cpp +++ b/src/shaders/SkComposeShader.cpp @@ -125,7 +125,8 @@ bool SkComposeShader::onAppendStages(SkRasterPipeline* pipeline, SkColorSpace* d ///////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> SkComposeShader::asFragmentProcessor(const AsFPArgs& args) const { +std::unique_ptr<GrFragmentProcessor> SkComposeShader::asFragmentProcessor( + const AsFPArgs& args) const { if (this->isJustMode()) { SkASSERT(fMode != SkBlendMode::kSrc && fMode != SkBlendMode::kDst); // caught in factory if (fMode == SkBlendMode::kClear) { @@ -134,11 +135,11 @@ sk_sp<GrFragmentProcessor> SkComposeShader::asFragmentProcessor(const AsFPArgs& } } - sk_sp<GrFragmentProcessor> fpA(as_SB(fDst)->asFragmentProcessor(args)); + std::unique_ptr<GrFragmentProcessor> fpA(as_SB(fDst)->asFragmentProcessor(args)); if (!fpA) { return nullptr; } - sk_sp<GrFragmentProcessor> fpB(as_SB(fSrc)->asFragmentProcessor(args)); + std::unique_ptr<GrFragmentProcessor> fpB(as_SB(fSrc)->asFragmentProcessor(args)); if (!fpB) { return nullptr; } diff --git a/src/shaders/SkComposeShader.h b/src/shaders/SkComposeShader.h index 1389742c3a..34abf62d53 100644 --- a/src/shaders/SkComposeShader.h +++ b/src/shaders/SkComposeShader.h @@ -23,7 +23,7 @@ public: } #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif #ifdef SK_DEBUGx diff --git a/src/shaders/SkImageShader.cpp b/src/shaders/SkImageShader.cpp index 609ad4b869..edd1f41dca 100644 --- a/src/shaders/SkImageShader.cpp +++ b/src/shaders/SkImageShader.cpp @@ -167,8 +167,8 @@ void SkImageShader::toString(SkString* str) const { #include "effects/GrBicubicEffect.h" #include "effects/GrSimpleTextureEffect.h" -sk_sp<GrFragmentProcessor> SkImageShader::asFragmentProcessor(const AsFPArgs& args) const { - +std::unique_ptr<GrFragmentProcessor> SkImageShader::asFragmentProcessor( + const AsFPArgs& args) const { SkMatrix lmInverse; if (!this->getLocalMatrix().invert(&lmInverse)) { return nullptr; @@ -207,7 +207,7 @@ sk_sp<GrFragmentProcessor> SkImageShader::asFragmentProcessor(const AsFPArgs& ar sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(texColorSpace.get(), args.fDstColorSpace); - sk_sp<GrFragmentProcessor> inner; + std::unique_ptr<GrFragmentProcessor> inner; if (doBicubic) { inner = GrBicubicEffect::Make(std::move(proxy), std::move(colorSpaceXform), lmInverse, tm); @@ -219,7 +219,7 @@ sk_sp<GrFragmentProcessor> SkImageShader::asFragmentProcessor(const AsFPArgs& ar if (isAlphaOnly) { return inner; } - return sk_sp<GrFragmentProcessor>(GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner))); + return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner)); } #endif diff --git a/src/shaders/SkImageShader.h b/src/shaders/SkImageShader.h index b499b927a5..8e592e504c 100644 --- a/src/shaders/SkImageShader.h +++ b/src/shaders/SkImageShader.h @@ -24,7 +24,7 @@ public: SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkImageShader) #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif SkImageShader(sk_sp<SkImage>, TileMode tx, TileMode ty, const SkMatrix* localMatrix); diff --git a/src/shaders/SkLocalMatrixShader.cpp b/src/shaders/SkLocalMatrixShader.cpp index e21e4a84b7..254092dc44 100644 --- a/src/shaders/SkLocalMatrixShader.cpp +++ b/src/shaders/SkLocalMatrixShader.cpp @@ -12,7 +12,8 @@ #endif #if SK_SUPPORT_GPU -sk_sp<GrFragmentProcessor> SkLocalMatrixShader::asFragmentProcessor(const AsFPArgs& args) const { +std::unique_ptr<GrFragmentProcessor> SkLocalMatrixShader::asFragmentProcessor( + const AsFPArgs& args) const { SkMatrix tmp = this->getLocalMatrix(); if (args.fLocalMatrix) { tmp.preConcat(*args.fLocalMatrix); diff --git a/src/shaders/SkLocalMatrixShader.h b/src/shaders/SkLocalMatrixShader.h index 3ae44cf559..407c30dc52 100644 --- a/src/shaders/SkLocalMatrixShader.h +++ b/src/shaders/SkLocalMatrixShader.h @@ -28,7 +28,7 @@ public: } #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif sk_sp<SkShader> makeAsALocalMatrixShader(SkMatrix* localMatrix) const override { diff --git a/src/shaders/SkPerlinNoiseShader.cpp b/src/shaders/SkPerlinNoiseShader.cpp index 0ce007a55a..cc9a56959d 100644 --- a/src/shaders/SkPerlinNoiseShader.cpp +++ b/src/shaders/SkPerlinNoiseShader.cpp @@ -350,7 +350,7 @@ public: }; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif SK_TO_STRING_OVERRIDE() @@ -693,22 +693,20 @@ private: class GrPerlinNoise2Effect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(SkPerlinNoiseShaderImpl::Type type, - int numOctaves, bool stitchTiles, - std::unique_ptr<SkPerlinNoiseShaderImpl::PaintingData> paintingData, - sk_sp<GrTextureProxy> permutationsProxy, - sk_sp<GrTextureProxy> noiseProxy, - const SkMatrix& matrix) { - return sk_sp<GrFragmentProcessor>( - new GrPerlinNoise2Effect(type, numOctaves, stitchTiles, - std::move(paintingData), - std::move(permutationsProxy), std::move(noiseProxy), matrix)); + static std::unique_ptr<GrFragmentProcessor> Make( + SkPerlinNoiseShaderImpl::Type type, int numOctaves, bool stitchTiles, + std::unique_ptr<SkPerlinNoiseShaderImpl::PaintingData> paintingData, + sk_sp<GrTextureProxy> permutationsProxy, sk_sp<GrTextureProxy> noiseProxy, + const SkMatrix& matrix) { + return std::unique_ptr<GrFragmentProcessor>(new GrPerlinNoise2Effect( + type, numOctaves, stitchTiles, std::move(paintingData), + std::move(permutationsProxy), std::move(noiseProxy), matrix)); } const char* name() const override { return "PerlinNoise"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrPerlinNoise2Effect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrPerlinNoise2Effect(*this)); } const SkPerlinNoiseShaderImpl::StitchData& stitchData() const { return fPaintingData->fStitchDataInit; } @@ -789,7 +787,7 @@ private: GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrPerlinNoise2Effect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrPerlinNoise2Effect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrPerlinNoise2Effect::TestCreate(GrProcessorTestData* d) { int numOctaves = d->fRandom->nextRangeU(2, 10); bool stitchTiles = d->fRandom->nextBool(); SkScalar seed = SkIntToScalar(d->fRandom->nextU()); @@ -1128,21 +1126,20 @@ private: class GrImprovedPerlinNoiseEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(int octaves, SkScalar z, - std::unique_ptr<SkPerlinNoiseShaderImpl::PaintingData> paintingData, - sk_sp<GrTextureProxy> permutationsProxy, - sk_sp<GrTextureProxy> gradientProxy, - const SkMatrix& matrix) { - return sk_sp<GrFragmentProcessor>( - new GrImprovedPerlinNoiseEffect(octaves, z, std::move(paintingData), - std::move(permutationsProxy), - std::move(gradientProxy), matrix)); + static std::unique_ptr<GrFragmentProcessor> Make( + int octaves, SkScalar z, + std::unique_ptr<SkPerlinNoiseShaderImpl::PaintingData> paintingData, + sk_sp<GrTextureProxy> permutationsProxy, sk_sp<GrTextureProxy> gradientProxy, + const SkMatrix& matrix) { + return std::unique_ptr<GrFragmentProcessor>(new GrImprovedPerlinNoiseEffect( + octaves, z, std::move(paintingData), std::move(permutationsProxy), + std::move(gradientProxy), matrix)); } const char* name() const override { return "ImprovedPerlinNoise"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrImprovedPerlinNoiseEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrImprovedPerlinNoiseEffect(*this)); } const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency; } @@ -1213,7 +1210,8 @@ private: GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrImprovedPerlinNoiseEffect); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrImprovedPerlinNoiseEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrImprovedPerlinNoiseEffect::TestCreate( + GrProcessorTestData* d) { SkScalar baseFrequencyX = d->fRandom->nextRangeScalar(0.01f, 0.99f); SkScalar baseFrequencyY = d->fRandom->nextRangeScalar(0.01f, @@ -1387,7 +1385,8 @@ void GrGLImprovedPerlinNoise::onSetData(const GrGLSLProgramDataManager& pdman, } ///////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> SkPerlinNoiseShaderImpl::asFragmentProcessor(const AsFPArgs& args) const { +std::unique_ptr<GrFragmentProcessor> SkPerlinNoiseShaderImpl::asFragmentProcessor( + const AsFPArgs& args) const { SkASSERT(args.fContext); SkMatrix localMatrix = this->getLocalMatrix(); @@ -1434,9 +1433,9 @@ sk_sp<GrFragmentProcessor> SkPerlinNoiseShaderImpl::asFragmentProcessor(const As // TODO: Either treat the output of this shader as sRGB or allow client to specify a // color space of the noise. Either way, this case (and the GLSL) need to convert to // the destination. - sk_sp<GrFragmentProcessor> inner( - GrConstColorProcessor::Make(GrColor4f::FromGrColor(0x80404040), - GrConstColorProcessor::kModulateRGBA_InputMode)); + auto inner = + GrConstColorProcessor::Make(GrColor4f::FromGrColor(0x80404040), + GrConstColorProcessor::kModulateRGBA_InputMode); return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner)); } // Emit zero. @@ -1451,14 +1450,13 @@ sk_sp<GrFragmentProcessor> SkPerlinNoiseShaderImpl::asFragmentProcessor(const As paintingData->getNoiseBitmap()); if (permutationsProxy && noiseProxy) { - sk_sp<GrFragmentProcessor> inner( - GrPerlinNoise2Effect::Make(fType, - fNumOctaves, - fStitchTiles, - std::move(paintingData), - std::move(permutationsProxy), - std::move(noiseProxy), - m)); + auto inner = GrPerlinNoise2Effect::Make(fType, + fNumOctaves, + fStitchTiles, + std::move(paintingData), + std::move(permutationsProxy), + std::move(noiseProxy), + m); return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner)); } return nullptr; diff --git a/src/shaders/SkPictureShader.cpp b/src/shaders/SkPictureShader.cpp index 4c746ee94f..a14c211fba 100644 --- a/src/shaders/SkPictureShader.cpp +++ b/src/shaders/SkPictureShader.cpp @@ -373,7 +373,8 @@ void SkPictureShader::toString(SkString* str) const { #endif #if SK_SUPPORT_GPU -sk_sp<GrFragmentProcessor> SkPictureShader::asFragmentProcessor(const AsFPArgs& args) const { +std::unique_ptr<GrFragmentProcessor> SkPictureShader::asFragmentProcessor( + const AsFPArgs& args) const { int maxTextureSize = 0; if (args.fContext) { maxTextureSize = args.fContext->caps()->maxTextureSize(); diff --git a/src/shaders/SkPictureShader.h b/src/shaders/SkPictureShader.h index 3d58d6db38..ee1ffb52a0 100644 --- a/src/shaders/SkPictureShader.h +++ b/src/shaders/SkPictureShader.h @@ -32,7 +32,7 @@ public: SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPictureShader) #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif protected: diff --git a/src/shaders/SkShader.cpp b/src/shaders/SkShader.cpp index 5540b2d95f..d288054a99 100644 --- a/src/shaders/SkShader.cpp +++ b/src/shaders/SkShader.cpp @@ -163,7 +163,7 @@ SkShader::GradientType SkShader::asAGradient(GradientInfo* info) const { } #if SK_SUPPORT_GPU -sk_sp<GrFragmentProcessor> SkShaderBase::asFragmentProcessor(const AsFPArgs&) const { +std::unique_ptr<GrFragmentProcessor> SkShaderBase::asFragmentProcessor(const AsFPArgs&) const { return nullptr; } #endif diff --git a/src/shaders/SkShaderBase.h b/src/shaders/SkShaderBase.h index 99cace22f9..8f64efea82 100644 --- a/src/shaders/SkShaderBase.h +++ b/src/shaders/SkShaderBase.h @@ -167,7 +167,7 @@ public: * The returned GrFragmentProcessor should expect an unpremultiplied input color and * produce a premultiplied output. */ - virtual sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const; + virtual std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const; #endif /** diff --git a/src/shaders/gradients/SkLinearGradient.cpp b/src/shaders/gradients/SkLinearGradient.cpp index 0ed5350c6e..551368b94d 100644 --- a/src/shaders/gradients/SkLinearGradient.cpp +++ b/src/shaders/gradients/SkLinearGradient.cpp @@ -333,15 +333,15 @@ class GrLinearGradient : public GrGradientEffect { public: class GLSLLinearProcessor; - static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args) { - auto processor = sk_sp<GrLinearGradient>(new GrLinearGradient(args)); + static std::unique_ptr<GrFragmentProcessor> Make(const CreateArgs& args) { + auto processor = std::unique_ptr<GrLinearGradient>(new GrLinearGradient(args)); return processor->isValid() ? std::move(processor) : nullptr; } const char* name() const override { return "Linear Gradient"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrLinearGradient(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrLinearGradient(*this)); } private: @@ -396,7 +396,7 @@ void GrLinearGradient::onGetGLSLProcessorKey(const GrShaderCaps& caps, GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrLinearGradient); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrLinearGradient::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrLinearGradient::TestCreate(GrProcessorTestData* d) { SkPoint points[] = {{d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}, {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}}; @@ -407,7 +407,7 @@ sk_sp<GrFragmentProcessor> GrLinearGradient::TestCreate(GrProcessorTestData* d) SkGradientShader::MakeLinear(points, params.fColors, params.fStops, params.fColorCount, params.fTileMode); GrTest::TestAsFPArgs asFPArgs(d); - sk_sp<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); + std::unique_ptr<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); GrAlwaysAssert(fp); return fp; } @@ -432,7 +432,8 @@ void GrLinearGradient::GLSLLinearProcessor::emitCode(EmitArgs& args) { ///////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> SkLinearGradient::asFragmentProcessor(const AsFPArgs& args) const { +std::unique_ptr<GrFragmentProcessor> SkLinearGradient::asFragmentProcessor( + const AsFPArgs& args) const { SkASSERT(args.fContext); SkMatrix matrix; @@ -450,9 +451,9 @@ sk_sp<GrFragmentProcessor> SkLinearGradient::asFragmentProcessor(const AsFPArgs& sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(fColorSpace.get(), args.fDstColorSpace); - sk_sp<GrFragmentProcessor> inner(GrLinearGradient::Make( - GrGradientEffect::CreateArgs(args.fContext, this, &matrix, fTileMode, - std::move(colorSpaceXform), SkToBool(args.fDstColorSpace)))); + auto inner = GrLinearGradient::Make(GrGradientEffect::CreateArgs( + args.fContext, this, &matrix, fTileMode, std::move(colorSpaceXform), + SkToBool(args.fDstColorSpace))); if (!inner) { return nullptr; } diff --git a/src/shaders/gradients/SkLinearGradient.h b/src/shaders/gradients/SkLinearGradient.h index c0ba7f4dbf..64db9dcdb3 100644 --- a/src/shaders/gradients/SkLinearGradient.h +++ b/src/shaders/gradients/SkLinearGradient.h @@ -52,7 +52,7 @@ public: GradientType asAGradient(GradientInfo* info) const override; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif SK_TO_STRING_OVERRIDE() diff --git a/src/shaders/gradients/SkRadialGradient.cpp b/src/shaders/gradients/SkRadialGradient.cpp index 02086ea9fa..94d823c90c 100644 --- a/src/shaders/gradients/SkRadialGradient.cpp +++ b/src/shaders/gradients/SkRadialGradient.cpp @@ -68,15 +68,15 @@ class GrRadialGradient : public GrGradientEffect { public: class GLSLRadialProcessor; - static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args) { - auto processor = sk_sp<GrRadialGradient>(new GrRadialGradient(args)); + static std::unique_ptr<GrFragmentProcessor> Make(const CreateArgs& args) { + auto processor = std::unique_ptr<GrRadialGradient>(new GrRadialGradient(args)); return processor->isValid() ? std::move(processor) : nullptr; } const char* name() const override { return "Radial Gradient"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrRadialGradient(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrRadialGradient(*this)); } private: @@ -132,7 +132,7 @@ void GrRadialGradient::onGetGLSLProcessorKey(const GrShaderCaps& caps, GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRadialGradient); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrRadialGradient::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrRadialGradient::TestCreate(GrProcessorTestData* d) { sk_sp<SkShader> shader; do { RandomGradientParams params(d->fRandom); @@ -147,7 +147,7 @@ sk_sp<GrFragmentProcessor> GrRadialGradient::TestCreate(GrProcessorTestData* d) params.fTileMode); } while (!shader); GrTest::TestAsFPArgs asFPArgs(d); - sk_sp<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); + std::unique_ptr<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); GrAlwaysAssert(fp); return fp; } @@ -172,7 +172,8 @@ void GrRadialGradient::GLSLRadialProcessor::emitCode(EmitArgs& args) { ///////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> SkRadialGradient::asFragmentProcessor(const AsFPArgs& args) const { +std::unique_ptr<GrFragmentProcessor> SkRadialGradient::asFragmentProcessor( + const AsFPArgs& args) const { SkASSERT(args.fContext); SkMatrix matrix; @@ -189,9 +190,9 @@ sk_sp<GrFragmentProcessor> SkRadialGradient::asFragmentProcessor(const AsFPArgs& matrix.postConcat(fPtsToUnit); sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(fColorSpace.get(), args.fDstColorSpace); - sk_sp<GrFragmentProcessor> inner(GrRadialGradient::Make( - GrGradientEffect::CreateArgs(args.fContext, this, &matrix, fTileMode, - std::move(colorSpaceXform), SkToBool(args.fDstColorSpace)))); + auto inner = GrRadialGradient::Make(GrGradientEffect::CreateArgs( + args.fContext, this, &matrix, fTileMode, std::move(colorSpaceXform), + SkToBool(args.fDstColorSpace))); if (!inner) { return nullptr; } diff --git a/src/shaders/gradients/SkRadialGradient.h b/src/shaders/gradients/SkRadialGradient.h index 8cd7df2680..6a6dadfbc4 100644 --- a/src/shaders/gradients/SkRadialGradient.h +++ b/src/shaders/gradients/SkRadialGradient.h @@ -16,7 +16,7 @@ public: GradientType asAGradient(GradientInfo* info) const override; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif SK_TO_STRING_OVERRIDE() diff --git a/src/shaders/gradients/SkSweepGradient.cpp b/src/shaders/gradients/SkSweepGradient.cpp index 011474ca24..87b82fdfac 100644 --- a/src/shaders/gradients/SkSweepGradient.cpp +++ b/src/shaders/gradients/SkSweepGradient.cpp @@ -74,16 +74,16 @@ class GrSweepGradient : public GrGradientEffect { public: class GLSLSweepProcessor; - static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, SkScalar tBias, - SkScalar tScale) { - auto processor = sk_sp<GrSweepGradient>(new GrSweepGradient(args, tBias, tScale)); + static std::unique_ptr<GrFragmentProcessor> Make(const CreateArgs& args, SkScalar tBias, + SkScalar tScale) { + auto processor = std::unique_ptr<GrSweepGradient>(new GrSweepGradient(args, tBias, tScale)); return processor->isValid() ? std::move(processor) : nullptr; } const char* name() const override { return "Sweep Gradient"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new GrSweepGradient(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new GrSweepGradient(*this)); } private: @@ -176,7 +176,7 @@ void GrSweepGradient::onGetGLSLProcessorKey(const GrShaderCaps& caps, GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSweepGradient); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> GrSweepGradient::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> GrSweepGradient::TestCreate(GrProcessorTestData* d) { SkPoint center = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; RandomGradientParams params(d->fRandom); @@ -186,7 +186,7 @@ sk_sp<GrFragmentProcessor> GrSweepGradient::TestCreate(GrProcessorTestData* d) { SkGradientShader::MakeSweep(center.fX, center.fY, params.fColors, params.fStops, params.fColorCount); GrTest::TestAsFPArgs asFPArgs(d); - sk_sp<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); + std::unique_ptr<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); GrAlwaysAssert(fp); return fp; } @@ -229,8 +229,8 @@ void GrSweepGradient::GLSLSweepProcessor::emitCode(EmitArgs& args) { ///////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> SkSweepGradient::asFragmentProcessor(const AsFPArgs& args) const { - +std::unique_ptr<GrFragmentProcessor> SkSweepGradient::asFragmentProcessor( + const AsFPArgs& args) const { SkMatrix matrix; if (!this->getLocalMatrix().invert(&matrix)) { return nullptr; @@ -246,10 +246,10 @@ sk_sp<GrFragmentProcessor> SkSweepGradient::asFragmentProcessor(const AsFPArgs& sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(fColorSpace.get(), args.fDstColorSpace); - sk_sp<GrFragmentProcessor> inner(GrSweepGradient::Make( - GrGradientEffect::CreateArgs(args.fContext, this, &matrix, fTileMode, - std::move(colorSpaceXform), SkToBool(args.fDstColorSpace)), - fTBias, fTScale)); + auto inner = GrSweepGradient::Make( + GrGradientEffect::CreateArgs(args.fContext, this, &matrix, fTileMode, + std::move(colorSpaceXform), SkToBool(args.fDstColorSpace)), + fTBias, fTScale); if (!inner) { return nullptr; } diff --git a/src/shaders/gradients/SkSweepGradient.h b/src/shaders/gradients/SkSweepGradient.h index b42f270d5c..061d699887 100644 --- a/src/shaders/gradients/SkSweepGradient.h +++ b/src/shaders/gradients/SkSweepGradient.h @@ -17,7 +17,7 @@ public: GradientType asAGradient(GradientInfo* info) const override; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif SK_TO_STRING_OVERRIDE() diff --git a/src/shaders/gradients/SkTwoPointConicalGradient.cpp b/src/shaders/gradients/SkTwoPointConicalGradient.cpp index 0bee74fe38..a1634727a9 100644 --- a/src/shaders/gradients/SkTwoPointConicalGradient.cpp +++ b/src/shaders/gradients/SkTwoPointConicalGradient.cpp @@ -133,14 +133,14 @@ void SkTwoPointConicalGradient::flatten(SkWriteBuffer& buffer) const { #include "SkGr.h" #include "SkTwoPointConicalGradient_gpu.h" -sk_sp<GrFragmentProcessor> SkTwoPointConicalGradient::asFragmentProcessor( +std::unique_ptr<GrFragmentProcessor> SkTwoPointConicalGradient::asFragmentProcessor( const AsFPArgs& args) const { SkASSERT(args.fContext); sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(fColorSpace.get(), args.fDstColorSpace); - sk_sp<GrFragmentProcessor> inner(Gr2PtConicalGradientEffect::Make( - GrGradientEffect::CreateArgs(args.fContext, this, args.fLocalMatrix, fTileMode, - std::move(colorSpaceXform), SkToBool(args.fDstColorSpace)))); + auto inner = Gr2PtConicalGradientEffect::Make(GrGradientEffect::CreateArgs( + args.fContext, this, args.fLocalMatrix, fTileMode, std::move(colorSpaceXform), + SkToBool(args.fDstColorSpace))); if (!inner) { return nullptr; } diff --git a/src/shaders/gradients/SkTwoPointConicalGradient.h b/src/shaders/gradients/SkTwoPointConicalGradient.h index 408f31d8d3..4b2827117c 100644 --- a/src/shaders/gradients/SkTwoPointConicalGradient.h +++ b/src/shaders/gradients/SkTwoPointConicalGradient.h @@ -19,7 +19,7 @@ public: SkShader::GradientType asAGradient(GradientInfo* info) const override; #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif bool isOpaque() const override; diff --git a/src/shaders/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/shaders/gradients/SkTwoPointConicalGradient_gpu.cpp index 8263f88946..caada92159 100644 --- a/src/shaders/gradients/SkTwoPointConicalGradient_gpu.cpp +++ b/src/shaders/gradients/SkTwoPointConicalGradient_gpu.cpp @@ -61,8 +61,8 @@ class Edge2PtConicalEffect : public GrGradientEffect { public: class GLSLEdge2PtConicalProcessor; - static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args) { - auto processor = sk_sp<Edge2PtConicalEffect>(new Edge2PtConicalEffect(args)); + static std::unique_ptr<GrFragmentProcessor> Make(const CreateArgs& args) { + auto processor = std::unique_ptr<Edge2PtConicalEffect>(new Edge2PtConicalEffect(args)); return processor->isValid() ? std::move(processor) : nullptr; } @@ -75,8 +75,8 @@ public: SkScalar diffRadius() const { return fDiffRadius; } SkScalar radius() const { return fRadius0; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new Edge2PtConicalEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new Edge2PtConicalEffect(*this)); } private: @@ -193,7 +193,7 @@ GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect); * All Two point conical gradient test create functions may occasionally create edge case shaders */ #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> Edge2PtConicalEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> Edge2PtConicalEffect::TestCreate(GrProcessorTestData* d) { SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; SkScalar radius1 = d->fRandom->nextUScalar1(); SkPoint center2; @@ -219,7 +219,7 @@ sk_sp<GrFragmentProcessor> Edge2PtConicalEffect::TestCreate(GrProcessorTestData* params.fColors, params.fStops, params.fColorCount, params.fTileMode); GrTest::TestAsFPArgs asFPArgs(d); - sk_sp<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); + std::unique_ptr<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); GrAlwaysAssert(fp); return fp; } @@ -381,9 +381,9 @@ class FocalOutside2PtConicalEffect : public GrGradientEffect { public: class GLSLFocalOutside2PtConicalProcessor; - static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, SkScalar focalX) { - auto processor = - sk_sp<FocalOutside2PtConicalEffect>(new FocalOutside2PtConicalEffect(args, focalX)); + static std::unique_ptr<GrFragmentProcessor> Make(const CreateArgs& args, SkScalar focalX) { + auto processor = std::unique_ptr<FocalOutside2PtConicalEffect>( + new FocalOutside2PtConicalEffect(args, focalX)); return processor->isValid() ? std::move(processor) : nullptr; } @@ -391,8 +391,8 @@ public: return "Two-Point Conical Gradient Focal Outside"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new FocalOutside2PtConicalEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new FocalOutside2PtConicalEffect(*this)); } bool isFlipped() const { return fIsFlipped; } @@ -481,7 +481,8 @@ GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect); * All Two point conical gradient test create functions may occasionally create edge case shaders */ #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> FocalOutside2PtConicalEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> FocalOutside2PtConicalEffect::TestCreate( + GrProcessorTestData* d) { SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; SkScalar radius1 = 0.f; SkPoint center2; @@ -505,7 +506,7 @@ sk_sp<GrFragmentProcessor> FocalOutside2PtConicalEffect::TestCreate(GrProcessorT params.fColors, params.fStops, params.fColorCount, params.fTileMode); GrTest::TestAsFPArgs asFPArgs(d); - sk_sp<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); + std::unique_ptr<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); GrAlwaysAssert(fp); return fp; } @@ -601,9 +602,9 @@ class FocalInside2PtConicalEffect : public GrGradientEffect { public: class GLSLFocalInside2PtConicalProcessor; - static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, SkScalar focalX) { - auto processor = - sk_sp<FocalInside2PtConicalEffect>(new FocalInside2PtConicalEffect(args, focalX)); + static std::unique_ptr<GrFragmentProcessor> Make(const CreateArgs& args, SkScalar focalX) { + auto processor = std::unique_ptr<FocalInside2PtConicalEffect>( + new FocalInside2PtConicalEffect(args, focalX)); return processor->isValid() ? std::move(processor) : nullptr; } @@ -611,8 +612,8 @@ public: return "Two-Point Conical Gradient Focal Inside"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new FocalInside2PtConicalEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new FocalInside2PtConicalEffect(*this)); } SkScalar focal() const { return fFocalX; } @@ -691,7 +692,8 @@ GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect); * All Two point conical gradient test create functions may occasionally create edge case shaders */ #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> FocalInside2PtConicalEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> FocalInside2PtConicalEffect::TestCreate( + GrProcessorTestData* d) { SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; SkScalar radius1 = 0.f; SkPoint center2; @@ -716,7 +718,7 @@ sk_sp<GrFragmentProcessor> FocalInside2PtConicalEffect::TestCreate(GrProcessorTe params.fColors, params.fStops, params.fColorCount, params.fTileMode); GrTest::TestAsFPArgs asFPArgs(d); - sk_sp<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); + std::unique_ptr<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); GrAlwaysAssert(fp); return fp; } @@ -846,16 +848,17 @@ class CircleInside2PtConicalEffect : public GrGradientEffect { public: class GLSLCircleInside2PtConicalProcessor; - static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, const CircleConicalInfo& info) { - auto processor = - sk_sp<CircleInside2PtConicalEffect>(new CircleInside2PtConicalEffect(args, info)); + static std::unique_ptr<GrFragmentProcessor> Make(const CreateArgs& args, + const CircleConicalInfo& info) { + auto processor = std::unique_ptr<CircleInside2PtConicalEffect>( + new CircleInside2PtConicalEffect(args, info)); return processor->isValid() ? std::move(processor) : nullptr; } const char* name() const override { return "Two-Point Conical Gradient Inside"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new CircleInside2PtConicalEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new CircleInside2PtConicalEffect(*this)); } SkScalar centerX() const { return fInfo.fCenterEnd.fX; } @@ -945,7 +948,8 @@ GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect); * All Two point conical gradient test create functions may occasionally create edge case shaders */ #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> CircleInside2PtConicalEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> CircleInside2PtConicalEffect::TestCreate( + GrProcessorTestData* d) { SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; SkScalar radius1 = d->fRandom->nextUScalar1() + 0.0001f; // make sure radius1 != 0 SkPoint center2; @@ -969,7 +973,7 @@ sk_sp<GrFragmentProcessor> CircleInside2PtConicalEffect::TestCreate(GrProcessorT params.fColors, params.fStops, params.fColorCount, params.fTileMode); GrTest::TestAsFPArgs asFPArgs(d); - sk_sp<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); + std::unique_ptr<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); GrAlwaysAssert(fp); return fp; } @@ -1068,15 +1072,15 @@ class CircleOutside2PtConicalEffect : public GrGradientEffect { public: class GLSLCircleOutside2PtConicalProcessor; - static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, const CircleConicalInfo& info) { - return sk_sp<GrFragmentProcessor>( - new CircleOutside2PtConicalEffect(args, info)); + static std::unique_ptr<GrFragmentProcessor> Make(const CreateArgs& args, + const CircleConicalInfo& info) { + return std::unique_ptr<GrFragmentProcessor>(new CircleOutside2PtConicalEffect(args, info)); } const char* name() const override { return "Two-Point Conical Gradient Outside"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new CircleOutside2PtConicalEffect(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new CircleOutside2PtConicalEffect(*this)); } SkScalar centerX() const { return fInfo.fCenterEnd.fX; } @@ -1187,7 +1191,8 @@ GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect); * All Two point conical gradient test create functions may occasionally create edge case shaders */ #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> CircleOutside2PtConicalEffect::TestCreate(GrProcessorTestData* d) { +std::unique_ptr<GrFragmentProcessor> CircleOutside2PtConicalEffect::TestCreate( + GrProcessorTestData* d) { SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; SkScalar radius1 = d->fRandom->nextUScalar1() + 0.0001f; // make sure radius1 != 0 SkPoint center2; @@ -1212,7 +1217,7 @@ sk_sp<GrFragmentProcessor> CircleOutside2PtConicalEffect::TestCreate(GrProcessor params.fColors, params.fStops, params.fColorCount, params.fTileMode); GrTest::TestAsFPArgs asFPArgs(d); - sk_sp<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); + std::unique_ptr<GrFragmentProcessor> fp = as_SB(shader)->asFragmentProcessor(asFPArgs.args()); GrAlwaysAssert(fp); return fp; } @@ -1334,8 +1339,8 @@ void CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor::GenKey ////////////////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> Gr2PtConicalGradientEffect::Make( - const GrGradientEffect::CreateArgs& args) { +std::unique_ptr<GrFragmentProcessor> Gr2PtConicalGradientEffect::Make( + const GrGradientEffect::CreateArgs& args) { const SkTwoPointConicalGradient& shader = *static_cast<const SkTwoPointConicalGradient*>(args.fShader); diff --git a/src/shaders/gradients/SkTwoPointConicalGradient_gpu.h b/src/shaders/gradients/SkTwoPointConicalGradient_gpu.h index 46edb1f7d1..e7eac07299 100644 --- a/src/shaders/gradients/SkTwoPointConicalGradient_gpu.h +++ b/src/shaders/gradients/SkTwoPointConicalGradient_gpu.h @@ -14,11 +14,12 @@ class GrProcessor; class SkTwoPointConicalGradient; namespace Gr2PtConicalGradientEffect { - /** - * Creates an effect that produces a two point conical gradient based on the - * shader passed in. - */ - sk_sp<GrFragmentProcessor> Make(const GrGradientEffect::CreateArgs& args); + +/** + * Creates an effect that produces a two point conical gradient based on the shader passed in. + */ +std::unique_ptr<GrFragmentProcessor> Make(const GrGradientEffect::CreateArgs& args); + }; #endif diff --git a/src/sksl/SkSLCPPCodeGenerator.cpp b/src/sksl/SkSLCPPCodeGenerator.cpp index 76faef9aae..bc47ff0ce3 100644 --- a/src/sksl/SkSLCPPCodeGenerator.cpp +++ b/src/sksl/SkSLCPPCodeGenerator.cpp @@ -543,8 +543,10 @@ void CPPCodeGenerator::writeClone() { this->writef(" this->addCoordTransform(&%sCoordTransform);\n", field.c_str()); } this->write("}\n"); - this->writef("sk_sp<GrFragmentProcessor> %s::clone() const {\n", fFullName.c_str()); - this->writef(" return sk_sp<GrFragmentProcessor>(new %s(*this));\n", fFullName.c_str()); + this->writef("std::unique_ptr<GrFragmentProcessor> %s::clone() const {\n", + fFullName.c_str()); + this->writef(" return std::unique_ptr<GrFragmentProcessor>(new %s(*this));\n", + fFullName.c_str()); this->write("}\n"); } } @@ -552,12 +554,13 @@ void CPPCodeGenerator::writeClone() { void CPPCodeGenerator::writeTest() { const Section* test = fSectionAndParameterHelper.getSection(TEST_CODE_SECTION); if (test) { - this->writef("GR_DEFINE_FRAGMENT_PROCESSOR_TEST(%s);\n" - "#if GR_TEST_UTILS\n" - "sk_sp<GrFragmentProcessor> %s::TestCreate(GrProcessorTestData* %s) {\n", - fFullName.c_str(), - fFullName.c_str(), - test->fArgument.c_str()); + this->writef( + "GR_DEFINE_FRAGMENT_PROCESSOR_TEST(%s);\n" + "#if GR_TEST_UTILS\n" + "std::unique_ptr<GrFragmentProcessor> %s::TestCreate(GrProcessorTestData* %s) {\n", + fFullName.c_str(), + fFullName.c_str(), + test->fArgument.c_str()); this->writeSection(TEST_CODE_SECTION); this->write("}\n" "#endif\n"); diff --git a/src/sksl/SkSLHCodeGenerator.cpp b/src/sksl/SkSLHCodeGenerator.cpp index 22f4fd80ce..50d242896a 100644 --- a/src/sksl/SkSLHCodeGenerator.cpp +++ b/src/sksl/SkSLHCodeGenerator.cpp @@ -123,7 +123,7 @@ void HCodeGenerator::writeExtraConstructorParams(const char* separator) { void HCodeGenerator::writeMake() { const char* separator; if (!this->writeSection(MAKE_SECTION)) { - this->writef(" static sk_sp<GrFragmentProcessor> Make("); + this->writef(" static std::unique_ptr<GrFragmentProcessor> Make("); separator = ""; for (const auto& param : fSectionAndParameterHelper.getParameters()) { this->writef("%s%s %s", separator, ParameterType(param->fType).c_str(), @@ -132,7 +132,7 @@ void HCodeGenerator::writeMake() { } this->writeSection(CONSTRUCTOR_PARAMS_SECTION, separator); this->writef(") {\n" - " return sk_sp<GrFragmentProcessor>(new %s(", + " return std::unique_ptr<GrFragmentProcessor>(new %s(", fFullName.c_str()); separator = ""; for (const auto& param : fSectionAndParameterHelper.getParameters()) { @@ -251,7 +251,7 @@ bool HCodeGenerator::generateCode() { } this->writeMake(); this->writef(" %s(const %s& src);\n" - " sk_sp<GrFragmentProcessor> clone() const override;\n" + " std::unique_ptr<GrFragmentProcessor> clone() const override;\n" " const char* name() const override { return \"%s\"; }\n" "private:\n", fFullName.c_str(), fFullName.c_str(), fName.c_str()); diff --git a/src/utils/SkShadowUtils.cpp b/src/utils/SkShadowUtils.cpp index b6c57f370e..e95668ae2b 100644 --- a/src/utils/SkShadowUtils.cpp +++ b/src/utils/SkShadowUtils.cpp @@ -38,7 +38,8 @@ public: } #if SK_SUPPORT_GPU - sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override; + std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*, + SkColorSpace*) const override; #endif SK_TO_STRING_OVERRIDE() @@ -68,8 +69,8 @@ void SkGaussianColorFilter::toString(SkString* str) const { #if SK_SUPPORT_GPU -sk_sp<GrFragmentProcessor> SkGaussianColorFilter::asFragmentProcessor(GrContext*, - SkColorSpace*) const { +std::unique_ptr<GrFragmentProcessor> SkGaussianColorFilter::asFragmentProcessor( + GrContext*, SkColorSpace*) const { return GrBlurredEdgeFragmentProcessor::Make(GrBlurredEdgeFragmentProcessor::kGaussian_Mode); } #endif diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp index 891d1cca46..aaf97b6315 100644 --- a/tests/GLProgramsTest.cpp +++ b/tests/GLProgramsTest.cpp @@ -65,8 +65,8 @@ private: class BigKeyProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make() { - return sk_sp<GrFragmentProcessor>(new BigKeyProcessor); + static std::unique_ptr<GrFragmentProcessor> Make() { + return std::unique_ptr<GrFragmentProcessor>(new BigKeyProcessor); } const char* name() const override { return "Big Ole Key"; } @@ -75,7 +75,7 @@ public: return new GLBigKeyProcessor; } - sk_sp<GrFragmentProcessor> clone() const override { return Make(); } + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(); } private: BigKeyProcessor() : INHERITED(kNone_OptimizationFlags) { this->initClassID<BigKeyProcessor>(); } @@ -93,7 +93,7 @@ private: GR_DEFINE_FRAGMENT_PROCESSOR_TEST(BigKeyProcessor); #if GR_TEST_UTILS -sk_sp<GrFragmentProcessor> BigKeyProcessor::TestCreate(GrProcessorTestData*) { +std::unique_ptr<GrFragmentProcessor> BigKeyProcessor::TestCreate(GrProcessorTestData*) { return BigKeyProcessor::Make(); } #endif @@ -102,15 +102,15 @@ sk_sp<GrFragmentProcessor> BigKeyProcessor::TestCreate(GrProcessorTestData*) { class BlockInputFragmentProcessor : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrFragmentProcessor> fp) { - return sk_sp<GrFragmentProcessor>(new BlockInputFragmentProcessor(fp)); + static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> fp) { + return std::unique_ptr<GrFragmentProcessor>(new BlockInputFragmentProcessor(std::move(fp))); } const char* name() const override { return "Block Input"; } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { return new GLFP; } - sk_sp<GrFragmentProcessor> clone() const override { + std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(this->childProcessor(0).clone()); } @@ -125,7 +125,7 @@ private: typedef GrGLSLFragmentProcessor INHERITED; }; - BlockInputFragmentProcessor(sk_sp<GrFragmentProcessor> child) + BlockInputFragmentProcessor(std::unique_ptr<GrFragmentProcessor> child) : INHERITED(kNone_OptimizationFlags) { this->initClassID<BlockInputFragmentProcessor>(); this->registerChildProcessor(std::move(child)); @@ -169,8 +169,8 @@ static void set_random_xpf(GrPaint* paint, GrProcessorTestData* d) { paint->setXPFactory(GrXPFactoryTestFactory::Get(d)); } -static sk_sp<GrFragmentProcessor> create_random_proc_tree(GrProcessorTestData* d, - int minLevels, int maxLevels) { +static std::unique_ptr<GrFragmentProcessor> create_random_proc_tree(GrProcessorTestData* d, + int minLevels, int maxLevels) { SkASSERT(1 <= minLevels); SkASSERT(minLevels <= maxLevels); @@ -181,7 +181,7 @@ static sk_sp<GrFragmentProcessor> create_random_proc_tree(GrProcessorTestData* d if (1 == minLevels) { bool terminate = (1 == maxLevels) || (d->fRandom->nextF() < terminateProbability); if (terminate) { - sk_sp<GrFragmentProcessor> fp; + std::unique_ptr<GrFragmentProcessor> fp; while (true) { fp = GrFragmentProcessorTestFactory::Make(d); SkASSERT(fp); @@ -198,11 +198,11 @@ static sk_sp<GrFragmentProcessor> create_random_proc_tree(GrProcessorTestData* d if (minLevels > 1) { --minLevels; } - sk_sp<GrFragmentProcessor> minLevelsChild(create_random_proc_tree(d, minLevels, maxLevels - 1)); - sk_sp<GrFragmentProcessor> otherChild(create_random_proc_tree(d, 1, maxLevels - 1)); + auto minLevelsChild = create_random_proc_tree(d, minLevels, maxLevels - 1); + std::unique_ptr<GrFragmentProcessor> otherChild(create_random_proc_tree(d, 1, maxLevels - 1)); SkBlendMode mode = static_cast<SkBlendMode>(d->fRandom->nextRangeU(0, (int)SkBlendMode::kLastMode)); - sk_sp<GrFragmentProcessor> fp; + std::unique_ptr<GrFragmentProcessor> fp; if (d->fRandom->nextF() < 0.5f) { fp = GrXfermodeFragmentProcessor::MakeFromTwoProcessors(std::move(minLevelsChild), std::move(otherChild), mode); @@ -222,7 +222,7 @@ static void set_random_color_coverage_stages(GrPaint* paint, // Randomly choose to either create a linear pipeline of procs or create one proc tree const float procTreeProbability = 0.5f; if (d->fRandom->nextF() < procTreeProbability) { - sk_sp<GrFragmentProcessor> fp(create_random_proc_tree(d, 2, maxTreeLevels)); + std::unique_ptr<GrFragmentProcessor> fp(create_random_proc_tree(d, 2, maxTreeLevels)); if (fp) { paint->addColorFragmentProcessor(std::move(fp)); } @@ -231,7 +231,7 @@ static void set_random_color_coverage_stages(GrPaint* paint, int numColorProcs = d->fRandom->nextULessThan(numProcs + 1); for (int s = 0; s < numProcs;) { - sk_sp<GrFragmentProcessor> fp(GrFragmentProcessorTestFactory::Make(d)); + std::unique_ptr<GrFragmentProcessor> fp(GrFragmentProcessorTestFactory::Make(d)); SkASSERT(fp); // finally add the stage to the correct pipeline in the drawstate @@ -330,9 +330,8 @@ bool GrDrawingManager::ProgramUnitTest(GrContext* context, int maxStages, int ma GrPaint paint; paint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); - sk_sp<GrFragmentProcessor> fp(GrFragmentProcessorTestFactory::MakeIdx(i, &ptd)); - sk_sp<GrFragmentProcessor> blockFP( - BlockInputFragmentProcessor::Make(std::move(fp))); + auto fp = GrFragmentProcessorTestFactory::MakeIdx(i, &ptd); + auto blockFP = BlockInputFragmentProcessor::Make(std::move(fp)); paint.addColorFragmentProcessor(std::move(blockFP)); GrDrawRandomOp(&random, renderTargetContext.get(), std::move(paint)); drawingManager->flush(nullptr); diff --git a/tests/ImageStorageTest.cpp b/tests/ImageStorageTest.cpp index 589f69471f..6d5cab09ec 100644 --- a/tests/ImageStorageTest.cpp +++ b/tests/ImageStorageTest.cpp @@ -19,16 +19,16 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageStorageLoad, reporter, ctxInfo) { class TestFP : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, - GrSLMemoryModel mm, - GrSLRestrict restrict) { - return sk_sp<GrFragmentProcessor>(new TestFP(std::move(proxy), mm, restrict)); + static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, + GrSLMemoryModel mm, + GrSLRestrict restrict) { + return std::unique_ptr<GrFragmentProcessor>(new TestFP(std::move(proxy), mm, restrict)); } const char* name() const override { return "Image Load Test FP"; } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new TestFP(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new TestFP(*this)); } private: @@ -146,12 +146,14 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageStorageLoad, reporter, ctxInfo) { context->makeDeferredRenderTargetContext(SkBackingFit::kExact, kS, kS, kRGBA_8888_GrPixelConfig, nullptr); // We make a clone to test that copying GrFragmentProcessor::ImageStorageAccess - // copying works. - auto testFP = TestFP::Make(imageStorageTexture, mm, restrict); - for (auto fp : {testFP, testFP->clone()}) { + // works. + std::unique_ptr<GrFragmentProcessor> fps[2]; + fps[0] = TestFP::Make(imageStorageTexture, mm, restrict); + fps[1] = fps[0]->clone(); + for (auto& fp : fps) { GrPaint paint; paint.setPorterDuffXPFactory(SkBlendMode::kSrc); - paint.addColorFragmentProcessor(fp); + paint.addColorFragmentProcessor(std::move(fp)); rtContext->drawPaint(GrNoClip(), std::move(paint), SkMatrix::I()); std::unique_ptr<uint32_t[]> readData(new uint32_t[kS * kS]); SkImageInfo info = SkImageInfo::Make(kS, kS, kRGBA_8888_SkColorType, diff --git a/tests/IntTextureTest.cpp b/tests/IntTextureTest.cpp index ccdc304976..35019b8937 100644 --- a/tests/IntTextureTest.cpp +++ b/tests/IntTextureTest.cpp @@ -258,10 +258,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(IntTexture, reporter, ctxInfo) { }; for (auto filter : kNamedFilters) { - sk_sp<GrFragmentProcessor> fp(GrSimpleTextureEffect::Make(sContext->asTextureProxyRef(), - nullptr, - SkMatrix::I(), - filter.fMode)); + auto fp = GrSimpleTextureEffect::Make(sContext->asTextureProxyRef(), nullptr, SkMatrix::I(), + filter.fMode); REPORTER_ASSERT(reporter, fp); if (!fp) { return; @@ -269,7 +267,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(IntTexture, reporter, ctxInfo) { rtContext->clear(nullptr, 0xDDAABBCC, true); GrPaint paint; paint.setPorterDuffXPFactory(SkBlendMode::kSrc); - paint.addColorFragmentProcessor(fp); + paint.addColorFragmentProcessor(std::move(fp)); rtContext->drawPaint(GrNoClip(), std::move(paint), SkMatrix::I()); SkImageInfo readInfo = SkImageInfo::Make(kS, kS, kRGBA_8888_SkColorType, kPremul_SkAlphaType); diff --git a/tests/OnFlushCallbackTest.cpp b/tests/OnFlushCallbackTest.cpp index 388f770150..b26dd68a19 100644 --- a/tests/OnFlushCallbackTest.cpp +++ b/tests/OnFlushCallbackTest.cpp @@ -442,8 +442,7 @@ static sk_sp<GrTextureProxy> make_upstream_image(GrContext* context, AtlasObject // TODO: here is the blocker for deferring creation of the atlas. The TextureSamplers // created here currently require a hard GrTexture. - sk_sp<GrFragmentProcessor> fp = GrSimpleTextureEffect::Make(fakeAtlas, - nullptr, SkMatrix::I()); + auto fp = GrSimpleTextureEffect::Make(fakeAtlas, nullptr, SkMatrix::I()); GrPaint paint; paint.addColorFragmentProcessor(std::move(fp)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); @@ -576,8 +575,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(OnFlushCallbackTest, reporter, ctxInfo) { SkMatrix t = SkMatrix::MakeTrans(-i*3*kDrawnTileSize, 0); GrPaint paint; - sk_sp<GrFragmentProcessor> fp(GrSimpleTextureEffect::Make(std::move(proxies[i]), - nullptr, t)); + auto fp = GrSimpleTextureEffect::Make(std::move(proxies[i]), nullptr, t); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); paint.addColorFragmentProcessor(std::move(fp)); diff --git a/tests/ProcessorTest.cpp b/tests/ProcessorTest.cpp index 4cc7780d06..161192e487 100644 --- a/tests/ProcessorTest.cpp +++ b/tests/ProcessorTest.cpp @@ -27,7 +27,7 @@ public: DEFINE_OP_CLASS_ID const char* name() const override { return "TestOp"; } - static std::unique_ptr<GrDrawOp> Make(sk_sp<GrFragmentProcessor> fp) { + static std::unique_ptr<GrDrawOp> Make(std::unique_ptr<GrFragmentProcessor> fp) { return std::unique_ptr<GrDrawOp>(new TestOp(std::move(fp))); } @@ -42,7 +42,8 @@ public: } private: - TestOp(sk_sp<GrFragmentProcessor> fp) : INHERITED(ClassID()), fProcessors(std::move(fp)) { + TestOp(std::unique_ptr<GrFragmentProcessor> fp) + : INHERITED(ClassID()), fProcessors(std::move(fp)) { this->setBounds(SkRect::MakeWH(100, 100), HasAABloat::kNo, IsZeroArea::kNo); } @@ -66,13 +67,13 @@ public: sk_sp<GrTextureProxy> fProxy; GrIOType fIOType; }; - static sk_sp<GrFragmentProcessor> Make(sk_sp<GrFragmentProcessor> child) { - return sk_sp<GrFragmentProcessor>(new TestFP(std::move(child))); + static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> child) { + return std::unique_ptr<GrFragmentProcessor>(new TestFP(std::move(child))); } - static sk_sp<GrFragmentProcessor> Make(const SkTArray<sk_sp<GrTextureProxy>>& proxies, - const SkTArray<sk_sp<GrBuffer>>& buffers, - const SkTArray<Image>& images) { - return sk_sp<GrFragmentProcessor>(new TestFP(proxies, buffers, images)); + static std::unique_ptr<GrFragmentProcessor> Make(const SkTArray<sk_sp<GrTextureProxy>>& proxies, + const SkTArray<sk_sp<GrBuffer>>& buffers, + const SkTArray<Image>& images) { + return std::unique_ptr<GrFragmentProcessor>(new TestFP(proxies, buffers, images)); } const char* name() const override { return "test"; } @@ -83,8 +84,8 @@ public: b->add32(sk_atomic_inc(&gKey)); } - sk_sp<GrFragmentProcessor> clone() const override { - return sk_sp<GrFragmentProcessor>(new TestFP(*this)); + std::unique_ptr<GrFragmentProcessor> clone() const override { + return std::unique_ptr<GrFragmentProcessor>(new TestFP(*this)); } private: @@ -106,7 +107,7 @@ private: } } - TestFP(sk_sp<GrFragmentProcessor> child) + TestFP(std::unique_ptr<GrFragmentProcessor> child) : INHERITED(kNone_OptimizationFlags), fSamplers(4), fBuffers(4), fImages(4) { this->initClassID<TestFP>(); this->registerChildProcessor(std::move(child)); @@ -224,7 +225,7 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(ProcessorRefTest, reporter, ctxInfo) { for (int i = 0; i < parentCnt; ++i) { fp = TestFP::Make(std::move(fp)); } - sk_sp<GrFragmentProcessor> clone; + std::unique_ptr<GrFragmentProcessor> clone; if (makeClone) { clone = fp->clone(); } @@ -320,7 +321,7 @@ static GrColor4f input_texel_color4f(int i, int j) { return GrColor4f::FromGrColor(input_texel_color(i, j)); } -void test_draw_op(GrRenderTargetContext* rtc, sk_sp<GrFragmentProcessor> fp, +void test_draw_op(GrRenderTargetContext* rtc, std::unique_ptr<GrFragmentProcessor> fp, sk_sp<GrTextureProxy> inputDataProxy) { GrPaint paint; paint.addColorTextureProcessor(std::move(inputDataProxy), nullptr, SkMatrix::I()); @@ -417,7 +418,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorOptimizationValidationTest, repor int timesToInvokeFactory = 5; // Increase the number of attempts if the FP has child FPs since optimizations likely depend // on child optimizations being present. - sk_sp<GrFragmentProcessor> fp = FPFactory::MakeIdx(i, &testData); + std::unique_ptr<GrFragmentProcessor> fp = FPFactory::MakeIdx(i, &testData); for (int j = 0; j < fp->numChildProcessors(); ++j) { // This value made a reasonable trade off between time and coverage when this test was // written. @@ -433,7 +434,11 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorOptimizationValidationTest, repor !fp->compatibleWithCoverageAsAlpha()) { continue; } - test_draw_op(rtc.get(), fp, inputTexture); + + // Since we transfer away ownership of the original FP, we make a clone. + auto clone = fp->clone(); + + test_draw_op(rtc.get(), std::move(fp), inputTexture); memset(readData.get(), 0x0, sizeof(GrColor) * kRenderSize * kRenderSize); rtc->readPixels(SkImageInfo::Make(kRenderSize, kRenderSize, kRGBA_8888_SkColorType, kPremul_SkAlphaType), @@ -441,20 +446,20 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorOptimizationValidationTest, repor bool passing = true; if (0) { // Useful to see what FPs are being tested. SkString children; - for (int c = 0; c < fp->numChildProcessors(); ++c) { + for (int c = 0; c < clone->numChildProcessors(); ++c) { if (!c) { children.append("("); } - children.append(fp->childProcessor(c).name()); - children.append(c == fp->numChildProcessors() - 1 ? ")" : ", "); + children.append(clone->name()); + children.append(c == clone->numChildProcessors() - 1 ? ")" : ", "); } - SkDebugf("%s %s\n", fp->name(), children.c_str()); + SkDebugf("%s %s\n", clone->name(), children.c_str()); } for (int y = 0; y < kRenderSize && passing; ++y) { for (int x = 0; x < kRenderSize && passing; ++x) { GrColor input = input_texel_color(x, y); GrColor output = readData.get()[y * kRenderSize + x]; - if (fp->compatibleWithCoverageAsAlpha()) { + if (clone->compatibleWithCoverageAsAlpha()) { // A modulating processor is allowed to modulate either the input color or // just the input alpha. bool legalColorModulation = @@ -471,14 +476,14 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorOptimizationValidationTest, repor ERRORF(reporter, "\"Modulating\" processor %s made color/alpha value larger. " "Input: 0x%08x, Output: 0x%08x.", - fp->name(), input, output); + clone->name(), input, output); passing = false; } } GrColor4f input4f = input_texel_color4f(x, y); GrColor4f output4f = GrColor4f::FromGrColor(output); GrColor4f expected4f; - if (fp->hasConstantOutputForConstantInput(input4f, &expected4f)) { + if (clone->hasConstantOutputForConstantInput(input4f, &expected4f)) { float rDiff = fabsf(output4f.fRGBA[0] - expected4f.fRGBA[0]); float gDiff = fabsf(output4f.fRGBA[1] - expected4f.fRGBA[1]); float bDiff = fabsf(output4f.fRGBA[2] - expected4f.fRGBA[2]); @@ -497,17 +502,17 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorOptimizationValidationTest, repor passing = false; } } - if (GrColorIsOpaque(input) && fp->preservesOpaqueInput() && + if (GrColorIsOpaque(input) && clone->preservesOpaqueInput() && !GrColorIsOpaque(output)) { ERRORF(reporter, "Processor %s claimed opaqueness is preserved but it is not. Input: " "0x%08x, Output: 0x%08x.", - fp->name(), input, output); + clone->name(), input, output); passing = false; } if (!passing) { - ERRORF(reporter, "Seed: 0x%08x, Processor details: %s", - seed, fp->dumpInfo().c_str()); + ERRORF(reporter, "Seed: 0x%08x, Processor details: %s", seed, + clone->dumpInfo().c_str()); } } } @@ -550,6 +555,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorCloneTest, reporter, ctxInfo) { ERRORF(reporter, "Clone of processor %s failed.", fp->name()); continue; } + const char* name = fp->name(); if (!fp->instantiate(context->resourceProvider()) || !clone->instantiate(context->resourceProvider())) { continue; @@ -564,12 +570,12 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorCloneTest, reporter, ctxInfo) { REPORTER_ASSERT(reporter, fp->numChildProcessors() == clone->numChildProcessors()); REPORTER_ASSERT(reporter, fp->usesLocalCoords() == clone->usesLocalCoords()); // Draw with original and read back the results. - test_draw_op(rtc.get(), fp, inputTexture); + test_draw_op(rtc.get(), std::move(fp), inputTexture); memset(readData1.get(), 0x0, sizeof(GrColor) * kRenderSize * kRenderSize); rtc->readPixels(readInfo, readData1.get(), 0, 0, 0); // Draw with clone and read back the results. - test_draw_op(rtc.get(), clone, inputTexture); + test_draw_op(rtc.get(), std::move(clone), inputTexture); memset(readData2.get(), 0x0, sizeof(GrColor) * kRenderSize * kRenderSize); rtc->readPixels(readInfo, readData2.get(), 0, 0, 0); @@ -583,7 +589,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorCloneTest, reporter, ctxInfo) { "Processor %s made clone produced different output. " "Input color: 0x%08x, Original Output Color: 0x%08x, " "Clone Output Color: 0x%08x..", - fp->name(), input_texel_color(x, y), readData1[idx], readData2[idx]); + name, input_texel_color(x, y), readData1[idx], readData2[idx]); passing = false; } } diff --git a/tests/RectangleTextureTest.cpp b/tests/RectangleTextureTest.cpp index 705f585b7b..08569a766e 100644 --- a/tests/RectangleTextureTest.cpp +++ b/tests/RectangleTextureTest.cpp @@ -29,10 +29,7 @@ static void test_basic_draw_as_src(skiatest::Reporter* reporter, GrContext* cont GrSamplerParams::kBilerp_FilterMode, GrSamplerParams::kMipMap_FilterMode}) { rtContext->clear(nullptr, 0xDDCCBBAA, true); - sk_sp<GrFragmentProcessor> fp(GrSimpleTextureEffect::Make( - rectProxy, - nullptr, - SkMatrix::I(), filter)); + auto fp = GrSimpleTextureEffect::Make(rectProxy, nullptr, SkMatrix::I(), filter); GrPaint paint; paint.setPorterDuffXPFactory(SkBlendMode::kSrc); paint.addColorFragmentProcessor(std::move(fp)); diff --git a/tests/SkSLFPTest.cpp b/tests/SkSLFPTest.cpp index 82bcb10b71..0c3da0b5c3 100644 --- a/tests/SkSLFPTest.cpp +++ b/tests/SkSLFPTest.cpp @@ -85,11 +85,11 @@ DEF_TEST(SkSLFPHelloWorld, r) { "#include \"GrColorSpaceXform.h\"\n" "class GrTest : public GrFragmentProcessor {\n" "public:\n" - " static sk_sp<GrFragmentProcessor> Make() {\n" - " return sk_sp<GrFragmentProcessor>(new GrTest());\n" + " static std::unique_ptr<GrFragmentProcessor> Make() {\n" + " return std::unique_ptr<GrFragmentProcessor>(new GrTest());\n" " }\n" " GrTest(const GrTest& src);\n" - " sk_sp<GrFragmentProcessor> clone() const override;\n" + " std::unique_ptr<GrFragmentProcessor> clone() const override;\n" " const char* name() const override { return \"Test\"; }\n" "private:\n" " GrTest()\n" @@ -154,8 +154,8 @@ DEF_TEST(SkSLFPHelloWorld, r) { ": INHERITED(src.optimizationFlags()) {\n" " this->initClassID<GrTest>();\n" "}\n" - "sk_sp<GrFragmentProcessor> GrTest::clone() const {\n" - " return sk_sp<GrFragmentProcessor>(new GrTest(*this));\n" + "std::unique_ptr<GrFragmentProcessor> GrTest::clone() const {\n" + " return std::unique_ptr<GrFragmentProcessor>(new GrTest(*this));\n" "}\n" "#endif\n" }); @@ -170,8 +170,8 @@ DEF_TEST(SkSLFPInput, r) { *SkSL::ShaderCapsFactory::Default(), { "SkPoint point() const { return fPoint; }", - "static sk_sp<GrFragmentProcessor> Make(SkPoint point) {", - "return sk_sp<GrFragmentProcessor>(new GrTest(point));", + "static std::unique_ptr<GrFragmentProcessor> Make(SkPoint point) {", + "return std::unique_ptr<GrFragmentProcessor>(new GrTest(point));", "GrTest(SkPoint point)", ", fPoint(point)" }, @@ -191,7 +191,7 @@ DEF_TEST(SkSLFPUniform, r) { "}", *SkSL::ShaderCapsFactory::Default(), { - "static sk_sp<GrFragmentProcessor> Make()" + "static std::unique_ptr<GrFragmentProcessor> Make()" }, { "fColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kVec4f_GrSLType, " @@ -207,7 +207,7 @@ DEF_TEST(SkSLFPInUniform, r) { "}", *SkSL::ShaderCapsFactory::Default(), { - "static sk_sp<GrFragmentProcessor> Make(SkRect color) {", + "static std::unique_ptr<GrFragmentProcessor> Make(SkRect color) {", }, { "fColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kVec4f_GrSLType, " @@ -257,7 +257,7 @@ DEF_TEST(SkSLFPSections, r) { *SkSL::ShaderCapsFactory::Default(), { "Make(float w, int x, float y, std::vector<float> z )", - "return sk_sp<GrFragmentProcessor>(new GrTest(w, x, y, z));", + "return std::unique_ptr<GrFragmentProcessor>(new GrTest(w, x, y, z));", "GrTest(float w, int x, float y, std::vector<float> z )", ", fW(w) {" }, @@ -342,7 +342,7 @@ DEF_TEST(SkSLFPSections, r) { {}, { "#if GR_TEST_UTILS\n" - "sk_sp<GrFragmentProcessor> GrTest::TestCreate(GrProcessorTestData* testDataName) {\n" + "std::unique_ptr<GrFragmentProcessor> GrTest::TestCreate(GrProcessorTestData* testDataName) {\n" " testDataName section }\n" "#endif" }); diff --git a/tests/TessellatingPathRendererTests.cpp b/tests/TessellatingPathRendererTests.cpp index f9db895002..f8b69839aa 100644 --- a/tests/TessellatingPathRendererTests.cpp +++ b/tests/TessellatingPathRendererTests.cpp @@ -347,7 +347,7 @@ static SkPath create_path_22() { return path; } -static sk_sp<GrFragmentProcessor> create_linear_gradient_processor(GrContext* ctx) { +static std::unique_ptr<GrFragmentProcessor> create_linear_gradient_processor(GrContext* ctx) { SkPoint pts[2] = { {0, 0}, {1, 1} }; SkColor colors[2] = { SK_ColorGREEN, SK_ColorBLUE }; sk_sp<SkShader> shader = SkGradientShader::MakeLinear( @@ -362,13 +362,13 @@ static void test_path(GrContext* ctx, const SkPath& path, const SkMatrix& matrix = SkMatrix::I(), GrAAType aaType = GrAAType::kNone, - sk_sp<GrFragmentProcessor> fp = nullptr) { + std::unique_ptr<GrFragmentProcessor> fp = nullptr) { GrTessellatingPathRenderer tess; GrPaint paint; paint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); if (fp) { - paint.addColorFragmentProcessor(fp); + paint.addColorFragmentProcessor(std::move(fp)); } GrNoClip noClip; @@ -419,8 +419,9 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(TessellatingPathRendererTests, reporter, ctxInfo) { test_path(ctx, rtc.get(), create_path_15()); test_path(ctx, rtc.get(), create_path_16()); SkMatrix nonInvertibleMatrix = SkMatrix::MakeScale(0, 0); - sk_sp<GrFragmentProcessor> fp(create_linear_gradient_processor(ctx)); - test_path(ctx, rtc.get(), create_path_17(), nonInvertibleMatrix, GrAAType::kCoverage, fp); + std::unique_ptr<GrFragmentProcessor> fp(create_linear_gradient_processor(ctx)); + test_path(ctx, rtc.get(), create_path_17(), nonInvertibleMatrix, GrAAType::kCoverage, + std::move(fp)); test_path(ctx, rtc.get(), create_path_18()); test_path(ctx, rtc.get(), create_path_19()); test_path(ctx, rtc.get(), create_path_20(), SkMatrix(), GrAAType::kCoverage); |