aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar Stephen White <senorblanco@chromium.org>2018-06-29 11:41:59 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-06-29 18:02:27 +0000
commit26bb0e66f28c41cb1e8e39f00d848997fd33d97c (patch)
treea12ba7e5e5dd866b38fbf803dcd4fc151e43ba24 /tests
parent8deab3ac1eefdb2135281d74c9497a326b186c2e (diff)
GrTessellator: handle three consecutive collinear edges.
In some cases, splitting may produce three consecutive edges which are collinear. The first one was being merged out, causing the third one to be missed. The fix is to switch the arguments to merge_edges_*, ensuring that the second parameter (the destination edge) is never merged out. Bug: 851409. Change-Id: I70fbbc506e97a26b259c1443b6d1787adec0f9b0 Reviewed-on: https://skia-review.googlesource.com/138561 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Stephen White <senorblanco@chromium.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/TessellatingPathRendererTests.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/tests/TessellatingPathRendererTests.cpp b/tests/TessellatingPathRendererTests.cpp
index a9913769df..0c7a5ca4c5 100644
--- a/tests/TessellatingPathRendererTests.cpp
+++ b/tests/TessellatingPathRendererTests.cpp
@@ -560,7 +560,7 @@ static SkPath create_path_38() {
return path;
}
-// Reduction from crbug.com/851409.
+// Reduction from crbug.com/851409. Exercises collinear last vertex.
static SkPath create_path_39() {
SkPath path;
path.moveTo(2072553216, 0);
@@ -571,6 +571,18 @@ static SkPath create_path_39() {
return path;
}
+// Another reduction from crbug.com/851409. Exercises two sequential collinear edges.
+static SkPath create_path_40() {
+ SkPath path;
+ path.moveTo(2072553216, 0);
+ path.lineTo(2072553216, 1);
+ path.lineTo(2072553472, -13);
+ path.lineTo(2072553216, 0);
+ path.lineTo(2072553472, -6);
+ path.lineTo(2072553472, -13);
+ return path;
+}
+
static std::unique_ptr<GrFragmentProcessor> create_linear_gradient_processor(GrContext* ctx) {
SkPoint pts[2] = { {0, 0}, {1, 1} };
@@ -670,4 +682,5 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(TessellatingPathRendererTests, reporter, ctxInfo) {
test_path(ctx, rtc.get(), create_path_37());
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());
}