aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2020-02-21 03:09:57 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-02-21 03:09:57 +0000
commit3cd61b33036426ec1876652968bb698f2a992cda (patch)
treeba0d3fecbf22378a1110ed9d9812342cec21c99a
parent45f8b7c0956036c0fcfde0856c80c312f9a159e5 (diff)
parentb0a41431eb4473543133fe674fe2abab9811d79e (diff)
downloadplatform_external_skqp-3cd61b33036426ec1876652968bb698f2a992cda.tar.gz
platform_external_skqp-3cd61b33036426ec1876652968bb698f2a992cda.tar.bz2
platform_external_skqp-3cd61b33036426ec1876652968bb698f2a992cda.zip
Snap for 6224475 from b0a41431eb4473543133fe674fe2abab9811d79e to rvc-release
Change-Id: Ic5f0462c45355b0144a3569b3c56983cc9ddaf28
-rw-r--r--platform_tools/android/apps/skqp/src/main/assets/skqp/rendertests.txt2
-rw-r--r--src/gpu/gradients/GrLinearGradientLayout.cpp6
-rw-r--r--src/gpu/gradients/GrLinearGradientLayout.fp9
3 files changed, 13 insertions, 4 deletions
diff --git a/platform_tools/android/apps/skqp/src/main/assets/skqp/rendertests.txt b/platform_tools/android/apps/skqp/src/main/assets/skqp/rendertests.txt
index 14fa55a3ae..83fb0b764b 100644
--- a/platform_tools/android/apps/skqp/src/main/assets/skqp/rendertests.txt
+++ b/platform_tools/android/apps/skqp/src/main/assets/skqp/rendertests.txt
@@ -560,7 +560,7 @@ savelayer_initfromprev,-1
savelayer_maskfilter,-1
savelayer_unclipped,0
savelayer_with_backdrop,-1
-scale-pixels,0
+scale-pixels,-1
scaled_tilemode_bitmap,0
scaled_tilemode_gradient,0
scaled_tilemodes,1
diff --git a/src/gpu/gradients/GrLinearGradientLayout.cpp b/src/gpu/gradients/GrLinearGradientLayout.cpp
index cd53b36bcd..d809e004b0 100644
--- a/src/gpu/gradients/GrLinearGradientLayout.cpp
+++ b/src/gpu/gradients/GrLinearGradientLayout.cpp
@@ -25,8 +25,10 @@ public:
auto gradientMatrix = _outer.gradientMatrix();
(void)gradientMatrix;
SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]);
- fragBuilder->codeAppendf("half t = half(%s.x);\n%s = half4(t, 1.0, 0.0, 0.0);\n",
- sk_TransformedCoords2D_0.c_str(), args.fOutputColor);
+ fragBuilder->codeAppendf(
+ "half t = half(%s.x) + 1.0000000000000001e-05;\n%s = half4(t, 1.0, 0.0, 0.0);\n",
+ sk_TransformedCoords2D_0.c_str(),
+ args.fOutputColor);
}
private:
diff --git a/src/gpu/gradients/GrLinearGradientLayout.fp b/src/gpu/gradients/GrLinearGradientLayout.fp
index 3a187f321c..bd144316e8 100644
--- a/src/gpu/gradients/GrLinearGradientLayout.fp
+++ b/src/gpu/gradients/GrLinearGradientLayout.fp
@@ -12,7 +12,14 @@ in half4x4 gradientMatrix;
}
void main() {
- half t = sk_TransformedCoords2D[0].x;
+ // We add a tiny delta to t. When gradient stops are set up so that a hard stop in a vertically
+ // or horizontally oriented gradient falls exactly at a column or row of pixel centers we can
+ // we can get slightly different interpolated t values along the column/row. By adding the delta
+ // we will consistently get the color to the "right" of the stop. Of course if the hard stop
+ // falls at X.5 - delta then we still could get inconsistent results, but that is much less
+ // likely. crbug.com/938592
+ // If/when we add filtering of the gradient this can be removed.
+ half t = half(sk_TransformedCoords2D[0].x) + 0.00001;
sk_OutColor = half4(t, 1, 0, 0); // y = 1 for always valid
}