Replace GrAAType with flags for path renderers
Replaces the single GrAAType with a set of flags indicating which AA
types are acceptable for the path renderer to use.
Bug: skia:
Change-Id: I773565c904a360355e771966b6cddba697e1165f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/200840
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/GrReducedClip.cpp b/src/gpu/GrReducedClip.cpp
index 2624d86..74bd2d5 100644
--- a/src/gpu/GrReducedClip.cpp
+++ b/src/gpu/GrReducedClip.cpp
@@ -824,12 +824,13 @@
// walk through each clip element and perform its set op with the existing clip.
for (ElementList::Iter iter(fMaskElements); iter.get(); iter.next()) {
+ using AATypeFlags = GrPathRenderer::AATypeFlags;
const Element* element = iter.get();
- GrAAType aaType = GrAAType::kNone;
- if (element->isAA() && GrFSAAType::kNone != renderTargetContext->fsaaType()) {
- aaType = GrAAType::kMSAA;
- }
-
+ bool doStencilMSAA =
+ element->isAA() && GrFSAAType::kNone != renderTargetContext->fsaaType();
+ // Since we are only drawing to the stencil buffer, we can use kMSAA even if the render
+ // target is mixed sampled.
+ auto pathAATypeFlags = (doStencilMSAA) ? AATypeFlags::kMSAA : AATypeFlags::kNone;
bool fillInverted = false;
// This will be used to determine whether the clip shape can be rendered into the
@@ -856,7 +857,7 @@
canDrawArgs.fClipConservativeBounds = &stencilClip.fixedClip().scissorRect();
canDrawArgs.fViewMatrix = &SkMatrix::I();
canDrawArgs.fShape = &shape;
- canDrawArgs.fAAType = aaType;
+ canDrawArgs.fAATypeFlags = pathAATypeFlags;
canDrawArgs.fHasUserStencilSettings = false;
canDrawArgs.fTargetIsWrappedVkSecondaryCB = renderTargetContext->wrapsVkSecondaryCB();
@@ -890,9 +891,9 @@
0xffff>()
);
if (Element::DeviceSpaceType::kRect == element->getDeviceSpaceType()) {
- renderTargetContext->priv().stencilRect(stencilClip.fixedClip(), &kDrawToStencil,
- aaType, SkMatrix::I(),
- element->getDeviceSpaceRect());
+ renderTargetContext->priv().stencilRect(
+ stencilClip.fixedClip(), &kDrawToStencil, GrAA(doStencilMSAA),
+ SkMatrix::I(), element->getDeviceSpaceRect());
} else {
if (!clipPath.isEmpty()) {
GrShape shape(clipPath, GrStyle::SimpleFill());
@@ -908,7 +909,7 @@
&stencilClip.fixedClip().scissorRect(),
&SkMatrix::I(),
&shape,
- aaType,
+ pathAATypeFlags,
false};
pr->drawPath(args);
} else {
@@ -918,7 +919,7 @@
args.fClip = &stencilClip.fixedClip();
args.fClipConservativeBounds = &stencilClip.fixedClip().scissorRect();
args.fViewMatrix = &SkMatrix::I();
- args.fAAType = aaType;
+ args.fDoStencilMSAA = GrAA(doStencilMSAA);
args.fShape = &shape;
pr->stencilPath(args);
}
@@ -931,9 +932,9 @@
for (GrUserStencilSettings const* const* pass = stencilPasses; *pass; ++pass) {
if (drawDirectToClip) {
if (Element::DeviceSpaceType::kRect == element->getDeviceSpaceType()) {
- renderTargetContext->priv().stencilRect(stencilClip, *pass, aaType,
- SkMatrix::I(),
- element->getDeviceSpaceRect());
+ renderTargetContext->priv().stencilRect(
+ stencilClip, *pass, GrAA(doStencilMSAA), SkMatrix::I(),
+ element->getDeviceSpaceRect());
} else {
GrShape shape(clipPath, GrStyle::SimpleFill());
GrPaint paint;
@@ -946,15 +947,16 @@
&stencilClip.fixedClip().scissorRect(),
&SkMatrix::I(),
&shape,
- aaType,
+ pathAATypeFlags,
false};
pr->drawPath(args);
}
} else {
// The view matrix is setup to do clip space -> stencil space translation, so
// draw rect in clip space.
- renderTargetContext->priv().stencilRect(stencilClip, *pass, aaType, SkMatrix::I(),
- SkRect::Make(fScissor));
+ renderTargetContext->priv().stencilRect(
+ stencilClip, *pass, GrAA(doStencilMSAA), SkMatrix::I(),
+ SkRect::Make(fScissor));
}
}
}