Lines Matching refs:src

13 #include "src/core/SkMSAN.h"
25 static inline __m512i SkPMSrcOver_SKX(const __m512i& src, const __m512i& dst) {
35 __m512i srcA_x2 = _mm512_shuffle_epi8(src, _mm512_loadu_si512(mask));
49 return _mm512_add_epi32(src, _mm512_or_si512(rb, ga));
56 static inline __m256i SkPMSrcOver_AVX2(const __m256i& src, const __m256i& dst) {
77 // src channels beyond alpha until the very end when we do the "s + "
82 __m256i srcA_x2 = _mm256_shuffle_epi8(src,
98 return _mm256_add_epi32(src, _mm256_or_si256(rb, ga));
105 static inline __m128i SkPMSrcOver_SSE2(const __m128i& src, const __m128i& dst) {
107 _mm_srli_epi32(src, 24));
118 return _mm_add_epi32(src, _mm_or_si128(rb, ga));
131 static inline uint8x8x4_t SkPMSrcOver_neon8(uint8x8x4_t dst, uint8x8x4_t src) {
132 uint8x8_t nalphas = vmvn_u8(src.val[3]); // 256 - alpha
134 vadd_u8(src.val[0], SkMulDiv255Round_neon8(nalphas, dst.val[0])),
135 vadd_u8(src.val[1], SkMulDiv255Round_neon8(nalphas, dst.val[1])),
136 vadd_u8(src.val[2], SkMulDiv255Round_neon8(nalphas, dst.val[2])),
137 vadd_u8(src.val[3], SkMulDiv255Round_neon8(nalphas, dst.val[3])),
141 // Variant assuming dst and src contain the color components of two consecutive pixels.
142 static inline uint8x8_t SkPMSrcOver_neon2(uint8x8_t dst, uint8x8_t src) {
144 uint8x8_t nalphas = vmvn_u8(vtbl1_u8(src, alpha_indices));
145 return vadd_u8(src, SkMulDiv255Round_neon8(nalphas, dst));
153 inline void blit_row_s32a_opaque(SkPMColor* dst, const SkPMColor* src, int len, U8CPU alpha) {
155 sk_msan_assert_initialized(src, src+len);
160 SkPMSrcOver_SKX(_mm512_loadu_si512((const __m512i*)src),
162 src += 16;
171 SkPMSrcOver_AVX2(_mm256_loadu_si256((const __m256i*)src),
173 src += 8;
181 _mm_storeu_si128((__m128i*)dst, SkPMSrcOver_SSE2(_mm_loadu_si128((const __m128i*)src),
183 src += 4;
192 vld4_u8((const uint8_t*)src)));
193 src += 8;
200 vld1_u8((const uint8_t*)src)));
201 src += 2;
208 vcreate_u8((uint64_t)*src));
215 *dst = SkPMSrcOver(*src, *dst);
216 src++;
221 // Blend constant color over count src pixels, writing into dst.
223 inline void blit_row_color32(SkPMColor* dst, const SkPMColor* src, int count, SkPMColor color) {
229 auto kernel = [color](U32 src) {
234 // (src * invA + (color << 8) + 128) >> 8
236 U8 s = skvx::bit_pun<U8>(src),
244 kernel(U32::Load(src)).store(dst);
245 src += N;
250 *dst++ = kernel(U32{*src++})[0];