diff options
author | 2016-01-31 08:02:47 -0800 | |
---|---|---|
committer | 2016-01-31 08:02:47 -0800 | |
commit | 507ef6d68115ae9e6d884bb36436a1463523d893 (patch) | |
tree | 67a2aabdf43f8dab134b2f08240d511dd1113af1 /src/core/SkNx.h | |
parent | b1c32b7bde01e74ea59a9c0182c47cef862ef1c5 (diff) |
SkNx Load/store: take any pointer.
This means we can remove a lot of explicit casts in code that uses SkNx.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1650653002
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot
Review URL: https://codereview.chromium.org/1650653002
Diffstat (limited to 'src/core/SkNx.h')
-rw-r--r-- | src/core/SkNx.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/core/SkNx.h b/src/core/SkNx.h index 2bbd495ce5..4cb15dffe7 100644 --- a/src/core/SkNx.h +++ b/src/core/SkNx.h @@ -32,7 +32,8 @@ public: SkNx() {} SkNx(const SkNx<N/2, T>& lo, const SkNx<N/2, T>& hi) : fLo(lo), fHi(hi) {} SkNx(T val) : fLo(val), fHi(val) {} - static SkNx Load(const T vals[N]) { + static SkNx Load(const void* ptr) { + auto vals = (const T*)ptr; return SkNx(SkNx<N/2,T>::Load(vals), SkNx<N/2,T>::Load(vals+N/2)); } @@ -43,7 +44,8 @@ public: T i, T j, T k, T l, T m, T n, T o, T p) : fLo(a,b,c,d, e,f,g,h), fHi(i,j,k,l, m,n,o,p) { REQUIRE(N==16); } - void store(T vals[N]) const { + void store(void* ptr) const { + auto vals = (T*)ptr; fLo.store(vals); fHi.store(vals+N/2); } @@ -108,9 +110,15 @@ class SkNx<1,T> { public: SkNx() {} SkNx(T val) : fVal(val) {} - static SkNx Load(const T vals[1]) { return SkNx(vals[0]); } + static SkNx Load(const void* ptr) { + auto vals = (const T*)ptr; + return SkNx(vals[0]); + } - void store(T vals[1]) const { vals[0] = fVal; } + void store(void* ptr) const { + auto vals = (T*) ptr; + vals[0] = fVal; + } SkNx saturatedAdd(const SkNx& o) const { SkASSERT((T)(~0) > 0); // TODO: support signed T |