use new shuffle to speed up affine matrix mappts
sse: 25 -> 18 neon: 95 -> 86 BUG=skia: Review URL: https://codereview.chromium.org/1333983002
This commit is contained in:
parent
2bd5d02472
commit
e70afc9f48
@ -89,12 +89,11 @@ static void matrix_affine(const SkMatrix& m, SkPoint* dst, const SkPoint* src, i
|
||||
}
|
||||
Sk4s trans4(tx, ty, tx, ty);
|
||||
Sk4s scale4(sx, sy, sx, sy);
|
||||
Sk4s skew4(kx, ky, kx, ky); // applied to swizzle of src4
|
||||
Sk4s skew4(ky, kx, ky, kx); // applied src4, then x/y swapped
|
||||
count >>= 1;
|
||||
for (int i = 0; i < count; ++i) {
|
||||
Sk4s src4 = Sk4s::Load(&src->fX);
|
||||
Sk4s swz4(src[0].fY, src[0].fX, src[1].fY, src[1].fX); // need ABCD -> BADC
|
||||
(src4 * scale4 + swz4 * skew4 + trans4).store(&dst->fX);
|
||||
(trans4 + src4 * scale4 + SkNx_shuffle<1,0,3,2>(src4 * skew4)).store(&dst->fX);
|
||||
src += 2;
|
||||
dst += 2;
|
||||
}
|
||||
|
@ -396,6 +396,11 @@ public:
|
||||
#undef SHIFT16
|
||||
#undef SHIFT8
|
||||
|
||||
template <>
|
||||
inline SkNf<4,float> SkNx_shuffle_impl<SkNf<4,float>, 1,0,3,2>(const SkNf<4,float>& src) {
|
||||
return vrev64q_f32(src.fVec);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
#endif//SkNx_neon_DEFINED
|
||||
|
Loading…
Reference in New Issue
Block a user