Index: src/gpu/GrClipMaskManager.cpp |
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp |
index 340ede0d314484247d892cf66324c90ba6715e71..b9a47734badbd70ad98886b1ff6c2309bcf56367 100644 |
--- a/src/gpu/GrClipMaskManager.cpp |
+++ b/src/gpu/GrClipMaskManager.cpp |
@@ -156,20 +156,30 @@ bool GrClipMaskManager::setupClipping(const GrClipData* clipDataIn, |
// If there is only one clip element and it is a convex polygon we just install an effect that |
// clips against the edges. |
- if (1 == elements.count() && SkClipStack::Element::kPath_Type == elements.tail()->getType() && |
- SkRegion::kReplace_Op == elements.tail()->getOp()) { |
- const SkPath& p = elements.tail()->getPath(); |
- bool isAA = GR_AA_CLIP && elements.tail()->isAA(); |
+ if (1 == elements.count() && SkRegion::kReplace_Op == elements.tail()->getOp()) { |
SkAutoTUnref<GrEffectRef> effect; |
- if (rt->isMultisampled()) { |
- // A coverage effect for AA clipping won't play nicely with MSAA. |
- if (!isAA) { |
- effect.reset(GrConvexPolyEffect::Create(GrConvexPolyEffect::kFillNoAA_EdgeType, p)); |
+ if (SkClipStack::Element::kPath_Type == elements.tail()->getType()) { |
+ const SkPath& path = elements.tail()->getPath(); |
+ bool isAA = GR_AA_CLIP && elements.tail()->isAA(); |
+ if (rt->isMultisampled()) { |
+ // A coverage effect for AA clipping won't play nicely with MSAA. |
+ if (!isAA) { |
+ effect.reset(GrConvexPolyEffect::Create(GrConvexPolyEffect::kFillNoAA_EdgeType, |
+ path)); |
+ } |
+ } else { |
+ GrConvexPolyEffect::EdgeType type = isAA ? GrConvexPolyEffect::kFillAA_EdgeType : |
+ GrConvexPolyEffect::kFillNoAA_EdgeType; |
+ effect.reset(GrConvexPolyEffect::Create(type, path)); |
} |
- } else { |
- GrConvexPolyEffect::EdgeType type = isAA ? GrConvexPolyEffect::kFillAA_EdgeType : |
- GrConvexPolyEffect::kFillNoAA_EdgeType; |
- effect.reset(GrConvexPolyEffect::Create(type, p)); |
+ } else if (GR_AA_CLIP && elements.tail()->isAA() && !rt->isMultisampled()) { |
+ // We only handle AA/non-MSAA rects here. Coverage effect AA isn't MSAA friendly and |
+ // non-AA rect clips are handled by the scissor. |
+ SkASSERT(SkClipStack::Element::kRect_Type == elements.tail()->getType()); |
+ const SkRect& rect = elements.tail()->getRect(); |
+ effect.reset(GrConvexPolyEffect::Create(GrConvexPolyEffect::kFillAA_EdgeType, rect)); |
+ // This should never fail. |
+ SkASSERT(effect); |
} |
if (effect) { |
are->set(fGpu->drawState()); |