aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar Stephen White <senorblanco@chromium.org>2018-07-12 15:54:05 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-13 03:00:24 +0000
commit1c5fd18927d5a128a12d7d5fe27f08d898be1e5b (patch)
tree5e48bba13222c836bf2845f27f644d199580991c /tests
parent9cdbf1942de5f5565f67ad2cd8ed472ff22974b9 (diff)
GrTessellator: missing intersection rewind fix.
Some "missing" intersections (see https://skia.googlesource.com/skia/+/89042d5f13a56d6b663657aa58f17593123a344e) cause the active edge list to go out of order. In that case, we need to rewind the active list, just as we do before edge splitting for regular intersections. BUG=860453 Change-Id: I1f7b32157a73b427a4fd94c14c1eb440f26c0743 Reviewed-on: https://skia-review.googlesource.com/141038 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Stephen White <senorblanco@chromium.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/TessellatingPathRendererTests.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/tests/TessellatingPathRendererTests.cpp b/tests/TessellatingPathRendererTests.cpp
index 2891131f90..4b3b321f17 100644
--- a/tests/TessellatingPathRendererTests.cpp
+++ b/tests/TessellatingPathRendererTests.cpp
@@ -584,6 +584,22 @@ static SkPath create_path_40() {
return path;
}
+// Reduction from crbug.com/860453. Tests a case where a "missing" intersection
+// requires the active edge list to go out-of-order.
+static SkPath create_path_41() {
+ SkPath path;
+ path.moveTo(72154931603311689728.0, 330.95965576171875);
+ path.lineTo(24053266013925408768.0, 78.11376953125);
+ path.lineTo(1.2031099003292404941e+20, 387.168731689453125);
+ path.lineTo(68859835992355373056.0, 346.55047607421875);
+ path.lineTo(76451708695451009024.0, 337.780029296875);
+ path.moveTo(-20815817797613387776.0, 18065700622522384384.0);
+ path.lineTo(-72144121204987396096.0, 142.855804443359375);
+ path.lineTo(72144121204987396096.0, 325.184783935546875);
+ path.lineTo(1.2347242901040791552e+20, 18065700622522384384.0);
+ return path;
+}
+
static std::unique_ptr<GrFragmentProcessor> create_linear_gradient_processor(GrContext* ctx) {
SkPoint pts[2] = { {0, 0}, {1, 1} };
@@ -684,4 +700,5 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(TessellatingPathRendererTests, reporter, ctxInfo) {
test_path(ctx, rtc.get(), create_path_38(), SkMatrix(), GrAAType::kCoverage);
test_path(ctx, rtc.get(), create_path_39());
test_path(ctx, rtc.get(), create_path_40());
+ test_path(ctx, rtc.get(), create_path_41(), SkMatrix(), GrAAType::kCoverage);
}