Index: tests/ClipStackTest.cpp |
diff --git a/tests/ClipStackTest.cpp b/tests/ClipStackTest.cpp |
index f6edb8ce5b1f773610a9b7e5e827c2cae0c1a873..a6b636271ab3da50909edc79945bceea9fd9240b 100644 |
--- a/tests/ClipStackTest.cpp |
+++ b/tests/ClipStackTest.cpp |
@@ -1006,57 +1006,47 @@ static void test_reduced_clip_stack(skiatest::Reporter* reporter) { |
} |
} |
+ // Get the reduced version of the stack. |
SkRect queryBounds = kBounds; |
queryBounds.outset(kBounds.width() / 2, kBounds.height() / 2); |
+ const GrReducedClip reduced(stack, queryBounds); |
- // Get the reduced version of the stack. |
- ElementList reducedClips; |
- int32_t reducedGenID; |
- SkIRect clipIBounds; |
- bool requiresAA; |
- InitialState initial = GrReducedClip::ReduceClipStack(stack, |
- queryBounds, |
- &reducedClips, |
- &reducedGenID, |
- &clipIBounds, |
- &requiresAA); |
- |
- REPORTER_ASSERT_MESSAGE(reporter, SkClipStack::kInvalidGenID != reducedGenID, |
+ REPORTER_ASSERT_MESSAGE(reporter, SkClipStack::kInvalidGenID != reduced.genID(), |
testCase.c_str()); |
- if (!reducedClips.isEmpty()) { |
+ if (!reduced.elements().isEmpty()) { |
SkRect stackBounds; |
SkClipStack::BoundsType stackBoundsType; |
stack.getBounds(&stackBounds, &stackBoundsType); |
if (SkClipStack::kNormal_BoundsType == stackBoundsType) { |
// Unless GrReducedClip starts doing some heroic tightening of the clip bounds, this |
// will be true since the stack bounds are completely contained inside the query. |
- REPORTER_ASSERT_MESSAGE(reporter, GrClip::IsInsideClip(clipIBounds, stackBounds), |
+ REPORTER_ASSERT_MESSAGE(reporter, GrClip::IsInsideClip(reduced.iBounds(), stackBounds), |
testCase.c_str()); |
} |
- REPORTER_ASSERT_MESSAGE(reporter, requiresAA == doAA, testCase.c_str()); |
+ REPORTER_ASSERT_MESSAGE(reporter, reduced.requiresAA() == doAA, testCase.c_str()); |
} |
// Build a new clip stack based on the reduced clip elements |
SkClipStack reducedStack; |
- if (GrReducedClip::kAllOut_InitialState == initial) { |
+ if (GrReducedClip::InitialState::kAllOut == reduced.initialState()) { |
// whether the result is bounded or not, the whole plane should start outside the clip. |
reducedStack.clipEmpty(); |
} |
- for (ElementList::Iter iter = reducedClips.headIter(); iter.get(); iter.next()) { |
+ for (ElementList::Iter iter(reduced.elements()); iter.get(); iter.next()) { |
add_elem_to_stack(*iter.get(), &reducedStack); |
} |
// GrReducedClipStack assumes that the final result is clipped to the returned bounds |
- reducedStack.clipDevRect(clipIBounds, SkRegion::kIntersect_Op); |
- stack.clipDevRect(clipIBounds, SkRegion::kIntersect_Op); |
+ reducedStack.clipDevRect(reduced.iBounds(), SkRegion::kIntersect_Op); |
+ stack.clipDevRect(reduced.iBounds(), SkRegion::kIntersect_Op); |
// convert both the original stack and reduced stack to SkRegions and see if they're equal |
SkRegion region; |
- set_region_to_stack(stack, clipIBounds, ®ion); |
+ set_region_to_stack(stack, reduced.iBounds(), ®ion); |
SkRegion reducedRegion; |
- set_region_to_stack(reducedStack, clipIBounds, &reducedRegion); |
+ set_region_to_stack(reducedStack, reduced.iBounds(), &reducedRegion); |
REPORTER_ASSERT_MESSAGE(reporter, region == reducedRegion, testCase.c_str()); |
} |
@@ -1075,21 +1065,11 @@ static void test_reduced_clip_stack_genid(skiatest::Reporter* reporter) { |
stack.clipDevRect(SkRect::MakeXYWH(0, 0, SkScalar(50.3), SkScalar(50.3)), SkRegion::kReplace_Op, true); |
SkRect bounds = SkRect::MakeXYWH(0, 0, 100, 100); |
- ElementList reducedClips; |
- int32_t reducedGenID; |
- SkIRect tightBounds; |
- bool requiresAA; |
- |
- GrReducedClip::ReduceClipStack(stack, |
- bounds, |
- &reducedClips, |
- &reducedGenID, |
- &tightBounds, |
- &requiresAA); |
+ const GrReducedClip reduced(stack, bounds); |
- REPORTER_ASSERT(reporter, reducedClips.count() == 1); |
+ REPORTER_ASSERT(reporter, reduced.elements().count() == 1); |
// Clips will be cached based on the generation id. Make sure the gen id is valid. |
- REPORTER_ASSERT(reporter, SkClipStack::kInvalidGenID != reducedGenID); |
+ REPORTER_ASSERT(reporter, SkClipStack::kInvalidGenID != reduced.genID()); |
} |
{ |
SkClipStack stack; |
@@ -1129,60 +1109,50 @@ static void test_reduced_clip_stack_genid(skiatest::Reporter* reporter) { |
SkIRect clipIRect; |
// parameter. |
} testCases[] = { |
+ |
// Rect A. |
- { XYWH(0, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip::kAllIn_InitialState, IXYWH(0, 0, 25, 25) }, |
- { XYWH(0.1f, 0.1f, 25.1f, 25.1f), 0, SkClipStack::kWideOpenGenID, GrReducedClip::kAllIn_InitialState, IXYWH(0, 0, 26, 26) }, |
- { XYWH(0, 0, 27, 27), 1, genIDA, GrReducedClip::kAllOut_InitialState, IXYWH(0, 0, 27, 27)}, |
+ { XYWH(0, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip::InitialState::kAllIn, IXYWH(0, 0, 25, 25) }, |
+ { XYWH(0.1f, 0.1f, 25.1f, 25.1f), 0, SkClipStack::kWideOpenGenID, GrReducedClip::InitialState::kAllIn, IXYWH(0, 0, 26, 26) }, |
+ { XYWH(0, 0, 27, 27), 1, genIDA, GrReducedClip::InitialState::kAllOut, IXYWH(0, 0, 27, 27)}, |
// Rect B. |
- { XYWH(50, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip::kAllIn_InitialState, IXYWH(50, 0, 25, 25) }, |
- { XYWH(50, 0, 25.3f, 25.3f), 0, SkClipStack::kWideOpenGenID, GrReducedClip::kAllIn_InitialState, IXYWH(50, 0, 26, 26) }, |
- { XYWH(50, 0, 27, 27), 1, genIDB, GrReducedClip::kAllOut_InitialState, IXYWH(50, 0, 26, 27) }, |
+ { XYWH(50, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip::InitialState::kAllIn, IXYWH(50, 0, 25, 25) }, |
+ { XYWH(50, 0, 25.3f, 25.3f), 0, SkClipStack::kWideOpenGenID, GrReducedClip::InitialState::kAllIn, IXYWH(50, 0, 26, 26) }, |
+ { XYWH(50, 0, 27, 27), 1, genIDB, GrReducedClip::InitialState::kAllOut, IXYWH(50, 0, 26, 27) }, |
// Rect C. |
- { XYWH(0, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip::kAllIn_InitialState, IXYWH(0, 50, 25, 25) }, |
- { XYWH(0.2f, 50.1f, 25.1f, 25.2f), 0, SkClipStack::kWideOpenGenID, GrReducedClip::kAllIn_InitialState, IXYWH(0, 50, 26, 26) }, |
- { XYWH(0, 50, 27, 27), 1, genIDC, GrReducedClip::kAllOut_InitialState, IXYWH(0, 50, 27, 26) }, |
+ { XYWH(0, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip::InitialState::kAllIn, IXYWH(0, 50, 25, 25) }, |
+ { XYWH(0.2f, 50.1f, 25.1f, 25.2f), 0, SkClipStack::kWideOpenGenID, GrReducedClip::InitialState::kAllIn, IXYWH(0, 50, 26, 26) }, |
+ { XYWH(0, 50, 27, 27), 1, genIDC, GrReducedClip::InitialState::kAllOut, IXYWH(0, 50, 27, 26) }, |
// Rect D. |
- { XYWH(50, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip::kAllIn_InitialState, IXYWH(50, 50, 25, 25)}, |
- { XYWH(50.3f, 50.3f, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip::kAllIn_InitialState, IXYWH(50, 50, 26, 26)}, |
- { XYWH(50, 50, 27, 27), 1, genIDD, GrReducedClip::kAllOut_InitialState, IXYWH(50, 50, 26, 26)}, |
+ { XYWH(50, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip::InitialState::kAllIn, IXYWH(50, 50, 25, 25)}, |
+ { XYWH(50.3f, 50.3f, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip::InitialState::kAllIn, IXYWH(50, 50, 26, 26)}, |
+ { XYWH(50, 50, 27, 27), 1, genIDD, GrReducedClip::InitialState::kAllOut, IXYWH(50, 50, 26, 26)}, |
// Other tests: |
- { XYWH(0, 0, 100, 100), 4, genIDD, GrReducedClip::kAllOut_InitialState, stackBounds }, |
+ { XYWH(0, 0, 100, 100), 4, genIDD, GrReducedClip::InitialState::kAllOut, stackBounds }, |
// Rect in the middle, touches none. |
- { XYWH(26, 26, 24, 24), 0, SkClipStack::kEmptyGenID, GrReducedClip::kAllOut_InitialState, IXYWH(26, 26, 24, 24) }, |
+ { XYWH(26, 26, 24, 24), 0, SkClipStack::kEmptyGenID, GrReducedClip::InitialState::kAllOut, IXYWH(26, 26, 24, 24) }, |
// Rect in the middle, touches all the rects. GenID is the last rect. |
- { XYWH(24, 24, 27, 27), 4, genIDD, GrReducedClip::kAllOut_InitialState, IXYWH(24, 24, 27, 27) }, |
+ { XYWH(24, 24, 27, 27), 4, genIDD, GrReducedClip::InitialState::kAllOut, IXYWH(24, 24, 27, 27) }, |
}; |
#undef XYWH |
#undef IXYWH |
for (size_t i = 0; i < SK_ARRAY_COUNT(testCases); ++i) { |
- ElementList reducedClips; |
- int32_t reducedGenID; |
- SkIRect clipIRect; |
- bool requiresAA; |
- |
- InitialState initial = GrReducedClip::ReduceClipStack(stack, |
- testCases[i].testBounds, |
- &reducedClips, |
- &reducedGenID, |
- &clipIRect, |
- &requiresAA); |
- |
- REPORTER_ASSERT(reporter, reducedClips.count() == testCases[i].reducedClipCount); |
- SkASSERT(reducedClips.count() == testCases[i].reducedClipCount); |
- REPORTER_ASSERT(reporter, reducedGenID == testCases[i].reducedGenID); |
- SkASSERT(reducedGenID == testCases[i].reducedGenID); |
- REPORTER_ASSERT(reporter, initial == testCases[i].initialState); |
- SkASSERT(initial == testCases[i].initialState); |
- REPORTER_ASSERT(reporter, clipIRect == testCases[i].clipIRect); |
- SkASSERT(clipIRect == testCases[i].clipIRect); |
+ const GrReducedClip reduced(stack, testCases[i].testBounds); |
+ REPORTER_ASSERT(reporter, reduced.elements().count() == testCases[i].reducedClipCount); |
+ SkASSERT(reduced.elements().count() == testCases[i].reducedClipCount); |
+ REPORTER_ASSERT(reporter, reduced.genID() == testCases[i].reducedGenID); |
+ SkASSERT(reduced.genID() == testCases[i].reducedGenID); |
+ REPORTER_ASSERT(reporter, reduced.initialState() == testCases[i].initialState); |
+ SkASSERT(reduced.initialState() == testCases[i].initialState); |
+ REPORTER_ASSERT(reporter, reduced.iBounds() == testCases[i].clipIRect); |
+ SkASSERT(reduced.iBounds() == testCases[i].clipIRect); |
} |
} |
} |
@@ -1193,20 +1163,9 @@ static void test_reduced_clip_stack_no_aa_crash(skiatest::Reporter* reporter) { |
stack.clipDevRect(SkIRect::MakeXYWH(0, 0, 50, 50), SkRegion::kReplace_Op); |
SkRect bounds = SkRect::MakeXYWH(0, 0, 100, 100); |
- ElementList reducedClips; |
- int32_t reducedGenID; |
- SkIRect tightBounds; |
- bool requiresAA; |
- |
// At the time, this would crash. |
- GrReducedClip::ReduceClipStack(stack, |
- bounds, |
- &reducedClips, |
- &reducedGenID, |
- &tightBounds, |
- &requiresAA); |
- |
- REPORTER_ASSERT(reporter, 0 == reducedClips.count()); |
+ const GrReducedClip reduced(stack, bounds); |
+ REPORTER_ASSERT(reporter, reduced.elements().isEmpty()); |
} |
enum class ClipMethod { |
@@ -1220,20 +1179,9 @@ static void test_aa_query(skiatest::Reporter* reporter, const SkString& testName |
const SkClipStack& stack, const SkMatrix& queryXform, |
const SkRect& preXformQuery, ClipMethod expectedMethod, |
int numExpectedElems = 0) { |
- ElementList reducedElems; |
- int32_t reducedGenID; |
- SkIRect clipIBounds; |
- bool requiresAA; |
- |
SkRect queryBounds; |
queryXform.mapRect(&queryBounds, preXformQuery); |
- |
- InitialState initialState = GrReducedClip::ReduceClipStack(stack, |
- queryBounds, |
- &reducedElems, |
- &reducedGenID, |
- &clipIBounds, |
- &requiresAA); |
+ const GrReducedClip reduced(stack, queryBounds); |
SkClipStack::BoundsType stackBoundsType; |
SkRect stackBounds; |
@@ -1242,16 +1190,18 @@ static void test_aa_query(skiatest::Reporter* reporter, const SkString& testName |
switch (expectedMethod) { |
case ClipMethod::kSkipDraw: |
SkASSERT(0 == numExpectedElems); |
- REPORTER_ASSERT_MESSAGE(reporter, reducedElems.isEmpty(), testName.c_str()); |
- REPORTER_ASSERT_MESSAGE(reporter, GrReducedClip::kAllOut_InitialState == initialState, |
+ REPORTER_ASSERT_MESSAGE(reporter, reduced.elements().isEmpty(), testName.c_str()); |
+ REPORTER_ASSERT_MESSAGE(reporter, |
+ GrReducedClip::InitialState::kAllOut == reduced.initialState(), |
testName.c_str()); |
return; |
case ClipMethod::kIgnoreClip: |
SkASSERT(0 == numExpectedElems); |
- REPORTER_ASSERT_MESSAGE(reporter, reducedElems.isEmpty(), testName.c_str()); |
- REPORTER_ASSERT_MESSAGE(reporter, GrClip::IsInsideClip(clipIBounds, queryBounds), |
+ REPORTER_ASSERT_MESSAGE(reporter, GrClip::IsInsideClip(reduced.iBounds(), queryBounds), |
testName.c_str()); |
- REPORTER_ASSERT_MESSAGE(reporter, GrReducedClip::kAllIn_InitialState == initialState, |
+ REPORTER_ASSERT_MESSAGE(reporter, reduced.elements().isEmpty(), testName.c_str()); |
+ REPORTER_ASSERT_MESSAGE(reporter, |
+ GrReducedClip::InitialState::kAllIn == reduced.initialState(), |
testName.c_str()); |
return; |
case ClipMethod::kScissor: { |
@@ -1259,9 +1209,11 @@ static void test_aa_query(skiatest::Reporter* reporter, const SkString& testName |
SkASSERT(0 == numExpectedElems); |
SkIRect expectedScissor; |
stackBounds.round(&expectedScissor); |
- REPORTER_ASSERT_MESSAGE(reporter, reducedElems.isEmpty(), testName.c_str()); |
- REPORTER_ASSERT_MESSAGE(reporter, expectedScissor == clipIBounds, testName.c_str()); |
- REPORTER_ASSERT_MESSAGE(reporter, GrReducedClip::kAllIn_InitialState == initialState, |
+ REPORTER_ASSERT_MESSAGE(reporter, reduced.elements().isEmpty(), testName.c_str()); |
+ REPORTER_ASSERT_MESSAGE(reporter, expectedScissor == reduced.iBounds(), |
+ testName.c_str()); |
+ REPORTER_ASSERT_MESSAGE(reporter, |
+ GrReducedClip::InitialState::kAllIn == reduced.initialState(), |
testName.c_str()); |
return; |
} |
@@ -1270,10 +1222,11 @@ static void test_aa_query(skiatest::Reporter* reporter, const SkString& testName |
if (SkClipStack::kNormal_BoundsType == stackBoundsType) { |
SkAssertResult(expectedClipIBounds.intersect(GrClip::GetPixelIBounds(stackBounds))); |
} |
- REPORTER_ASSERT_MESSAGE(reporter, numExpectedElems == reducedElems.count(), |
+ REPORTER_ASSERT_MESSAGE(reporter, numExpectedElems == reduced.elements().count(), |
+ testName.c_str()); |
+ REPORTER_ASSERT_MESSAGE(reporter, expectedClipIBounds == reduced.iBounds(), |
testName.c_str()); |
- REPORTER_ASSERT_MESSAGE(reporter, expectedClipIBounds == clipIBounds, testName.c_str()); |
- REPORTER_ASSERT_MESSAGE(reporter, requiresAA == !reducedElems.isEmpty(), |
+ REPORTER_ASSERT_MESSAGE(reporter, reduced.requiresAA() == !reduced.elements().isEmpty(), |
testName.c_str()); |
break; |
} |
@@ -1306,8 +1259,7 @@ static void test_reduced_clip_stack_aa(skiatest::Reporter* reporter) { |
stack.clipDevRect(alignedRect, SkRegion::kIntersect_Op, true); |
test_aa_query(reporter, name, stack, m, {IL, IT, IR, IB}, ClipMethod::kIgnoreClip); |
test_aa_query(reporter, name, stack, m, {IL, IT-1, IR, IT}, ClipMethod::kSkipDraw); |
- test_aa_query(reporter, name, stack, m, {IL, IT, IR, IB}, ClipMethod::kScissor); |
- test_aa_query(reporter, name, stack, m, {IL, IT+2, IR, IB-3}, ClipMethod::kScissor); |
+ test_aa_query(reporter, name, stack, m, {IL, IT-2, IR, IB}, ClipMethod::kScissor); |
// Rect (iior=true). |
name.printf("Rect test, iter %i", i); |