Index: src/gpu/GrClipMaskManager.cpp |
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp |
index 4b464bb01469101d781811d9a3a4f1391d54db91..e0a85d184d9eff88225100a18e209c12fa291cf3 100644 |
--- a/src/gpu/GrClipMaskManager.cpp |
+++ b/src/gpu/GrClipMaskManager.cpp |
@@ -109,6 +109,7 @@ bool GrClipMaskManager::useSWOnlyPath(const GrPipelineBuilder& pipelineBuilder, |
} |
bool GrClipMaskManager::getAnalyticClipProcessor(const GrReducedClip::ElementList& elements, |
+ bool abortIfAA, |
SkVector& clipToRTOffset, |
const SkRect* drawBounds, |
const GrFragmentProcessor** resultFP) { |
@@ -151,16 +152,20 @@ bool GrClipMaskManager::getAnalyticClipProcessor(const GrReducedClip::ElementLis |
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 GrClipMaskManager::setupClipping(const GrPipelineBuilder& pipelineBuilder, |
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 || |