Home | History | Annotate | Download | only in opts

Lines Matching refs:src

28 void blit_row_color32(SkPMColor* dst, const SkPMColor* src, int count, SkPMColor color) {
36 Sk4px::MapSrc(count, dst, src, [&](const Sk4px& src4) -> Sk4px {
57 // In this variant of SkPMSrcOver each NEON register, dst.val[i], src.val[i], contains the value
60 static inline uint8x8x4_t SkPMSrcOver_neon8(uint8x8x4_t dst, uint8x8x4_t src) {
61 uint8x8_t nalphas = vmvn_u8(src.val[3]);
63 result.val[0] = vadd_u8(src.val[0], SkMulDiv255Round_neon8(nalphas, dst.val[0]));
64 result.val[1] = vadd_u8(src.val[1], SkMulDiv255Round_neon8(nalphas, dst.val[1]));
65 result.val[2] = vadd_u8(src.val[2], SkMulDiv255Round_neon8(nalphas, dst.val[2]));
66 result.val[3] = vadd_u8(src.val[3], SkMulDiv255Round_neon8(nalphas, dst.val[3]));
70 // In this variant of SkPMSrcOver dst and src contain the color components of two consecutive
72 static inline uint8x8_t SkPMSrcOver_neon2(uint8x8_t dst, uint8x8_t src) {
74 uint8x8_t nalphas = vmvn_u8(vtbl1_u8(src, alpha_indices));
75 return vadd_u8(src, SkMulDiv255Round_neon8(nalphas, dst));
81 void blit_row_s32a_opaque(SkPMColor* dst, const SkPMColor* src, int len, U8CPU alpha) {
83 sk_msan_assert_initialized(src, src+len);
88 auto s0 = _mm_loadu_si128((const __m128i*)(src) + 0),
89 s1 = _mm_loadu_si128((const __m128i*)(src) + 1),
90 s2 = _mm_loadu_si128((const __m128i*)(src) + 2),
91 s3 = _mm_loadu_si128((const __m128i*)(src) + 3);
98 src += 16;
111 // All 16 source pixels are opaque. SrcOver becomes Src.
116 src += 16;
128 src += 16;
136 auto s0 = _mm_loadu_si128((const __m128i*)(src) + 0),
137 s1 = _mm_loadu_si128((const __m128i*)(src) + 1),
138 s2 = _mm_loadu_si128((const __m128i*)(src) + 2),
139 s3 = _mm_loadu_si128((const __m128i*)(src) + 3);
147 src += 16;
161 // All 16 source pixels are opaque. SrcOver becomes Src.
166 src += 16;
179 src += 16;
193 uint8x8x4_t src_col = vld4_u8(reinterpret_cast<const uint8_t*>(src));
194 src += 8;
220 for (; len >= 2; len -= 2, src += 2, dst += 2) {
221 uint8x8_t src2 = vld1_u8(reinterpret_cast<const uint8_t*>(src));
227 uint8x8_t result = SkPMSrcOver_neon2(vcreate_u8(*dst), vcreate_u8(*src));
236 // the non-premultiplied src values (like 0x00FFFFFF) are coming from.
237 // TODO(mtklein): sort this out and assert *src is premul here.
238 if (*src & 0xFF000000) {
239 *dst = (*src >= 0xFF000000) ? *src : SkPMSrcOver(*src, *dst);
241 src++;