Fix detection of when we will have mixed sampled coverage
Change-Id: I32de8bdea7b7aafd202f44a2036872f25d531ae3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253763
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp
index ef69bca..1e0cc19 100644
--- a/src/gpu/GrRenderTargetContext.cpp
+++ b/src/gpu/GrRenderTargetContext.cpp
@@ -2303,29 +2303,28 @@
GrAppliedClip appliedClip;
GrDrawOp::FixedFunctionFlags fixedFunctionFlags = op->fixedFunctionFlags();
bool usesHWAA = fixedFunctionFlags & GrDrawOp::FixedFunctionFlags::kUsesHWAA;
- bool usesStencil = fixedFunctionFlags & GrDrawOp::FixedFunctionFlags::kUsesStencil;
+ bool usesUserStencilBits = fixedFunctionFlags & GrDrawOp::FixedFunctionFlags::kUsesStencil;
- if (usesStencil) {
+ if (usesUserStencilBits) { // Stencil clipping will call setNeedsStencil on its own, if needed.
this->setNeedsStencil(usesHWAA);
}
- if (!clip.apply(fContext, this, usesHWAA, usesStencil, &appliedClip, &bounds)) {
+ if (!clip.apply(fContext, this, usesHWAA, usesUserStencilBits, &appliedClip, &bounds)) {
fContext->priv().opMemoryPool()->release(std::move(op));
return;
}
- SkASSERT((!usesStencil && !appliedClip.hasStencilClip()) || (fNumStencilSamples > 0));
+ bool willUseStencil = usesUserStencilBits || appliedClip.hasStencilClip();
+ SkASSERT(!willUseStencil || fNumStencilSamples > 0);
+
+ // If stencil is enabled and the framebuffer is mixed sampled, then the graphics pipeline will
+ // have mixed sampled coverage, regardless of whether HWAA is enabled. (e.g., a non-aa draw
+ // that uses a stencil test when the stencil buffer is multisampled.)
+ bool hasMixedSampledCoverage = (
+ willUseStencil && fNumStencilSamples > this->numSamples());
+ SkASSERT(!hasMixedSampledCoverage || fRenderTargetProxy->canUseMixedSamples(*this->caps()));
GrClampType clampType = GrColorTypeClampType(this->colorInfo().colorType());
- // MIXED SAMPLES TODO: If we start using mixed samples for clips we will need to check the clip
- // here as well.
- bool hasMixedSampledCoverage = (usesHWAA && this->numSamples() <= 1);
-#ifdef SK_DEBUG
- if (hasMixedSampledCoverage) {
- SkASSERT(usesStencil);
- SkASSERT(fRenderTargetProxy->canUseMixedSamples(*this->caps()));
- }
-#endif
GrProcessorSet::Analysis analysis = op->finalize(
*this->caps(), &appliedClip, hasMixedSampledCoverage, clampType);