aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-autoroll <android-autoroll@skia-corp.google.com.iam.gserviceaccount.com>2019-04-22 17:35:45 +0000
committerDerek Sollenberger <djsollen@google.com>2019-04-22 17:46:19 +0000
commita3e35af7c40598860ca2a502f3eabe7748efd992 (patch)
tree5cd46ada4e3cda1d58cab4444ff1b54490768bdc
parentcba6f467189dcf37ac0660d72b1ff98b3a4fb2f2 (diff)
parent40e7cb1a76a777d81c8055f3590ac7543911614b (diff)
downloadskia-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
-rw-r--r--bench/VertexColorSpaceBench.cpp3
-rw-r--r--gm/beziereffects.cpp6
-rw-r--r--gm/clockwise.cpp3
-rw-r--r--gm/convexpolyeffect.cpp6
-rw-r--r--gm/fwidth_squircle.cpp3
-rw-r--r--gm/samplelocations.cpp3
-rw-r--r--include/private/GrTypesPriv.h17
-rw-r--r--samplecode/SampleCCPRGeometry.cpp3
-rw-r--r--src/atlastext/SkAtlasTextTarget.cpp3
-rw-r--r--src/gpu/GrProcessorSet.cpp7
-rw-r--r--src/gpu/GrProcessorSet.h2
-rw-r--r--src/gpu/GrProgramDesc.cpp2
-rw-r--r--src/gpu/GrProgramDesc.h3
-rw-r--r--src/gpu/GrRenderTargetContext.cpp4
-rw-r--r--src/gpu/GrXferProcessor.cpp13
-rw-r--r--src/gpu/GrXferProcessor.h12
-rw-r--r--src/gpu/ccpr/GrCCDrawPathsOp.cpp10
-rw-r--r--src/gpu/ccpr/GrCCDrawPathsOp.h5
-rw-r--r--src/gpu/ccpr/GrCCPerFlushResources.cpp3
-rw-r--r--src/gpu/effects/GrCoverageSetOpXP.cpp3
-rw-r--r--src/gpu/effects/GrCoverageSetOpXP.h6
-rw-r--r--src/gpu/effects/GrCustomXfermode.cpp11
-rw-r--r--src/gpu/effects/GrDisableColorXP.cpp3
-rw-r--r--src/gpu/effects/GrDisableColorXP.h6
-rw-r--r--src/gpu/effects/GrPorterDuffXferProcessor.cpp23
-rw-r--r--src/gpu/effects/GrPorterDuffXferProcessor.h9
-rw-r--r--src/gpu/glsl/GrGLSLProgramBuilder.cpp13
-rw-r--r--src/gpu/ops/GrAAConvexPathRenderer.cpp6
-rw-r--r--src/gpu/ops/GrAAFillRRectOp.cpp6
-rw-r--r--src/gpu/ops/GrAAFillRRectOp.h3
-rw-r--r--src/gpu/ops/GrAAHairLinePathRenderer.cpp8
-rw-r--r--src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp6
-rw-r--r--src/gpu/ops/GrAtlasTextOp.cpp6
-rw-r--r--src/gpu/ops/GrAtlasTextOp.h3
-rw-r--r--src/gpu/ops/GrDashOp.cpp5
-rw-r--r--src/gpu/ops/GrDefaultPathRenderer.cpp6
-rw-r--r--src/gpu/ops/GrDrawAtlasOp.cpp9
-rw-r--r--src/gpu/ops/GrDrawOp.h3
-rw-r--r--src/gpu/ops/GrDrawPathOp.cpp5
-rw-r--r--src/gpu/ops/GrDrawPathOp.h8
-rw-r--r--src/gpu/ops/GrDrawVerticesOp.cpp9
-rw-r--r--src/gpu/ops/GrFillRectOp.cpp7
-rw-r--r--src/gpu/ops/GrLatticeOp.cpp9
-rw-r--r--src/gpu/ops/GrOvalOpFactory.cpp48
-rw-r--r--src/gpu/ops/GrRegionOp.cpp8
-rw-r--r--src/gpu/ops/GrShadowRRectOp.cpp3
-rw-r--r--src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp16
-rw-r--r--src/gpu/ops/GrSimpleMeshDrawOpHelper.h17
-rw-r--r--src/gpu/ops/GrSmallPathRenderer.cpp6
-rw-r--r--src/gpu/ops/GrStrokeRectOp.cpp12
-rw-r--r--src/gpu/ops/GrTessellatingPathRenderer.cpp6
-rw-r--r--src/gpu/ops/GrTextureOp.cpp3
-rw-r--r--src/gpu/vk/GrVkAMDMemoryAllocator.cpp2
-rw-r--r--src/gpu/vk/GrVkMemory.cpp2
-rw-r--r--tests/AdvancedBlendTest.cpp4
-rw-r--r--tests/DrawOpAtlasTest.cpp2
-rw-r--r--tests/GrMeshTest.cpp3
-rw-r--r--tests/GrPipelineDynamicStateTest.cpp3
-rw-r--r--tests/GrPorterDuffTest.cpp17
-rw-r--r--tests/LazyProxyTest.cpp8
-rw-r--r--tests/OnFlushCallbackTest.cpp6
-rw-r--r--tests/PrimitiveProcessorTest.cpp3
-rw-r--r--tests/ProcessorTest.cpp6
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: