| 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());
|
|
|