Chromium Code Reviews| Index: src/effects/gradients/SkLinearGradient.cpp |
| diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp |
| index a249ae4ac82c2195ce2e559978cf057ce0a8377a..b6bafbf6b0dae40d440a27fcd0d1911ee26c6ec6 100644 |
| --- a/src/effects/gradients/SkLinearGradient.cpp |
| +++ b/src/effects/gradients/SkLinearGradient.cpp |
| @@ -527,11 +527,25 @@ find_backward(const SkLinearGradient::LinearGradientContext::Rec rec[], float ti |
| template <bool apply_alpha> SkPMColor trunc_from_255(const Sk4f& x) { |
| SkPMColor c; |
| + |
| +#ifdef SK_SUPPORT_LEGACY_GRADIENT_PREMUL |
| SkNx_cast<uint8_t>(x).store(&c); |
| if (apply_alpha) { |
| c = SkPreMultiplyARGB(SkGetPackedA32(c), SkGetPackedR32(c), |
| SkGetPackedG32(c), SkGetPackedB32(c)); |
| } |
| +#else |
| + Sk4f c4f255; |
| + if (!apply_alpha) { |
| + c4f255 = x; |
| + } else { |
| + // We have to pin, due to dithering bias. |
| + c4f255 = Sk4f::Min(Sk4f::Max(x, Sk4f(0)), Sk4f(255)); |
|
reed1
2016/10/10 18:20:17
does the store() call also pin? Why don't we have
f(malita)
2016/10/10 18:33:18
Good question.
Doesn't look like it pins, just tr
|
| + const float scale = c4f255[SkPM4f::A] * 1.f / 255; |
| + c4f255 *= Sk4f(scale, scale, scale, 1); |
| + } |
| + SkNx_cast<uint8_t>(c4f255).store(&c); |
| +#endif |
| return c; |
| } |