diff options
author | Florin Malita <fmalita@chromium.org> | 2017-01-20 08:41:34 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-01-20 14:22:49 +0000 |
commit | c86e470c190934a2f7680ed10cf9fad757e1ab75 (patch) | |
tree | c16dd1dc2355360285855961b83ab16ebbf05744 /src/core/SkPM4fPriv.h | |
parent | c485907f0420e5f9cf8223e9ba53812cd8dd5368 (diff) |
SkRasterPipeline impl for 2-stop linear gradients
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
Change-Id: Ia2b630cf9c0826fbfc3342707c005030d0529bbc
Reviewed-on: https://skia-review.googlesource.com/7186
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/core/SkPM4fPriv.h')
-rw-r--r-- | src/core/SkPM4fPriv.h | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/core/SkPM4fPriv.h b/src/core/SkPM4fPriv.h index a6232bead5..a08f158deb 100644 --- a/src/core/SkPM4fPriv.h +++ b/src/core/SkPM4fPriv.h @@ -135,22 +135,29 @@ static inline bool append_gamut_transform(SkRasterPipeline* p, SkArenaAlloc* scr return append_gamut_transform(p, scratch->makeArrayDefault<float>(12), src, dst); } -static inline SkColor4f SkColor4f_from_SkColor(SkColor color, SkColorSpace* dst) { - SkColor4f color4f; - if (dst) { - // sRGB gamma, sRGB gamut. - color4f = SkColor4f::FromColor(color); +static inline SkColor4f to_colorspace(const SkColor4f& c, SkColorSpace* src, SkColorSpace* dst) { + SkColor4f color4f = c; + if (src && dst) { void* color4f_ptr = &color4f; float scratch_matrix_3x4[12]; SkRasterPipeline p; p.append(SkRasterPipeline::constant_color, color4f_ptr); - append_gamut_transform(&p, scratch_matrix_3x4, - SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named).get(), dst); + append_gamut_transform(&p, scratch_matrix_3x4, src, dst); p.append(SkRasterPipeline::store_f32, &color4f_ptr); p.run(0,0,1); + } + return color4f; +} + +static inline SkColor4f SkColor4f_from_SkColor(SkColor color, SkColorSpace* dst) { + SkColor4f color4f; + if (dst) { + // sRGB gamma, sRGB gamut. + color4f = to_colorspace(SkColor4f::FromColor(color), + SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named).get(), dst); } else { // Linear gamma, dst gamut. swizzle_rb(SkNx_cast<float>(Sk4b::Load(&color)) * (1/255.0f)).store(&color4f); |