aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-08-11 09:40:37 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-08-11 14:13:26 +0000
commitaff329b8e9b239bca1d93b13a914fbef45ccf7fe (patch)
tree06ba42a557c6695f145bcf4956c981fc87af55ff
parente2cbd0451832ec71d1b498e0f64d02b7d096b2b7 (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>
-rw-r--r--gm/bigrrectaaeffect.cpp2
-rw-r--r--gm/constcolorprocessor.cpp2
-rw-r--r--gm/convexpolyeffect.cpp4
-rw-r--r--gm/rrects.cpp2
-rw-r--r--gm/texturedomaineffect.cpp10
-rw-r--r--gm/windowrectangles.cpp16
-rw-r--r--gm/yuvtorgbeffect.cpp9
-rw-r--r--include/core/SkColorFilter.h4
-rw-r--r--include/core/SkImageFilter.h2
-rw-r--r--include/effects/SkLumaColorFilter.h3
-rw-r--r--include/effects/SkToSRGBColorFilter.h3
-rw-r--r--include/gpu/GrContext.h8
-rw-r--r--include/gpu/GrTypes.h1
-rw-r--r--include/private/GrTypesPriv.h7
-rw-r--r--src/core/SkColorFilter.cpp16
-rw-r--r--src/core/SkColorMatrixFilterRowMajor255.cpp12
-rw-r--r--src/core/SkColorMatrixFilterRowMajor255.h3
-rw-r--r--src/core/SkGpuBlurUtils.cpp33
-rw-r--r--src/core/SkImageFilter.cpp2
-rw-r--r--src/core/SkModeColorFilter.cpp12
-rw-r--r--src/core/SkModeColorFilter.h3
-rw-r--r--src/effects/GrAlphaThresholdFragmentProcessor.cpp6
-rw-r--r--src/effects/GrAlphaThresholdFragmentProcessor.fp22
-rw-r--r--src/effects/GrAlphaThresholdFragmentProcessor.h20
-rw-r--r--src/effects/GrCircleBlurFragmentProcessor.cpp13
-rw-r--r--src/effects/GrCircleBlurFragmentProcessor.fp19
-rw-r--r--src/effects/GrCircleBlurFragmentProcessor.h6
-rw-r--r--src/effects/SkAlphaThresholdFilter.cpp13
-rw-r--r--src/effects/SkArithmeticImageFilter.cpp28
-rw-r--r--src/effects/SkBlurMaskFilter.cpp47
-rw-r--r--src/effects/SkColorMatrixFilter.cpp4
-rw-r--r--src/effects/SkDisplacementMapEffect.cpp28
-rw-r--r--src/effects/SkHighContrastFilter.cpp12
-rw-r--r--src/effects/SkLightingImageFilter.cpp93
-rw-r--r--src/effects/SkLumaColorFilter.cpp9
-rw-r--r--src/effects/SkMagnifierImageFilter.cpp64
-rw-r--r--src/effects/SkMatrixConvolutionImageFilter.cpp18
-rw-r--r--src/effects/SkMorphologyImageFilter.cpp20
-rw-r--r--src/effects/SkOverdrawColorFilter.cpp14
-rw-r--r--src/effects/SkOverdrawColorFilter.h3
-rw-r--r--src/effects/SkRRectsGaussianEdgeMaskFilter.cpp11
-rw-r--r--src/effects/SkTableColorFilter.cpp24
-rw-r--r--src/effects/SkToSRGBColorFilter.cpp4
-rw-r--r--src/effects/SkXfermodeImageFilter.cpp21
-rw-r--r--src/gpu/GrAppliedClip.h8
-rw-r--r--src/gpu/GrClipStackClip.cpp10
-rw-r--r--src/gpu/GrContext.cpp14
-rw-r--r--src/gpu/GrFragmentProcessor.cpp132
-rw-r--r--src/gpu/GrFragmentProcessor.h44
-rw-r--r--src/gpu/GrPaint.h8
-rw-r--r--src/gpu/GrPipeline.cpp12
-rw-r--r--src/gpu/GrPipeline.h3
-rw-r--r--src/gpu/GrProcessorSet.cpp30
-rw-r--r--src/gpu/GrProcessorSet.h19
-rw-r--r--src/gpu/GrProcessorUnitTest.cpp4
-rw-r--r--src/gpu/GrProcessorUnitTest.h8
-rw-r--r--src/gpu/GrRenderTargetContext.cpp4
-rw-r--r--src/gpu/GrRenderTargetContext.h4
-rw-r--r--src/gpu/GrTextureAdjuster.cpp15
-rw-r--r--src/gpu/GrTextureAdjuster.h14
-rw-r--r--src/gpu/GrTextureMaker.cpp15
-rw-r--r--src/gpu/GrTextureMaker.h14
-rw-r--r--src/gpu/GrTextureProducer.cpp14
-rw-r--r--src/gpu/GrTextureProducer.h28
-rw-r--r--src/gpu/GrYUVProvider.cpp14
-rw-r--r--src/gpu/SkGpuDevice.cpp25
-rw-r--r--src/gpu/SkGpuDevice_drawTexture.cpp8
-rw-r--r--src/gpu/SkGr.cpp34
-rw-r--r--src/gpu/SkGr.h4
-rw-r--r--src/gpu/effects/GrBicubicEffect.cpp2
-rw-r--r--src/gpu/effects/GrBicubicEffect.h30
-rw-r--r--src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp4
-rw-r--r--src/gpu/effects/GrBlurredEdgeFragmentProcessor.h6
-rw-r--r--src/gpu/effects/GrCircleEffect.cpp6
-rw-r--r--src/gpu/effects/GrCircleEffect.h6
-rw-r--r--src/gpu/effects/GrConfigConversionEffect.cpp24
-rw-r--r--src/gpu/effects/GrConfigConversionEffect.h5
-rw-r--r--src/gpu/effects/GrConstColorProcessor.cpp6
-rw-r--r--src/gpu/effects/GrConstColorProcessor.h6
-rw-r--r--src/gpu/effects/GrConvexPolyEffect.cpp26
-rw-r--r--src/gpu/effects/GrConvexPolyEffect.h12
-rw-r--r--src/gpu/effects/GrDitherEffect.cpp8
-rw-r--r--src/gpu/effects/GrDitherEffect.fp6
-rw-r--r--src/gpu/effects/GrDitherEffect.h6
-rw-r--r--src/gpu/effects/GrEllipseEffect.cpp6
-rw-r--r--src/gpu/effects/GrEllipseEffect.h6
-rw-r--r--src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp2
-rw-r--r--src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h21
-rw-r--r--src/gpu/effects/GrMatrixConvolutionEffect.cpp34
-rw-r--r--src/gpu/effects/GrMatrixConvolutionEffect.h46
-rw-r--r--src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp15
-rw-r--r--src/gpu/effects/GrNonlinearColorSpaceXformEffect.h5
-rw-r--r--src/gpu/effects/GrOvalEffect.cpp3
-rw-r--r--src/gpu/effects/GrOvalEffect.h10
-rw-r--r--src/gpu/effects/GrRRectEffect.cpp45
-rw-r--r--src/gpu/effects/GrRRectEffect.h12
-rw-r--r--src/gpu/effects/GrSRGBEffect.cpp4
-rw-r--r--src/gpu/effects/GrSRGBEffect.h6
-rw-r--r--src/gpu/effects/GrSimpleTextureEffect.cpp7
-rw-r--r--src/gpu/effects/GrSimpleTextureEffect.fp28
-rw-r--r--src/gpu/effects/GrSimpleTextureEffect.h36
-rw-r--r--src/gpu/effects/GrTextureDomain.cpp36
-rw-r--r--src/gpu/effects/GrTextureDomain.h24
-rw-r--r--src/gpu/effects/GrXfermodeFragmentProcessor.cpp77
-rw-r--r--src/gpu/effects/GrXfermodeFragmentProcessor.h34
-rw-r--r--src/gpu/effects/GrYUVEffect.cpp60
-rw-r--r--src/gpu/effects/GrYUVEffect.h54
-rw-r--r--src/shaders/SkColorFilterShader.cpp11
-rw-r--r--src/shaders/SkColorFilterShader.h2
-rw-r--r--src/shaders/SkColorShader.cpp6
-rw-r--r--src/shaders/SkColorShader.h4
-rw-r--r--src/shaders/SkComposeShader.cpp7
-rw-r--r--src/shaders/SkComposeShader.h2
-rw-r--r--src/shaders/SkImageShader.cpp8
-rw-r--r--src/shaders/SkImageShader.h2
-rw-r--r--src/shaders/SkLocalMatrixShader.cpp3
-rw-r--r--src/shaders/SkLocalMatrixShader.h2
-rw-r--r--src/shaders/SkPerlinNoiseShader.cpp74
-rw-r--r--src/shaders/SkPictureShader.cpp3
-rw-r--r--src/shaders/SkPictureShader.h2
-rw-r--r--src/shaders/SkShader.cpp2
-rw-r--r--src/shaders/SkShaderBase.h2
-rw-r--r--src/shaders/gradients/SkLinearGradient.cpp21
-rw-r--r--src/shaders/gradients/SkLinearGradient.h2
-rw-r--r--src/shaders/gradients/SkRadialGradient.cpp21
-rw-r--r--src/shaders/gradients/SkRadialGradient.h2
-rw-r--r--src/shaders/gradients/SkSweepGradient.cpp26
-rw-r--r--src/shaders/gradients/SkSweepGradient.h2
-rw-r--r--src/shaders/gradients/SkTwoPointConicalGradient.cpp8
-rw-r--r--src/shaders/gradients/SkTwoPointConicalGradient.h2
-rw-r--r--src/shaders/gradients/SkTwoPointConicalGradient_gpu.cpp77
-rw-r--r--src/shaders/gradients/SkTwoPointConicalGradient_gpu.h11
-rw-r--r--src/sksl/SkSLCPPCodeGenerator.cpp19
-rw-r--r--src/sksl/SkSLHCodeGenerator.cpp6
-rw-r--r--src/utils/SkShadowUtils.cpp7
-rw-r--r--tests/GLProgramsTest.cpp37
-rw-r--r--tests/ImageStorageTest.cpp22
-rw-r--r--tests/IntTextureTest.cpp8
-rw-r--r--tests/OnFlushCallbackTest.cpp6
-rw-r--r--tests/ProcessorTest.cpp64
-rw-r--r--tests/RectangleTextureTest.cpp5
-rw-r--r--tests/SkSLFPTest.cpp22
-rw-r--r--tests/TessellatingPathRendererTests.cpp11
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);