aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/opts
diff options
context:
space:
mode:
authorGravatar herb <herb@google.com>2016-03-01 07:01:23 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-03-01 07:01:23 -0800
commitfd5a26080d4647cc913f5f2b2dc72cb35abac3ab (patch)
tree97ba6544c28e414c9ac819e6b8d9c389d3fe96b1 /src/opts
parent819ab1028897c7ae8ea07cb342d48118d29daa5d (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.h8
-rw-r--r--src/opts/SkNx_sse.h11
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;