diff options
author | 2016-03-01 07:01:23 -0800 | |
---|---|---|
committer | 2016-03-01 07:01:23 -0800 | |
commit | fd5a26080d4647cc913f5f2b2dc72cb35abac3ab (patch) | |
tree | 97ba6544c28e414c9ac819e6b8d9c389d3fe96b1 /src/opts | |
parent | 819ab1028897c7ae8ea07cb342d48118d29daa5d (diff) |
Add swizzle for rgb8888.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1746153002
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot
Review URL: https://codereview.chromium.org/1746153002
Diffstat (limited to 'src/opts')
-rw-r--r-- | src/opts/SkNx_neon.h | 8 | ||||
-rw-r--r-- | src/opts/SkNx_sse.h | 11 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/opts/SkNx_neon.h b/src/opts/SkNx_neon.h index 1acd7a00f4..52b2e73798 100644 --- a/src/opts/SkNx_neon.h +++ b/src/opts/SkNx_neon.h @@ -305,12 +305,20 @@ public: SkNx(const uint8x8_t& vec) : fVec(vec) {} SkNx() {} + SkNx(uint8_t a, uint8_t b, uint8_t c, uint8_t d) { + fVec = (uint8x8_t){a,b,c,d, 0,0,0,0}; + } static SkNx Load(const void* ptr) { return (uint8x8_t)vld1_dup_u32((const uint32_t*)ptr); } void store(void* ptr) const { return vst1_lane_u32((uint32_t*)ptr, (uint32x2_t)fVec, 0); } + uint8_t operator[](int k) const { + SkASSERT(0 <= k && k < 4); + union { uint8x8_t v; uint8_t us[8]; } pun = {fVec}; + return pun.us[k&3]; + } // TODO as needed diff --git a/src/opts/SkNx_sse.h b/src/opts/SkNx_sse.h index b6da080317..34b58c10ed 100644 --- a/src/opts/SkNx_sse.h +++ b/src/opts/SkNx_sse.h @@ -235,12 +235,21 @@ public: template <> class SkNx<4, uint8_t> { public: + SkNx() {} SkNx(const __m128i& vec) : fVec(vec) {} + SkNx(uint8_t a, uint8_t b, uint8_t c, uint8_t d) + : fVec(_mm_setr_epi8(a,b,c,d, 0,0,0,0, 0,0,0,0, 0,0,0,0)) {} + - SkNx() {} static SkNx Load(const void* ptr) { return _mm_cvtsi32_si128(*(const int*)ptr); } void store(void* ptr) const { *(int*)ptr = _mm_cvtsi128_si32(fVec); } + uint8_t operator[](int k) const { + SkASSERT(0 <= k && k < 4); + union { __m128i v; uint8_t us[16]; } pun = {fVec}; + return pun.us[k&3]; + } + // TODO as needed __m128i fVec; |