diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-02-21 03:09:57 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-02-21 03:09:57 +0000 |
commit | 3cd61b33036426ec1876652968bb698f2a992cda (patch) | |
tree | ba0d3fecbf22378a1110ed9d9812342cec21c99a | |
parent | 45f8b7c0956036c0fcfde0856c80c312f9a159e5 (diff) | |
parent | b0a41431eb4473543133fe674fe2abab9811d79e (diff) | |
download | platform_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.txt | 2 | ||||
-rw-r--r-- | src/gpu/gradients/GrLinearGradientLayout.cpp | 6 | ||||
-rw-r--r-- | src/gpu/gradients/GrLinearGradientLayout.fp | 9 |
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 } |