diff options
author | mtklein <mtklein@chromium.org> | 2015-12-01 07:10:21 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-01 07:10:21 -0800 |
commit | 9db43ac4ee1a83a4f7b332fe6c00f592b6237349 (patch) | |
tree | ce3b9eedc76bf142d31325d041295097774fee5c /src/core | |
parent | eeebdb538d476c1bfc8b63a946094ca1b505ecd1 (diff) |
Add Sk4f::ToBytes(uint8_t[16], Sk4f, Sk4f, Sk4f, Sk4f)
This is a big speedup for float -> byte. E.g. gradient_linear_clamp_3color:
x86-64 147µs -> 103µs (Broadwell MBP)
arm64 2.03ms -> 648µs (Galaxy S6)
armv7 1.12ms -> 489µs (Galaxy S6, same device!)
BUG=skia:
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot;client.skia.android:Test-Android-GCC-Nexus9-CPU-Denver-Arm64-Debug-Trybot
Review URL: https://codereview.chromium.org/1483953002
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkNx.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/core/SkNx.h b/src/core/SkNx.h index b9b67704d4..36a645cac1 100644 --- a/src/core/SkNx.h +++ b/src/core/SkNx.h @@ -113,6 +113,15 @@ public: fHi.toBytes(bytes+N/2); } + // Some implementations can do this faster. + static void ToBytes(uint8_t bytes[4*N], + const SkNx& a, const SkNx& b, const SkNx& c, const SkNx& d) { + a.toBytes(bytes+0*N); + b.toBytes(bytes+1*N); + c.toBytes(bytes+2*N); + d.toBytes(bytes+3*N); + } + SkNx operator + (const SkNx& o) const { return SkNx(fLo + o.fLo, fHi + o.fHi); } SkNx operator - (const SkNx& o) const { return SkNx(fLo - o.fLo, fHi - o.fHi); } SkNx operator * (const SkNx& o) const { return SkNx(fLo * o.fLo, fHi * o.fHi); } |