diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkColor.cpp | 2 | ||||
-rw-r--r-- | src/core/SkColorMatrixFilterRowMajor255.cpp | 14 | ||||
-rw-r--r-- | src/core/SkGeometry.cpp | 2 | ||||
-rw-r--r-- | src/core/SkNx.h | 4 | ||||
-rw-r--r-- | src/core/SkPM4fPriv.h | 4 | ||||
-rw-r--r-- | src/core/SkScan_Hairline.cpp | 2 | ||||
-rw-r--r-- | src/core/SkXfermode.cpp | 72 | ||||
-rw-r--r-- | src/core/SkXfermode4f.cpp | 16 | ||||
-rw-r--r-- | src/opts/Sk4px_none.h | 40 | ||||
-rw-r--r-- | src/opts/SkNx_neon.h | 5 | ||||
-rw-r--r-- | src/opts/SkNx_sse.h | 6 | ||||
-rw-r--r-- | src/opts/SkXfermode_opts.h | 2 |
12 files changed, 77 insertions, 92 deletions
diff --git a/src/core/SkColor.cpp b/src/core/SkColor.cpp index d88950b5b0..497c328162 100644 --- a/src/core/SkColor.cpp +++ b/src/core/SkColor.cpp @@ -168,7 +168,7 @@ SkColor4f SkColor4f::Pin(float a, float r, float g, float b) { SkPM4f SkColor4f::premul() const { auto src = Sk4f::Load(this->pin().vec()); - float srcAlpha = src.kth<0>(); // need the pinned version of our alpha + float srcAlpha = src[0]; // need the pinned version of our alpha src = src * Sk4f(1, srcAlpha, srcAlpha, srcAlpha); #ifdef SK_PMCOLOR_IS_BGRA diff --git a/src/core/SkColorMatrixFilterRowMajor255.cpp b/src/core/SkColorMatrixFilterRowMajor255.cpp index ff95bf1ac5..e2545c2af6 100644 --- a/src/core/SkColorMatrixFilterRowMajor255.cpp +++ b/src/core/SkColorMatrixFilterRowMajor255.cpp @@ -66,11 +66,11 @@ static Sk4f scale_rgb(float scale) { } static Sk4f premul(const Sk4f& x) { - return x * scale_rgb(x.kth<SkPM4f::A>()); + return x * scale_rgb(x[SkPM4f::A]); } static Sk4f unpremul(const Sk4f& x) { - return x * scale_rgb(1 / x.kth<SkPM4f::A>()); // TODO: fast/approx invert? + return x * scale_rgb(1 / x[SkPM4f::A]); // TODO: fast/approx invert? } static Sk4f clamp_0_1(const Sk4f& x) { @@ -98,7 +98,7 @@ void filter_span(const float array[], const T src[], int count, T dst[]) { for (int i = 0; i < count; i++) { Sk4f srcf = Adaptor::To4f(src[i]); - float srcA = srcf.kth<SkPM4f::A>(); + float srcA = srcf[SkPM4f::A]; if (0 == srcA) { dst[i] = matrix_translate_pmcolor; @@ -108,10 +108,10 @@ void filter_span(const float array[], const T src[], int count, T dst[]) { srcf = unpremul(srcf); } - Sk4f r4 = srcf.kth<SK_R32_SHIFT/8>(); - Sk4f g4 = srcf.kth<SK_G32_SHIFT/8>(); - Sk4f b4 = srcf.kth<SK_B32_SHIFT/8>(); - Sk4f a4 = srcf.kth<SK_A32_SHIFT/8>(); + Sk4f r4 = srcf[SK_R32_SHIFT/8]; + Sk4f g4 = srcf[SK_G32_SHIFT/8]; + Sk4f b4 = srcf[SK_B32_SHIFT/8]; + Sk4f a4 = srcf[SK_A32_SHIFT/8]; // apply matrix Sk4f dst4 = c0 * r4 + c1 * g4 + c2 * b4 + c3 * a4 + c4; diff --git a/src/core/SkGeometry.cpp b/src/core/SkGeometry.cpp index 809ed199ad..7256b9e517 100644 --- a/src/core/SkGeometry.cpp +++ b/src/core/SkGeometry.cpp @@ -1029,7 +1029,7 @@ void SkConic::chopAt(SkScalar t1, SkScalar t2, SkConic* dst) const { dst->fPts[1] = to_point(bXY / bZZ); dst->fPts[2] = to_point(cXY / cZZ); Sk2s ww = bZZ / (aZZ * cZZ).sqrt(); - dst->fW = ww.kth<0>(); + dst->fW = ww[0]; } SkPoint SkConic::evalAt(SkScalar t) const { diff --git a/src/core/SkNx.h b/src/core/SkNx.h index 166557dda2..4ad119a5da 100644 --- a/src/core/SkNx.h +++ b/src/core/SkNx.h @@ -74,8 +74,6 @@ public: return k < N/2 ? fLo[k] : fHi[k-N/2]; } - template <int k> T kth() const { return (*this)[k]; } - bool allTrue() const { return fLo.allTrue() && fHi.allTrue(); } bool anyTrue() const { return fLo.anyTrue() || fHi.anyTrue(); } SkNx thenElse(const SkNx& t, const SkNx& e) const { @@ -139,8 +137,6 @@ public: return fVal; } - template <int k> T kth() const { return (*this)[k]; } - bool allTrue() const { return fVal != 0; } bool anyTrue() const { return fVal != 0; } SkNx thenElse(const SkNx& t, const SkNx& e) const { return fVal != 0 ? t : e; } diff --git a/src/core/SkPM4fPriv.h b/src/core/SkPM4fPriv.h index 24d073639e..b39891ea20 100644 --- a/src/core/SkPM4fPriv.h +++ b/src/core/SkPM4fPriv.h @@ -10,12 +10,12 @@ #include "SkNx.h" static inline float get_alpha(const Sk4f& f4) { - return f4.kth<SkPM4f::A>(); + return f4[SkPM4f::A]; } static inline Sk4f set_alpha(const Sk4f& f4, float alpha) { static_assert(3 == SkPM4f::A, ""); - return Sk4f(f4.kth<0>(), f4.kth<1>(), f4.kth<2>(), alpha); + return Sk4f(f4[0], f4[1], f4[2], alpha); } static inline uint32_t to_4b(const Sk4f& f4) { diff --git a/src/core/SkScan_Hairline.cpp b/src/core/SkScan_Hairline.cpp index 2b2194b0d3..9b21c421ed 100644 --- a/src/core/SkScan_Hairline.cpp +++ b/src/core/SkScan_Hairline.cpp @@ -326,7 +326,7 @@ static SkRect compute_nocheck_cubic_bounds(const SkPoint pts[4]) { min = Sk2s::Min(min, pair); max = Sk2s::Max(max, pair); } - return { min.kth<0>(), min.kth<1>(), max.kth<0>(), max.kth<1>() }; + return { min[0], min[1], max[0], max[1] }; } static bool is_inverted(const SkRect& r) { diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp index 07c4e168b9..7f89327703 100644 --- a/src/core/SkXfermode.cpp +++ b/src/core/SkXfermode.cpp @@ -50,15 +50,15 @@ static inline int clamp_div255round(int prod) { /////////////////////////////////////////////////////////////////////////////// #include "SkNx.h" -static Sk4f alpha(const Sk4f& color) { return Sk4f(color.kth<3>()); } -static Sk4f inv_alpha(const Sk4f& color) { return Sk4f(1 - color.kth<3>()); } +static Sk4f alpha(const Sk4f& color) { return Sk4f(color[3]); } +static Sk4f inv_alpha(const Sk4f& color) { return Sk4f(1 - color[3]); } static Sk4f pin_1(const Sk4f& value) { return Sk4f::Min(value, Sk4f(1)); } static Sk4f color_alpha(const Sk4f& color, float newAlpha) { - return Sk4f(color.kth<0>(), color.kth<1>(), color.kth<2>(), newAlpha); + return Sk4f(color[0], color[1], color[2], newAlpha); } static Sk4f color_alpha(const Sk4f& color, const Sk4f& newAlpha) { - return color_alpha(color, newAlpha.kth<3>()); + return color_alpha(color, newAlpha[3]); } static Sk4f set_argb(float a, float r, float g, float b) { @@ -264,15 +264,15 @@ static inline void SetLum(float* r, float* g, float* b, float a, float l) { } static Sk4f hue_4f(const Sk4f& s, const Sk4f& d) { - float sa = s.kth<SkPM4f::A>(); - float sr = s.kth<SkPM4f::R>(); - float sg = s.kth<SkPM4f::G>(); - float sb = s.kth<SkPM4f::B>(); + float sa = s[SkPM4f::A]; + float sr = s[SkPM4f::R]; + float sg = s[SkPM4f::G]; + float sb = s[SkPM4f::B]; - float da = d.kth<SkPM4f::A>(); - float dr = d.kth<SkPM4f::R>(); - float dg = d.kth<SkPM4f::G>(); - float db = d.kth<SkPM4f::B>(); + float da = d[SkPM4f::A]; + float dr = d[SkPM4f::R]; + float dg = d[SkPM4f::G]; + float db = d[SkPM4f::B]; float Sr = sr; float Sg = sg; @@ -285,15 +285,15 @@ static Sk4f hue_4f(const Sk4f& s, const Sk4f& d) { } static Sk4f saturation_4f(const Sk4f& s, const Sk4f& d) { - float sa = s.kth<SkPM4f::A>(); - float sr = s.kth<SkPM4f::R>(); - float sg = s.kth<SkPM4f::G>(); - float sb = s.kth<SkPM4f::B>(); + float sa = s[SkPM4f::A]; + float sr = s[SkPM4f::R]; + float sg = s[SkPM4f::G]; + float sb = s[SkPM4f::B]; - float da = d.kth<SkPM4f::A>(); - float dr = d.kth<SkPM4f::R>(); - float dg = d.kth<SkPM4f::G>(); - float db = d.kth<SkPM4f::B>(); + float da = d[SkPM4f::A]; + float dr = d[SkPM4f::R]; + float dg = d[SkPM4f::G]; + float db = d[SkPM4f::B]; float Dr = dr; float Dg = dg; @@ -306,15 +306,15 @@ static Sk4f saturation_4f(const Sk4f& s, const Sk4f& d) { } static Sk4f color_4f(const Sk4f& s, const Sk4f& d) { - float sa = s.kth<SkPM4f::A>(); - float sr = s.kth<SkPM4f::R>(); - float sg = s.kth<SkPM4f::G>(); - float sb = s.kth<SkPM4f::B>(); + float sa = s[SkPM4f::A]; + float sr = s[SkPM4f::R]; + float sg = s[SkPM4f::G]; + float sb = s[SkPM4f::B]; - float da = d.kth<SkPM4f::A>(); - float dr = d.kth<SkPM4f::R>(); - float dg = d.kth<SkPM4f::G>(); - float db = d.kth<SkPM4f::B>(); + float da = d[SkPM4f::A]; + float dr = d[SkPM4f::R]; + float dg = d[SkPM4f::G]; + float db = d[SkPM4f::B]; float Sr = sr; float Sg = sg; @@ -328,15 +328,15 @@ static Sk4f color_4f(const Sk4f& s, const Sk4f& d) { } static Sk4f luminosity_4f(const Sk4f& s, const Sk4f& d) { - float sa = s.kth<SkPM4f::A>(); - float sr = s.kth<SkPM4f::R>(); - float sg = s.kth<SkPM4f::G>(); - float sb = s.kth<SkPM4f::B>(); + float sa = s[SkPM4f::A]; + float sr = s[SkPM4f::R]; + float sg = s[SkPM4f::G]; + float sb = s[SkPM4f::B]; - float da = d.kth<SkPM4f::A>(); - float dr = d.kth<SkPM4f::R>(); - float dg = d.kth<SkPM4f::G>(); - float db = d.kth<SkPM4f::B>(); + float da = d[SkPM4f::A]; + float dr = d[SkPM4f::R]; + float dg = d[SkPM4f::G]; + float db = d[SkPM4f::B]; float Dr = dr; float Dg = dg; diff --git a/src/core/SkXfermode4f.cpp b/src/core/SkXfermode4f.cpp index b7f291371b..1f6c6747bb 100644 --- a/src/core/SkXfermode4f.cpp +++ b/src/core/SkXfermode4f.cpp @@ -203,10 +203,10 @@ template <DstType D> void src_1(const SkXfermode::PM4fState& state, uint32_t dst const Sk4f& s4_255 = s4 * Sk4f(255); while (count >= 4) { Sk4f aa4 = SkNx_cast<float>(Sk4b::Load(aa)) * Sk4f(1/255.f); - Sk4f r0 = lerp(s4_255, to_4f(dst[0]), Sk4f(aa4.kth<0>())) + Sk4f(0.5f); - Sk4f r1 = lerp(s4_255, to_4f(dst[1]), Sk4f(aa4.kth<1>())) + Sk4f(0.5f); - Sk4f r2 = lerp(s4_255, to_4f(dst[2]), Sk4f(aa4.kth<2>())) + Sk4f(0.5f); - Sk4f r3 = lerp(s4_255, to_4f(dst[3]), Sk4f(aa4.kth<3>())) + Sk4f(0.5f); + Sk4f r0 = lerp(s4_255, to_4f(dst[0]), Sk4f(aa4[0])) + Sk4f(0.5f); + Sk4f r1 = lerp(s4_255, to_4f(dst[1]), Sk4f(aa4[1])) + Sk4f(0.5f); + Sk4f r2 = lerp(s4_255, to_4f(dst[2]), Sk4f(aa4[2])) + Sk4f(0.5f); + Sk4f r3 = lerp(s4_255, to_4f(dst[3]), Sk4f(aa4[3])) + Sk4f(0.5f); Sk4f_ToBytes((uint8_t*)dst, r0, r1, r2, r3); dst += 4; @@ -221,10 +221,10 @@ template <DstType D> void src_1(const SkXfermode::PM4fState& state, uint32_t dst * it would be faster (and possibly allow more code sharing with kLinear) to * stay in that space. */ - Sk4f r0 = lerp(s4, load_dst<D>(dst[0]), Sk4f(aa4.kth<0>())); - Sk4f r1 = lerp(s4, load_dst<D>(dst[1]), Sk4f(aa4.kth<1>())); - Sk4f r2 = lerp(s4, load_dst<D>(dst[2]), Sk4f(aa4.kth<2>())); - Sk4f r3 = lerp(s4, load_dst<D>(dst[3]), Sk4f(aa4.kth<3>())); + Sk4f r0 = lerp(s4, load_dst<D>(dst[0]), Sk4f(aa4[0])); + Sk4f r1 = lerp(s4, load_dst<D>(dst[1]), Sk4f(aa4[1])); + Sk4f r2 = lerp(s4, load_dst<D>(dst[2]), Sk4f(aa4[2])); + Sk4f r3 = lerp(s4, load_dst<D>(dst[3]), Sk4f(aa4[3])); Sk4f_ToBytes((uint8_t*)dst, linear_unit_to_srgb_255f(r0), linear_unit_to_srgb_255f(r1), diff --git a/src/opts/Sk4px_none.h b/src/opts/Sk4px_none.h index b43ee875b2..10c3dedd0f 100644 --- a/src/opts/Sk4px_none.h +++ b/src/opts/Sk4px_none.h @@ -40,10 +40,10 @@ inline void Sk4px::store2(SkPMColor px[2]) const { memcpy(px, this, 8); } inline void Sk4px::store1(SkPMColor px[1]) const { memcpy(px, this, 4); } inline Sk4px::Wide Sk4px::widenLo() const { - return Sk16h(this->kth< 0>(), this->kth< 1>(), this->kth< 2>(), this->kth< 3>(), - this->kth< 4>(), this->kth< 5>(), this->kth< 6>(), this->kth< 7>(), - this->kth< 8>(), this->kth< 9>(), this->kth<10>(), this->kth<11>(), - this->kth<12>(), this->kth<13>(), this->kth<14>(), this->kth<15>()); + return Sk16h((*this)[ 0], (*this)[ 1], (*this)[ 2], (*this)[ 3], + (*this)[ 4], (*this)[ 5], (*this)[ 6], (*this)[ 7], + (*this)[ 8], (*this)[ 9], (*this)[10], (*this)[11], + (*this)[12], (*this)[13], (*this)[14], (*this)[15]); } inline Sk4px::Wide Sk4px::widenHi() const { return this->widenLo() << 8; } @@ -56,10 +56,10 @@ inline Sk4px::Wide Sk4px::mulWiden(const Sk16b& other) const { inline Sk4px Sk4px::Wide::addNarrowHi(const Sk16h& other) const { Sk4px::Wide r = (*this + other) >> 8; - return Sk16b(r.kth< 0>(), r.kth< 1>(), r.kth< 2>(), r.kth< 3>(), - r.kth< 4>(), r.kth< 5>(), r.kth< 6>(), r.kth< 7>(), - r.kth< 8>(), r.kth< 9>(), r.kth<10>(), r.kth<11>(), - r.kth<12>(), r.kth<13>(), r.kth<14>(), r.kth<15>()); + return Sk16b(r[ 0], r[ 1], r[ 2], r[ 3], + r[ 4], r[ 5], r[ 6], r[ 7], + r[ 8], r[ 9], r[10], r[11], + r[12], r[13], r[14], r[15]); } inline Sk4px Sk4px::Wide::div255() const { @@ -70,10 +70,10 @@ inline Sk4px Sk4px::Wide::div255() const { inline Sk4px Sk4px::alphas() const { static_assert(SK_A32_SHIFT == 24, "This method assumes little-endian."); - return Sk16b(this->kth< 3>(), this->kth< 3>(), this->kth< 3>(), this->kth< 3>(), - this->kth< 7>(), this->kth< 7>(), this->kth< 7>(), this->kth< 7>(), - this->kth<11>(), this->kth<11>(), this->kth<11>(), this->kth<11>(), - this->kth<15>(), this->kth<15>(), this->kth<15>(), this->kth<15>()); + return Sk16b((*this)[ 3], (*this)[ 3], (*this)[ 3], (*this)[ 3], + (*this)[ 7], (*this)[ 7], (*this)[ 7], (*this)[ 7], + (*this)[11], (*this)[11], (*this)[11], (*this)[11], + (*this)[15], (*this)[15], (*this)[15], (*this)[15]); } inline Sk4px Sk4px::Load4Alphas(const SkAlpha a[4]) { @@ -92,18 +92,18 @@ inline Sk4px Sk4px::Load2Alphas(const SkAlpha a[2]) { inline Sk4px Sk4px::zeroAlphas() const { static_assert(SK_A32_SHIFT == 24, "This method assumes little-endian."); - return Sk16b(this->kth< 0>(), this->kth< 1>(), this->kth< 2>(), 0, - this->kth< 4>(), this->kth< 5>(), this->kth< 6>(), 0, - this->kth< 8>(), this->kth< 9>(), this->kth<10>(), 0, - this->kth<12>(), this->kth<13>(), this->kth<14>(), 0); + return Sk16b((*this)[ 0], (*this)[ 1], (*this)[ 2], 0, + (*this)[ 4], (*this)[ 5], (*this)[ 6], 0, + (*this)[ 8], (*this)[ 9], (*this)[10], 0, + (*this)[12], (*this)[13], (*this)[14], 0); } inline Sk4px Sk4px::zeroColors() const { static_assert(SK_A32_SHIFT == 24, "This method assumes little-endian."); - return Sk16b(0,0,0, this->kth< 3>(), - 0,0,0, this->kth< 7>(), - 0,0,0, this->kth<11>(), - 0,0,0, this->kth<15>()); + return Sk16b(0,0,0, (*this)[ 3], + 0,0,0, (*this)[ 7], + 0,0,0, (*this)[11], + 0,0,0, (*this)[15]); } } // namespace diff --git a/src/opts/SkNx_neon.h b/src/opts/SkNx_neon.h index be37baf3cb..1acd7a00f4 100644 --- a/src/opts/SkNx_neon.h +++ b/src/opts/SkNx_neon.h @@ -111,7 +111,6 @@ public: union { float32x2_t v; float fs[2]; } pun = {fVec}; return pun.fs[k&1]; } - template <int k> float kth() const { return (*this)[k]; } bool allTrue() const { auto v = vreinterpret_u32_f32(fVec); @@ -203,7 +202,6 @@ public: union { float32x4_t v; float fs[4]; } pun = {fVec}; return pun.fs[k&3]; } - template <int k> float kth() const { return (*this)[k]; } bool allTrue() const { auto v = vreinterpretq_u32_f32(fVec); @@ -255,7 +253,6 @@ public: union { uint16x4_t v; uint16_t us[4]; } pun = {fVec}; return pun.us[k&3]; } - template <int k> uint16_t kth() const { return (*this)[k]; } SkNx thenElse(const SkNx& t, const SkNx& e) const { return vbsl_u16(fVec, t.fVec, e.fVec); @@ -294,7 +291,6 @@ public: union { uint16x8_t v; uint16_t us[8]; } pun = {fVec}; return pun.us[k&7]; } - template <int k> uint16_t kth() const { return (*this)[k]; } SkNx thenElse(const SkNx& t, const SkNx& e) const { return vbslq_u16(fVec, t.fVec, e.fVec); @@ -352,7 +348,6 @@ public: union { uint8x16_t v; uint8_t us[16]; } pun = {fVec}; return pun.us[k&15]; } - template <int k> uint8_t kth() const { return (*this)[k]; } SkNx thenElse(const SkNx& t, const SkNx& e) const { return vbslq_u8(fVec, t.fVec, e.fVec); diff --git a/src/opts/SkNx_sse.h b/src/opts/SkNx_sse.h index be521a1a31..b6da080317 100644 --- a/src/opts/SkNx_sse.h +++ b/src/opts/SkNx_sse.h @@ -65,7 +65,6 @@ public: union { __m128 v; float fs[4]; } pun = {fVec}; return pun.fs[k&1]; } - template <int k> float kth() const { return (*this)[k]; } bool allTrue() const { return 0xff == (_mm_movemask_epi8(_mm_castps_si128(fVec)) & 0xff); } bool anyTrue() const { return 0x00 != (_mm_movemask_epi8(_mm_castps_si128(fVec)) & 0xff); } @@ -117,7 +116,6 @@ public: union { __m128 v; float fs[4]; } pun = {fVec}; return pun.fs[k&3]; } - template <int k> float kth() const { return (*this)[k]; } bool allTrue() const { return 0xffff == _mm_movemask_epi8(_mm_castps_si128(fVec)); } bool anyTrue() const { return 0x0000 != _mm_movemask_epi8(_mm_castps_si128(fVec)); } @@ -159,7 +157,6 @@ public: union { __m128i v; int is[4]; } pun = {fVec}; return pun.is[k&3]; } - template <int k> int kth() const { return (*this)[k]; } __m128i fVec; }; @@ -188,7 +185,6 @@ public: union { __m128i v; uint16_t us[8]; } pun = {fVec}; return pun.us[k&3]; } - template <int k> uint16_t kth() const { return (*this)[k]; } __m128i fVec; }; @@ -232,7 +228,6 @@ public: union { __m128i v; uint16_t us[8]; } pun = {fVec}; return pun.us[k&7]; } - template <int k> uint16_t kth() const { return (*this)[k]; } __m128i fVec; }; @@ -284,7 +279,6 @@ public: union { __m128i v; uint8_t us[16]; } pun = {fVec}; return pun.us[k&15]; } - template <int k> uint8_t kth() const { return (*this)[k]; } SkNx thenElse(const SkNx& t, const SkNx& e) const { return _mm_or_si128(_mm_and_si128 (fVec, t.fVec), diff --git a/src/opts/SkXfermode_opts.h b/src/opts/SkXfermode_opts.h index b049c6315c..8b64d0b74a 100644 --- a/src/opts/SkXfermode_opts.h +++ b/src/opts/SkXfermode_opts.h @@ -122,7 +122,7 @@ static inline Sk4f a_rgb(const Sk4f& a, const Sk4f& rgb) { return a * Sk4f(0,0,0,1) + rgb * Sk4f(1,1,1,0); } static inline Sk4f alphas(const Sk4f& f) { - return f.kth<SK_A32_SHIFT/8>(); + return f[SK_A32_SHIFT/8]; } XFERMODE(ColorDodge) { |