Add shader based blending of kPlus for configs that need clamping
This effectively reverts https://skia-review.googlesource.com/c/skia/+/140500
and relands https://skia-review.googlesource.com/c/skia/+/48183.
Bug: skia:8871
Change-Id: I6b1d5daa3d319e0c078e553926ed9166cca9a24a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/199930
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrProcessorSet.cpp b/src/gpu/GrProcessorSet.cpp
index 4b6a92d..f6cd2d4 100644
--- a/src/gpu/GrProcessorSet.cpp
+++ b/src/gpu/GrProcessorSet.cpp
@@ -163,7 +163,7 @@
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 @@
}
GrXPFactory::AnalysisProperties props = GrXPFactory::GetAnalysisProperties(
- this->xpFactory(), colorAnalysis.outputColor(), outputCoverage, caps);
+ this->xpFactory(), colorAnalysis.outputColor(), outputCoverage, caps, clampType);
if (!this->numCoverageFragmentProcessors() &&
GrProcessorAnalysisCoverage::kNone == coverageInput) {
}
@@ -239,7 +239,8 @@
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 8b23d3c..b7b7ae0 100644
--- a/src/gpu/GrProcessorSet.h
+++ b/src/gpu/GrProcessorSet.h
@@ -135,7 +135,7 @@
*/
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 5401d4d..a066145 100644
--- a/src/gpu/GrProgramDesc.cpp
+++ b/src/gpu/GrProgramDesc.cpp
@@ -253,6 +253,7 @@
SkASSERT(header->processorFeatures() == processorFeatures); // Ensure enough bits.
header->fSnapVerticesToPixelCenters = pipeline.snapVerticesToPixelCenters();
header->fHasPointSize = hasPointSize ? 1 : 0;
- header->fClampBlendInput = GrPixelConfigNeedsClamp(renderTarget->config()) ? 1 : 0;
+ header->fClampBlendInput =
+ GrClampType::kManual == GrPixelConfigClampType(renderTarget->config()) ? 1 : 0;
return true;
}
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp
index 413b74b..6c56750 100644
--- a/src/gpu/GrRenderTargetContext.cpp
+++ b/src/gpu/GrRenderTargetContext.cpp
@@ -2088,8 +2088,10 @@
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 fb2eeea..608bb82 100644
--- a/src/gpu/GrXferProcessor.cpp
+++ b/src/gpu/GrXferProcessor.cpp
@@ -166,12 +166,14 @@
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 @@
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 295bf00..98a359b 100644
--- a/src/gpu/GrXferProcessor.h
+++ b/src/gpu/GrXferProcessor.h
@@ -286,12 +286,14 @@
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 @@
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 @@
*/
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 f115358..d16bff5 100644
--- a/src/gpu/ccpr/GrCCDrawPathsOp.cpp
+++ b/src/gpu/ccpr/GrCCDrawPathsOp.cpp
@@ -139,18 +139,18 @@
#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 4b2cb77..6984a5d 100644
--- a/src/gpu/ccpr/GrCCDrawPathsOp.h
+++ b/src/gpu/ccpr/GrCCDrawPathsOp.h
@@ -35,7 +35,8 @@
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 @@
// 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 e3c4ad4..18d3ee9 100644
--- a/src/gpu/ccpr/GrCCPerFlushResources.cpp
+++ b/src/gpu/ccpr/GrCCPerFlushResources.cpp
@@ -31,7 +31,8 @@
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 8e1dbbb..f3f9133 100644
--- a/src/gpu/effects/GrCoverageSetOpXP.cpp
+++ b/src/gpu/effects/GrCoverageSetOpXP.cpp
@@ -211,7 +211,8 @@
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 e8bc5a2..6c761d4 100644
--- a/src/gpu/effects/GrCoverageSetOpXP.h
+++ b/src/gpu/effects/GrCoverageSetOpXP.h
@@ -37,11 +37,13 @@
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 86e7037..f69f25a 100644
--- a/src/gpu/effects/GrCustomXfermode.cpp
+++ b/src/gpu/effects/GrCustomXfermode.cpp
@@ -220,11 +220,13 @@
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 @@
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 @@
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 3f9f71e..2ff36c4 100644
--- a/src/gpu/effects/GrDisableColorXP.cpp
+++ b/src/gpu/effects/GrDisableColorXP.cpp
@@ -79,7 +79,8 @@
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 d15f952..287e988 100644
--- a/src/gpu/effects/GrDisableColorXP.h
+++ b/src/gpu/effects/GrDisableColorXP.h
@@ -30,7 +30,8 @@
AnalysisProperties analysisProperties(const GrProcessorAnalysisColor&,
const GrProcessorAnalysisCoverage&,
- const GrCaps&) const override {
+ const GrCaps&,
+ GrClampType) const override {
return AnalysisProperties::kCompatibleWithAlphaAsCoverage |
AnalysisProperties::kIgnoresInputColor;
}
@@ -38,7 +39,8 @@
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 b7a7e4d..060fb36 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
@@ -759,7 +759,7 @@
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 @@
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 @@
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 @@
}
}
+ if (GrClampType::kAuto != clampType && SkBlendMode::kPlus == mode) {
+ props |= AnalysisProperties::kReadsDstInShader;
+ }
+
if (!formula.modifiesDst() || !formula.usesInputColor()) {
props |= AnalysisProperties::kIgnoresInputColor;
}
@@ -844,8 +851,9 @@
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 @@
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 ebe0212..1c39c3a 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.h
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.h
@@ -41,7 +41,8 @@
static AnalysisProperties SrcOverAnalysisProperties(const GrProcessorAnalysisColor&,
const GrProcessorAnalysisCoverage&,
- const GrCaps&);
+ const GrCaps&,
+ GrClampType);
private:
constexpr GrPorterDuffXPFactory(SkBlendMode);
@@ -49,11 +50,13 @@
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/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index 294649c..12a6bc3 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -706,10 +706,10 @@
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 a4a78c3..22d9dc5 100644
--- a/src/gpu/ops/GrAAFillRRectOp.cpp
+++ b/src/gpu/ops/GrAAFillRRectOp.cpp
@@ -81,15 +81,15 @@
// 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 89122e4..7032e3a 100644
--- a/src/gpu/ops/GrAAFillRRectOp.h
+++ b/src/gpu/ops/GrAAFillRRectOp.h
@@ -21,7 +21,8 @@
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 46a32fe..c6bef41 100644
--- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
@@ -838,10 +838,10 @@
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 22dc05a..1765a5a 100644
--- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
@@ -187,10 +187,10 @@
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 ae79cf4..1826a0b 100644
--- a/src/gpu/ops/GrAtlasTextOp.cpp
+++ b/src/gpu/ops/GrAtlasTextOp.cpp
@@ -140,8 +140,8 @@
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 @@
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 fcaf792..973b00b 100644
--- a/src/gpu/ops/GrAtlasTextOp.h
+++ b/src/gpu/ops/GrAtlasTextOp.h
@@ -75,7 +75,8 @@
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 f1697b7..3893ba4 100644
--- a/src/gpu/ops/GrDashOp.cpp
+++ b/src/gpu/ops/GrDashOp.cpp
@@ -258,7 +258,8 @@
}
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 @@
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 6eb257b..57bada6 100644
--- a/src/gpu/ops/GrDefaultPathRenderer.cpp
+++ b/src/gpu/ops/GrDefaultPathRenderer.cpp
@@ -387,12 +387,12 @@
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 6b0dac8..ed940f5 100644
--- a/src/gpu/ops/GrDrawAtlasOp.cpp
+++ b/src/gpu/ops/GrDrawAtlasOp.cpp
@@ -44,7 +44,8 @@
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 @@
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 @@
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 7b66b88..bc574fe 100644
--- a/src/gpu/ops/GrDrawOp.h
+++ b/src/gpu/ops/GrDrawOp.h
@@ -43,7 +43,8 @@
* 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 acbcf94..ede3bb2 100644
--- a/src/gpu/ops/GrDrawPathOp.cpp
+++ b/src/gpu/ops/GrDrawPathOp.cpp
@@ -55,10 +55,11 @@
}
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 d2447bb..3d7c48c 100644
--- a/src/gpu/ops/GrDrawPathOp.h
+++ b/src/gpu/ops/GrDrawPathOp.h
@@ -29,9 +29,9 @@
? FixedFunctionFlags::kUsesHWAA | FixedFunctionFlags::kUsesStencil
: 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 {
@@ -46,7 +46,7 @@
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 b05481c..bb51887 100644
--- a/src/gpu/ops/GrDrawVerticesOp.cpp
+++ b/src/gpu/ops/GrDrawVerticesOp.cpp
@@ -38,7 +38,8 @@
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 @@
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 @@
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 28c149b..f6f73d5 100644
--- a/src/gpu/ops/GrFillRectOp.cpp
+++ b/src/gpu/ops/GrFillRectOp.cpp
@@ -122,8 +122,8 @@
}
#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 @@
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 8806172..51dd6ad 100644
--- a/src/gpu/ops/GrLatticeOp.cpp
+++ b/src/gpu/ops/GrLatticeOp.cpp
@@ -193,14 +193,15 @@
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 d49096e..1288417 100644
--- a/src/gpu/ops/GrOvalOpFactory.cpp
+++ b/src/gpu/ops/GrOvalOpFactory.cpp
@@ -1149,11 +1149,11 @@
}
#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(); }
@@ -1479,11 +1479,11 @@
}
#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(); }
@@ -1762,11 +1762,11 @@
}
#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 = &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(); }
@@ -1987,11 +1987,11 @@
}
#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 = &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(); }
@@ -2306,11 +2306,11 @@
}
#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(); }
@@ -2645,11 +2645,11 @@
}
#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(); }
diff --git a/src/gpu/ops/GrRegionOp.cpp b/src/gpu/ops/GrRegionOp.cpp
index 91ec455..3b1c39a 100644
--- a/src/gpu/ops/GrRegionOp.cpp
+++ b/src/gpu/ops/GrRegionOp.cpp
@@ -88,10 +88,10 @@
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 23545e5..5ee0b37 100644
--- a/src/gpu/ops/GrShadowRRectOp.cpp
+++ b/src/gpu/ops/GrShadowRRectOp.cpp
@@ -255,7 +255,8 @@
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 feb98d4..73fa3ab 100644
--- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
+++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
@@ -63,17 +63,18 @@
}
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 @@
: 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 @@
}
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 a71863b..d356074 100644
--- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.h
+++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.h
@@ -70,9 +70,10 @@
*/
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 @@
* 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 @@
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 @@
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 f7b1af3..cc1a368 100644
--- a/src/gpu/ops/GrSmallPathRenderer.cpp
+++ b/src/gpu/ops/GrSmallPathRenderer.cpp
@@ -298,10 +298,10 @@
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 d3d08cf..5825be5 100644
--- a/src/gpu/ops/GrStrokeRectOp.cpp
+++ b/src/gpu/ops/GrStrokeRectOp.cpp
@@ -163,10 +163,10 @@
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 @@
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 41ec465..1401c37 100644
--- a/src/gpu/ops/GrTessellatingPathRenderer.cpp
+++ b/src/gpu/ops/GrTessellatingPathRenderer.cpp
@@ -231,12 +231,12 @@
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 5b4232c..91ea5fd 100644
--- a/src/gpu/ops/GrTextureOp.cpp
+++ b/src/gpu/ops/GrTextureOp.cpp
@@ -228,7 +228,8 @@
}
#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) {