22#include <QtCore/private/qsimd_p.h>
23#include <QtGui/private/qtguiglobal_p.h>
29 return QRgba64::fromRgba64(rgba64.red(), rgba64.green(), rgba64.blue(), (rgba64.alpha() * alpha256) >> 8);
33static inline __m128i
Q_DECL_VECTORCALL multiplyAlpha65535(__m128i rgba64, __m128i va)
36 vs = _mm_unpacklo_epi16(_mm_mullo_epi16(vs, va), _mm_mulhi_epu16(vs, va));
37 vs = _mm_add_epi32(vs, _mm_srli_epi32(vs, 16));
38 vs = _mm_add_epi32(vs, _mm_set1_epi32(0x8000));
39 vs = _mm_srai_epi32(vs, 16);
40 vs = _mm_packs_epi32(vs, vs);
43static inline __m128i
Q_DECL_VECTORCALL multiplyAlpha65535(__m128i rgba64, uint alpha65535)
45 const __m128i va = _mm_shufflelo_epi16(_mm_cvtsi32_si128(alpha65535), _MM_SHUFFLE(0, 0, 0, 0));
46 return multiplyAlpha65535(rgba64, va);
48#elif defined(__ARM_NEON__)
49static inline uint16x4_t multiplyAlpha65535(uint16x4_t rgba64, uint16x4_t alpha65535)
51 uint32x4_t vs32 = vmull_u16(rgba64, alpha65535);
52 vs32 = vsraq_n_u32(vs32, vs32, 16);
53 return vrshrn_n_u32(vs32, 16);
55static inline uint16x4_t multiplyAlpha65535(uint16x4_t rgba64, uint alpha65535)
57 uint32x4_t vs32 = vmull_n_u16(rgba64, alpha65535);
58 vs32 = vsraq_n_u32(vs32, vs32, 16);
59 return vrshrn_n_u32(vs32, 16);
61#elif defined(__loongarch_sx)
62static inline __m128i Q_DECL_VECTORCALL multiplyAlpha65535(__m128i rgba64, __m128i va)
65 vs = __lsx_vilvl_h(__lsx_vmuh_hu(vs, va), __lsx_vmul_h(vs, va));
66 vs = __lsx_vadd_w(vs, __lsx_vsrli_w(vs, 16));
67 vs = __lsx_vadd_w(vs, __lsx_vreplgr2vr_w(0x8000));
68 vs = __lsx_vsrai_w(vs, 16);
69 vs = __lsx_vpickev_h(__lsx_vsat_w(vs, 15), __lsx_vsat_w(vs, 15));
72static inline __m128i Q_DECL_VECTORCALL multiplyAlpha65535(__m128i rgba64, uint alpha65535)
74 const __m128i shuffleMask = (__m128i)(v8i16){0, 0, 0, 0, 4, 5, 6, 7};
75 const __m128i va = __lsx_vshuf_h(shuffleMask, __lsx_vldi(0),
76 __lsx_vinsgr2vr_w(__lsx_vldi(0), alpha65535, 0));
77 return multiplyAlpha65535(rgba64, va);
84 const __m128i v = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&rgba64));
85 const __m128i vr = multiplyAlpha65535(v, alpha65535);
87 _mm_storel_epi64(
reinterpret_cast<__m128i *>(&r), vr);
89#elif defined(__ARM_NEON__)
90 const uint16x4_t v = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&rgba64)));
91 const uint16x4_t vr = multiplyAlpha65535(v, alpha65535);
93 vst1_u64(
reinterpret_cast<uint64_t *>(&r), vreinterpret_u64_u16(vr));
95#elif defined(__loongarch_sx)
96 const __m128i v = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&rgba64), 0);
97 const __m128i vr = multiplyAlpha65535(v, alpha65535);
99 __lsx_vstelm_d(vr,
reinterpret_cast<__m128i *>(&r), 0, 0);
102 return QRgba64::fromRgba64(qt_div_65535(rgba64.red() * alpha65535),
103 qt_div_65535(rgba64.green() * alpha65535),
104 qt_div_65535(rgba64.blue() * alpha65535),
105 qt_div_65535(rgba64.alpha() * alpha65535));
109#if defined(__SSE2__
) || defined(__ARM_NEON__) || defined(__loongarch_sx)
113 return multiplyAlpha65535(rgba64, alpha255 * 257);
117static inline T multiplyAlpha255(T rgba64, uint alpha255)
119 return QRgba64::fromRgba64(qt_div_255(rgba64.red() * alpha255),
120 qt_div_255(rgba64.green() * alpha255),
121 qt_div_255(rgba64.blue() * alpha255),
122 qt_div_255(rgba64.alpha() * alpha255));
127static inline __m128i
Q_DECL_VECTORCALL interpolate255(__m128i x, uint alpha1, __m128i y, uint alpha2)
129 return _mm_add_epi16(multiplyAlpha255(x, alpha1), multiplyAlpha255(y, alpha2));
133#if defined __ARM_NEON__
134inline uint16x4_t interpolate255(uint16x4_t x, uint alpha1, uint16x4_t y, uint alpha2)
136 return vadd_u16(multiplyAlpha255(x, alpha1), multiplyAlpha255(y, alpha2));
140#if defined __loongarch_sx
141static inline __m128i Q_DECL_VECTORCALL
142interpolate255(__m128i x, uint alpha1, __m128i y, uint alpha2)
144 return __lsx_vadd_h(multiplyAlpha255(x, alpha1), multiplyAlpha255(y, alpha2));
151 const __m128i vx = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&x));
152 const __m128i vy = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&y));
153 const __m128i vr = interpolate255(vx, alpha1, vy, alpha2);
155 _mm_storel_epi64(
reinterpret_cast<__m128i *>(&r), vr);
157#elif defined(__ARM_NEON__)
158 const uint16x4_t vx = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&x)));
159 const uint16x4_t vy = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&y)));
160 const uint16x4_t vr = interpolate255(vx, alpha1, vy, alpha2);
162 vst1_u64(
reinterpret_cast<uint64_t *>(&r), vreinterpret_u64_u16(vr));
164#elif defined(__loongarch_sx)
165 const __m128i vx = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&x), 0);
166 const __m128i vy = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&y), 0);
167 const __m128i vr = interpolate255(vx, alpha1, vy, alpha2);
169 __lsx_vstelm_d(vr,
reinterpret_cast<__m128i *>(&r), 0, 0);
172 return QRgba64::fromRgba64(multiplyAlpha255(x, alpha1) + multiplyAlpha255(y, alpha2));
177static inline __m128i
Q_DECL_VECTORCALL interpolate65535(__m128i x, uint alpha1, __m128i y, uint alpha2)
179 return _mm_add_epi16(multiplyAlpha65535(x, alpha1), multiplyAlpha65535(y, alpha2));
182static inline __m128i
Q_DECL_VECTORCALL interpolate65535(__m128i x, __m128i alpha1, __m128i y, __m128i alpha2)
184 return _mm_add_epi16(multiplyAlpha65535(x, alpha1), multiplyAlpha65535(y, alpha2));
188#if defined __ARM_NEON__
189inline uint16x4_t interpolate65535(uint16x4_t x, uint alpha1, uint16x4_t y, uint alpha2)
191 return vadd_u16(multiplyAlpha65535(x, alpha1), multiplyAlpha65535(y, alpha2));
193inline uint16x4_t interpolate65535(uint16x4_t x, uint16x4_t alpha1, uint16x4_t y, uint16x4_t alpha2)
195 return vadd_u16(multiplyAlpha65535(x, alpha1), multiplyAlpha65535(y, alpha2));
199#if defined __loongarch_sx
200static inline __m128i Q_DECL_VECTORCALL interpolate65535(__m128i x, uint alpha1, __m128i y, uint alpha2)
202 return __lsx_vadd_h(multiplyAlpha65535(x, alpha1), multiplyAlpha65535(y, alpha2));
205static inline __m128i Q_DECL_VECTORCALL interpolate65535(__m128i x, __m128i alpha1, __m128i y, __m128i alpha2)
207 return __lsx_vadd_h(multiplyAlpha65535(x, alpha1), multiplyAlpha65535(y, alpha2));
214 const __m128i vx = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&x));
215 const __m128i vy = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&y));
216 const __m128i vr = interpolate65535(vx, alpha1, vy, alpha2);
218 _mm_storel_epi64(
reinterpret_cast<__m128i *>(&r), vr);
220#elif defined(__ARM_NEON__)
221 const uint16x4_t vx = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&x)));
222 const uint16x4_t vy = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&y)));
223 const uint16x4_t vr = interpolate65535(vx, alpha1, vy, alpha2);
225 vst1_u64(
reinterpret_cast<uint64_t *>(&r), vreinterpret_u64_u16(vr));
227#elif defined(__loongarch_sx)
228 const __m128i vx = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&x), 0);
229 const __m128i vy = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&y), 0);
230 const __m128i vr = interpolate65535(vx, alpha1, vy, alpha2);
232 __lsx_vstelm_d(vr,
reinterpret_cast<__m128i *>(&r), 0, 0);
235 return QRgba64::fromRgba64(multiplyAlpha65535(x, alpha1) + multiplyAlpha65535(y, alpha2));
242 const __m128i va = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&a));
243 const __m128i vb = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&b));
244 const __m128i vr = _mm_adds_epu16(va, vb);
246 _mm_storel_epi64(
reinterpret_cast<__m128i *>(&r), vr);
248#elif defined(__ARM_NEON__)
249 const uint16x4_t va = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&a)));
250 const uint16x4_t vb = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&b)));
252 vst1_u64(
reinterpret_cast<uint64_t *>(&r), vreinterpret_u64_u16(vqadd_u16(va, vb)));
254#elif defined(__loongarch_sx)
255 const __m128i va = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&a), 0);
256 const __m128i vb = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&b), 0);
257 const __m128i vr = __lsx_vsadd_hu(va, vb);
259 __lsx_vstelm_d(vr,
reinterpret_cast<__m128i *>(&r), 0, 0);
263 return QRgba64::fromRgba64(qMin(a.red() + b.red(), 65535),
264 qMin(a.green() + b.green(), 65535),
265 qMin(a.blue() + b.blue(), 65535),
266 qMin(a.alpha() + b.alpha(), 65535));
270#if QT_COMPILER_SUPPORTS_HERE(SSE2)
271QT_FUNCTION_TARGET(SSE2)
272static inline uint Q_DECL_VECTORCALL toArgb32(__m128i v)
274 v = _mm_unpacklo_epi16(v, _mm_setzero_si128());
275 v = _mm_add_epi32(v, _mm_set1_epi32(128));
276 v = _mm_sub_epi32(v, _mm_srli_epi32(v, 8));
277 v = _mm_srli_epi32(v, 8);
278 v = _mm_packs_epi32(v, v);
279 v = _mm_packus_epi16(v, v);
280 return _mm_cvtsi128_si32(v);
282#elif defined __ARM_NEON__
283static inline uint toArgb32(uint16x4_t v)
285 v = vsub_u16(v, vrshr_n_u16(v, 8));
286 v = vrshr_n_u16(v, 8);
287 uint8x8_t v8 = vmovn_u16(vcombine_u16(v, v));
288 return vget_lane_u32(vreinterpret_u32_u8(v8), 0);
290#elif defined __loongarch_sx
291static inline uint Q_DECL_VECTORCALL toArgb32(__m128i v)
293 v = __lsx_vilvl_h(__lsx_vldi(0), v);
294 v = __lsx_vadd_w(v, __lsx_vreplgr2vr_w(128));
295 v = __lsx_vsub_w(v, __lsx_vsrli_w(v, 8));
296 v = __lsx_vsrli_w(v, 8);
297 v = __lsx_vpickev_h(__lsx_vsat_w(v, 15), __lsx_vsat_w(v, 15));
298 __m128i tmp = __lsx_vmaxi_h(v, 0);
299 v = __lsx_vpickev_b(__lsx_vsat_hu(tmp, 7), __lsx_vsat_hu(tmp, 7));
300 return __lsx_vpickve2gr_w(v, 0);
307 __m128i v = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&rgba64));
308 v = _mm_shufflelo_epi16(v, _MM_SHUFFLE(3, 0, 1, 2));
310#elif defined __ARM_NEON__
311 uint16x4_t v = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&rgba64)));
312#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
313 const uint8x8_t shuffleMask = qvset_n_u8(4, 5, 2, 3, 0, 1, 6, 7);
314 v = vreinterpret_u16_u8(vtbl1_u8(vreinterpret_u8_u16(v), shuffleMask));
316 v = vext_u16(v, v, 3);
319#elif defined __loongarch_sx
320 __m128i v = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&rgba64), 0);
321 const __m128i shuffleMask = (__m128i)(v8i16){2, 1, 0, 3, 4, 5, 6, 7};
322 v = __lsx_vshuf_h(shuffleMask, __lsx_vldi(0), v);
325 return rgba64.toArgb32();
332 __m128i v = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&rgba64));
334#elif defined __ARM_NEON__
335 uint16x4_t v = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&rgba64)));
337#elif defined __loongarch_sx
338 __m128i v = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&rgba64), 0);
341 return ARGB2RGBA(toArgb32(rgba64));
349 __m128i vd = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&d));
350 __m128i vs = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&s));
351 __m128i va = _mm_cvtsi32_si128(rgbAlpha);
352 va = _mm_unpacklo_epi8(va, va);
353 va = _mm_shufflelo_epi16(va, _MM_SHUFFLE(3, 0, 1, 2));
354 __m128i vb = _mm_xor_si128(_mm_set1_epi16(-1), va);
356 vs = _mm_unpacklo_epi16(_mm_mullo_epi16(vs, va), _mm_mulhi_epu16(vs, va));
357 vd = _mm_unpacklo_epi16(_mm_mullo_epi16(vd, vb), _mm_mulhi_epu16(vd, vb));
358 vd = _mm_add_epi32(vd, vs);
359 vd = _mm_add_epi32(vd, _mm_srli_epi32(vd, 16));
360 vd = _mm_add_epi32(vd, _mm_set1_epi32(0x8000));
361 vd = _mm_srai_epi32(vd, 16);
362 vd = _mm_packs_epi32(vd, vd);
364 _mm_storel_epi64(
reinterpret_cast<__m128i *>(&blend), vd);
365#elif defined(__ARM_NEON__)
366 uint16x4_t vd = vreinterpret_u16_u64(vmov_n_u64(d));
367 uint16x4_t vs = vreinterpret_u16_u64(vmov_n_u64(s));
368 uint8x8_t va8 = vreinterpret_u8_u32(vmov_n_u32(ARGB2RGBA(rgbAlpha)));
369 uint16x4_t va = vreinterpret_u16_u8(vzip_u8(va8, va8).val[0]);
370 uint16x4_t vb = veor_u16(vdup_n_u16(0xffff), va);
372 uint32x4_t vs32 = vmull_u16(vs, va);
373 uint32x4_t vd32 = vmull_u16(vd, vb);
374 vd32 = vaddq_u32(vd32, vs32);
375 vd32 = vsraq_n_u32(vd32, vd32, 16);
376 vd = vrshrn_n_u32(vd32, 16);
377 vst1_u64(
reinterpret_cast<uint64_t *>(&blend), vreinterpret_u64_u16(vd));
378#elif defined(__loongarch_sx)
379 __m128i vd = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&d), 0);
380 __m128i vs = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&s), 0);
381 __m128i va = __lsx_vinsgr2vr_w(__lsx_vldi(0), rgbAlpha, 0);
382 va = __lsx_vilvl_b(va, va);
383 const __m128i shuffleMask = (__m128i)(v8i16){2, 1, 0, 3, 4, 5, 6, 7};
384 va = __lsx_vshuf_h(shuffleMask, __lsx_vldi(0), va);
385 __m128i vb = __lsx_vxor_v(__lsx_vreplgr2vr_h(-1), va);
387 vs = __lsx_vilvl_h(__lsx_vmuh_hu(vs, va), __lsx_vmul_h(vs, va));
388 vd = __lsx_vilvl_h(__lsx_vmuh_hu(vd, vb), __lsx_vmul_h(vd, vb));
389 vd = __lsx_vadd_w(vd, vs);
390 vd = __lsx_vadd_w(vd, __lsx_vsrli_w(vd, 16));
391 vd = __lsx_vadd_w(vd, __lsx_vreplgr2vr_w(0x8000));
392 vd = __lsx_vsrai_w(vd, 16);
393 vd = __lsx_vpickev_h(__lsx_vsat_w(vd, 15), __lsx_vsat_w(vd, 15));
394 __lsx_vstelm_d(vd,
reinterpret_cast<__m128i *>(&blend), 0, 0);
396 const int mr = qRed(rgbAlpha);
397 const int mg = qGreen(rgbAlpha);
398 const int mb = qBlue(rgbAlpha);
399 blend = qRgba64(qt_div_255(s.red() * mr + d.red() * (255 - mr)),
400 qt_div_255(s.green() * mg + d.green() * (255 - mg)),
401 qt_div_255(s.blue() * mb + d.blue() * (255 - mb)),
411 else if (!src.isTransparent()) {
413 const __m128i vd = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&dst));
414 const __m128i vs = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&src));
415 const __m128i via = _mm_xor_si128(_mm_set1_epi16(-1), _mm_shufflelo_epi16(vs, _MM_SHUFFLE(3, 3, 3, 3)));
416 const __m128i vr = _mm_add_epi16(vs, multiplyAlpha65535(vd, via));
417 _mm_storel_epi64(
reinterpret_cast<__m128i *>(&dst), vr);
418#elif defined(__ARM_NEON__)
419 const uint16x4_t vd = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&dst)));
420 const uint16x4_t vs = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&src)));
421 const uint16x4_t via = veor_u16(vdup_n_u16(0xffff), vdup_lane_u16(vs, 3));
422 const uint16x4_t vr = vadd_u16(vs, multiplyAlpha65535(vd, via));
423 vst1_u64(
reinterpret_cast<uint64_t *>(&dst), vreinterpret_u64_u16(vr));
424#elif defined(__loongarch_sx)
425 const __m128i vd = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&dst), 0);
426 const __m128i vs = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&src), 0);
427 const __m128i shuffleMask = (__m128i)(v8i16){3, 3, 3, 3, 4, 5, 6, 7};
428 const __m128i via = __lsx_vxor_v(__lsx_vreplgr2vr_h(-1), __lsx_vshuf_h(shuffleMask, __lsx_vldi(0), vs));
429 const __m128i vr = __lsx_vadd_h(vs, multiplyAlpha65535(vd, via));
430 __lsx_vstelm_d(vr,
reinterpret_cast<__m128i *>(&dst), 0, 0);
432 dst = src + multiplyAlpha65535(dst, 65535 - src.alpha());
439 if (const_alpha == 255)
441 if (!src.isTransparent()) {
443 const __m128i vd = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&dst));
444 __m128i vs = _mm_loadl_epi64(
reinterpret_cast<
const __m128i *>(&src));
445 vs = multiplyAlpha255(vs, const_alpha);
446 const __m128i via = _mm_xor_si128(_mm_set1_epi16(-1), _mm_shufflelo_epi16(vs, _MM_SHUFFLE(3, 3, 3, 3)));
447 const __m128i vr = _mm_add_epi16(vs, multiplyAlpha65535(vd, via));
448 _mm_storel_epi64(
reinterpret_cast<__m128i *>(&dst), vr);
449#elif defined(__ARM_NEON__)
450 const uint16x4_t vd = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&dst)));
451 uint16x4_t vs = vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<
const uint64_t *>(&src)));
452 vs = multiplyAlpha255(vs, const_alpha);
453 const uint16x4_t via = veor_u16(vdup_n_u16(0xffff), vdup_lane_u16(vs, 3));
454 const uint16x4_t vr = vadd_u16(vs, multiplyAlpha65535(vd, via));
455 vst1_u64(
reinterpret_cast<uint64_t *>(&dst), vreinterpret_u64_u16(vr));
456#elif defined(__loongarch_sx)
457 const __m128i vd = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&dst), 0);
458 __m128i vs = __lsx_vldrepl_d(
reinterpret_cast<
const __m128i *>(&src), 0);
459 vs = multiplyAlpha255(vs, const_alpha);
460 const __m128i shuffleMask = (__m128i)(v8i16){3, 3, 3, 3, 4, 5, 6, 7};
461 const __m128i via = __lsx_vxor_v(__lsx_vreplgr2vr_h(-1), __lsx_vshuf_h(shuffleMask, __lsx_vldi(0), vs));
462 const __m128i vr = __lsx_vadd_h(vs, multiplyAlpha65535(vd, via));
463 __lsx_vstelm_d(vr,
reinterpret_cast<__m128i *>(&dst), 0, 0);
465 src = multiplyAlpha255(src, const_alpha);
466 dst = src + multiplyAlpha65535(dst, 65535 - src.alpha());
Combined button and popup list for selecting options.
static void comp_func_solid_ColorBurn_impl(uint *dest, int length, uint color, const T &coverage)
static void comp_func_solid_ColorDodge_impl(uint *dest, int length, uint color, const T &coverage)
CompositionFunctionFP qt_functionForModeFP_C[]
static void comp_func_solid_Darken_impl(uint *dest, int length, uint color, const T &coverage)
CompositionFunction qt_functionForMode_C[]
static void comp_func_solid_SourceOut_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
static void comp_func_solid_Screen_impl(uint *dest, int length, uint color, const T &coverage)
static void comp_func_solid_SoftLight_impl(uint *dest, int length, uint color, const T &coverage)
static void comp_func_Difference_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static void comp_func_Plus_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
static uint hardlight_op(int dst, int src, int da, int sa)
static void comp_func_solid_XOR_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
static void comp_func_Clear_template(typename Ops::Type *dest, int length, uint const_alpha)
static void comp_func_SourceAtop_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_Multiply_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static void comp_func_DestinationIn_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_solid_Source_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
static int color_dodge_op(int dst, int src, int da, int sa)
static void comp_func_solid_HardLight_impl(uint *dest, int length, uint color, const T &coverage)
static void comp_func_solid_Overlay_impl(uint *dest, int length, uint color, const T &coverage)
static int overlay_op(int dst, int src, int da, int sa)
static void comp_func_DestinationOver_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_solid_SourceIn_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
static void comp_func_solid_Plus_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
static void comp_func_solid_SourceOver_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
Argb32OperationsC Argb32Operations
static void comp_func_solid_Difference_impl(uint *dest, int length, uint color, const T &coverage)
static int multiply_op(int dst, int src, int da, int sa)
static void comp_func_DestinationAtop_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
static int soft_light_op(int dst, int src, int da, int sa)
static void comp_func_ColorBurn_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static void comp_func_solid_DestinationOver_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
static void comp_func_Source_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_HardLight_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static int mix_alpha(int da, int sa)
static void comp_func_solid_DestinationOut_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
static void comp_func_SourceOver_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
static int difference_op(int dst, int src, int da, int sa)
static void comp_func_solid_SourceAtop_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
static int color_burn_op(int dst, int src, int da, int sa)
static void comp_func_SourceOut_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
CompositionFunctionSolidFP qt_functionForModeSolidFP_C[]
static void comp_func_Overlay_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static void comp_func_Lighten_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static void comp_func_solid_DestinationIn_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
static void comp_func_Darken_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static int lighten_op(int dst, int src, int da, int sa)
static void comp_func_Screen_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static void comp_func_solid_DestinationAtop_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
CompositionFunction64 qt_functionForMode64_C[]
CompositionFunctionSolid qt_functionForModeSolid_C[]
static void comp_func_ColorDodge_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static void comp_func_solid_Multiply_impl(uint *dest, int length, uint color, const T &coverage)
static void comp_func_DestinationOut_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_Exclusion_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static void comp_func_SoftLight_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
static void comp_func_XOR_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_solid_Lighten_impl(uint *dest, int length, uint color, const T &coverage)
static int darken_op(int dst, int src, int da, int sa)
CompositionFunctionSolid64 qt_functionForModeSolid64_C[]
static void comp_func_SourceIn_template(typename Ops::Type *Q_DECL_RESTRICT dest, const typename Ops::Type *Q_DECL_RESTRICT src, int length, uint const_alpha)
uint QT_FASTCALL fetch1Pixel< QPixelLayout::BPP1LSB >(const uchar *src, int index)
static constexpr int qt_div_255(int x)
#define Q_DECL_VECTORCALL
static QRgba64 multiplyAlpha65535(QRgba64 rgba64, uint alpha65535)
QT_BEGIN_NAMESPACE QRgba64 combineAlpha256(QRgba64 rgba64, uint alpha256)
static uint toArgb32(QRgba64 rgba64)
static QRgba64 interpolate65535(QRgba64 x, uint alpha1, QRgba64 y, uint alpha2)
static QRgba64 interpolate255(QRgba64 x, uint alpha1, QRgba64 y, uint alpha2)
static void blend_pixel(QRgba64 &dst, QRgba64 src, const int const_alpha)
static QRgba64 addWithSaturation(QRgba64 a, QRgba64 b)
static void blend_pixel(QRgba64 &dst, QRgba64 src)
static uint toRgba8888(QRgba64 rgba64)
static QRgba64 rgbBlend(QRgba64 d, QRgba64 s, uint rgbAlpha)
static OptimalType add(OptimalType a, OptimalType b)
static OptimalType interpolate(OptimalType x, OptimalScalar a1, OptimalType y, OptimalScalar a2)
static Scalar scalarFrom8bit(uint8_t a)
static bool isTransparent(Type val)
static void memfill(Type *ptr, Type value, qsizetype len)
static void store(Type *ptr, OptimalType value)
static void memcpy(Type *Q_DECL_RESTRICT dest, const Type *Q_DECL_RESTRICT src, qsizetype len)
static OptimalScalar invAlpha(OptimalScalar c)
static OptimalType convert(const Type &val)
static OptimalType plus(OptimalType a, OptimalType b)
static OptimalType interpolate8bit(OptimalType x, uint8_t a1, OptimalType y, uint8_t a2)
static OptimalScalar scalar(Scalar v)
static OptimalType multiplyAlpha8bit(OptimalType val, uint8_t a)
static OptimalType load(const Type *ptr)
static OptimalType multiplyAlpha(OptimalType val, OptimalScalar a)
static OptimalScalar alpha(OptimalType val)
static bool isOpaque(Type val)
void store(uint *dest, const uint src) const
void store_template(typename Op::Type *dest, const typename Op::Type src) const
void store(uint *dest, const uint src) const
QPartialCoverage(uint const_alpha)
static bool isOpaque(Type val)
static void memcpy(Type *Q_DECL_RESTRICT dest, const Type *Q_DECL_RESTRICT src, qsizetype len)
static void memfill(Type *ptr, Type value, qsizetype len)
static Scalar scalarFrom8bit(uint8_t a)
static bool isTransparent(Type val)