From 348060fa820e1ee7a4fd246afe517a80a9ef311d Mon Sep 17 00:00:00 2001 From: Chris Dalton Date: Mon, 5 Jun 2017 13:15:37 -0600 Subject: Fix GrReducedClip.cpp: assertion failure surrounding tiny query bounds Some assertions cannot be relied upon due to FP error. Bug: skia:5990 Change-Id: I32445b320b9100ae2f80d2f762707d823da77805 Reviewed-on: https://skia-review.googlesource.com/18602 Reviewed-by: Brian Salomon Commit-Queue: Chris Dalton --- tests/ClipStackTest.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'tests/ClipStackTest.cpp') diff --git a/tests/ClipStackTest.cpp b/tests/ClipStackTest.cpp index e0df2ca902..1cb644a80f 100644 --- a/tests/ClipStackTest.cpp +++ b/tests/ClipStackTest.cpp @@ -1357,6 +1357,36 @@ static void test_reduced_clip_stack_aa(skiatest::Reporter* reporter) { } } +static void test_tiny_query_bounds_assertion_bug(skiatest::Reporter* reporter) { + // https://bugs.chromium.org/p/skia/issues/detail?id=5990 + const SkRect clipBounds = SkRect::MakeXYWH(1.5f, 100, 1000, 1000); + + SkClipStack rectStack; + rectStack.clipRect(clipBounds, SkMatrix::I(), kIntersect_SkClipOp, true); + + SkPath clipPath; + clipPath.moveTo(clipBounds.left(), clipBounds.top()); + clipPath.quadTo(clipBounds.right(), clipBounds.top(), + clipBounds.right(), clipBounds.bottom()); + clipPath.quadTo(clipBounds.left(), clipBounds.bottom(), + clipBounds.left(), clipBounds.top()); + SkClipStack pathStack; + pathStack.clipPath(clipPath, SkMatrix::I(), kIntersect_SkClipOp, true); + + for (const SkClipStack& stack : {rectStack, pathStack}) { + for (SkRect queryBounds : {SkRect::MakeXYWH(53, 60, GrClip::kBoundsTolerance, 1000), + SkRect::MakeXYWH(53, 60, GrClip::kBoundsTolerance/2, 1000), + SkRect::MakeXYWH(53, 160, 1000, GrClip::kBoundsTolerance), + SkRect::MakeXYWH(53, 160, 1000, GrClip::kBoundsTolerance/2)}) { + const GrReducedClip reduced(stack, queryBounds); + REPORTER_ASSERT(reporter, !reduced.hasIBounds()); + REPORTER_ASSERT(reporter, reduced.elements().isEmpty()); + REPORTER_ASSERT(reporter, + GrReducedClip::InitialState::kAllOut == reduced.initialState()); + } + } +} + #endif DEF_TEST(ClipStack, reporter) { @@ -1409,6 +1439,7 @@ DEF_TEST(ClipStack, reporter) { test_reduced_clip_stack_genid(reporter); test_reduced_clip_stack_no_aa_crash(reporter); test_reduced_clip_stack_aa(reporter); + test_tiny_query_bounds_assertion_bug(reporter); #endif } -- cgit v1.2.3