Use shader based blending to clamp kPlus mode w/F16
Bug: skia:6173
Change-Id: I21042d484d9a7b3eee04aa3301d9793d00ad6908
Reviewed-on: https://skia-review.googlesource.com/48183
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index 50077a8..03dabe3 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -765,8 +765,10 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kSingleChannel,
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kSingleChannel,
&fPaths.back().fColor);
}
diff --git a/src/gpu/ops/GrAAFillRectOp.cpp b/src/gpu/ops/GrAAFillRectOp.cpp
index 4c91d7c..48f9f3b 100644
--- a/src/gpu/ops/GrAAFillRectOp.cpp
+++ b/src/gpu/ops/GrAAFillRectOp.cpp
@@ -223,10 +223,11 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrColor color = this->first()->color();
auto result = fHelper.xpRequiresDstTexture(
- caps, clip, GrProcessorAnalysisCoverage::kSingleChannel, &color);
+ caps, clip, dstIsClamped, GrProcessorAnalysisCoverage::kSingleChannel, &color);
this->first()->setColor(color);
return result;
}
diff --git a/src/gpu/ops/GrAAHairLinePathRenderer.cpp b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
index 8881e4c..a107528 100644
--- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
@@ -800,9 +800,10 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kSingleChannel,
- &fColor);
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kSingleChannel, &fColor);
}
private:
diff --git a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
index 5d6b6cf..cd87e28 100644
--- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
@@ -196,8 +196,10 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kSingleChannel,
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kSingleChannel,
&fPaths.back().fColor);
}
diff --git a/src/gpu/ops/GrAAStrokeRectOp.cpp b/src/gpu/ops/GrAAStrokeRectOp.cpp
index 22cd6ce..d4f9bde 100644
--- a/src/gpu/ops/GrAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrAAStrokeRectOp.cpp
@@ -195,8 +195,10 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kSingleChannel,
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kSingleChannel,
&fRects.back().fColor);
}
diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp
index 65b3c37..1166fd8 100644
--- a/src/gpu/ops/GrAtlasTextOp.cpp
+++ b/src/gpu/ops/GrAtlasTextOp.cpp
@@ -44,7 +44,8 @@
}
GrDrawOp::RequiresDstTexture GrAtlasTextOp::finalize(const GrCaps& caps,
- const GrAppliedClip* clip) {
+ const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) {
GrProcessorAnalysisCoverage coverage;
GrProcessorAnalysisColor color;
if (kColorBitmapMask_MaskType == fMaskType) {
@@ -67,7 +68,7 @@
coverage = GrProcessorAnalysisCoverage::kNone;
break;
}
- auto analysis = fProcessors.finalize(color, coverage, clip, false, caps, &fColor);
+ auto analysis = fProcessors.finalize(color, coverage, clip, false, caps, dstIsClamped, &fColor);
fUsesLocalCoords = analysis.usesLocalCoords();
fCanCombineOnTouchOrOverlap =
!analysis.requiresDstTexture() &&
diff --git a/src/gpu/ops/GrAtlasTextOp.h b/src/gpu/ops/GrAtlasTextOp.h
index 0a1a7a1..7ae3166 100644
--- a/src/gpu/ops/GrAtlasTextOp.h
+++ b/src/gpu/ops/GrAtlasTextOp.h
@@ -112,7 +112,8 @@
FixedFunctionFlags fixedFunctionFlags() const override;
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override;
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override;
private:
GrAtlasTextOp(GrPaint&& paint)
diff --git a/src/gpu/ops/GrDashOp.cpp b/src/gpu/ops/GrDashOp.cpp
index 76f1ff4..5f886cd 100644
--- a/src/gpu/ops/GrDashOp.cpp
+++ b/src/gpu/ops/GrDashOp.cpp
@@ -296,14 +296,16 @@
return flags;
}
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrProcessorAnalysisCoverage coverage;
if (AAMode::kNone == fAAMode && !clip->clipCoverageFragmentProcessor()) {
coverage = GrProcessorAnalysisCoverage::kNone;
} else {
coverage = GrProcessorAnalysisCoverage::kSingleChannel;
}
- auto analysis = fProcessorSet.finalize(fColor, coverage, clip, false, caps, &fColor);
+ auto analysis = fProcessorSet.finalize(fColor, coverage, clip, false, caps, dstIsClamped,
+ &fColor);
fDisallowCombineOnTouchOrOverlap = analysis.requiresDstTexture() ||
(fProcessorSet.xferProcessor() &&
fProcessorSet.xferProcessor()->xferBarrierType(caps));
diff --git a/src/gpu/ops/GrDefaultPathRenderer.cpp b/src/gpu/ops/GrDefaultPathRenderer.cpp
index 420be4b..40631a7 100644
--- a/src/gpu/ops/GrDefaultPathRenderer.cpp
+++ b/src/gpu/ops/GrDefaultPathRenderer.cpp
@@ -376,11 +376,12 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrProcessorAnalysisCoverage gpCoverage =
this->coverage() == 0xFF ? GrProcessorAnalysisCoverage::kNone
: GrProcessorAnalysisCoverage::kSingleChannel;
- return fHelper.xpRequiresDstTexture(caps, clip, gpCoverage, &fColor);
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped, gpCoverage, &fColor);
}
private:
diff --git a/src/gpu/ops/GrDrawAtlasOp.cpp b/src/gpu/ops/GrDrawAtlasOp.cpp
index 47ebbd5..bd5ffbb 100644
--- a/src/gpu/ops/GrDrawAtlasOp.cpp
+++ b/src/gpu/ops/GrDrawAtlasOp.cpp
@@ -177,15 +177,16 @@
}
GrDrawOp::RequiresDstTexture GrDrawAtlasOp::finalize(const GrCaps& caps,
- const GrAppliedClip* clip) {
+ const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) {
GrProcessorAnalysisColor gpColor;
if (this->hasColors()) {
gpColor.setToUnknown();
} else {
gpColor.setToConstant(fColor);
}
- auto result =
- fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kNone, &gpColor);
+ auto result = fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kNone, &gpColor);
if (gpColor.isConstant(&fColor)) {
fHasColors = false;
}
diff --git a/src/gpu/ops/GrDrawAtlasOp.h b/src/gpu/ops/GrDrawAtlasOp.h
index 8530e5b..55c2aee 100644
--- a/src/gpu/ops/GrDrawAtlasOp.h
+++ b/src/gpu/ops/GrDrawAtlasOp.h
@@ -41,7 +41,8 @@
FixedFunctionFlags fixedFunctionFlags() const override;
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override;
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override;
private:
void onPrepareDraws(Target*) override;
diff --git a/src/gpu/ops/GrDrawOp.h b/src/gpu/ops/GrDrawOp.h
index 54b9f16..145d2e2 100644
--- a/src/gpu/ops/GrDrawOp.h
+++ b/src/gpu/ops/GrDrawOp.h
@@ -80,7 +80,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 RequiresDstTexture finalize(const GrCaps&, const GrAppliedClip*) = 0;
+ virtual RequiresDstTexture finalize(const GrCaps&, const GrAppliedClip*,
+ GrPixelConfigIsClamped) = 0;
protected:
struct QueuedUpload {
diff --git a/src/gpu/ops/GrDrawPathOp.h b/src/gpu/ops/GrDrawPathOp.h
index 114ce96..7b1072e 100644
--- a/src/gpu/ops/GrDrawPathOp.h
+++ b/src/gpu/ops/GrDrawPathOp.h
@@ -31,9 +31,10 @@
}
return FixedFunctionFlags::kUsesStencil;
}
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- return this->doProcessorAnalysis(caps, clip).requiresDstTexture() ? RequiresDstTexture::kYes
- : RequiresDstTexture::kNo;
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
+ return this->doProcessorAnalysis(caps, clip, dstIsClamped).requiresDstTexture()
+ ? RequiresDstTexture::kYes : RequiresDstTexture::kNo;
}
void visitProxies(const VisitProxyFunc& func) const override {
@@ -49,10 +50,11 @@
uint32_t pipelineSRGBFlags() const { return fPipelineSRGBFlags; }
inline GrPipeline::InitArgs pipelineInitArgs(const GrOpFlushState&);
const GrProcessorSet::Analysis& doProcessorAnalysis(const GrCaps& caps,
- const GrAppliedClip* clip) {
+ const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) {
bool isMixedSamples = GrAAType::kMixedSamples == fAAType;
fAnalysis = fProcessorSet.finalize(fInputColor, GrProcessorAnalysisCoverage::kNone, clip,
- isMixedSamples, caps, &fInputColor);
+ isMixedSamples, caps, dstIsClamped, &fInputColor);
return fAnalysis;
}
const GrProcessorSet::Analysis& processorAnalysis() const {
diff --git a/src/gpu/ops/GrDrawVerticesOp.cpp b/src/gpu/ops/GrDrawVerticesOp.cpp
index 17a4f74..61696f5 100644
--- a/src/gpu/ops/GrDrawVerticesOp.cpp
+++ b/src/gpu/ops/GrDrawVerticesOp.cpp
@@ -82,15 +82,16 @@
}
GrDrawOp::RequiresDstTexture GrDrawVerticesOp::finalize(const GrCaps& caps,
- const GrAppliedClip* clip) {
+ const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) {
GrProcessorAnalysisColor gpColor;
if (this->requiresPerVertexColors()) {
gpColor.setToUnknown();
} else {
gpColor.setToConstant(fMeshes.front().fColor);
}
- auto result =
- fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kNone, &gpColor);
+ auto result = fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kNone, &gpColor);
if (gpColor.isConstant(&fMeshes.front().fColor)) {
fMeshes.front().fIgnoreColors = true;
fFlags &= ~kRequiresPerVertexColors_Flag;
diff --git a/src/gpu/ops/GrDrawVerticesOp.h b/src/gpu/ops/GrDrawVerticesOp.h
index 6e78008..cbbc16e 100644
--- a/src/gpu/ops/GrDrawVerticesOp.h
+++ b/src/gpu/ops/GrDrawVerticesOp.h
@@ -54,7 +54,8 @@
FixedFunctionFlags fixedFunctionFlags() const override;
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override;
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override;
private:
enum class ColorArrayType {
diff --git a/src/gpu/ops/GrLatticeOp.cpp b/src/gpu/ops/GrLatticeOp.cpp
index 35d1ab7..a5473ce 100644
--- a/src/gpu/ops/GrLatticeOp.cpp
+++ b/src/gpu/ops/GrLatticeOp.cpp
@@ -80,8 +80,10 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kNone,
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kNone,
&fPatches.front().fColor);
}
diff --git a/src/gpu/ops/GrMSAAPathRenderer.cpp b/src/gpu/ops/GrMSAAPathRenderer.cpp
index 45fe9f3..21e2af8 100644
--- a/src/gpu/ops/GrMSAAPathRenderer.cpp
+++ b/src/gpu/ops/GrMSAAPathRenderer.cpp
@@ -275,8 +275,10 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kNone,
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kNone,
&fPaths.front().fColor);
}
diff --git a/src/gpu/ops/GrNonAAFillRectOp.cpp b/src/gpu/ops/GrNonAAFillRectOp.cpp
index 02a5e84..6eaef69 100644
--- a/src/gpu/ops/GrNonAAFillRectOp.cpp
+++ b/src/gpu/ops/GrNonAAFillRectOp.cpp
@@ -158,9 +158,11 @@
return str;
}
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrColor* color = &fRects.front().fColor;
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kNone, color);
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kNone, color);
}
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
@@ -280,9 +282,11 @@
return str;
}
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrColor* color = &fRects.front().fColor;
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kNone, color);
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kNone, color);
}
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
diff --git a/src/gpu/ops/GrNonAAStrokeRectOp.cpp b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
index 1dd1733..6e53bea 100644
--- a/src/gpu/ops/GrNonAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
@@ -129,9 +129,10 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kNone,
- &fColor);
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kNone, &fColor);
}
private:
diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp
index 5580e52..5b30c4a 100644
--- a/src/gpu/ops/GrOvalOpFactory.cpp
+++ b/src/gpu/ops/GrOvalOpFactory.cpp
@@ -804,10 +804,11 @@
return string;
}
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrColor* color = &fCircles.front().fColor;
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kSingleChannel,
- color);
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kSingleChannel, color);
}
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
@@ -1272,10 +1273,11 @@
return string;
}
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrColor* color = &fEllipses.front().fColor;
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kSingleChannel,
- color);
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kSingleChannel, color);
}
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
@@ -1502,10 +1504,11 @@
return string;
}
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrColor* color = &fEllipses.front().fColor;
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kSingleChannel,
- color);
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kSingleChannel, color);
}
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
@@ -1819,10 +1822,11 @@
return string;
}
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrColor* color = &fRRects.front().fColor;
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kSingleChannel,
- color);
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kSingleChannel, color);
}
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
@@ -2177,10 +2181,11 @@
return string;
}
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrColor* color = &fRRects.front().fColor;
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kSingleChannel,
- color);
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ 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 23a5020..177a185 100644
--- a/src/gpu/ops/GrRegionOp.cpp
+++ b/src/gpu/ops/GrRegionOp.cpp
@@ -98,9 +98,10 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kNone,
- &fRegions[0].fColor);
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kNone, &fRegions[0].fColor);
}
private:
diff --git a/src/gpu/ops/GrShadowRRectOp.cpp b/src/gpu/ops/GrShadowRRectOp.cpp
index b22dd06..24bbff4 100644
--- a/src/gpu/ops/GrShadowRRectOp.cpp
+++ b/src/gpu/ops/GrShadowRRectOp.cpp
@@ -254,7 +254,8 @@
FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; }
- RequiresDstTexture finalize(const GrCaps&, const GrAppliedClip*) override {
+ RequiresDstTexture finalize(const GrCaps&, const GrAppliedClip*,
+ GrPixelConfigIsClamped) override {
return RequiresDstTexture::kNo;
}
diff --git a/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp b/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
index 7c8ca2e..b32344a 100644
--- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
+++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
@@ -64,8 +64,8 @@
}
GrDrawOp::RequiresDstTexture GrSimpleMeshDrawOpHelper::xpRequiresDstTexture(
- const GrCaps& caps, const GrAppliedClip* clip, GrProcessorAnalysisCoverage geometryCoverage,
- GrProcessorAnalysisColor* geometryColor) {
+ const GrCaps& caps, const GrAppliedClip* clip, GrPixelConfigIsClamped dstIsClamped,
+ GrProcessorAnalysisCoverage geometryCoverage, GrProcessorAnalysisColor* geometryColor) {
SkDEBUGCODE(fDidAnalysis = true);
GrProcessorSet::Analysis analysis;
if (fProcessors) {
@@ -78,7 +78,7 @@
bool isMixedSamples = this->aaType() == GrAAType::kMixedSamples;
GrColor overrideColor;
analysis = fProcessors->finalize(*geometryColor, coverage, clip, isMixedSamples, caps,
- &overrideColor);
+ dstIsClamped, &overrideColor);
if (analysis.inputColorIsOverridden()) {
*geometryColor = overrideColor;
}
@@ -93,10 +93,10 @@
}
GrDrawOp::RequiresDstTexture GrSimpleMeshDrawOpHelper::xpRequiresDstTexture(
- const GrCaps& caps, const GrAppliedClip* clip, GrProcessorAnalysisCoverage geometryCoverage,
- GrColor* geometryColor) {
+ const GrCaps& caps, const GrAppliedClip* clip, GrPixelConfigIsClamped dstIsClamped,
+ GrProcessorAnalysisCoverage geometryCoverage, GrColor* geometryColor) {
GrProcessorAnalysisColor color = *geometryColor;
- auto result = this->xpRequiresDstTexture(caps, clip, geometryCoverage, &color);
+ auto result = this->xpRequiresDstTexture(caps, clip, dstIsClamped, geometryCoverage, &color);
color.isConstant(geometryColor);
return result;
}
diff --git a/src/gpu/ops/GrSimpleMeshDrawOpHelper.h b/src/gpu/ops/GrSimpleMeshDrawOpHelper.h
index 47a8182..020f25f 100644
--- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.h
+++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.h
@@ -63,6 +63,7 @@
* color from its geometry processor instead.
*/
GrDrawOp::RequiresDstTexture xpRequiresDstTexture(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped,
GrProcessorAnalysisCoverage geometryCoverage,
GrProcessorAnalysisColor* geometryColor);
@@ -72,6 +73,7 @@
* changed the op must override its geometry processor color output with the new color.
*/
GrDrawOp::RequiresDstTexture xpRequiresDstTexture(const GrCaps&, const GrAppliedClip*,
+ GrPixelConfigIsClamped dstIsClamped,
GrProcessorAnalysisCoverage geometryCoverage,
GrColor* geometryColor);
diff --git a/src/gpu/ops/GrSmallPathRenderer.cpp b/src/gpu/ops/GrSmallPathRenderer.cpp
index f17c7e0..fd868a1 100644
--- a/src/gpu/ops/GrSmallPathRenderer.cpp
+++ b/src/gpu/ops/GrSmallPathRenderer.cpp
@@ -215,8 +215,10 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- return fHelper.xpRequiresDstTexture(caps, clip, GrProcessorAnalysisCoverage::kSingleChannel,
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped,
+ GrProcessorAnalysisCoverage::kSingleChannel,
&fShapes.front().fColor);
}
diff --git a/src/gpu/ops/GrTessellatingPathRenderer.cpp b/src/gpu/ops/GrTessellatingPathRenderer.cpp
index 730e91b..099cb11 100644
--- a/src/gpu/ops/GrTessellatingPathRenderer.cpp
+++ b/src/gpu/ops/GrTessellatingPathRenderer.cpp
@@ -215,11 +215,12 @@
FixedFunctionFlags fixedFunctionFlags() const override { return fHelper.fixedFunctionFlags(); }
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
GrProcessorAnalysisCoverage coverage = fAntiAlias
? GrProcessorAnalysisCoverage::kSingleChannel
: GrProcessorAnalysisCoverage::kNone;
- return fHelper.xpRequiresDstTexture(caps, clip, coverage, &fColor);
+ return fHelper.xpRequiresDstTexture(caps, clip, dstIsClamped, coverage, &fColor);
}
private:
diff --git a/src/gpu/ops/GrTextureOp.cpp b/src/gpu/ops/GrTextureOp.cpp
index 732b9c9..5dc30f3 100644
--- a/src/gpu/ops/GrTextureOp.cpp
+++ b/src/gpu/ops/GrTextureOp.cpp
@@ -276,7 +276,8 @@
return str;
}
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
+ RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip,
+ GrPixelConfigIsClamped dstIsClamped) override {
SkASSERT(!fFinalized);
SkASSERT(1 == fProxyCnt);
fFinalized = true;