Don't abort analytic clipping if using MSAA until elements are examined
TBR=joshualitt@google.com
Review URL: https://codereview.chromium.org/1399223005
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp
index 4b464bb..e0a85d1 100644
--- a/src/gpu/GrClipMaskManager.cpp
+++ b/src/gpu/GrClipMaskManager.cpp
@@ -109,6 +109,7 @@
}
bool GrClipMaskManager::getAnalyticClipProcessor(const GrReducedClip::ElementList& elements,
+ bool abortIfAA,
SkVector& clipToRTOffset,
const SkRect* drawBounds,
const GrFragmentProcessor** resultFP) {
@@ -151,16 +152,20 @@
if (failed) {
break;
}
-
if (!skip) {
GrPrimitiveEdgeType edgeType;
if (iter.get()->isAA()) {
+ if (abortIfAA) {
+ failed = true;
+ break;
+ }
edgeType =
invert ? kInverseFillAA_GrProcessorEdgeType : kFillAA_GrProcessorEdgeType;
} else {
edgeType =
invert ? kInverseFillBW_GrProcessorEdgeType : kFillBW_GrProcessorEdgeType;
}
+
switch (iter.get()->getType()) {
case SkClipStack::Element::kPath_Type:
fps[fpCnt] = GrConvexPolyEffect::Create(edgeType, iter.get()->getPath(),
@@ -282,8 +287,9 @@
bool disallowAnalyticAA = pipelineBuilder.getRenderTarget()->isUnifiedMultisampled();
const GrFragmentProcessor* clipFP = nullptr;
if (elements.isEmpty() ||
- (requiresAA && !disallowAnalyticAA &&
- this->getAnalyticClipProcessor(elements, clipToRTOffset, devBounds, &clipFP))) {
+ (requiresAA &&
+ this->getAnalyticClipProcessor(elements, disallowAnalyticAA, clipToRTOffset, devBounds,
+ &clipFP))) {
SkIRect scissorSpaceIBounds(clipSpaceIBounds);
scissorSpaceIBounds.offset(-clip.origin());
if (nullptr == devBounds ||