aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/SkColor.cpp2
-rw-r--r--src/core/SkColorMatrixFilterRowMajor255.cpp14
-rw-r--r--src/core/SkGeometry.cpp2
-rw-r--r--src/core/SkNx.h4
-rw-r--r--src/core/SkPM4fPriv.h4
-rw-r--r--src/core/SkScan_Hairline.cpp2
-rw-r--r--src/core/SkXfermode.cpp72
-rw-r--r--src/core/SkXfermode4f.cpp16
-rw-r--r--src/opts/Sk4px_none.h40
-rw-r--r--src/opts/SkNx_neon.h5
-rw-r--r--src/opts/SkNx_sse.h6
-rw-r--r--src/opts/SkXfermode_opts.h2
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) {