| Index: src/gpu/GrReducedClip.cpp
|
| diff --git a/src/gpu/GrReducedClip.cpp b/src/gpu/GrReducedClip.cpp
|
| index cbfd89600293116e2d1c4086c33073a83361b6f3..26b89369524f0cfe40610a6b7ad8a56efb0b83ea 100644
|
| --- a/src/gpu/GrReducedClip.cpp
|
| +++ b/src/gpu/GrReducedClip.cpp
|
| @@ -302,9 +302,7 @@ static void reduced_stack_walker(const SkClipStack& stack,
|
| }
|
| }
|
| }
|
| - if (requiresAA) {
|
| - *requiresAA = numAAElements > 0;
|
| - }
|
| + *requiresAA = numAAElements > 0;
|
|
|
| if (0 == result->count()) {
|
| if (*initialState == GrReducedClip::kAllIn_InitialState) {
|
| @@ -329,6 +327,8 @@ void GrReducedClip::ReduceClipStack(const SkClipStack& stack,
|
| InitialState* initialState,
|
| SkIRect* tighterBounds,
|
| bool* requiresAA) {
|
| + SkASSERT(tighterBounds);
|
| + SkASSERT(requiresAA);
|
| result->reset();
|
|
|
| // The clip established by the element list might be cached based on the last
|
| @@ -359,60 +359,44 @@ void GrReducedClip::ReduceClipStack(const SkClipStack& stack,
|
| SkRect isectRect;
|
| if (stackBounds.contains(scalarQueryBounds)) {
|
| *initialState = GrReducedClip::kAllIn_InitialState;
|
| - if (tighterBounds) {
|
| - *tighterBounds = queryBounds;
|
| - }
|
| - if (requiresAA) {
|
| - *requiresAA = false;
|
| - }
|
| + *tighterBounds = queryBounds;
|
| + *requiresAA = false;
|
| } else if (isectRect.intersect(stackBounds, scalarQueryBounds)) {
|
| // If the caller asked for tighter integer bounds we may be able to
|
| // return kAllIn and give the bounds with no elements
|
| - if (tighterBounds) {
|
| - isectRect.roundOut(tighterBounds);
|
| - SkRect scalarTighterBounds = SkRect::Make(*tighterBounds);
|
| - if (scalarTighterBounds == isectRect) {
|
| - // the round-out didn't add any area outside the clip rect.
|
| - if (requiresAA) {
|
| - *requiresAA = false;
|
| - }
|
| - *initialState = GrReducedClip::kAllIn_InitialState;
|
| - return;
|
| - }
|
| + isectRect.roundOut(tighterBounds);
|
| + SkRect scalarTighterBounds = SkRect::Make(*tighterBounds);
|
| + if (scalarTighterBounds == isectRect) {
|
| + // the round-out didn't add any area outside the clip rect.
|
| + *requiresAA = false;
|
| + *initialState = GrReducedClip::kAllIn_InitialState;
|
| + return;
|
| }
|
| *initialState = kAllOut_InitialState;
|
| // iior should only be true if aa/non-aa status matches among all elements.
|
| SkClipStack::Iter iter(stack, SkClipStack::Iter::kTop_IterStart);
|
| bool doAA = iter.prev()->isAA();
|
| result->addToHead(isectRect, SkRegion::kReplace_Op, doAA);
|
| - if (requiresAA) {
|
| - *requiresAA = doAA;
|
| - }
|
| + *requiresAA = doAA;
|
| } else {
|
| *initialState = kAllOut_InitialState;
|
| - if (requiresAA) {
|
| - *requiresAA = false;
|
| - }
|
| + *requiresAA = false;
|
| }
|
| return;
|
| } else {
|
| if (SkClipStack::kNormal_BoundsType == stackBoundsType) {
|
| if (!SkRect::Intersects(stackBounds, scalarQueryBounds)) {
|
| *initialState = kAllOut_InitialState;
|
| - if (requiresAA) {
|
| - *requiresAA = false;
|
| - }
|
| + *requiresAA = false;
|
| return;
|
| }
|
| - if (tighterBounds) {
|
| - SkIRect stackIBounds;
|
| - stackBounds.roundOut(&stackIBounds);
|
| - if (!tighterBounds->intersect(queryBounds, stackIBounds)) {
|
| - SkASSERT(0);
|
| - tighterBounds->setEmpty();
|
| - }
|
| - bounds = tighterBounds;
|
| + SkIRect stackIBounds;
|
| + stackBounds.roundOut(&stackIBounds);
|
| + if (!tighterBounds->intersect(queryBounds, stackIBounds)) {
|
| + SkASSERT(0);
|
| + tighterBounds->setEmpty();
|
| }
|
| + bounds = tighterBounds;
|
| } else {
|
| if (stackBounds.contains(scalarQueryBounds)) {
|
| *initialState = kAllOut_InitialState;
|
| @@ -420,9 +404,7 @@ void GrReducedClip::ReduceClipStack(const SkClipStack& stack,
|
| // but we don't know that *all* the pixels in the box are outside the clip. So
|
| // proceed to walking the stack.
|
| }
|
| - if (tighterBounds) {
|
| - *tighterBounds = queryBounds;
|
| - }
|
| + *tighterBounds = queryBounds;
|
| }
|
| }
|
|
|
|
|