Index: src/gpu/GrClipMaskManager.cpp |
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp |
index 6635436e8745d088e1e83dd05f047006b48de0f6..f0eb2477bd11605164a34cbfbe4601717bcc76d9 100644 |
--- a/src/gpu/GrClipMaskManager.cpp |
+++ b/src/gpu/GrClipMaskManager.cpp |
@@ -165,7 +165,7 @@ bool GrClipMaskManager::installClipEffects(GrPipelineBuilder* pipelineBuilder, |
invert ? kInverseFillAA_GrProcessorEdgeType : kFillAA_GrProcessorEdgeType; |
} else { |
edgeType = |
- invert ? kInverseFillBW_GrProcessorEdgeType : kFillBW_GrProcessorEdgeType; |
+invert ? kInverseFillBW_GrProcessorEdgeType : kFillBW_GrProcessorEdgeType; |
} |
SkAutoTUnref<GrFragmentProcessor> fp; |
switch (iter.get()->getType()) { |
@@ -229,57 +229,53 @@ bool GrClipMaskManager::setupClipping(GrPipelineBuilder* pipelineBuilder, |
SkIRect clipSpaceRTIBounds = SkIRect::MakeWH(rt->width(), rt->height()); |
const GrClip& clip = pipelineBuilder->clip(); |
- // TODO we shouldn't be ignoring the clip mask manager's clip. This is temporary. |
- bool ignoreClip = clip.isWideOpen(clipSpaceRTIBounds); |
- if (!ignoreClip) { |
- // The clip mask manager always draws with a single IRect so we special case that logic here |
- // Image filters just use a rect, so we also special case that logic |
- switch (clip.clipType()) { |
- case GrClip::kWideOpen_ClipType: |
- // we should have handled this case above |
- SkASSERT(false); |
- case GrClip::kIRect_ClipType: { |
- clipSpaceIBounds = clip.irect(); |
- SkNEW_INSERT_AT_LLIST_HEAD(&elements, |
- Element, |
- (SkRect::Make(clipSpaceIBounds), |
- SkRegion::kIntersect_Op, false)); |
- } break; |
- case GrClip::kRect_ClipType: { |
- clipSpaceIBounds.setLTRB(SkScalarCeilToInt(clip.rect().fLeft), |
- SkScalarCeilToInt(clip.rect().fTop), |
- SkScalarCeilToInt(clip.rect().fRight), |
- SkScalarCeilToInt(clip.rect().fBottom)); |
- SkNEW_INSERT_AT_LLIST_HEAD(&elements, |
- Element, |
- (SkRect::Make(clipSpaceIBounds), |
- SkRegion::kIntersect_Op, false)); |
- } break; |
- case GrClip::kClipStack_ClipType: { |
- clipSpaceRTIBounds.offset(clip.origin()); |
- GrReducedClip::ReduceClipStack(*clip.clipStack(), |
- clipSpaceRTIBounds, |
- &elements, |
- &genID, |
- &initialState, |
- &clipSpaceIBounds, |
- &requiresAA); |
- if (elements.isEmpty()) { |
- if (GrReducedClip::kAllIn_InitialState == initialState) { |
- ignoreClip = clipSpaceIBounds == clipSpaceRTIBounds; |
- } else { |
- return false; |
- } |
- } |
- } break; |
- } |
- } |
- |
- if (ignoreClip) { |
+ if (clip.isWideOpen(clipSpaceRTIBounds)) { |
this->setPipelineBuilderStencil(pipelineBuilder, ars); |
return true; |
} |
+ // The clip mask manager always draws with a single IRect so we special case that logic here |
+ // Image filters just use a rect, so we also special case that logic |
+ switch (clip.clipType()) { |
+ case GrClip::kWideOpen_ClipType: |
+ SkFAIL("Should have caught this with clip.isWideOpen()"); |
+ return true; |
+ case GrClip::kIRect_ClipType: |
+ scissorState->set(clip.irect()); |
+ this->setPipelineBuilderStencil(pipelineBuilder, ars); |
+ return true; |
+ case GrClip::kRect_ClipType: { |
+ const SkRect& rect = clip.rect(); |
+ SkIRect scissor; |
+ scissor.fLeft = SkScalarRoundToInt(rect.fLeft); |
+ scissor.fTop = SkScalarRoundToInt(rect.fTop); |
+ scissor.fRight = SkScalarRoundToInt(rect.fRight); |
+ scissor.fBottom = SkScalarRoundToInt(rect.fBottom); |
+ scissorState->set(scissor); |
+ this->setPipelineBuilderStencil(pipelineBuilder, ars); |
+ } return true; |
+ case GrClip::kClipStack_ClipType: { |
+ clipSpaceRTIBounds.offset(clip.origin()); |
+ GrReducedClip::ReduceClipStack(*clip.clipStack(), |
+ clipSpaceRTIBounds, |
+ &elements, |
+ &genID, |
+ &initialState, |
+ &clipSpaceIBounds, |
+ &requiresAA); |
+ if (elements.isEmpty()) { |
+ if (GrReducedClip::kAllIn_InitialState == initialState) { |
+ if (clipSpaceIBounds == clipSpaceRTIBounds) { |
+ this->setPipelineBuilderStencil(pipelineBuilder, ars); |
+ return true; |
+ } |
+ } else { |
+ return false; |
+ } |
+ } |
+ } break; |
+ } |
+ |
// An element count of 4 was chosen because of the common pattern in Blink of: |
// isect RR |
// diff RR |