In GrAAConvexPathRenderer use a slightly smaller very large negative float.
This fixes in issue on some mobile gpu's where the larger negative value
caused precision issues when trying to interpolate.
Change-Id: Id76e6f96be2a7e46720794f54c24dafe567c5836
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/284956
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
(cherry picked from commit 1204c4bc3826414e34c8fb93aca7376cbd8fc36c)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/285416
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index d68ce5f..bb08cc4 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -472,24 +472,27 @@
color, skipUVs,
-segb.fNorms[0].dot(qpts[2]) + c0,
0.0f);
-
+ // We need a negative value that is very large that it won't effect results if it is
+ // interpolated with. However, the value can't be too large of a negative that it
+ // effects numerical precision on less powerful GPUs.
+ static const SkScalar kStableLargeNegativeValue = -SK_ScalarMax/1000000;
verts.write(qpts[0] + segb.fNorms[0],
color, skipUVs,
- -SK_ScalarMax/100,
- -SK_ScalarMax/100);
+ kStableLargeNegativeValue,
+ kStableLargeNegativeValue);
verts.write(qpts[2] + segb.fNorms[1],
color, skipUVs,
- -SK_ScalarMax/100,
- -SK_ScalarMax/100);
+ kStableLargeNegativeValue,
+ kStableLargeNegativeValue);
SkVector midVec = segb.fNorms[0] + segb.fNorms[1];
midVec.normalize();
verts.write(qpts[1] + midVec,
color, skipUVs,
- -SK_ScalarMax/100,
- -SK_ScalarMax/100);
+ kStableLargeNegativeValue,
+ kStableLargeNegativeValue);
GrPathUtils::QuadUVMatrix toUV(qpts);
toUV.apply(quadVertsBegin, 6, vertexStride, uvOffset);