aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkPM4fPriv.h
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2017-01-20 08:41:34 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-20 14:22:49 +0000
commitc86e470c190934a2f7680ed10cf9fad757e1ab75 (patch)
treec16dd1dc2355360285855961b83ab16ebbf05744 /src/core/SkPM4fPriv.h
parentc485907f0420e5f9cf8223e9ba53812cd8dd5368 (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.h21
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);