diff options
author | android-autoroll <android-autoroll@skia-corp.google.com.iam.gserviceaccount.com> | 2019-04-22 17:35:45 +0000 |
---|---|---|
committer | Derek Sollenberger <djsollen@google.com> | 2019-04-22 17:46:19 +0000 |
commit | a3e35af7c40598860ca2a502f3eabe7748efd992 (patch) | |
tree | 5cd46ada4e3cda1d58cab4444ff1b54490768bdc | |
parent | cba6f467189dcf37ac0660d72b1ff98b3a4fb2f2 (diff) | |
parent | 40e7cb1a76a777d81c8055f3590ac7543911614b (diff) | |
download | skia-a3e35af7c40598860ca2a502f3eabe7748efd992.tar.gz |
Roll external/skia f1275c6fa..40e7cb1a7 (5 commits)
https://skia.googlesource.com/skia.git/+log/f1275c6fa..40e7cb1a7
2019-04-22 ethannicholas@google.com Reland "Revert "added more SPIR-V RelaxedPrecision decorations""
2019-04-22 ethannicholas@google.com Revert "Revert "added more SPIR-V RelaxedPrecision decorations""
2019-04-22 egdaniel@google.com Adjust vulkan memory allocation block size knobs to better match the type of draws we do.
2019-04-22 brianosman@google.com Add shader based blending of kPlus for configs that need clamping
2019-04-22 brianosman@google.com Ganesh: Clamp blend inputs when using F16_Clamped pixel config
The AutoRoll server is located here: https://autoroll-internal.skia.org/r/android-next-autoroll
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+/master/autoroll/README.md
If the roll is causing failures, please contact the current sheriff, who should
be CC'd on the roll, and stop the roller if necessary.
Test: Presubmit checks will test this change.
Exempt-From-Owner-Approval: The autoroll bot does not require owner approval.
Bug: 116505627
Bug: 131080966
Bug: 130753257
Merged-In: Ia0c3c288813eb6e13a0b82094cad36f62a0ed6df
Change-Id: Icd6402bf5706c9fdf33136fa92c79adffdc9a14a
63 files changed, 275 insertions, 181 deletions
diff --git a/bench/VertexColorSpaceBench.cpp b/bench/VertexColorSpaceBench.cpp index e05175384b..b203d2f06e 100644 --- a/bench/VertexColorSpaceBench.cpp +++ b/bench/VertexColorSpaceBench.cpp @@ -151,7 +151,8 @@ public: return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } diff --git a/gm/beziereffects.cpp b/gm/beziereffects.cpp index 1130f98d49..3a3b33b4a7 100644 --- a/gm/beziereffects.cpp +++ b/gm/beziereffects.cpp @@ -31,11 +31,11 @@ class BezierTestOp : public GrMeshDrawOp { public: FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { return fProcessorSet.finalize( fColor, GrProcessorAnalysisCoverage::kSingleChannel, clip, - &GrUserStencilSettings::kUnused, fsaaType, caps, &fColor); + &GrUserStencilSettings::kUnused, fsaaType, caps, clampType, &fColor); } void visitProxies(const VisitProxyFunc& func, VisitorType) const override { diff --git a/gm/clockwise.cpp b/gm/clockwise.cpp index 20901f6bdf..7ad9feedf4 100644 --- a/gm/clockwise.cpp +++ b/gm/clockwise.cpp @@ -108,7 +108,8 @@ private: const char* name() const override { return "ClockwiseTestOp"; } FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } void onPrepare(GrOpFlushState*) override {} diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp index 6bd6b88fdc..0ea5a5fa5e 100644 --- a/gm/convexpolyeffect.cpp +++ b/gm/convexpolyeffect.cpp @@ -59,11 +59,11 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { return fProcessors.finalize( fColor, GrProcessorAnalysisCoverage::kNone, clip, &GrUserStencilSettings::kUnused, - fsaaType, caps, &fColor); + fsaaType, caps, clampType, &fColor); } private: diff --git a/gm/fwidth_squircle.cpp b/gm/fwidth_squircle.cpp index 6249828a3e..345c7016a0 100644 --- a/gm/fwidth_squircle.cpp +++ b/gm/fwidth_squircle.cpp @@ -126,7 +126,8 @@ private: const char* name() const override { return "ClockwiseTestOp"; } FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } void onPrepare(GrOpFlushState*) override {} diff --git a/gm/samplelocations.cpp b/gm/samplelocations.cpp index d4a7dd7790..2efe19235d 100644 --- a/gm/samplelocations.cpp +++ b/gm/samplelocations.cpp @@ -174,7 +174,8 @@ private: FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kUsesHWAA | FixedFunctionFlags::kUsesStencil; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } void onPrepare(GrOpFlushState*) override {} diff --git a/include/private/GrTypesPriv.h b/include/private/GrTypesPriv.h index 06c708085c..00aba82805 100644 --- a/include/private/GrTypesPriv.h +++ b/include/private/GrTypesPriv.h @@ -320,6 +320,16 @@ enum class GrAllowMixedSamples : bool { kNo = false, kYes = true }; GrAAType GrChooseAAType(GrAA, GrFSAAType, GrAllowMixedSamples, const GrCaps&); +/* + * Some pixel configs are inherently clamped to [0,1], some are allowed to go outside that range, + * and some are FP but manually clamped in the XP. + */ +enum class GrClampType { + kAuto, // Normalized, fixed-point configs + kManual, // Clamped FP configs + kNone, // Normal (unclamped) FP configs +}; + /** * A number of rectangle/quadrilateral drawing APIs can control anti-aliasing on a per edge basis. * These masks specify which edges are AA'ed. The intent for this is to support tiling with seamless @@ -1039,6 +1049,13 @@ static inline bool GrPixelConfigIsFloatingPoint(GrPixelConfig config) { return false; } +static inline GrClampType GrPixelConfigClampType(GrPixelConfig config) { + if (!GrPixelConfigIsFloatingPoint(config)) { + return GrClampType::kAuto; + } + return kRGBA_half_Clamped_GrPixelConfig == config ? GrClampType::kManual : GrClampType::kNone; +} + /** * Returns true if the pixel config is a GPU-specific compressed format * representation. diff --git a/samplecode/SampleCCPRGeometry.cpp b/samplecode/SampleCCPRGeometry.cpp index c59d54f394..fbbac2a545 100644 --- a/samplecode/SampleCCPRGeometry.cpp +++ b/samplecode/SampleCCPRGeometry.cpp @@ -92,7 +92,8 @@ public: private: FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } void onPrepare(GrOpFlushState*) override {} diff --git a/src/atlastext/SkAtlasTextTarget.cpp b/src/atlastext/SkAtlasTextTarget.cpp index fdf27b77f0..2a84d40e78 100644 --- a/src/atlastext/SkAtlasTextTarget.cpp +++ b/src/atlastext/SkAtlasTextTarget.cpp @@ -213,7 +213,8 @@ void GrAtlasTextOp::finalizeForTextTarget(uint32_t color, const GrCaps& caps) { fGeoData[i].fColor = color4f; } // Atlas text doesn't use MSAA, so no need to handle a GrFSAAType. - this->finalize(caps, nullptr /* applied clip */, GrFSAAType::kNone); + // Also, no need to support normalized F16 with manual clamp? + this->finalize(caps, nullptr /* applied clip */, GrFSAAType::kNone, GrClampType::kAuto); } void GrAtlasTextOp::executeForTextTarget(SkAtlasTextTarget* target) { diff --git a/src/gpu/GrProcessorSet.cpp b/src/gpu/GrProcessorSet.cpp index 56dddf2c09..7cbf0bf386 100644 --- a/src/gpu/GrProcessorSet.cpp +++ b/src/gpu/GrProcessorSet.cpp @@ -163,7 +163,7 @@ bool GrProcessorSet::operator==(const GrProcessorSet& that) const { GrProcessorSet::Analysis GrProcessorSet::finalize( const GrProcessorAnalysisColor& colorInput, const GrProcessorAnalysisCoverage coverageInput, const GrAppliedClip* clip, const GrUserStencilSettings* userStencil, GrFSAAType fsaaType, - const GrCaps& caps, SkPMColor4f* overrideInputColor) { + const GrCaps& caps, GrClampType clampType, SkPMColor4f* overrideInputColor) { SkASSERT(!this->isFinalized()); SkASSERT(!fFragmentProcessorOffset); @@ -209,7 +209,7 @@ GrProcessorSet::Analysis GrProcessorSet::finalize( } GrXPFactory::AnalysisProperties props = GrXPFactory::GetAnalysisProperties( - this->xpFactory(), colorAnalysis.outputColor(), outputCoverage, caps); + this->xpFactory(), colorAnalysis.outputColor(), outputCoverage, caps, clampType); if (!this->numCoverageFragmentProcessors() && GrProcessorAnalysisCoverage::kNone == coverageInput) { } @@ -240,7 +240,8 @@ GrProcessorSet::Analysis GrProcessorSet::finalize( bool hasMixedSampledCoverage = (GrFSAAType::kMixedSamples == fsaaType) && !userStencil->testAlwaysPasses((clip) ? clip->hasStencilClip() : false); auto xp = GrXPFactory::MakeXferProcessor(this->xpFactory(), colorAnalysis.outputColor(), - outputCoverage, hasMixedSampledCoverage, caps); + outputCoverage, hasMixedSampledCoverage, caps, + clampType); fXP.fProcessor = xp.release(); fFlags |= kFinalized_Flag; diff --git a/src/gpu/GrProcessorSet.h b/src/gpu/GrProcessorSet.h index 179962cf3b..ec550ee611 100644 --- a/src/gpu/GrProcessorSet.h +++ b/src/gpu/GrProcessorSet.h @@ -139,7 +139,7 @@ public: */ Analysis finalize(const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage, const GrAppliedClip*, const GrUserStencilSettings*, GrFSAAType, const GrCaps&, - SkPMColor4f* inputColorOverride); + GrClampType, SkPMColor4f* inputColorOverride); bool isFinalized() const { return SkToBool(kFinalized_Flag & fFlags); } diff --git a/src/gpu/GrProgramDesc.cpp b/src/gpu/GrProgramDesc.cpp index 26b06f96d5..a06614530e 100644 --- a/src/gpu/GrProgramDesc.cpp +++ b/src/gpu/GrProgramDesc.cpp @@ -253,5 +253,7 @@ bool GrProgramDesc::Build( SkASSERT(header->processorFeatures() == processorFeatures); // Ensure enough bits. header->fSnapVerticesToPixelCenters = pipeline.snapVerticesToPixelCenters(); header->fHasPointSize = hasPointSize ? 1 : 0; + header->fClampBlendInput = + GrClampType::kManual == GrPixelConfigClampType(renderTarget->config()) ? 1 : 0; return true; } diff --git a/src/gpu/GrProgramDesc.h b/src/gpu/GrProgramDesc.h index e2fe270275..af5ce8031f 100644 --- a/src/gpu/GrProgramDesc.h +++ b/src/gpu/GrProgramDesc.h @@ -103,7 +103,8 @@ public: uint8_t fProcessorFeatures : 1; bool fSnapVerticesToPixelCenters : 1; bool fHasPointSize : 1; - uint8_t fPad : 3; + bool fClampBlendInput : 1; + uint8_t fPad : 2; }; GR_STATIC_ASSERT(sizeof(KeyHeader) == 6); diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp index 8a8576fdbf..bd65350cea 100644 --- a/src/gpu/GrRenderTargetContext.cpp +++ b/src/gpu/GrRenderTargetContext.cpp @@ -2081,8 +2081,10 @@ void GrRenderTargetContext::addDrawOp(const GrClip& clip, std::unique_ptr<GrDraw this->setNeedsStencil(); } + GrClampType clampType = GrPixelConfigClampType(this->colorSpaceInfo().config()); GrXferProcessor::DstProxy dstProxy; - GrProcessorSet::Analysis analysis = op->finalize(*this->caps(), &appliedClip, this->fsaaType()); + GrProcessorSet::Analysis analysis = op->finalize( + *this->caps(), &appliedClip, this->fsaaType(), clampType); if (analysis.requiresDstTexture()) { if (!this->setupDstProxy(this->asRenderTargetProxy(), clip, *op, &dstProxy)) { fContext->priv().opMemoryPool()->release(std::move(op)); diff --git a/src/gpu/GrXferProcessor.cpp b/src/gpu/GrXferProcessor.cpp index fb2eeea16b..608bb82d46 100644 --- a/src/gpu/GrXferProcessor.cpp +++ b/src/gpu/GrXferProcessor.cpp @@ -166,12 +166,14 @@ GrXPFactory::AnalysisProperties GrXPFactory::GetAnalysisProperties( const GrXPFactory* factory, const GrProcessorAnalysisColor& color, const GrProcessorAnalysisCoverage& coverage, - const GrCaps& caps) { + const GrCaps& caps, + GrClampType clampType) { AnalysisProperties result; if (factory) { - result = factory->analysisProperties(color, coverage, caps); + result = factory->analysisProperties(color, coverage, caps, clampType); } else { - result = GrPorterDuffXPFactory::SrcOverAnalysisProperties(color, coverage, caps); + result = GrPorterDuffXPFactory::SrcOverAnalysisProperties(color, coverage, caps, + clampType); } SkASSERT(!(result & AnalysisProperties::kRequiresDstTexture)); if ((result & AnalysisProperties::kReadsDstInShader) && @@ -186,10 +188,11 @@ sk_sp<const GrXferProcessor> GrXPFactory::MakeXferProcessor(const GrXPFactory* f const GrProcessorAnalysisColor& color, GrProcessorAnalysisCoverage coverage, bool hasMixedSamples, - const GrCaps& caps) { + const GrCaps& caps, + GrClampType clampType) { SkASSERT(!hasMixedSamples || caps.shaderCaps()->dualSourceBlendingSupport()); if (factory) { - return factory->makeXferProcessor(color, coverage, hasMixedSamples, caps); + return factory->makeXferProcessor(color, coverage, hasMixedSamples, caps, clampType); } else { return GrPorterDuffXPFactory::MakeSrcOverXferProcessor(color, coverage, hasMixedSamples, caps); diff --git a/src/gpu/GrXferProcessor.h b/src/gpu/GrXferProcessor.h index 295bf00102..98a359bf07 100644 --- a/src/gpu/GrXferProcessor.h +++ b/src/gpu/GrXferProcessor.h @@ -286,12 +286,14 @@ public: const GrProcessorAnalysisColor&, GrProcessorAnalysisCoverage, bool hasMixedSamples, - const GrCaps& caps); + const GrCaps& caps, + GrClampType); static AnalysisProperties GetAnalysisProperties(const GrXPFactory*, const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage&, - const GrCaps&); + const GrCaps&, + GrClampType); protected: constexpr GrXPFactory() {} @@ -300,7 +302,8 @@ private: virtual sk_sp<const GrXferProcessor> makeXferProcessor(const GrProcessorAnalysisColor&, GrProcessorAnalysisCoverage, bool hasMixedSamples, - const GrCaps&) const = 0; + const GrCaps&, + GrClampType) const = 0; /** * Subclass analysis implementation. This should not return kNeedsDstInTexture as that will be @@ -308,7 +311,8 @@ private: */ virtual AnalysisProperties analysisProperties(const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage&, - const GrCaps&) const = 0; + const GrCaps&, + GrClampType) const = 0; }; #if defined(__GNUC__) #pragma GCC diagnostic pop diff --git a/src/gpu/ccpr/GrCCDrawPathsOp.cpp b/src/gpu/ccpr/GrCCDrawPathsOp.cpp index f115358b4e..d16bff5a55 100644 --- a/src/gpu/ccpr/GrCCDrawPathsOp.cpp +++ b/src/gpu/ccpr/GrCCDrawPathsOp.cpp @@ -139,18 +139,18 @@ GrCCDrawPathsOp::SingleDraw::SingleDraw(const SkMatrix& m, const GrShape& shape, #endif } -GrProcessorSet::Analysis GrCCDrawPathsOp::finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) { +GrProcessorSet::Analysis GrCCDrawPathsOp::finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) { SkASSERT(1 == fNumDraws); // There should only be one single path draw in this Op right now. - return fDraws.head().finalize(caps, clip, fsaaType, &fProcessors); + return fDraws.head().finalize(caps, clip, fsaaType, clampType, &fProcessors); } GrProcessorSet::Analysis GrCCDrawPathsOp::SingleDraw::finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType, + const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType, GrClampType clampType, GrProcessorSet* processors) { const GrProcessorSet::Analysis& analysis = processors->finalize( fColor, GrProcessorAnalysisCoverage::kSingleChannel, clip, - &GrUserStencilSettings::kUnused, fsaaType, caps, &fColor); + &GrUserStencilSettings::kUnused, fsaaType, caps, clampType, &fColor); // Lines start looking jagged when they get thinner than 1px. For thin strokes it looks better // if we can convert them to hairline (i.e., inflate the stroke width to 1px), and instead diff --git a/src/gpu/ccpr/GrCCDrawPathsOp.h b/src/gpu/ccpr/GrCCDrawPathsOp.h index 4b2cb77849..6984a5d5a5 100644 --- a/src/gpu/ccpr/GrCCDrawPathsOp.h +++ b/src/gpu/ccpr/GrCCDrawPathsOp.h @@ -35,7 +35,8 @@ public: const char* name() const override { return "GrCCDrawPathsOp"; } FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override; + GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType, + GrClampType) override; CombineResult onCombineIfPossible(GrOp*, const GrCaps&) override; void visitProxies(const VisitProxyFunc& fn, VisitorType) const override { fProcessors.visitProxies(fn); @@ -92,7 +93,7 @@ private: // See the corresponding methods in GrCCDrawPathsOp. GrProcessorSet::Analysis finalize( - const GrCaps&, const GrAppliedClip*, GrFSAAType, GrProcessorSet*); + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType, GrProcessorSet*); void accountForOwnPath(GrCCPathCache*, GrOnFlushResourceProvider*, GrCCPerFlushResourceSpecs*); void setupResources(GrCCPathCache*, GrOnFlushResourceProvider*, GrCCPerFlushResources*, diff --git a/src/gpu/ccpr/GrCCPerFlushResources.cpp b/src/gpu/ccpr/GrCCPerFlushResources.cpp index e3c4ad49f4..18d3ee93d2 100644 --- a/src/gpu/ccpr/GrCCPerFlushResources.cpp +++ b/src/gpu/ccpr/GrCCPerFlushResources.cpp @@ -31,7 +31,8 @@ namespace { class AtlasOp : public GrDrawOp { public: FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } CombineResult onCombineIfPossible(GrOp* other, const GrCaps&) override { diff --git a/src/gpu/effects/GrCoverageSetOpXP.cpp b/src/gpu/effects/GrCoverageSetOpXP.cpp index 8e1dbbbb56..f3f9133b8b 100644 --- a/src/gpu/effects/GrCoverageSetOpXP.cpp +++ b/src/gpu/effects/GrCoverageSetOpXP.cpp @@ -211,7 +211,8 @@ sk_sp<const GrXferProcessor> GrCoverageSetOpXPFactory::makeXferProcessor( const GrProcessorAnalysisColor&, GrProcessorAnalysisCoverage, bool hasMixedSamples, - const GrCaps& caps) const { + const GrCaps& caps, + GrClampType) const { // We don't support inverting coverage with mixed samples. We don't expect to ever want this in // the future, however we could at some point make this work using an inverted coverage // modulation table. Note that an inverted table still won't work if there are coverage procs. diff --git a/src/gpu/effects/GrCoverageSetOpXP.h b/src/gpu/effects/GrCoverageSetOpXP.h index e8bc5a223f..6c761d40c9 100644 --- a/src/gpu/effects/GrCoverageSetOpXP.h +++ b/src/gpu/effects/GrCoverageSetOpXP.h @@ -37,11 +37,13 @@ private: sk_sp<const GrXferProcessor> makeXferProcessor(const GrProcessorAnalysisColor&, GrProcessorAnalysisCoverage, bool hasMixedSamples, - const GrCaps&) const override; + const GrCaps&, + GrClampType) const override; AnalysisProperties analysisProperties(const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage&, - const GrCaps&) const override { + const GrCaps&, + GrClampType) const override { return AnalysisProperties::kIgnoresInputColor; } diff --git a/src/gpu/effects/GrCustomXfermode.cpp b/src/gpu/effects/GrCustomXfermode.cpp index 86e7037193..f69f25ab1e 100644 --- a/src/gpu/effects/GrCustomXfermode.cpp +++ b/src/gpu/effects/GrCustomXfermode.cpp @@ -220,11 +220,13 @@ private: sk_sp<const GrXferProcessor> makeXferProcessor(const GrProcessorAnalysisColor&, GrProcessorAnalysisCoverage, bool hasMixedSamples, - const GrCaps&) const override; + const GrCaps&, + GrClampType) const override; AnalysisProperties analysisProperties(const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage&, - const GrCaps&) const override; + const GrCaps&, + GrClampType) const override; GR_DECLARE_XP_FACTORY_TEST @@ -244,7 +246,8 @@ sk_sp<const GrXferProcessor> CustomXPFactory::makeXferProcessor( const GrProcessorAnalysisColor&, GrProcessorAnalysisCoverage coverage, bool hasMixedSamples, - const GrCaps& caps) const { + const GrCaps& caps, + GrClampType clampType) const { SkASSERT(GrCustomXfermode::IsSupportedMode(fMode)); if (can_use_hw_blend_equation(fHWBlendEquation, coverage, caps)) { return sk_sp<GrXferProcessor>(new CustomXP(fMode, fHWBlendEquation)); @@ -254,7 +257,7 @@ sk_sp<const GrXferProcessor> CustomXPFactory::makeXferProcessor( GrXPFactory::AnalysisProperties CustomXPFactory::analysisProperties( const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage& coverage, - const GrCaps& caps) const { + const GrCaps& caps, GrClampType clampType) const { /* The general SVG blend equation is defined in the spec as follows: diff --git a/src/gpu/effects/GrDisableColorXP.cpp b/src/gpu/effects/GrDisableColorXP.cpp index 3f9f71e314..2ff36c49f7 100644 --- a/src/gpu/effects/GrDisableColorXP.cpp +++ b/src/gpu/effects/GrDisableColorXP.cpp @@ -79,7 +79,8 @@ sk_sp<const GrXferProcessor> GrDisableColorXPFactory::makeXferProcessor( const GrProcessorAnalysisColor&, GrProcessorAnalysisCoverage, bool hasMixedSamples, - const GrCaps& caps) const { + const GrCaps& caps, + GrClampType clampType) const { return sk_sp<const GrXferProcessor>(new DisableColorXP); } diff --git a/src/gpu/effects/GrDisableColorXP.h b/src/gpu/effects/GrDisableColorXP.h index d15f9525c8..287e988814 100644 --- a/src/gpu/effects/GrDisableColorXP.h +++ b/src/gpu/effects/GrDisableColorXP.h @@ -30,7 +30,8 @@ private: AnalysisProperties analysisProperties(const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage&, - const GrCaps&) const override { + const GrCaps&, + GrClampType) const override { return AnalysisProperties::kCompatibleWithAlphaAsCoverage | AnalysisProperties::kIgnoresInputColor; } @@ -38,7 +39,8 @@ private: sk_sp<const GrXferProcessor> makeXferProcessor(const GrProcessorAnalysisColor&, GrProcessorAnalysisCoverage, bool hasMixedSamples, - const GrCaps&) const override; + const GrCaps&, + GrClampType) const override; GR_DECLARE_XP_FACTORY_TEST diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp index b7a7e4dfc6..060fb36f6d 100644 --- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp +++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp @@ -759,7 +759,7 @@ const GrXPFactory* GrPorterDuffXPFactory::Get(SkBlendMode blendMode) { sk_sp<const GrXferProcessor> GrPorterDuffXPFactory::makeXferProcessor( const GrProcessorAnalysisColor& color, GrProcessorAnalysisCoverage coverage, - bool hasMixedSamples, const GrCaps& caps) const { + bool hasMixedSamples, const GrCaps& caps, GrClampType clampType) const { BlendFormula blendFormula; bool isLCD = coverage == GrProcessorAnalysisCoverage::kLCD; if (isLCD) { @@ -778,8 +778,11 @@ sk_sp<const GrXferProcessor> GrPorterDuffXPFactory::makeXferProcessor( hasMixedSamples, fBlendMode); } + // Skia always saturates after the kPlus blend mode, so it requires shader-based blending when + // pixels aren't guaranteed to automatically be normalized (i.e. any floating point config). if ((blendFormula.hasSecondaryOutput() && !caps.shaderCaps()->dualSourceBlendingSupport()) || - (isLCD && (SkBlendMode::kSrcOver != fBlendMode /*|| !color.isOpaque()*/))) { + (isLCD && (SkBlendMode::kSrcOver != fBlendMode /*|| !color.isOpaque()*/)) || + (GrClampType::kAuto != clampType && SkBlendMode::kPlus == fBlendMode)) { return sk_sp<const GrXferProcessor>(new ShaderPDXferProcessor(hasMixedSamples, fBlendMode, coverage)); } @@ -788,7 +791,7 @@ sk_sp<const GrXferProcessor> GrPorterDuffXPFactory::makeXferProcessor( static inline GrXPFactory::AnalysisProperties analysis_properties( const GrProcessorAnalysisColor& color, const GrProcessorAnalysisCoverage& coverage, - const GrCaps& caps, SkBlendMode mode) { + const GrCaps& caps, GrClampType clampType, SkBlendMode mode) { using AnalysisProperties = GrXPFactory::AnalysisProperties; AnalysisProperties props = AnalysisProperties::kNone; bool hasCoverage = GrProcessorAnalysisCoverage::kNone != coverage; @@ -835,6 +838,10 @@ static inline GrXPFactory::AnalysisProperties analysis_properties( } } + if (GrClampType::kAuto != clampType && SkBlendMode::kPlus == mode) { + props |= AnalysisProperties::kReadsDstInShader; + } + if (!formula.modifiesDst() || !formula.usesInputColor()) { props |= AnalysisProperties::kIgnoresInputColor; } @@ -844,8 +851,9 @@ static inline GrXPFactory::AnalysisProperties analysis_properties( GrXPFactory::AnalysisProperties GrPorterDuffXPFactory::analysisProperties( const GrProcessorAnalysisColor& color, const GrProcessorAnalysisCoverage& coverage, - const GrCaps& caps) const { - return analysis_properties(color, coverage, caps, fBlendMode); + const GrCaps& caps, + GrClampType clampType) const { + return analysis_properties(color, coverage, caps, clampType, fBlendMode); } GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory); @@ -932,6 +940,7 @@ sk_sp<const GrXferProcessor> GrPorterDuffXPFactory::MakeNoCoverageXP(SkBlendMode GrXPFactory::AnalysisProperties GrPorterDuffXPFactory::SrcOverAnalysisProperties( const GrProcessorAnalysisColor& color, const GrProcessorAnalysisCoverage& coverage, - const GrCaps& caps) { - return analysis_properties(color, coverage, caps, SkBlendMode::kSrcOver); + const GrCaps& caps, + GrClampType clampType) { + return analysis_properties(color, coverage, caps, clampType, SkBlendMode::kSrcOver); } diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.h b/src/gpu/effects/GrPorterDuffXferProcessor.h index ebe02126d2..1c39c3adf9 100644 --- a/src/gpu/effects/GrPorterDuffXferProcessor.h +++ b/src/gpu/effects/GrPorterDuffXferProcessor.h @@ -41,7 +41,8 @@ public: static AnalysisProperties SrcOverAnalysisProperties(const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage&, - const GrCaps&); + const GrCaps&, + GrClampType); private: constexpr GrPorterDuffXPFactory(SkBlendMode); @@ -49,11 +50,13 @@ private: sk_sp<const GrXferProcessor> makeXferProcessor(const GrProcessorAnalysisColor&, GrProcessorAnalysisCoverage, bool hasMixedSamples, - const GrCaps&) const override; + const GrCaps&, + GrClampType) const override; AnalysisProperties analysisProperties(const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage&, - const GrCaps&) const override; + const GrCaps&, + GrClampType) const override; GR_DECLARE_XP_FACTORY_TEST static void TestGetXPOutputTypes(const GrXferProcessor*, int* outPrimary, int* outSecondary); diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp index 09e238852b..ff9ad863bc 100644 --- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp +++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp @@ -253,11 +253,22 @@ void GrGLSLProgramBuilder::emitAndInstallXferProc(const SkString& colorIn, SkASSERT(dstTexture->texturePriv().textureType() != GrTextureType::kExternal); } + SkString finalInColor; + if (colorIn.size()) { + if (this->desc()->header().fClampBlendInput) { + finalInColor.printf("saturate(%s)", colorIn.c_str()); + } else { + finalInColor = colorIn; + } + } else { + finalInColor = "float4(1)"; + } + GrGLSLXferProcessor::EmitArgs args(&fFS, this->uniformHandler(), this->shaderCaps(), xp, - colorIn.size() ? colorIn.c_str() : "float4(1)", + finalInColor.c_str(), coverageIn.size() ? coverageIn.c_str() : "float4(1)", fFS.getPrimaryColorOutputName(), fFS.getSecondaryColorOutputName(), diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp index bb45932231..6016008ec3 100644 --- a/src/gpu/ops/GrAAConvexPathRenderer.cpp +++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp @@ -706,10 +706,10 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, + caps, clip, fsaaType, clampType, GrProcessorAnalysisCoverage::kSingleChannel, &fPaths.back().fColor); } diff --git a/src/gpu/ops/GrAAFillRRectOp.cpp b/src/gpu/ops/GrAAFillRRectOp.cpp index a4a78c3802..22d9dc54d1 100644 --- a/src/gpu/ops/GrAAFillRRectOp.cpp +++ b/src/gpu/ops/GrAAFillRRectOp.cpp @@ -81,15 +81,15 @@ GrAAFillRRectOp::GrAAFillRRectOp(const GrShaderCaps& shaderCaps, const SkMatrix& // We will write the color and local rect attribs during finalize(). } -GrProcessorSet::Analysis GrAAFillRRectOp::finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) { +GrProcessorSet::Analysis GrAAFillRRectOp::finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) { SkASSERT(1 == fInstanceCount); SkPMColor4f overrideColor; const GrProcessorSet::Analysis& analysis = fProcessors.finalize( fOriginalColor, GrProcessorAnalysisCoverage::kSingleChannel, clip, - &GrUserStencilSettings::kUnused, fsaaType, caps, &overrideColor); + &GrUserStencilSettings::kUnused, fsaaType, caps, clampType, &overrideColor); // Finish writing the instance attribs. SkPMColor4f finalColor = analysis.inputColorIsOverridden() ? overrideColor : fOriginalColor; diff --git a/src/gpu/ops/GrAAFillRRectOp.h b/src/gpu/ops/GrAAFillRRectOp.h index 89122e419b..7032e3a5ac 100644 --- a/src/gpu/ops/GrAAFillRRectOp.h +++ b/src/gpu/ops/GrAAFillRRectOp.h @@ -21,7 +21,8 @@ public: const char* name() const override { return "GrAAFillRRectOp"; } FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override; + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override; CombineResult onCombineIfPossible(GrOp*, const GrCaps&) override; void visitProxies(const VisitProxyFunc& fn, VisitorType) const override { fProcessors.visitProxies(fn); diff --git a/src/gpu/ops/GrAAHairLinePathRenderer.cpp b/src/gpu/ops/GrAAHairLinePathRenderer.cpp index b97e5782e5..f30fca3bc6 100644 --- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp +++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp @@ -838,10 +838,10 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { - return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, &fColor); + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { + return fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, + GrProcessorAnalysisCoverage::kSingleChannel, &fColor); } private: diff --git a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp index 74a5572ba3..483f4dab88 100644 --- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp +++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp @@ -187,10 +187,10 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, + caps, clip, fsaaType, clampType, GrProcessorAnalysisCoverage::kSingleChannel, &fPaths.back().fColor); } diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp index ae79cf4f50..1826a0b978 100644 --- a/src/gpu/ops/GrAtlasTextOp.cpp +++ b/src/gpu/ops/GrAtlasTextOp.cpp @@ -140,8 +140,8 @@ GrDrawOp::FixedFunctionFlags GrAtlasTextOp::fixedFunctionFlags() const { return FixedFunctionFlags::kNone; } -GrProcessorSet::Analysis GrAtlasTextOp::finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) { +GrProcessorSet::Analysis GrAtlasTextOp::finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) { GrProcessorAnalysisCoverage coverage; GrProcessorAnalysisColor color; if (kColorBitmapMask_MaskType == fMaskType) { @@ -165,7 +165,7 @@ GrProcessorSet::Analysis GrAtlasTextOp::finalize( break; } auto analysis = fProcessors.finalize( - color, coverage, clip, &GrUserStencilSettings::kUnused, fsaaType, caps, + color, coverage, clip, &GrUserStencilSettings::kUnused, fsaaType, caps, clampType, &fGeoData[0].fColor); fUsesLocalCoords = analysis.usesLocalCoords(); return analysis; diff --git a/src/gpu/ops/GrAtlasTextOp.h b/src/gpu/ops/GrAtlasTextOp.h index fcaf792a38..973b00b481 100644 --- a/src/gpu/ops/GrAtlasTextOp.h +++ b/src/gpu/ops/GrAtlasTextOp.h @@ -75,7 +75,8 @@ public: FixedFunctionFlags fixedFunctionFlags() const override; - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override; + GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType, + GrClampType) override; enum MaskType { kGrayscaleCoverageMask_MaskType, diff --git a/src/gpu/ops/GrDashOp.cpp b/src/gpu/ops/GrDashOp.cpp index f1697b71e4..3893ba4989 100644 --- a/src/gpu/ops/GrDashOp.cpp +++ b/src/gpu/ops/GrDashOp.cpp @@ -258,7 +258,8 @@ public: } GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType, + GrClampType clampType) override { GrProcessorAnalysisCoverage coverage; if (AAMode::kNone == fAAMode && !clip->numClipCoverageFragmentProcessors()) { coverage = GrProcessorAnalysisCoverage::kNone; @@ -266,7 +267,7 @@ public: coverage = GrProcessorAnalysisCoverage::kSingleChannel; } auto analysis = fProcessorSet.finalize( - fColor, coverage, clip, fStencilSettings, fsaaType, caps, &fColor); + fColor, coverage, clip, fStencilSettings, fsaaType, caps, clampType, &fColor); fUsesLocalCoords = analysis.usesLocalCoords(); return analysis; } diff --git a/src/gpu/ops/GrDefaultPathRenderer.cpp b/src/gpu/ops/GrDefaultPathRenderer.cpp index 04444d0ffc..934ad53105 100644 --- a/src/gpu/ops/GrDefaultPathRenderer.cpp +++ b/src/gpu/ops/GrDefaultPathRenderer.cpp @@ -387,12 +387,12 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { GrProcessorAnalysisCoverage gpCoverage = this->coverage() == 0xFF ? GrProcessorAnalysisCoverage::kNone : GrProcessorAnalysisCoverage::kSingleChannel; - return fHelper.finalizeProcessors(caps, clip, fsaaType, gpCoverage, &fColor); + return fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, gpCoverage, &fColor); } private: diff --git a/src/gpu/ops/GrDrawAtlasOp.cpp b/src/gpu/ops/GrDrawAtlasOp.cpp index 6b0dac8c7e..ed940f5578 100644 --- a/src/gpu/ops/GrDrawAtlasOp.cpp +++ b/src/gpu/ops/GrDrawAtlasOp.cpp @@ -44,7 +44,8 @@ public: FixedFunctionFlags fixedFunctionFlags() const override; - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override; + GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType, + GrClampType) override; private: void onPrepareDraws(Target*) override; @@ -244,8 +245,8 @@ GrDrawOp::FixedFunctionFlags DrawAtlasOp::fixedFunctionFlags() const { return fHelper.fixedFunctionFlags(); } -GrProcessorSet::Analysis DrawAtlasOp::finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) { +GrProcessorSet::Analysis DrawAtlasOp::finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) { GrProcessorAnalysisColor gpColor; if (this->hasColors()) { gpColor.setToUnknown(); @@ -253,7 +254,7 @@ GrProcessorSet::Analysis DrawAtlasOp::finalize( gpColor.setToConstant(fColor); } auto result = fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kNone, &gpColor); + caps, clip, fsaaType, clampType, GrProcessorAnalysisCoverage::kNone, &gpColor); if (gpColor.isConstant(&fColor)) { fHasColors = false; } diff --git a/src/gpu/ops/GrDrawOp.h b/src/gpu/ops/GrDrawOp.h index 7b66b88f2b..bc574fee3a 100644 --- a/src/gpu/ops/GrDrawOp.h +++ b/src/gpu/ops/GrDrawOp.h @@ -43,7 +43,8 @@ public: * at this time the op must report whether a copy of the destination (or destination texture * itself) needs to be provided to the GrXferProcessor when this op executes. */ - virtual GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) = 0; + virtual GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType, + GrClampType) = 0; #ifdef SK_DEBUG bool fAddDrawOpCalled = false; diff --git a/src/gpu/ops/GrDrawPathOp.cpp b/src/gpu/ops/GrDrawPathOp.cpp index f73bbbeab5..75431fae52 100644 --- a/src/gpu/ops/GrDrawPathOp.cpp +++ b/src/gpu/ops/GrDrawPathOp.cpp @@ -55,10 +55,11 @@ GrPipeline::InitArgs GrDrawPathOpBase::pipelineInitArgs(const GrOpFlushState& st } const GrProcessorSet::Analysis& GrDrawPathOpBase::doProcessorAnalysis( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) { + const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType, + GrClampType clampType) { fAnalysis = fProcessorSet.finalize( fInputColor, GrProcessorAnalysisCoverage::kNone, clip, &kCoverPass, fsaaType, caps, - &fInputColor); + clampType, &fInputColor); return fAnalysis; } diff --git a/src/gpu/ops/GrDrawPathOp.h b/src/gpu/ops/GrDrawPathOp.h index 89a294f56c..68a3d2bcd7 100644 --- a/src/gpu/ops/GrDrawPathOp.h +++ b/src/gpu/ops/GrDrawPathOp.h @@ -30,9 +30,9 @@ protected: } return FixedFunctionFlags::kUsesStencil; } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { - return this->doProcessorAnalysis(caps, clip, fsaaType); + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { + return this->doProcessorAnalysis(caps, clip, fsaaType, clampType); } void visitProxies(const VisitProxyFunc& func, VisitorType) const override { @@ -47,7 +47,7 @@ protected: GrProcessorSet detachProcessors() { return std::move(fProcessorSet); } inline GrPipeline::InitArgs pipelineInitArgs(const GrOpFlushState&); const GrProcessorSet::Analysis& doProcessorAnalysis( - const GrCaps&, const GrAppliedClip*, GrFSAAType); + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType); const GrProcessorSet::Analysis& processorAnalysis() const { SkASSERT(fAnalysis.isInitialized()); return fAnalysis; diff --git a/src/gpu/ops/GrDrawVerticesOp.cpp b/src/gpu/ops/GrDrawVerticesOp.cpp index b05481c87c..bb51887d35 100644 --- a/src/gpu/ops/GrDrawVerticesOp.cpp +++ b/src/gpu/ops/GrDrawVerticesOp.cpp @@ -38,7 +38,8 @@ public: FixedFunctionFlags fixedFunctionFlags() const override; - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override; + GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType, + GrClampType) override; private: enum class ColorArrayType { @@ -205,8 +206,8 @@ GrDrawOp::FixedFunctionFlags DrawVerticesOp::fixedFunctionFlags() const { return fHelper.fixedFunctionFlags(); } -GrProcessorSet::Analysis DrawVerticesOp::finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) { +GrProcessorSet::Analysis DrawVerticesOp::finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) { GrProcessorAnalysisColor gpColor; if (this->requiresPerVertexColors()) { gpColor.setToUnknown(); @@ -214,7 +215,7 @@ GrProcessorSet::Analysis DrawVerticesOp::finalize( gpColor.setToConstant(fMeshes.front().fColor); } auto result = fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kNone, &gpColor); + caps, clip, fsaaType, clampType, GrProcessorAnalysisCoverage::kNone, &gpColor); if (gpColor.isConstant(&fMeshes.front().fColor)) { fMeshes.front().fIgnoreColors = true; fFlags &= ~kRequiresPerVertexColors_Flag; diff --git a/src/gpu/ops/GrFillRectOp.cpp b/src/gpu/ops/GrFillRectOp.cpp index cedfac2db1..6852897bd2 100644 --- a/src/gpu/ops/GrFillRectOp.cpp +++ b/src/gpu/ops/GrFillRectOp.cpp @@ -122,8 +122,8 @@ public: } #endif - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { // Initialize aggregate color analysis with the first quad's color (which always exists) SkASSERT(this->quadCount() > 0); GrProcessorAnalysisColor quadColors(fDeviceQuads.metadata(0).fColor); @@ -143,7 +143,8 @@ public: GrProcessorAnalysisCoverage coverage = fHelper.aaType() == GrAAType::kCoverage ? GrProcessorAnalysisCoverage::kSingleChannel : GrProcessorAnalysisCoverage::kNone; - auto result = fHelper.finalizeProcessors(caps, clip, fsaaType, coverage, &quadColors); + auto result = fHelper.finalizeProcessors( + caps, clip, fsaaType, clampType, coverage, &quadColors); // If there is a constant color after analysis, that means all of the quads should be set // to the same color (even if they started out with different colors). SkPMColor4f colorOverride; diff --git a/src/gpu/ops/GrLatticeOp.cpp b/src/gpu/ops/GrLatticeOp.cpp index 8806172f94..51dd6addf6 100644 --- a/src/gpu/ops/GrLatticeOp.cpp +++ b/src/gpu/ops/GrLatticeOp.cpp @@ -193,14 +193,15 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { auto opaque = fPatches[0].fColor.isOpaque() && GrPixelConfigIsOpaque(fProxy->config()) ? GrProcessorAnalysisColor::Opaque::kYes : GrProcessorAnalysisColor::Opaque::kNo; auto analysisColor = GrProcessorAnalysisColor(opaque); - auto result = fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kNone, &analysisColor); + auto result = fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, + GrProcessorAnalysisCoverage::kNone, + &analysisColor); analysisColor.isConstant(&fPatches[0].fColor); return result; } diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp index 8bf691410b..6339abfe82 100644 --- a/src/gpu/ops/GrOvalOpFactory.cpp +++ b/src/gpu/ops/GrOvalOpFactory.cpp @@ -1220,11 +1220,11 @@ public: } #endif - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { SkPMColor4f* color = &fCircles.front().fColor; - return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, color); + return fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, + GrProcessorAnalysisCoverage::kSingleChannel, color); } FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } @@ -1550,11 +1550,11 @@ public: } #endif - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { SkPMColor4f* color = &fCircles.front().fColor; - return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, color); + return fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, + GrProcessorAnalysisCoverage::kSingleChannel, color); } FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } @@ -1846,13 +1846,13 @@ public: } #endif - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { fUseScale = !caps.shaderCaps()->floatIs32Bits() && !caps.shaderCaps()->hasLowFragmentPrecision(); SkPMColor4f* color = &fEllipses.front().fColor; - return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, color); + return fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, + GrProcessorAnalysisCoverage::kSingleChannel, color); } FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } @@ -2088,13 +2088,13 @@ public: } #endif - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { fUseScale = !caps.shaderCaps()->floatIs32Bits() && !caps.shaderCaps()->hasLowFragmentPrecision(); SkPMColor4f* color = &fEllipses.front().fColor; - return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, color); + return fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, + GrProcessorAnalysisCoverage::kSingleChannel, color); } FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } @@ -2412,11 +2412,11 @@ public: } #endif - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { SkPMColor4f* color = &fRRects.front().fColor; - return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, color); + return fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, + GrProcessorAnalysisCoverage::kSingleChannel, color); } FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } @@ -2753,12 +2753,12 @@ public: } #endif - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { fUseScale = !caps.shaderCaps()->floatIs32Bits(); SkPMColor4f* color = &fRRects.front().fColor; - return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, color); + return fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, + GrProcessorAnalysisCoverage::kSingleChannel, color); } FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } diff --git a/src/gpu/ops/GrRegionOp.cpp b/src/gpu/ops/GrRegionOp.cpp index 91ec455133..3b1c39a0c3 100644 --- a/src/gpu/ops/GrRegionOp.cpp +++ b/src/gpu/ops/GrRegionOp.cpp @@ -88,10 +88,10 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { - return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kNone, &fRegions[0].fColor); + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { + return fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, + GrProcessorAnalysisCoverage::kNone, &fRegions[0].fColor); } private: diff --git a/src/gpu/ops/GrShadowRRectOp.cpp b/src/gpu/ops/GrShadowRRectOp.cpp index 23545e5484..5ee0b37ff4 100644 --- a/src/gpu/ops/GrShadowRRectOp.cpp +++ b/src/gpu/ops/GrShadowRRectOp.cpp @@ -255,7 +255,8 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } diff --git a/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp b/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp index feb98d4aec..73fa3aba6d 100644 --- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp +++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp @@ -63,17 +63,18 @@ bool GrSimpleMeshDrawOpHelper::isCompatible(const GrSimpleMeshDrawOpHelper& that } GrProcessorSet::Analysis GrSimpleMeshDrawOpHelper::finalizeProcessors( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType, + const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType, GrClampType clampType, GrProcessorAnalysisCoverage geometryCoverage, SkPMColor4f* geometryColor) { GrProcessorAnalysisColor color = *geometryColor; - auto result = this->finalizeProcessors(caps, clip, fsaaType, geometryCoverage, &color); + auto result = this->finalizeProcessors( + caps, clip, fsaaType, clampType, geometryCoverage, &color); color.isConstant(geometryColor); return result; } GrProcessorSet::Analysis GrSimpleMeshDrawOpHelper::finalizeProcessors( const GrCaps& caps, const GrAppliedClip* clip, const GrUserStencilSettings* userStencil, - GrFSAAType fsaaType, GrProcessorAnalysisCoverage geometryCoverage, + GrFSAAType fsaaType, GrClampType clampType, GrProcessorAnalysisCoverage geometryCoverage, GrProcessorAnalysisColor* geometryColor) { SkDEBUGCODE(fDidAnalysis = true); GrProcessorSet::Analysis analysis; @@ -85,8 +86,8 @@ GrProcessorSet::Analysis GrSimpleMeshDrawOpHelper::finalizeProcessors( : GrProcessorAnalysisCoverage::kNone; } SkPMColor4f overrideColor; - analysis = fProcessors->finalize( - *geometryColor, coverage, clip, userStencil, fsaaType, caps, &overrideColor); + analysis = fProcessors->finalize(*geometryColor, coverage, clip, userStencil, fsaaType, + caps, clampType, &overrideColor); if (analysis.inputColorIsOverridden()) { *geometryColor = overrideColor; } @@ -148,10 +149,11 @@ GrDrawOp::FixedFunctionFlags GrSimpleMeshDrawOpHelperWithStencil::fixedFunctionF } GrProcessorSet::Analysis GrSimpleMeshDrawOpHelperWithStencil::finalizeProcessors( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType, + const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType, GrClampType clampType, GrProcessorAnalysisCoverage geometryCoverage, SkPMColor4f* geometryColor) { GrProcessorAnalysisColor color = *geometryColor; - auto result = this->finalizeProcessors(caps, clip, fsaaType, geometryCoverage, &color); + auto result = this->finalizeProcessors( + caps, clip, fsaaType, clampType, geometryCoverage, &color); color.isConstant(geometryColor); return result; } diff --git a/src/gpu/ops/GrSimpleMeshDrawOpHelper.h b/src/gpu/ops/GrSimpleMeshDrawOpHelper.h index a71863b016..d356074b04 100644 --- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.h +++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.h @@ -70,9 +70,10 @@ public: */ GrProcessorSet::Analysis finalizeProcessors( const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType, - GrProcessorAnalysisCoverage geometryCoverage, GrProcessorAnalysisColor* geometryColor) { + GrClampType clampType, GrProcessorAnalysisCoverage geometryCoverage, + GrProcessorAnalysisColor* geometryColor) { return this->finalizeProcessors(caps, clip, &GrUserStencilSettings::kUnused, fsaaType, - geometryCoverage, geometryColor); + clampType, geometryCoverage, geometryColor); } /** @@ -81,7 +82,7 @@ public: * changed the op must override its geometry processor color output with the new color. */ GrProcessorSet::Analysis finalizeProcessors( - const GrCaps&, const GrAppliedClip*, GrFSAAType, + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType, GrProcessorAnalysisCoverage geometryCoverage, SkPMColor4f* geometryColor); bool isTrivial() const { @@ -126,7 +127,8 @@ protected: GrProcessorSet::Analysis finalizeProcessors( const GrCaps& caps, const GrAppliedClip*, const GrUserStencilSettings*, GrFSAAType, - GrProcessorAnalysisCoverage geometryCoverage, GrProcessorAnalysisColor* geometryColor); + GrClampType, GrProcessorAnalysisCoverage geometryCoverage, + GrProcessorAnalysisColor* geometryColor); GrProcessorSet* fProcessors; unsigned fPipelineFlags : 8; @@ -164,13 +166,14 @@ public: GrProcessorSet::Analysis finalizeProcessors( const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType, - GrProcessorAnalysisCoverage geometryCoverage, GrProcessorAnalysisColor* geometryColor) { + GrClampType clampType, GrProcessorAnalysisCoverage geometryCoverage, + GrProcessorAnalysisColor* geometryColor) { return this->INHERITED::finalizeProcessors( - caps, clip, fStencilSettings, fsaaType, geometryCoverage, geometryColor); + caps, clip, fStencilSettings, fsaaType, clampType, geometryCoverage, geometryColor); } GrProcessorSet::Analysis finalizeProcessors( - const GrCaps&, const GrAppliedClip*, GrFSAAType, + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType, GrProcessorAnalysisCoverage geometryCoverage, SkPMColor4f* geometryColor); using GrSimpleMeshDrawOpHelper::aaType; diff --git a/src/gpu/ops/GrSmallPathRenderer.cpp b/src/gpu/ops/GrSmallPathRenderer.cpp index e04c307f97..432c7e6736 100644 --- a/src/gpu/ops/GrSmallPathRenderer.cpp +++ b/src/gpu/ops/GrSmallPathRenderer.cpp @@ -298,10 +298,10 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, + caps, clip, fsaaType, clampType, GrProcessorAnalysisCoverage::kSingleChannel, &fShapes.front().fColor); } diff --git a/src/gpu/ops/GrStrokeRectOp.cpp b/src/gpu/ops/GrStrokeRectOp.cpp index d3d08cf9cf..5825be5d8d 100644 --- a/src/gpu/ops/GrStrokeRectOp.cpp +++ b/src/gpu/ops/GrStrokeRectOp.cpp @@ -163,10 +163,10 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kNone, &fColor); + caps, clip, fsaaType, clampType, GrProcessorAnalysisCoverage::kNone, &fColor); } private: @@ -410,10 +410,10 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { return fHelper.finalizeProcessors( - caps, clip, fsaaType, GrProcessorAnalysisCoverage::kSingleChannel, + caps, clip, fsaaType, clampType, GrProcessorAnalysisCoverage::kSingleChannel, &fRects.back().fColor); } diff --git a/src/gpu/ops/GrTessellatingPathRenderer.cpp b/src/gpu/ops/GrTessellatingPathRenderer.cpp index 09f09adcb3..f19afa10a8 100644 --- a/src/gpu/ops/GrTessellatingPathRenderer.cpp +++ b/src/gpu/ops/GrTessellatingPathRenderer.cpp @@ -227,12 +227,12 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { GrProcessorAnalysisCoverage coverage = fAntiAlias ? GrProcessorAnalysisCoverage::kSingleChannel : GrProcessorAnalysisCoverage::kNone; - return fHelper.finalizeProcessors(caps, clip, fsaaType, coverage, &fColor); + return fHelper.finalizeProcessors(caps, clip, fsaaType, clampType, coverage, &fColor); } private: diff --git a/src/gpu/ops/GrTextureOp.cpp b/src/gpu/ops/GrTextureOp.cpp index 5b4232ca39..91ea5fdefe 100644 --- a/src/gpu/ops/GrTextureOp.cpp +++ b/src/gpu/ops/GrTextureOp.cpp @@ -228,7 +228,8 @@ public: } #endif - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { SkASSERT(!fFinalized); fFinalized = true; for (unsigned p = 0; p < fProxyCnt; ++p) { diff --git a/src/gpu/vk/GrVkAMDMemoryAllocator.cpp b/src/gpu/vk/GrVkAMDMemoryAllocator.cpp index ebecbad431..4ee457f7a9 100644 --- a/src/gpu/vk/GrVkAMDMemoryAllocator.cpp +++ b/src/gpu/vk/GrVkAMDMemoryAllocator.cpp @@ -46,7 +46,7 @@ GrVkAMDMemoryAllocator::GrVkAMDMemoryAllocator(VkPhysicalDevice physicalDevice, // Manually testing runs of dm using 64 here instead of the default 256 shows less memory usage // on average. Also dm seems to run faster using 64 so it doesn't seem to be trading off speed // for memory. - info.preferredLargeHeapBlockSize = 64*1024*1024; + info.preferredLargeHeapBlockSize = 4*1024*1024; info.pAllocationCallbacks = nullptr; info.pDeviceMemoryCallbacks = nullptr; info.frameInUseCount = 0; diff --git a/src/gpu/vk/GrVkMemory.cpp b/src/gpu/vk/GrVkMemory.cpp index 546e8d7f9c..ea6e97ccea 100644 --- a/src/gpu/vk/GrVkMemory.cpp +++ b/src/gpu/vk/GrVkMemory.cpp @@ -84,7 +84,7 @@ void GrVkMemory::FreeBufferMemory(const GrVkGpu* gpu, GrVkBuffer::Type type, } } -const VkDeviceSize kMaxSmallImageSize = 16 * 1024; +const VkDeviceSize kMaxSmallImageSize = 256 * 1024; bool GrVkMemory::AllocAndBindImageMemory(const GrVkGpu* gpu, VkImage image, diff --git a/tests/AdvancedBlendTest.cpp b/tests/AdvancedBlendTest.cpp index 5ab22c0e22..3ff2a7154a 100644 --- a/tests/AdvancedBlendTest.cpp +++ b/tests/AdvancedBlendTest.cpp @@ -24,7 +24,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AdvancedBlendTest, reporter, ctxInfo) { const GrXPFactory* xpf = GrCustomXfermode::Get(blendMode); GrXPFactory::AnalysisProperties xpfAnalysis = - GrXPFactory::GetAnalysisProperties(xpf, opaque, coverage, caps); + GrXPFactory::GetAnalysisProperties(xpf, opaque, coverage, caps, GrClampType::kAuto); GrPaint paint; paint.setXPFactory(xpf); @@ -33,7 +33,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AdvancedBlendTest, reporter, ctxInfo) { GrProcessorSet::Analysis processorAnalysis = procs.finalize( opaque, coverage, nullptr, &GrUserStencilSettings::kUnused, - GrFSAAType::kNone, caps, &overrideColor); + GrFSAAType::kNone, caps, GrClampType::kAuto, &overrideColor); if (caps.advancedBlendEquationSupport() && !caps.isAdvancedBlendEquationBlacklisted(blendEquation)) { diff --git a/tests/DrawOpAtlasTest.cpp b/tests/DrawOpAtlasTest.cpp index 809ccecb06..91d57ec13d 100644 --- a/tests/DrawOpAtlasTest.cpp +++ b/tests/DrawOpAtlasTest.cpp @@ -207,7 +207,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrAtlasTextOpPreparation, reporter, ctxInfo) std::unique_ptr<GrDrawOp> op = textContext->createOp_TestingOnly( context, textContext, rtc.get(), paint, font, SkMatrix::I(), text, 16, 16); - op->finalize(*context->priv().caps(), nullptr, GrFSAAType::kNone); + op->finalize(*context->priv().caps(), nullptr, GrFSAAType::kNone, GrClampType::kAuto); TestingUploadTarget uploadTarget; diff --git a/tests/GrMeshTest.cpp b/tests/GrMeshTest.cpp index 8f1f8f85f7..ae8251f86f 100644 --- a/tests/GrMeshTest.cpp +++ b/tests/GrMeshTest.cpp @@ -277,7 +277,8 @@ private: const char* name() const override { return "GrMeshTestOp"; } FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } void onPrepare(GrOpFlushState*) override {} diff --git a/tests/GrPipelineDynamicStateTest.cpp b/tests/GrPipelineDynamicStateTest.cpp index 577054c8d0..a44990a758 100644 --- a/tests/GrPipelineDynamicStateTest.cpp +++ b/tests/GrPipelineDynamicStateTest.cpp @@ -134,7 +134,8 @@ private: const char* name() const override { return "GrPipelineDynamicStateTestOp"; } FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } void onPrepare(GrOpFlushState*) override {} diff --git a/tests/GrPorterDuffTest.cpp b/tests/GrPorterDuffTest.cpp index f108c111ba..a9e577ae39 100644 --- a/tests/GrPorterDuffTest.cpp +++ b/tests/GrPorterDuffTest.cpp @@ -66,7 +66,7 @@ static GrProcessorSet::Analysis do_analysis(const GrXPFactory* xpf, SkPMColor4f overrideColor; GrProcessorSet::Analysis analysis = procs.finalize( colorInput, coverageInput, nullptr, &GrUserStencilSettings::kUnused, GrFSAAType::kNone, - caps, &overrideColor); + caps, GrClampType::kAuto, &overrideColor); return analysis; } @@ -83,7 +83,8 @@ public: fCompatibleWithCoverageAsAlpha = analysis.isCompatibleWithCoverageAsAlpha(); fIgnoresInputColor = analysis.inputColorIsIgnored(); sk_sp<const GrXferProcessor> xp( - GrXPFactory::MakeXferProcessor(xpf, inputColor, inputCoverage, false, caps)); + GrXPFactory::MakeXferProcessor(xpf, inputColor, inputCoverage, false, caps, + GrClampType::kAuto)); TEST_ASSERT(!analysis.requiresDstTexture() || (isLCD && !caps.shaderCaps()->dstReadInShaderSupport() && @@ -941,13 +942,14 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr } static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const GrCaps& caps) { + constexpr GrClampType autoClamp = GrClampType::kAuto; const GrXPFactory* xpf = GrPorterDuffXPFactory::Get(SkBlendMode::kSrcOver); GrProcessorAnalysisColor color = SkPMColor4f::FromBytes_RGBA(GrColorPackRGBA(123, 45, 67, 255)); GrProcessorAnalysisCoverage coverage = GrProcessorAnalysisCoverage::kLCD; - TEST_ASSERT(!(GrXPFactory::GetAnalysisProperties(xpf, color, coverage, caps) & + TEST_ASSERT(!(GrXPFactory::GetAnalysisProperties(xpf, color, coverage, caps, autoClamp) & GrXPFactory::AnalysisProperties::kRequiresDstTexture)); sk_sp<const GrXferProcessor> xp_opaque( - GrXPFactory::MakeXferProcessor(xpf, color, coverage, false, caps)); + GrXPFactory::MakeXferProcessor(xpf, color, coverage, false, caps, autoClamp)); if (!xp_opaque) { ERRORF(reporter, "Failed to create an XP with LCD coverage."); return; @@ -960,10 +962,10 @@ static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const // Test with non-opaque alpha color = SkPMColor4f::FromBytes_RGBA(GrColorPackRGBA(123, 45, 67, 221)); coverage = GrProcessorAnalysisCoverage::kLCD; - TEST_ASSERT(!(GrXPFactory::GetAnalysisProperties(xpf, color, coverage, caps) & + TEST_ASSERT(!(GrXPFactory::GetAnalysisProperties(xpf, color, coverage, caps, autoClamp) & GrXPFactory::AnalysisProperties::kRequiresDstTexture)); sk_sp<const GrXferProcessor> xp( - GrXPFactory::MakeXferProcessor(xpf, color, coverage, false, caps)); + GrXPFactory::MakeXferProcessor(xpf, color, coverage, false, caps, autoClamp)); if (!xp) { ERRORF(reporter, "Failed to create an XP with LCD coverage."); return; @@ -1015,7 +1017,8 @@ DEF_GPUTEST(PorterDuffNoDualSourceBlending, reporter, options) { SkBlendMode xfermode = static_cast<SkBlendMode>(m); const GrXPFactory* xpf = GrPorterDuffXPFactory::Get(xfermode); sk_sp<const GrXferProcessor> xp( - GrXPFactory::MakeXferProcessor(xpf, colorInput, coverageType, false, caps)); + GrXPFactory::MakeXferProcessor(xpf, colorInput, coverageType, false, caps, + GrClampType::kAuto)); if (!xp) { ERRORF(reporter, "Failed to create an XP without dual source blending."); return; diff --git a/tests/LazyProxyTest.cpp b/tests/LazyProxyTest.cpp index 91f7335e33..beb66ad5e6 100644 --- a/tests/LazyProxyTest.cpp +++ b/tests/LazyProxyTest.cpp @@ -112,7 +112,7 @@ public: const char* name() const override { return "LazyProxyTest::Op"; } FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } GrProcessorSet::Analysis finalize( - const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } void onPrepare(GrOpFlushState*) override {} @@ -355,7 +355,8 @@ private: const char* name() const override { return "LazyFailedInstantiationTestOp"; } FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } void onPrepare(GrOpFlushState*) override {} @@ -430,7 +431,8 @@ private: const char* name() const override { return "LazyDeinstantiateTestOp"; } FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } void onPrepare(GrOpFlushState*) override {} diff --git a/tests/OnFlushCallbackTest.cpp b/tests/OnFlushCallbackTest.cpp index 312f38e1ba..ac49f3c8a4 100644 --- a/tests/OnFlushCallbackTest.cpp +++ b/tests/OnFlushCallbackTest.cpp @@ -72,15 +72,15 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip*, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip*, + GrFSAAType fsaaType, GrClampType clampType) override { // Set the color to unknown because the subclass may change the color later. GrProcessorAnalysisColor gpColor; gpColor.setToUnknown(); // We ignore the clip so pass this rather than the GrAppliedClip param. static GrAppliedClip kNoClip; return fHelper.finalizeProcessors( - caps, &kNoClip, fsaaType, GrProcessorAnalysisCoverage::kNone, &gpColor); + caps, &kNoClip, fsaaType, clampType, GrProcessorAnalysisCoverage::kNone, &gpColor); } protected: diff --git a/tests/PrimitiveProcessorTest.cpp b/tests/PrimitiveProcessorTest.cpp index 778b6326a4..346f4fdc67 100644 --- a/tests/PrimitiveProcessorTest.cpp +++ b/tests/PrimitiveProcessorTest.cpp @@ -42,7 +42,8 @@ public: return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType) override { + GrProcessorSet::Analysis finalize( + const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override { return GrProcessorSet::EmptySetAnalysis(); } diff --git a/tests/ProcessorTest.cpp b/tests/ProcessorTest.cpp index 09f24b52a2..2885a7183a 100644 --- a/tests/ProcessorTest.cpp +++ b/tests/ProcessorTest.cpp @@ -45,13 +45,13 @@ public: FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; } - GrProcessorSet::Analysis finalize( - const GrCaps& caps, const GrAppliedClip* clip, GrFSAAType fsaaType) override { + GrProcessorSet::Analysis finalize(const GrCaps& caps, const GrAppliedClip* clip, + GrFSAAType fsaaType, GrClampType clampType) override { static constexpr GrProcessorAnalysisColor kUnknownColor; SkPMColor4f overrideColor; return fProcessors.finalize( kUnknownColor, GrProcessorAnalysisCoverage::kNone, clip, - &GrUserStencilSettings::kUnused, fsaaType, caps, &overrideColor); + &GrUserStencilSettings::kUnused, fsaaType, caps, clampType, &overrideColor); } private: |