96 {
return val.isOpaque(); }
98 {
return val.isTransparent(); }
108#if QT_CONFIG(raster_64bit)
122 static OptimalType
add(OptimalType
a, OptimalType
b)
124 static OptimalScalar
add(OptimalScalar
a, OptimalScalar
b)
126 static OptimalType plus(OptimalType
a, OptimalType
b)
128 static OptimalScalar
alpha(OptimalType
val)
129 {
return val.alpha(); }
130 static OptimalScalar invAlpha(Scalar
c)
131 {
return 65535 -
c; }
132 static OptimalScalar invAlpha(OptimalType
val)
134 static OptimalScalar scalar(Scalar
v)
136 static OptimalType multiplyAlpha8bit(OptimalType
val, uint8_t
a)
138 static OptimalScalar multiplyAlpha8bit(OptimalScalar
val, uint8_t
a)
140 static OptimalType interpolate8bit(OptimalType
x, uint8_t
a1, OptimalType
y, uint8_t
a2)
142 static OptimalType multiplyAlpha(OptimalType
val, OptimalScalar
a)
144 static OptimalType
interpolate(OptimalType
x, OptimalScalar
a1, OptimalType
y, OptimalScalar
a2)
151 typedef __m128i OptimalType;
152 typedef __m128i OptimalScalar;
156 return _mm_loadl_epi64(
reinterpret_cast<const __m128i *
>(
ptr));
160#ifdef Q_PROCESSOR_X86_64
161 return _mm_cvtsi64_si128(
value);
168 _mm_storel_epi64(
reinterpret_cast<__m128i *
>(
ptr),
value);
170 static OptimalType
add(OptimalType
a, OptimalType
b)
172 return _mm_add_epi16(
a,
b);
176 static OptimalType plus(OptimalType
a, OptimalType
b)
178 return _mm_adds_epu16(
a,
b);
180 static OptimalScalar
alpha(OptimalType
c)
182 return _mm_shufflelo_epi16(
c, _MM_SHUFFLE(3, 3, 3, 3));
184 static OptimalScalar invAlpha(Scalar
c)
186 return scalar(65535 -
c);
188 static OptimalScalar invAlpha(OptimalType
c)
190 return _mm_xor_si128(_mm_set1_epi16(-1),
alpha(
c));
192 static OptimalScalar scalar(Scalar
n)
194 return _mm_shufflelo_epi16(_mm_cvtsi32_si128(
n), _MM_SHUFFLE(0, 0, 0, 0));
196 static OptimalType multiplyAlpha8bit(OptimalType
val, uint8_t
a)
202 static OptimalType interpolate8bit(OptimalType
x, uint8_t
a1, OptimalType
y, uint8_t
a2)
206 static OptimalType multiplyAlpha(OptimalType
val, OptimalScalar
a)
211 static OptimalType
interpolate(OptimalType
x, OptimalScalar
a1, OptimalType
y,
const OptimalScalar &
a2)
218#if defined(__ARM_NEON__)
221 typedef uint16x4_t OptimalType;
222 typedef uint16x4_t OptimalScalar;
226 return vreinterpret_u16_u64(vld1_u64(
reinterpret_cast<const uint64_t *
>(
ptr)));
230 return vreinterpret_u16_u64(vmov_n_u64(
val));
234 vst1_u64(
reinterpret_cast<uint64_t *
>(
ptr), vreinterpret_u64_u16(
value));
236 static OptimalType
add(OptimalType
a, OptimalType
b)
238 return vadd_u16(
a,
b);
242 static OptimalType plus(OptimalType
a, OptimalType
b)
244 return vqadd_u16(
a,
b);
246 static OptimalScalar
alpha(OptimalType
c)
248 return vdup_lane_u16(
c, 3);
250 static OptimalScalar invAlpha(Scalar
c)
252 return scalar(65535 -
c);
254 static OptimalScalar invAlpha(OptimalType
c)
256 return vmvn_u16(
alpha(
c));
258 static OptimalScalar scalar(Scalar
n)
260 return vdup_n_u16(
n);
262 static OptimalType multiplyAlpha8bit(OptimalType
val, uint8_t
a)
268 static OptimalType interpolate8bit(OptimalType
x, uint8_t
a1, OptimalType
y, uint8_t
a2)
272 static OptimalType multiplyAlpha(OptimalType
val, OptimalScalar
a)
276 static OptimalType
interpolate(OptimalType
x, OptimalScalar
a1, OptimalType
y, OptimalScalar
a2)
284typedef Rgba64OperationsSSE2 Rgba64Operations;
285#elif defined(__ARM_NEON__)
286typedef Rgba64OperationsNEON Rgba64Operations;
288typedef Rgba64OperationsC Rgba64Operations;
293#if QT_CONFIG(raster_fp)
300struct RgbaFPOperationsBase
303 typedef float Scalar;
305 static inline constexpr Type clear = { 0, 0, 0, 0 };
308 {
return val.a >= 1.0f; }
309 static bool isTransparent(
Type val)
310 {
return val.a <= 0.0f; }
311 static Scalar scalarFrom8bit(uint8_t
a)
312 {
return a * (1.0f / 255.0f); }
323struct RgbaFPOperationsC : RgbaFPOperationsBase
326 typedef float OptimalScalar;
343 static OptimalType
add(OptimalType
a, OptimalType
b)
351 static OptimalScalar
add(OptimalScalar
a, OptimalScalar
b)
353 static OptimalType plus(OptimalType
a, OptimalType
b)
356 if (
a.a < 0.0f)
a.a = 0.0f;
357 else if (
a.a > 1.0f)
a.a = 1.0f;
360 static OptimalScalar
alpha(OptimalType
val)
362 static OptimalScalar invAlpha(OptimalScalar
c)
364 static OptimalScalar invAlpha(OptimalType
val)
365 {
return 1.0f -
val.a; }
366 static OptimalScalar scalar(Scalar
v)
368 static OptimalType multiplyAlpha(OptimalType
val, OptimalScalar
a)
376 static OptimalScalar multiplyAlpha8bit(OptimalScalar
val, uint8_t
a)
378 return val *
a * (1.0f / 255.0f);
380 static OptimalType
interpolate(OptimalType
x, OptimalScalar
a1, OptimalType
y, OptimalScalar
a2)
382 return add(multiplyAlpha(
x,
a1), multiplyAlpha(
y,
a2));
384 static OptimalType multiplyAlpha8bit(OptimalType
val, uint8_t
a)
386 return multiplyAlpha(
val,
a * (1.0f / 255.0f));
388 static OptimalType interpolate8bit(OptimalType
x, uint8_t
a1, OptimalType
y, uint8_t
a2)
390 return add(multiplyAlpha8bit(
x,
a1), multiplyAlpha8bit(
y,
a2));
395struct RgbaFPOperationsSSE2 :
public RgbaFPOperationsBase
397 typedef __m128 OptimalType;
398 typedef __m128 OptimalScalar;
402 return _mm_load_ps(
reinterpret_cast<const float *
>(
ptr));
410 _mm_store_ps(
reinterpret_cast<float *
>(
ptr),
value);
412 static OptimalType
add(OptimalType
a, OptimalType
b)
414 return _mm_add_ps(
a,
b);
418 static OptimalType plus(OptimalType
a, OptimalType
b)
420 a = _mm_add_ps(
a,
b);
421 __m128 aa = _mm_min_ps(
a, _mm_set1_ps(1.0f));
422 aa = _mm_max_ps(aa, _mm_set1_ps(0.0f));
424 aa = _mm_shuffle_ps(aa,
a, _MM_SHUFFLE(2, 2, 3, 3));
425 a = _mm_shuffle_ps(
a, aa, _MM_SHUFFLE(0, 2, 1, 0));
428 static OptimalScalar
alpha(OptimalType
c)
430 return _mm_shuffle_ps(
c,
c, _MM_SHUFFLE(3, 3, 3, 3));
432 static OptimalScalar invAlpha(Scalar
c)
434 return _mm_set1_ps(1.0f -
float(
c));
436 static OptimalScalar invAlpha(OptimalType
c)
438 return _mm_sub_ps(_mm_set1_ps(1.0f),
alpha(
c));
440 static OptimalScalar scalar(Scalar
n)
442 return _mm_set1_ps(
float(
n));
444 static OptimalType multiplyAlpha(OptimalType
val, OptimalScalar
a)
446 return _mm_mul_ps(
val,
a);
448 static OptimalType
interpolate(OptimalType
x, OptimalScalar
a1, OptimalType
y, OptimalScalar
a2)
450 return add(multiplyAlpha(
x,
a1), multiplyAlpha(
y,
a2));
452 static OptimalType multiplyAlpha8bit(OptimalType
val, uint8_t
a)
454 return multiplyAlpha(
val, _mm_set1_ps(
a * (1.0f / 255.0f)));
458 static OptimalType interpolate8bit(OptimalType
x, uint8_t
a1, OptimalType
y, uint8_t
a2)
460 return add(multiplyAlpha8bit(
x,
a1), multiplyAlpha8bit(
y,
a2));
466typedef RgbaFPOperationsSSE2 RgbaFPOperations;
468typedef RgbaFPOperationsC RgbaFPOperations;
480 if (const_alpha == 255)
481 Ops::memfill(dest, Ops::clear,
length);
483 uint ialpha = 255 - const_alpha;
485 Ops::store(&dest[
i], Ops::multiplyAlpha8bit(Ops::load(&dest[
i]), ialpha));
492 comp_func_Clear_template<Argb32Operations>(dest,
length, const_alpha);
497 comp_func_Clear_template<Argb32Operations>(dest,
length, const_alpha);
500#if QT_CONFIG(raster_64bit)
503 comp_func_Clear_template<Rgba64Operations>(dest,
length, const_alpha);
508 comp_func_Clear_template<Rgba64Operations>(dest,
length, const_alpha);
512#if QT_CONFIG(raster_fp)
515 comp_func_Clear_template<RgbaFPOperations>(dest,
length, const_alpha);
520 comp_func_Clear_template<RgbaFPOperations>(dest,
length, const_alpha);
531 if (const_alpha == 255)
534 const uint ialpha = 255 - const_alpha;
535 auto s = Ops::multiplyAlpha8bit(Ops::convert(
color), const_alpha);
537 auto d = Ops::multiplyAlpha8bit(Ops::load(&dest[
i]), ialpha);
538 Ops::store(&dest[
i], Ops::add(
s,
d));
548 if (const_alpha == 255)
551 const uint ialpha = 255 - const_alpha;
553 auto s = Ops::load(
src +
i);
554 auto d = Ops::load(dest +
i);
555 Ops::store(&dest[
i], Ops::interpolate8bit(
s, const_alpha,
d, ialpha));
562 comp_func_solid_Source_template<Argb32Operations>(dest,
length,
color, const_alpha);
567 comp_func_Source_template<Argb32Operations>(dest,
src,
length, const_alpha);
570#if QT_CONFIG(raster_64bit)
573 comp_func_solid_Source_template<Rgba64Operations>(dest,
length,
color, const_alpha);
578 comp_func_Source_template<Rgba64Operations>(dest,
src,
length, const_alpha);
582#if QT_CONFIG(raster_fp)
585 comp_func_solid_Source_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
590 comp_func_Source_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
602#if QT_CONFIG(raster_64bit)
612#if QT_CONFIG(raster_fp)
631 if (const_alpha == 255 && Ops::isOpaque(
color))
634 auto c = Ops::convert(
color);
635 if (const_alpha != 255)
636 c = Ops::multiplyAlpha8bit(
c, const_alpha);
637 auto cAlpha = Ops::invAlpha(
c);
639 auto d = Ops::multiplyAlpha(Ops::load(&dest[
i]), cAlpha);
640 Ops::store(&dest[
i], Ops::add(
c,
d));
650 if (const_alpha == 255) {
653 if (Ops::isOpaque(
c))
654 Ops::store(&dest[
i], Ops::convert(
c));
655 else if (!Ops::isTransparent(
c)) {
656 auto s = Ops::convert(
c);
657 auto d = Ops::multiplyAlpha(Ops::load(&dest[
i]), Ops::invAlpha(
s));
658 Ops::store(&dest[
i], Ops::add(
s,
d));
663 auto s = Ops::multiplyAlpha8bit(Ops::load(&
src[
i]), const_alpha);
664 auto d = Ops::multiplyAlpha(Ops::load(&dest[
i]), Ops::invAlpha(
s));
665 Ops::store(&dest[
i], Ops::add(
s,
d));
672 comp_func_solid_SourceOver_template<Argb32Operations>(dest,
length,
color, const_alpha);
677 comp_func_SourceOver_template<Argb32Operations>(dest,
src,
length, const_alpha);
680#if QT_CONFIG(raster_64bit)
683 comp_func_solid_SourceOver_template<Rgba64Operations>(dest,
length,
color, const_alpha);
688 comp_func_SourceOver_template<Rgba64Operations>(dest,
src,
length, const_alpha);
692#if QT_CONFIG(raster_fp)
695 comp_func_solid_SourceOver_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
701 comp_func_SourceOver_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
713 auto c = Ops::convert(
color);
714 if (const_alpha != 255)
715 c = Ops::multiplyAlpha8bit(
c, const_alpha);
717 auto d = Ops::load(&dest[
i]);
718 auto s = Ops::multiplyAlpha(
c, Ops::invAlpha(
d));
719 Ops::store(&dest[
i], Ops::add(
s,
d));
728 if (const_alpha == 255) {
730 auto d = Ops::load(&dest[
i]);
731 auto s = Ops::multiplyAlpha(Ops::load(&
src[
i]), Ops::invAlpha(
d));
732 Ops::store(&dest[
i], Ops::add(
s,
d));
736 auto d = Ops::load(&dest[
i]);
737 auto s = Ops::multiplyAlpha8bit(Ops::load(&
src[
i]), const_alpha);
738 s = Ops::multiplyAlpha(
s, Ops::invAlpha(
d));
739 Ops::store(&dest[
i], Ops::add(
s,
d));
746 comp_func_solid_DestinationOver_template<Argb32Operations>(dest,
length,
color, const_alpha);
751 comp_func_DestinationOver_template<Argb32Operations>(dest,
src,
length, const_alpha);
754#if QT_CONFIG(raster_64bit)
757 comp_func_solid_DestinationOver_template<Rgba64Operations>(dest,
length,
color, const_alpha);
762 comp_func_DestinationOver_template<Rgba64Operations>(dest,
src,
length, const_alpha);
766#if QT_CONFIG(raster_fp)
769 comp_func_solid_DestinationOver_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
774 comp_func_DestinationOver_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
785 if (const_alpha == 255) {
786 auto c = Ops::convert(
color);
788 Ops::store(&dest[
i], Ops::multiplyAlpha(
c, Ops::alpha(Ops::load(&dest[
i]))));
791 auto c = Ops::multiplyAlpha8bit(Ops::convert(
color), const_alpha);
792 auto cia = Ops::invAlpha(Ops::scalarFrom8bit(const_alpha));
794 auto d = Ops::load(&dest[
i]);
795 Ops::store(&dest[
i], Ops::interpolate(
c, Ops::alpha(
d),
d, cia));
805 if (const_alpha == 255) {
807 auto s = Ops::load(&
src[
i]);
808 Ops::store(&dest[
i], Ops::multiplyAlpha(
s, Ops::alpha(Ops::load(&dest[
i]))));
811 auto ca = Ops::scalarFrom8bit(const_alpha);
812 auto cia = Ops::invAlpha(ca);
813 auto cav = Ops::scalar(ca);
815 auto d = Ops::load(&dest[
i]);
816 auto s = Ops::multiplyAlpha(Ops::load(&
src[
i]), cav);
817 Ops::store(&dest[
i], Ops::interpolate(
s, Ops::alpha(
d),
d, cia));
824 comp_func_solid_SourceIn_template<Argb32Operations>(dest,
length,
color, const_alpha);
829 comp_func_SourceIn_template<Argb32Operations>(dest,
src,
length, const_alpha);
832#if QT_CONFIG(raster_64bit)
835 comp_func_solid_SourceIn_template<Rgba64Operations>(dest,
length,
color, const_alpha);
840 comp_func_SourceIn_template<Rgba64Operations>(dest,
src,
length, const_alpha);
844#if QT_CONFIG(raster_fp)
847 comp_func_solid_SourceIn_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
852 comp_func_SourceIn_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
864 auto sa = Ops::alpha(Ops::convert(
color));
865 if (const_alpha != 255) {
866 sa = Ops::multiplyAlpha8bit(sa, const_alpha);
867 sa = Ops::add(sa, Ops::invAlpha(Ops::scalarFrom8bit(const_alpha)));
871 Ops::store(&dest[
i], Ops::multiplyAlpha(Ops::load(&dest[
i]), sa));
880 if (const_alpha == 255) {
882 auto a = Ops::alpha(Ops::load(&
src[
i]));
883 Ops::store(&dest[
i], Ops::multiplyAlpha(Ops::load(&dest[
i]),
a));
886 auto cia = Ops::invAlpha(Ops::scalarFrom8bit(const_alpha));
888 auto sa = Ops::multiplyAlpha8bit(Ops::alpha(Ops::load(&
src[
i])), const_alpha);
889 sa = Ops::add(sa, cia);
890 Ops::store(&dest[
i], Ops::multiplyAlpha(Ops::load(&dest[
i]), sa));
897 comp_func_solid_DestinationIn_template<Argb32Operations>(dest,
length,
color, const_alpha);
902 comp_func_DestinationIn_template<Argb32Operations>(dest,
src,
length, const_alpha);
905#if QT_CONFIG(raster_64bit)
908 comp_func_solid_DestinationIn_template<Rgba64Operations>(dest,
length,
color, const_alpha);
913 comp_func_DestinationIn_template<Rgba64Operations>(dest,
src,
length, const_alpha);
917#if QT_CONFIG(raster_fp)
920 comp_func_solid_DestinationIn_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
925 comp_func_DestinationIn_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
936 auto c = Ops::convert(
color);
937 if (const_alpha == 255) {
939 Ops::store(&dest[
i], Ops::multiplyAlpha(
c, Ops::invAlpha(Ops::load(&dest[
i]))));
941 auto cia = Ops::invAlpha(Ops::scalarFrom8bit(const_alpha));
942 c = Ops::multiplyAlpha8bit(
c, const_alpha);
944 auto d = Ops::load(&dest[
i]);
945 Ops::store(&dest[
i], Ops::interpolate(
c, Ops::invAlpha(
d),
d, cia));
955 if (const_alpha == 255) {
957 auto s = Ops::load(&
src[
i]);
958 auto d = Ops::load(&dest[
i]);
959 Ops::store(&dest[
i], Ops::multiplyAlpha(
s, Ops::invAlpha(
d)));
962 auto cia = Ops::invAlpha(Ops::scalarFrom8bit(const_alpha));
964 auto s = Ops::multiplyAlpha8bit(Ops::load(&
src[
i]), const_alpha);
965 auto d = Ops::load(&dest[
i]);
966 Ops::store(&dest[
i], Ops::interpolate(
s, Ops::invAlpha(
d),
d, cia));
973 comp_func_solid_SourceOut_template<Argb32Operations>(dest,
length,
color, const_alpha);
978 comp_func_SourceOut_template<Argb32Operations>(dest,
src,
length, const_alpha);
981#if QT_CONFIG(raster_64bit)
984 comp_func_solid_SourceOut_template<Rgba64Operations>(dest,
length,
color, const_alpha);
989 comp_func_SourceOut_template<Rgba64Operations>(dest,
src,
length, const_alpha);
993#if QT_CONFIG(raster_fp)
996 comp_func_solid_SourceOut_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
1001 comp_func_SourceOut_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
1013 auto sai = Ops::invAlpha(Ops::convert(
color));
1014 if (const_alpha != 255) {
1015 sai = Ops::multiplyAlpha8bit(sai, const_alpha);
1016 sai = Ops::add(sai, Ops::invAlpha(Ops::scalarFrom8bit(const_alpha)));
1020 Ops::store(&dest[
i], Ops::multiplyAlpha(Ops::load(&dest[
i]), sai));
1029 if (const_alpha == 255) {
1031 auto sia = Ops::invAlpha(Ops::load(&
src[
i]));
1032 Ops::store(&dest[
i], Ops::multiplyAlpha(Ops::load(&dest[
i]), sia));
1035 auto cia = Ops::invAlpha(Ops::scalarFrom8bit(const_alpha));
1037 auto sia = Ops::multiplyAlpha8bit(Ops::invAlpha(Ops::load(&
src[
i])), const_alpha);
1038 sia = Ops::add(sia, cia);
1039 Ops::store(&dest[
i], Ops::multiplyAlpha(Ops::load(&dest[
i]), sia));
1046 comp_func_solid_DestinationOut_template<Argb32Operations>(dest,
length,
color, const_alpha);
1051 comp_func_DestinationOut_template<Argb32Operations>(dest,
src,
length, const_alpha);
1054#if QT_CONFIG(raster_64bit)
1057 comp_func_solid_DestinationOut_template<Rgba64Operations>(dest,
length,
color, const_alpha);
1062 comp_func_DestinationOut_template<Rgba64Operations>(dest,
src,
length, const_alpha);
1066#if QT_CONFIG(raster_fp)
1069 comp_func_solid_DestinationOut_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
1074 comp_func_DestinationOut_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
1087 auto c = Ops::convert(
color);
1088 if (const_alpha != 255)
1089 c = Ops::multiplyAlpha8bit(
c, const_alpha);
1090 auto sia = Ops::invAlpha(
c);
1092 auto d = Ops::load(&dest[
i]);
1093 Ops::store(&dest[
i], Ops::interpolate(
c, Ops::alpha(
d),
d, sia));
1102 if (const_alpha == 255) {
1104 auto s = Ops::load(&
src[
i]);
1105 auto d = Ops::load(&dest[
i]);
1106 Ops::store(&dest[
i], Ops::interpolate(
s, Ops::alpha(
d),
d, Ops::invAlpha(
s)));
1110 auto s = Ops::multiplyAlpha8bit(Ops::load(&
src[
i]), const_alpha);
1111 auto d = Ops::load(&dest[
i]);
1112 Ops::store(&dest[
i], Ops::interpolate(
s, Ops::alpha(
d),
d, Ops::invAlpha(
s)));
1119 comp_func_solid_SourceAtop_template<Argb32Operations>(dest,
length,
color, const_alpha);
1124 comp_func_SourceAtop_template<Argb32Operations>(dest,
src,
length, const_alpha);
1127#if QT_CONFIG(raster_64bit)
1130 comp_func_solid_SourceAtop_template<Rgba64Operations>(dest,
length,
color, const_alpha);
1135 comp_func_SourceAtop_template<Rgba64Operations>(dest,
src,
length, const_alpha);
1139#if QT_CONFIG(raster_fp)
1142 comp_func_solid_SourceAtop_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
1147 comp_func_SourceAtop_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
1159 auto c = Ops::convert(
color);
1160 auto sa = Ops::alpha(
c);
1161 if (const_alpha != 255) {
1162 c = Ops::multiplyAlpha8bit(
c, const_alpha);
1163 auto cia = Ops::invAlpha(Ops::scalarFrom8bit(const_alpha));
1164 sa = Ops::add(Ops::alpha(
c), cia);
1168 auto d = Ops::load(&dest[
i]);
1169 Ops::store(&dest[
i], Ops::interpolate(
c, Ops::invAlpha(
d),
d, sa));
1178 if (const_alpha == 255) {
1180 auto s = Ops::load(&
src[
i]);
1181 auto d = Ops::load(&dest[
i]);
1182 Ops::store(&dest[
i], Ops::interpolate(
s, Ops::invAlpha(
d),
d, Ops::alpha(
s)));
1185 auto cia = Ops::invAlpha(Ops::scalarFrom8bit(const_alpha));
1187 auto s = Ops::multiplyAlpha8bit(Ops::load(&
src[
i]), const_alpha);
1188 auto d = Ops::load(&dest[
i]);
1189 auto sa = Ops::add(Ops::alpha(
s), cia);
1190 Ops::store(&dest[
i], Ops::interpolate(
s, Ops::invAlpha(
d),
d, sa));
1197 comp_func_solid_DestinationAtop_template<Argb32Operations>(dest,
length,
color, const_alpha);
1202 comp_func_DestinationAtop_template<Argb32Operations>(dest,
src,
length, const_alpha);
1205#if QT_CONFIG(raster_64bit)
1208 comp_func_solid_DestinationAtop_template<Rgba64Operations>(dest,
length,
color, const_alpha);
1213 comp_func_DestinationAtop_template<Rgba64Operations>(dest,
src,
length, const_alpha);
1217#if QT_CONFIG(raster_fp)
1220 comp_func_solid_DestinationAtop_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
1225 comp_func_DestinationAtop_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
1238 auto c = Ops::convert(
color);
1239 if (const_alpha != 255)
1240 c = Ops::multiplyAlpha8bit(
c, const_alpha);
1242 auto sia = Ops::invAlpha(
c);
1244 auto d = Ops::load(&dest[
i]);
1245 Ops::store(&dest[
i], Ops::interpolate(
c, Ops::invAlpha(
d),
d, sia));
1254 if (const_alpha == 255) {
1256 auto d = Ops::load(&dest[
i]);
1257 auto s = Ops::load(&
src[
i]);
1258 Ops::store(&dest[
i], Ops::interpolate(
s, Ops::invAlpha(
d),
d, Ops::invAlpha(
s)));
1262 auto d = Ops::load(&dest[
i]);
1263 auto s = Ops::multiplyAlpha8bit(Ops::load(&
src[
i]), const_alpha);
1264 Ops::store(&dest[
i], Ops::interpolate(
s, Ops::invAlpha(
d),
d, Ops::invAlpha(
s)));
1271 comp_func_solid_XOR_template<Argb32Operations>(dest,
length,
color, const_alpha);
1276 comp_func_XOR_template<Argb32Operations>(dest,
src,
length, const_alpha);
1279#if QT_CONFIG(raster_64bit)
1282 comp_func_solid_XOR_template<Rgba64Operations>(dest,
length,
color, const_alpha);
1287 comp_func_XOR_template<Rgba64Operations>(dest,
src,
length, const_alpha);
1291#if QT_CONFIG(raster_fp)
1294 comp_func_solid_XOR_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
1299 comp_func_XOR_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
1308#if QT_CONFIG(raster_64bit)
1314#if QT_CONFIG(raster_fp)
1325 , ica(255 - const_alpha)
1329 template<
typename Op>
1332 Op::store(dest, Op::interpolate8bit(Op::convert(
src), ca, Op::load(dest), ica));
1336 store_template<Argb32Operations>(dest,
src);
1338#if QT_CONFIG(raster_64bit)
1341 store_template<Rgba64Operations>(dest,
src);
1344#if QT_CONFIG(raster_fp)
1347 store_template<RgbaFPOperations>(dest,
src);
1358 return 255 -
qt_div_255((255 - sa) * (255 - da));
1361#if QT_CONFIG(raster_64bit)
1364 return 65535U -
qt_div_65535((65535U - sa) * (65535U - da));
1368#if QT_CONFIG(raster_fp)
1369static inline float mix_alpha_rgbafp(
float da,
float sa)
1371 return 1.0f - (1.0f - sa) * (1.0f - da);
1382 auto c = Ops::convert(
color);
1383 if (const_alpha == 255) {
1385 auto d = Ops::load(&dest[
i]);
1386 d = Ops::plus(
d,
c);
1387 Ops::store(&dest[
i],
d);
1390 uint ia = 255 - const_alpha;
1392 auto d = Ops::load(&dest[
i]);
1393 d = Ops::interpolate8bit(Ops::plus(
d,
c), const_alpha,
d, ia);
1394 Ops::store(&dest[
i],
d);
1404 if (const_alpha == 255) {
1406 auto d = Ops::load(&dest[
i]);
1407 auto s = Ops::load(&
src[
i]);
1408 d = Ops::plus(
d,
s);
1409 Ops::store(&dest[
i],
d);
1412 uint ia = 255 - const_alpha;
1414 auto d = Ops::load(&dest[
i]);
1415 auto s = Ops::load(&
src[
i]);
1416 d = Ops::interpolate8bit(Ops::plus(
d,
s), const_alpha,
d, ia);
1417 Ops::store(&dest[
i],
d);
1424 comp_func_solid_Plus_template<Argb32Operations>(dest,
length,
color, const_alpha);
1429 comp_func_Plus_template<Argb32Operations>(dest,
src,
length, const_alpha);
1432#if QT_CONFIG(raster_64bit)
1435 comp_func_solid_Plus_template<Rgba64Operations>(dest,
length,
color, const_alpha);
1440 comp_func_Plus_template<Rgba64Operations>(dest,
src,
length, const_alpha);
1444#if QT_CONFIG(raster_fp)
1447 comp_func_solid_Plus_template<RgbaFPOperations>(dest,
length,
color, const_alpha);
1452 comp_func_Plus_template<RgbaFPOperations>(dest,
src,
length, const_alpha);
1464template <
typename T>
1476#define OP(a, b) multiply_op(a, b, da, sa)
1489 if (const_alpha == 255)
1495#if QT_CONFIG(raster_64bit)
1501template <
typename T>
1511 uint da =
d.alpha();
1513#define OP(a, b) multiply_op_rgb64(a, b, da, sa)
1517 uint a = mix_alpha_rgb64(da, sa);
1526 if (const_alpha == 255)
1533#if QT_CONFIG(raster_fp)
1534static inline float multiply_op_rgbafp(
float dst,
float src,
float da,
float sa)
1536 return src *
dst +
src * (1.0f - da) +
dst * (1.0f - sa);
1539template <
typename T>
1542 float sa =
color.alpha();
1543 float sr =
color.red();
1544 float sg =
color.green();
1545 float sb =
color.blue();
1549 float da =
d.alpha();
1551#define OP(a, b) multiply_op_rgbafp(a, b, da, sa)
1552 float r =
OP(
d.red(), sr);
1553 float b =
OP(
d.blue(), sb);
1554 float g =
OP(
d.green(), sg);
1555 float a = mix_alpha_rgbafp(da, sa);
1558 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
1564 if (const_alpha == 255)
1572template <
typename T>
1582#define OP(a, b) multiply_op(a, b, da, sa)
1595 if (const_alpha == 255)
1601#if QT_CONFIG(raster_64bit)
1602template <
typename T>
1609 uint da =
d.alpha();
1610 uint sa =
s.alpha();
1612#define OP(a, b) multiply_op_rgb64(a, b, da, sa)
1616 uint a = mix_alpha_rgb64(da, sa);
1625 if (const_alpha == 255)
1632#if QT_CONFIG(raster_fp)
1633template <
typename T>
1640 float da =
d.alpha();
1641 float sa =
s.alpha();
1643#define OP(a, b) multiply_op_rgbafp(a, b, da, sa)
1644 float r =
OP(
d.red(),
s.red());
1645 float b =
OP(
d.blue(),
s.blue());
1646 float g =
OP(
d.green(),
s.green());
1647 float a = mix_alpha_rgbafp(da, sa);
1650 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
1656 if (const_alpha == 255)
1667template <
typename T>
1679#define OP(a, b) 255 - qt_div_255((255-a) * (255-b))
1692 if (const_alpha == 255)
1698#if QT_CONFIG(raster_64bit)
1699template <
typename T>
1709 uint da =
d.alpha();
1711#define OP(a, b) 65535 - qt_div_65535((65535U-a) * (65535U-b))
1715 uint a = mix_alpha_rgb64(da, sa);
1724 if (const_alpha == 255)
1731#if QT_CONFIG(raster_fp)
1732template <
typename T>
1735 float sa =
color.alpha();
1736 float sr =
color.red();
1737 float sg =
color.green();
1738 float sb =
color.blue();
1742 float da =
d.alpha();
1744#define OP(a, b) (1.0f - ((1.0f - a) * (1.0f - b)))
1745 float r =
OP(
d.red(), sr);
1746 float b =
OP(
d.blue(), sb);
1747 float g =
OP(
d.green(), sg);
1748 float a = mix_alpha_rgbafp(da, sa);
1751 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
1757 if (const_alpha == 255)
1764template <
typename T>
1774#define OP(a, b) 255 - qt_div_255((255-a) * (255-b))
1787 if (const_alpha == 255)
1793#if QT_CONFIG(raster_64bit)
1794template <
typename T>
1801 uint da =
d.alpha();
1802 uint sa =
s.alpha();
1804#define OP(a, b) 65535U - qt_div_65535((65535U-a) * (65535U-b))
1808 uint a = mix_alpha_rgb64(da, sa);
1817 if (const_alpha == 255)
1824#if QT_CONFIG(raster_fp)
1825template <
typename T>
1832 float da =
d.alpha();
1833 float sa =
s.alpha();
1835#define OP(a, b) (1.0f - ((1.0f - a) * (1.0f - b)))
1836 float r =
OP(
d.red(),
s.red());
1837 float b =
OP(
d.blue(),
s.blue());
1838 float g =
OP(
d.green(),
s.green());
1839 float a = mix_alpha_rgbafp(da, sa);
1842 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
1848 if (const_alpha == 255)
1863 const int temp =
src * (255 - da) +
dst * (255 - sa);
1870template <
typename T>
1882#define OP(a, b) overlay_op(a, b, da, sa)
1895 if (const_alpha == 255)
1901#if QT_CONFIG(raster_64bit)
1904 const uint temp =
src * (65535U - da) +
dst * (65535U - sa);
1911template <
typename T>
1921 uint da =
d.alpha();
1923#define OP(a, b) overlay_op_rgb64(a, b, da, sa)
1927 uint a = mix_alpha_rgb64(da, sa);
1936 if (const_alpha == 255)
1943#if QT_CONFIG(raster_fp)
1944static inline float overlay_op_rgbafp(
float dst,
float src,
float da,
float sa)
1946 const float temp =
src * (1.0f - da) +
dst * (1.0f - sa);
1948 return 2 *
src *
dst + temp;
1950 return sa * da - 2 * (da -
dst) * (sa -
src) + temp;
1953template <
typename T>
1956 float sa =
color.alpha();
1957 float sr =
color.red();
1958 float sg =
color.green();
1959 float sb =
color.blue();
1963 float da =
d.alpha();
1965#define OP(a, b) overlay_op_rgbafp(a, b, da, sa)
1966 float r =
OP(
d.red(), sr);
1967 float b =
OP(
d.blue(), sb);
1968 float g =
OP(
d.green(), sg);
1969 float a = mix_alpha_rgbafp(da, sa);
1972 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
1978 if (const_alpha == 255)
1985template <
typename T>
1995#define OP(a, b) overlay_op(a, b, da, sa)
2008 if (const_alpha == 255)
2014#if QT_CONFIG(raster_64bit)
2015template <
typename T>
2022 uint da =
d.alpha();
2023 uint sa =
s.alpha();
2025#define OP(a, b) overlay_op_rgb64(a, b, da, sa)
2029 uint a = mix_alpha_rgb64(da, sa);
2038 if (const_alpha == 255)
2045#if QT_CONFIG(raster_fp)
2046template <
typename T>
2053 float da =
d.alpha();
2054 float sa =
s.alpha();
2056#define OP(a, b) overlay_op_rgbafp(a, b, da, sa)
2057 float r =
OP(
d.red(),
s.red());
2058 float b =
OP(
d.blue(),
s.blue());
2059 float g =
OP(
d.green(),
s.green());
2060 float a = mix_alpha_rgbafp(da, sa);
2063 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
2069 if (const_alpha == 255)
2085template <
typename T>
2097#define OP(a, b) darken_op(a, b, da, sa)
2110 if (const_alpha == 255)
2116#if QT_CONFIG(raster_64bit)
2122template <
typename T>
2132 uint da =
d.alpha();
2134#define OP(a, b) darken_op_rgb64(a, b, da, sa)
2138 uint a = mix_alpha_rgb64(da, sa);
2147 if (const_alpha == 255)
2154#if QT_CONFIG(raster_fp)
2155static inline float darken_op_rgbafp(
float dst,
float src,
float da,
float sa)
2160template <
typename T>
2163 float sa =
color.alpha();
2164 float sr =
color.red();
2165 float sg =
color.green();
2166 float sb =
color.blue();
2170 float da =
d.alpha();
2172#define OP(a, b) darken_op_rgbafp(a, b, da, sa)
2173 float r =
OP(
d.red(), sr);
2174 float b =
OP(
d.blue(), sb);
2175 float g =
OP(
d.green(), sg);
2176 float a = mix_alpha_rgbafp(da, sa);
2179 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
2185 if (const_alpha == 255)
2192template <
typename T>
2202#define OP(a, b) darken_op(a, b, da, sa)
2215 if (const_alpha == 255)
2221#if QT_CONFIG(raster_64bit)
2222template <
typename T>
2229 uint da =
d.alpha();
2230 uint sa =
s.alpha();
2232#define OP(a, b) darken_op_rgb64(a, b, da, sa)
2236 uint a = mix_alpha_rgb64(da, sa);
2245 if (const_alpha == 255)
2252#if QT_CONFIG(raster_fp)
2253template <
typename T>
2260 float da =
d.alpha();
2261 float sa =
s.alpha();
2263#define OP(a, b) darken_op_rgbafp(a, b, da, sa)
2264 float r =
OP(
d.red(),
s.red());
2265 float b =
OP(
d.blue(),
s.blue());
2266 float g =
OP(
d.green(),
s.green());
2267 float a = mix_alpha_rgbafp(da, sa);
2270 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
2276 if (const_alpha == 255)
2292template <
typename T>
2304#define OP(a, b) lighten_op(a, b, da, sa)
2317 if (const_alpha == 255)
2324#if QT_CONFIG(raster_64bit)
2330template <
typename T>
2340 uint da =
d.alpha();
2342#define OP(a, b) lighten_op_rgb64(a, b, da, sa)
2346 uint a = mix_alpha_rgb64(da, sa);
2355 if (const_alpha == 255)
2362#if QT_CONFIG(raster_fp)
2363static inline float lighten_op_rgbafp(
float dst,
float src,
float da,
float sa)
2368template <
typename T>
2371 float sa =
color.alpha();
2372 float sr =
color.red();
2373 float sg =
color.green();
2374 float sb =
color.blue();
2378 float da =
d.alpha();
2380#define OP(a, b) lighten_op_rgbafp(a, b, da, sa)
2381 float r =
OP(
d.red(), sr);
2382 float b =
OP(
d.blue(), sb);
2383 float g =
OP(
d.green(), sg);
2384 float a = mix_alpha_rgbafp(da, sa);
2387 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
2393 if (const_alpha == 255)
2400template <
typename T>
2410#define OP(a, b) lighten_op(a, b, da, sa)
2423 if (const_alpha == 255)
2429#if QT_CONFIG(raster_64bit)
2430template <
typename T>
2437 uint da =
d.alpha();
2438 uint sa =
s.alpha();
2440#define OP(a, b) lighten_op_rgb64(a, b, da, sa)
2444 uint a = mix_alpha_rgb64(da, sa);
2453 if (const_alpha == 255)
2460#if QT_CONFIG(raster_fp)
2461template <
typename T>
2468 float da =
d.alpha();
2469 float sa =
s.alpha();
2471#define OP(a, b) lighten_op_rgbafp(a, b, da, sa)
2472 float r =
OP(
d.red(),
s.red());
2473 float b =
OP(
d.blue(),
s.blue());
2474 float g =
OP(
d.green(),
s.green());
2475 float a = mix_alpha_rgbafp(da, sa);
2478 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
2484 if (const_alpha == 255)
2501 const int sa_da = sa * da;
2502 const int dst_sa =
dst * sa;
2503 const int src_da =
src * da;
2505 const int temp =
src * (255 - da) +
dst * (255 - sa);
2506 if (src_da + dst_sa > sa_da)
2508 else if (
src == sa || sa == 0)
2511 return qt_div_255(255 * dst_sa / (255 - 255 *
src / sa) + temp);
2514template <
typename T>
2526#define OP(a,b) color_dodge_op(a, b, da, sa)
2539 if (const_alpha == 255)
2545#if QT_CONFIG(raster_64bit)
2548 const qint64 sa_da = sa * da;
2552 const qint64 temp =
src * (65535U - da) +
dst * (65535U - sa);
2553 if (src_da + dst_sa > sa_da)
2555 else if (
src == sa || sa == 0)
2558 return qt_div_65535(65535U * dst_sa / (65535U - 65535U *
src / sa) + temp);
2561template <
typename T>
2571 uint da =
d.alpha();
2573#define OP(a,b) color_dodge_op_rgb64(a, b, da, sa)
2577 uint a = mix_alpha_rgb64(da, sa);
2586 if (const_alpha == 255)
2593#if QT_CONFIG(raster_fp)
2594static inline float color_dodge_op_rgbafp(
float dst,
float src,
float da,
float sa)
2596 const float sa_da = sa * da;
2597 const float dst_sa =
dst * sa;
2598 const float src_da =
src * da;
2600 const float temp =
src * (1.0f - da) +
dst * (1.0f - sa);
2601 if (src_da + dst_sa > sa_da)
2602 return sa_da + temp;
2603 else if (
src == sa || sa == 0.0f)
2606 return dst_sa / (1.0f -
src / sa) + temp;
2609template <
typename T>
2612 float sa =
color.alpha();
2613 float sr =
color.red();
2614 float sg =
color.green();
2615 float sb =
color.blue();
2619 float da =
d.alpha();
2621#define OP(a,b) color_dodge_op_rgbafp(a, b, da, sa)
2622 float r =
OP(
d.red(), sr);
2623 float b =
OP(
d.blue(), sb);
2624 float g =
OP(
d.green(), sg);
2625 float a = mix_alpha_rgbafp(da, sa);
2628 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
2634 if (const_alpha == 255)
2641template <
typename T>
2651#define OP(a, b) color_dodge_op(a, b, da, sa)
2664 if (const_alpha == 255)
2670#if QT_CONFIG(raster_64bit)
2671template <
typename T>
2678 uint da =
d.alpha();
2679 uint sa =
s.alpha();
2681#define OP(a, b) color_dodge_op_rgb64(a, b, da, sa)
2685 uint a = mix_alpha_rgb64(da, sa);
2694 if (const_alpha == 255)
2701#if QT_CONFIG(raster_fp)
2702template <
typename T>
2709 float da =
d.alpha();
2710 float sa =
s.alpha();
2712#define OP(a, b) color_dodge_op_rgbafp(a, b, da, sa)
2713 float r =
OP(
d.red(),
s.red());
2714 float b =
OP(
d.blue(),
s.blue());
2715 float g =
OP(
d.green(),
s.green());
2716 float a = mix_alpha_rgbafp(da, sa);
2719 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
2725 if (const_alpha == 255)
2742 const int src_da =
src * da;
2743 const int dst_sa =
dst * sa;
2744 const int sa_da = sa * da;
2746 const int temp =
src * (255 - da) +
dst * (255 - sa);
2748 if (src_da + dst_sa < sa_da)
2752 return qt_div_255(sa * (src_da + dst_sa - sa_da) /
src + temp);
2755template <
typename T>
2767#define OP(a, b) color_burn_op(a, b, da, sa)
2780 if (const_alpha == 255)
2786#if QT_CONFIG(raster_64bit)
2791 const qint64 sa_da = sa * da;
2793 const qint64 temp =
src * (65535U - da) +
dst * (65535U - sa);
2795 if (src_da + dst_sa < sa_da)
2802template <
typename T>
2812 uint da =
d.alpha();
2814#define OP(a, b) color_burn_op_rgb64(a, b, da, sa)
2818 uint a = mix_alpha_rgb64(da, sa);
2827 if (const_alpha == 255)
2834#if QT_CONFIG(raster_fp)
2835static inline float color_burn_op_rgbafp(
float dst,
float src,
float da,
float sa)
2837 const float src_da =
src * da;
2838 const float dst_sa =
dst * sa;
2839 const float sa_da = sa * da;
2841 const float temp =
src * (1.0f - da) +
dst * (1.0f - sa);
2843 if (src_da + dst_sa < sa_da)
2846 return dst_sa + temp;
2847 return sa * (src_da + dst_sa - sa_da) /
src + temp;
2850template <
typename T>
2853 float sa =
color.alpha();
2854 float sr =
color.red();
2855 float sg =
color.green();
2856 float sb =
color.blue();
2860 float da =
d.alpha();
2862#define OP(a, b) color_burn_op_rgbafp(a, b, da, sa)
2863 float r =
OP(
d.red(), sr);
2864 float b =
OP(
d.blue(), sb);
2865 float g =
OP(
d.green(), sg);
2866 float a = mix_alpha_rgbafp(da, sa);
2869 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
2875 if (const_alpha == 255)
2882template <
typename T>
2892#define OP(a, b) color_burn_op(a, b, da, sa)
2905 if (const_alpha == 255)
2911#if QT_CONFIG(raster_64bit)
2912template <
typename T>
2919 uint da =
d.alpha();
2920 uint sa =
s.alpha();
2922#define OP(a, b) color_burn_op_rgb64(a, b, da, sa)
2926 uint a = mix_alpha_rgb64(da, sa);
2935 if (const_alpha == 255)
2942#if QT_CONFIG(raster_fp)
2943template <
typename T>
2950 float da =
d.alpha();
2951 float sa =
s.alpha();
2953#define OP(a, b) color_burn_op_rgbafp(a, b, da, sa)
2954 float r =
OP(
d.red(),
s.red());
2955 float b =
OP(
d.blue(),
s.blue());
2956 float g =
OP(
d.green(),
s.green());
2957 float a = mix_alpha_rgbafp(da, sa);
2960 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
2966 if (const_alpha == 255)
2981 const uint temp =
src * (255 - da) +
dst * (255 - sa);
2989template <
typename T>
3001#define OP(a, b) hardlight_op(a, b, da, sa)
3014 if (const_alpha == 255)
3020#if QT_CONFIG(raster_64bit)
3023 const uint temp =
src * (65535U - da) +
dst * (65535U - sa);
3031template <
typename T>
3041 uint da =
d.alpha();
3043#define OP(a, b) hardlight_op_rgb64(a, b, da, sa)
3047 uint a = mix_alpha_rgb64(da, sa);
3056 if (const_alpha == 255)
3063#if QT_CONFIG(raster_fp)
3064static inline float hardlight_op_rgbafp(
float dst,
float src,
float da,
float sa)
3066 const float temp =
src * (1.0f - da) +
dst * (1.0f - sa);
3069 return 2 *
src *
dst + temp;
3071 return sa * da - 2 * (da -
dst) * (sa -
src) + temp;
3074template <
typename T>
3077 float sa =
color.alpha();
3078 float sr =
color.red();
3079 float sg =
color.green();
3080 float sb =
color.blue();
3084 float da =
d.alpha();
3086#define OP(a, b) hardlight_op_rgbafp(a, b, da, sa)
3087 float r =
OP(
d.red(), sr);
3088 float b =
OP(
d.blue(), sb);
3089 float g =
OP(
d.green(), sg);
3090 float a = mix_alpha_rgbafp(da, sa);
3093 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
3099 if (const_alpha == 255)
3106template <
typename T>
3116#define OP(a, b) hardlight_op(a, b, da, sa)
3129 if (const_alpha == 255)
3135#if QT_CONFIG(raster_64bit)
3136template <
typename T>
3143 uint da =
d.alpha();
3144 uint sa =
s.alpha();
3146#define OP(a, b) hardlight_op_rgb64(a, b, da, sa)
3150 uint a = mix_alpha_rgb64(da, sa);
3159 if (const_alpha == 255)
3166#if QT_CONFIG(raster_fp)
3167template <
typename T>
3174 float da =
d.alpha();
3175 float sa =
s.alpha();
3177#define OP(a, b) hardlight_op_rgbafp(a, b, da, sa)
3178 float r =
OP(
d.red(),
s.red());
3179 float b =
OP(
d.blue(),
s.blue());
3180 float g =
OP(
d.green(),
s.green());
3181 float a = mix_alpha_rgbafp(da, sa);
3184 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
3190 if (const_alpha == 255)
3207 const int src2 =
src << 1;
3208 const int dst_np = da != 0 ? (255 *
dst) / da : 0;
3209 const int temp = (
src * (255 - da) +
dst * (255 - sa)) * 255;
3212 return (
dst * (sa * 255 + (src2 - sa) * (255 - dst_np)) + temp) / 65025;
3213 else if (4 *
dst <= da)
3214 return (
dst * sa * 255 + da * (src2 - sa) * ((((16 * dst_np - 12 * 255) * dst_np + 3 * 65025) * dst_np) / 65025) + temp) / 65025;
3216 return (
dst * sa * 255 + da * (src2 - sa) * (int(
qSqrt(
qreal(dst_np * 255))) - dst_np) + temp) / 65025;
3220template <
typename T>
3232#define OP(a, b) soft_light_op(a, b, da, sa)
3245 if (const_alpha == 255)
3251#if QT_CONFIG(raster_64bit)
3255 const qint64 dst_np = da != 0 ? (65535U *
dst) / da : 0;
3256 const qint64 temp = (
src * (65535U - da) +
dst * (65535U - sa)) * 65535U;
3260 return (
dst * (sa * 65535U + (src2 - sa) * (65535U - dst_np)) + temp) / factor;
3261 else if (4 *
dst <= da)
3262 return (
dst * sa * 65535U + da * (src2 - sa) * ((((16 * dst_np - 12 * 65535U) * dst_np + 3 * factor) * dst_np) / factor) + temp) / factor;
3264 return (
dst * sa * 65535U + da * (src2 - sa) * (
int(
qSqrt(
qreal(dst_np * 65535U))) - dst_np) + temp) / factor;
3268template <
typename T>
3278 uint da =
d.alpha();
3280#define OP(a, b) soft_light_op_rgb64(a, b, da, sa)
3284 uint a = mix_alpha_rgb64(da, sa);
3293 if (const_alpha == 255)
3301#if QT_CONFIG(raster_fp)
3302static inline float soft_light_op_rgbafp(
float dst,
float src,
float da,
float sa)
3304 const float src2 =
src * 2;
3305 const float dst_np = da != 0.0f ? (
dst / da) : 0.0f;
3306 const float temp =
src * (1.0f - da) +
dst * (1.0f - sa);
3309 return dst * (sa + (src2 - sa) * (1.0f - dst_np)) + temp;
3310 else if (4 *
dst <= da)
3311 return dst * sa + da * (src2 - sa) * (((16 * dst_np - 12) * dst_np + 3) * dst_np) + temp;
3313 return dst * sa + da * (src2 - sa) * (
qSqrt(
qreal(dst_np)) - dst_np) + temp;
3317template <
typename T>
3320 float sa =
color.alpha();
3321 float sr =
color.red();
3322 float sg =
color.green();
3323 float sb =
color.blue();
3327 float da =
d.alpha();
3329#define OP(a, b) soft_light_op_rgbafp(a, b, da, sa)
3330 float r =
OP(
d.red(), sr);
3331 float b =
OP(
d.blue(), sb);
3332 float g =
OP(
d.green(), sg);
3333 float a = mix_alpha_rgbafp(da, sa);
3336 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
3342 if (const_alpha == 255)
3349template <
typename T>
3359#define OP(a, b) soft_light_op(a, b, da, sa)
3372 if (const_alpha == 255)
3378#if QT_CONFIG(raster_64bit)
3379template <
typename T>
3386 uint da =
d.alpha();
3387 uint sa =
s.alpha();
3389#define OP(a, b) soft_light_op_rgb64(a, b, da, sa)
3393 uint a = mix_alpha_rgb64(da, sa);
3402 if (const_alpha == 255)
3409#if QT_CONFIG(raster_fp)
3410template <
typename T>
3417 float da =
d.alpha();
3418 float sa =
s.alpha();
3420#define OP(a, b) soft_light_op_rgbafp(a, b, da, sa)
3421 float r =
OP(
d.red(),
s.red());
3422 float b =
OP(
d.blue(),
s.blue());
3423 float g =
OP(
d.green(),
s.green());
3424 float a = mix_alpha_rgbafp(da, sa);
3427 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
3433 if (const_alpha == 255)
3449template <
typename T>
3461#define OP(a, b) difference_op(a, b, da, sa)
3474 if (const_alpha == 255)
3480#if QT_CONFIG(raster_64bit)
3486template <
typename T>
3496 uint da =
d.alpha();
3498#define OP(a, b) difference_op_rgb64(a, b, da, sa)
3502 uint a = mix_alpha_rgb64(da, sa);
3511 if (const_alpha == 255)
3518#if QT_CONFIG(raster_fp)
3519static inline float difference_op_rgbafp(
float dst,
float src,
float da,
float sa)
3524template <
typename T>
3527 float sa =
color.alpha();
3528 float sr =
color.red();
3529 float sg =
color.green();
3530 float sb =
color.blue();
3534 float da =
d.alpha();
3536#define OP(a, b) difference_op_rgbafp(a, b, da, sa)
3537 float r =
OP(
d.red(), sr);
3538 float b =
OP(
d.blue(), sb);
3539 float g =
OP(
d.green(), sg);
3540 float a = mix_alpha_rgbafp(da, sa);
3543 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
3549 if (const_alpha == 255)
3556template <
typename T>
3566#define OP(a, b) difference_op(a, b, da, sa)
3579 if (const_alpha == 255)
3585#if QT_CONFIG(raster_64bit)
3586template <
typename T>
3593 uint da =
d.alpha();
3594 uint sa =
s.alpha();
3596#define OP(a, b) difference_op_rgb64(a, b, da, sa)
3600 uint a = mix_alpha_rgb64(da, sa);
3609 if (const_alpha == 255)
3616#if QT_CONFIG(raster_fp)
3617template <
typename T>
3624 float da =
d.alpha();
3625 float sa =
s.alpha();
3627#define OP(a, b) difference_op_rgbafp(a, b, da, sa)
3628 float r =
OP(
d.red(),
s.red());
3629 float b =
OP(
d.blue(),
s.blue());
3630 float g =
OP(
d.green(),
s.green());
3631 float a = mix_alpha_rgbafp(da, sa);
3634 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
3640 if (const_alpha == 255)
3650template <
typename T>
3662#define OP(a, b) (a + b - qt_div_255(2*(a*b)))
3675 if (const_alpha == 255)
3681#if QT_CONFIG(raster_64bit)
3682template <
typename T>
3692 uint da =
d.alpha();
3694#define OP(a, b) (a + b - qt_div_65535(2*(qint64(a)*b)))
3698 uint a = mix_alpha_rgb64(da, sa);
3707 if (const_alpha == 255)
3714#if QT_CONFIG(raster_fp)
3715template <
typename T>
3718 float sa =
color.alpha();
3719 float sr =
color.red();
3720 float sg =
color.green();
3721 float sb =
color.blue();
3725 float da =
d.alpha();
3727#define OP(a, b) (a + b - (2.0f * a * b))
3728 float r =
OP(
d.red(), sr);
3729 float b =
OP(
d.blue(), sb);
3730 float g =
OP(
d.green(), sg);
3731 float a = mix_alpha_rgbafp(da, sa);
3734 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
3740 if (const_alpha == 255)
3747template <
typename T>
3757#define OP(a, b) (a + b - ((a*b) >> 7))
3770 if (const_alpha == 255)
3776#if QT_CONFIG(raster_64bit)
3777template <
typename T>
3784 uint da =
d.alpha();
3785 uint sa =
s.alpha();
3787#define OP(a, b) (a + b - ((qint64(a)*b) >> 15))
3791 uint a = mix_alpha_rgb64(da, sa);
3800 if (const_alpha == 255)
3807#if QT_CONFIG(raster_fp)
3808template <
typename T>
3815 float da =
d.alpha();
3816 float sa =
s.alpha();
3818#define OP(a, b) (a + b - (2.0f * a * b))
3819 float r =
OP(
d.red(),
s.red());
3820 float b =
OP(
d.blue(),
s.blue());
3821 float g =
OP(
d.green(),
s.green());
3822 float a = mix_alpha_rgbafp(da, sa);
3825 coverage.store(&dest[
i], qRgbaFloat32(
r,
g,
b,
a));
3831 if (const_alpha == 255)
3864 color |= 0xff000000;
3876 *dest = (*
src & *dest) | 0xff000000;
3887 color &= 0x00ffffff;
3899 *dest = (*
src ^ *dest) | 0xff000000;
3912 *dest = (
color & ~(*dest)) | 0xff000000;
3924 *dest = (~(*src) & ~(*dest)) | 0xff000000;
3937 *dest =
color | ~(*dest);
3949 *dest = ~(*src) | ~(*dest) | 0xff000000;
3962 *dest =
color ^ (*dest);
3974 *dest = ((~(*src)) ^ (*dest)) | 0xff000000;
3991 *dest++ = ~(*
src++) | 0xff000000;
4002 *dest =
color & *dest;
4014 *dest = (~(*src) & *dest) | 0xff000000;
4026 *dest = (
color & ~(*dest)) | 0xff000000;
4038 *dest = (*
src & ~(*dest)) | 0xff000000;
4050 *dest = (~(*src) | *dest) | 0xff000000;
4073 *dest = (*
src | ~(*dest)) | 0xff000000;
4085 *dest = (
color | ~(*dest)) | 0xff000000;
4186#if QT_CONFIG(raster_64bit)
4187 comp_func_solid_SourceOver_rgb64,
4188 comp_func_solid_DestinationOver_rgb64,
4189 comp_func_solid_Clear_rgb64,
4190 comp_func_solid_Source_rgb64,
4191 comp_func_solid_Destination_rgb64,
4192 comp_func_solid_SourceIn_rgb64,
4193 comp_func_solid_DestinationIn_rgb64,
4194 comp_func_solid_SourceOut_rgb64,
4195 comp_func_solid_DestinationOut_rgb64,
4196 comp_func_solid_SourceAtop_rgb64,
4197 comp_func_solid_DestinationAtop_rgb64,
4198 comp_func_solid_XOR_rgb64,
4199 comp_func_solid_Plus_rgb64,
4200 comp_func_solid_Multiply_rgb64,
4201 comp_func_solid_Screen_rgb64,
4202 comp_func_solid_Overlay_rgb64,
4203 comp_func_solid_Darken_rgb64,
4204 comp_func_solid_Lighten_rgb64,
4205 comp_func_solid_ColorDodge_rgb64,
4206 comp_func_solid_ColorBurn_rgb64,
4207 comp_func_solid_HardLight_rgb64,
4208 comp_func_solid_SoftLight_rgb64,
4209 comp_func_solid_Difference_rgb64,
4210 comp_func_solid_Exclusion_rgb64,
4212 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
4213 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
4214 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
4216 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
4217 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr
4221#if QT_CONFIG(raster_fp)
4222 comp_func_solid_SourceOver_rgbafp,
4223 comp_func_solid_DestinationOver_rgbafp,
4224 comp_func_solid_Clear_rgbafp,
4225 comp_func_solid_Source_rgbafp,
4226 comp_func_solid_Destination_rgbafp,
4227 comp_func_solid_SourceIn_rgbafp,
4228 comp_func_solid_DestinationIn_rgbafp,
4229 comp_func_solid_SourceOut_rgbafp,
4230 comp_func_solid_DestinationOut_rgbafp,
4231 comp_func_solid_SourceAtop_rgbafp,
4232 comp_func_solid_DestinationAtop_rgbafp,
4233 comp_func_solid_XOR_rgbafp,
4234 comp_func_solid_Plus_rgbafp,
4235 comp_func_solid_Multiply_rgbafp,
4236 comp_func_solid_Screen_rgbafp,
4237 comp_func_solid_Overlay_rgbafp,
4238 comp_func_solid_Darken_rgbafp,
4239 comp_func_solid_Lighten_rgbafp,
4240 comp_func_solid_ColorDodge_rgbafp,
4241 comp_func_solid_ColorBurn_rgbafp,
4242 comp_func_solid_HardLight_rgbafp,
4243 comp_func_solid_SoftLight_rgbafp,
4244 comp_func_solid_Difference_rgbafp,
4245 comp_func_solid_Exclusion_rgbafp,
4247 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4248 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4251 0, 0, 0, 0, 0, 0, 0, 0
4296#if QT_CONFIG(raster_64bit)
4297 comp_func_SourceOver_rgb64,
4298 comp_func_DestinationOver_rgb64,
4299 comp_func_Clear_rgb64,
4300 comp_func_Source_rgb64,
4301 comp_func_Destination_rgb64,
4302 comp_func_SourceIn_rgb64,
4303 comp_func_DestinationIn_rgb64,
4304 comp_func_SourceOut_rgb64,
4305 comp_func_DestinationOut_rgb64,
4306 comp_func_SourceAtop_rgb64,
4307 comp_func_DestinationAtop_rgb64,
4308 comp_func_XOR_rgb64,
4309 comp_func_Plus_rgb64,
4310 comp_func_Multiply_rgb64,
4311 comp_func_Screen_rgb64,
4312 comp_func_Overlay_rgb64,
4313 comp_func_Darken_rgb64,
4314 comp_func_Lighten_rgb64,
4315 comp_func_ColorDodge_rgb64,
4316 comp_func_ColorBurn_rgb64,
4317 comp_func_HardLight_rgb64,
4318 comp_func_SoftLight_rgb64,
4319 comp_func_Difference_rgb64,
4320 comp_func_Exclusion_rgb64,
4322 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
4323 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
4324 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
4326 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
4327 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr
4331#if QT_CONFIG(raster_fp)
4332 comp_func_SourceOver_rgbafp,
4333 comp_func_DestinationOver_rgbafp,
4334 comp_func_Clear_rgbafp,
4335 comp_func_Source_rgbafp,
4336 comp_func_Destination_rgbafp,
4337 comp_func_SourceIn_rgbafp,
4338 comp_func_DestinationIn_rgbafp,
4339 comp_func_SourceOut_rgbafp,
4340 comp_func_DestinationOut_rgbafp,
4341 comp_func_SourceAtop_rgbafp,
4342 comp_func_DestinationAtop_rgbafp,
4343 comp_func_XOR_rgbafp,
4344 comp_func_Plus_rgbafp,
4345 comp_func_Multiply_rgbafp,
4346 comp_func_Screen_rgbafp,
4347 comp_func_Overlay_rgbafp,
4348 comp_func_Darken_rgbafp,
4349 comp_func_Lighten_rgbafp,
4350 comp_func_ColorDodge_rgbafp,
4351 comp_func_ColorBurn_rgbafp,
4352 comp_func_HardLight_rgbafp,
4353 comp_func_SoftLight_rgbafp,
4354 comp_func_Difference_rgbafp,
4355 comp_func_Exclusion_rgbafp,
4357 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4358 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4361 0, 0, 0, 0, 0, 0, 0, 0
static constexpr QRgba64 fromRgba64(quint64 c)
Combined button and popup list for selecting options.
void QT_FASTCALL comp_func_solid_DestinationOver(uint *dest, int length, uint color, uint const_alpha)
CompositionFunctionFP qt_functionForModeFP_C[]
static void comp_func_solid_ColorBurn_impl(uint *dest, int length, uint color, const T &coverage)
void QT_FASTCALL rasterop_solid_SourceOrNotDestination(uint *Q_DECL_RESTRICT dest, int length, uint color, uint const_alpha)
static void comp_func_solid_ColorDodge_impl(uint *dest, int length, uint color, const T &coverage)
void QT_FASTCALL comp_func_SoftLight(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_solid_Darken_impl(uint *dest, int length, uint color, const T &coverage)
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)
void QT_FASTCALL comp_func_solid_Screen(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL rasterop_solid_ClearDestination(uint *Q_DECL_RESTRICT dest, int length, uint color, uint const_alpha)
static void comp_func_solid_SoftLight_impl(uint *dest, int length, uint color, const T &coverage)
void QT_FASTCALL comp_func_DestinationOver(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_Difference_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
void QT_FASTCALL comp_func_solid_Exclusion(uint *dest, int length, uint color, uint const_alpha)
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)
void QT_FASTCALL comp_func_solid_SoftLight(uint *dest, int length, uint color, uint const_alpha)
static void comp_func_Clear_template(typename Ops::Type *dest, int length, uint const_alpha)
void QT_FASTCALL rasterop_solid_NotSourceAndNotDestination(uint *dest, int length, uint color, uint const_alpha)
CompositionFunctionSolid64 qt_functionForModeSolid64_C[]
void QT_FASTCALL rasterop_solid_NotSourceAndDestination(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_solid_Difference(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_solid_SourceIn(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_SourceOver(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_solid_SourceAtop(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_SourceIn(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, 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)
void QT_FASTCALL rasterop_NotSourceOrNotDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
static int color_dodge_op(int dst, int src, int da, int sa)
void QT_FASTCALL comp_func_XOR(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_solid_HardLight_impl(uint *dest, int length, uint color, const T &coverage)
CompositionFunctionSolid qt_functionForModeSolid_C[]
void QT_FASTCALL rasterop_solid_NotSourceXorDestination(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_HardLight(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_solid_ColorBurn(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL rasterop_NotSourceAndNotDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL rasterop_SourceXorDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
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)
void QT_FASTCALL rasterop_solid_SourceAndNotDestination(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_Plus(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL rasterop_SourceAndDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_solid_Multiply(uint *dest, int length, uint color, uint const_alpha)
static void comp_func_solid_SourceIn_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
void QT_FASTCALL comp_func_DestinationOut(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_solid_Plus_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
void QT_FASTCALL rasterop_SetDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL rasterop_solid_SetDestination(uint *Q_DECL_RESTRICT dest, int length, uint 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
void QT_FASTCALL comp_func_Clear(uint *dest, const uint *, int length, uint const_alpha)
void QT_FASTCALL rasterop_solid_NotSourceOrNotDestination(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_ColorDodge(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_Screen(uint *dest, const uint *src, int length, uint const_alpha)
static void comp_func_solid_Difference_impl(uint *dest, int length, uint color, const T &coverage)
void QT_FASTCALL comp_func_solid_DestinationIn(uint *dest, int length, uint color, uint const_alpha)
static int multiply_op(int dst, int src, int da, int sa)
void QT_FASTCALL rasterop_solid_SourceXorDestination(uint *dest, int length, uint color, uint const_alpha)
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)
void QT_FASTCALL comp_func_solid_Overlay(uint *dest, int length, uint color, uint const_alpha)
static int soft_light_op(int dst, int src, int da, int sa)
void QT_FASTCALL comp_func_solid_Darken(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL rasterop_NotSource(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL rasterop_solid_SourceAndDestination(uint *dest, int length, uint color, uint const_alpha)
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)
void QT_FASTCALL comp_func_ColorBurn(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_Lighten(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_Source(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, 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)
void QT_FASTCALL comp_func_solid_Clear(uint *dest, int length, uint, uint const_alpha)
void QT_FASTCALL rasterop_SourceOrDestination(uint *Q_DECL_RESTRICT dest, const uint *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)
void QT_FASTCALL comp_func_Destination(uint *, const uint *, int, uint)
static int mix_alpha(int da, int sa)
void QT_FASTCALL rasterop_SourceOrNotDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_Exclusion(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_Difference(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL rasterop_NotSourceAndDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_solid_DestinationOut(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_solid_ColorDodge(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_SourceAtop(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
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)
void QT_FASTCALL rasterop_solid_NotSource(uint *dest, int length, uint color, 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)
void QT_FASTCALL comp_func_solid_XOR(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_Overlay(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
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)
static void comp_func_Overlay_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
void QT_FASTCALL rasterop_NotDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_Multiply(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_SourceOut(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
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)
void QT_FASTCALL rasterop_NotSourceOrDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
CompositionFunctionSolidFP qt_functionForModeSolidFP_C[]
static int lighten_op(int dst, int src, int da, int sa)
void QT_FASTCALL comp_func_DestinationIn(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
static void comp_func_Screen_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
void QT_FASTCALL rasterop_solid_NotDestination(uint *Q_DECL_RESTRICT dest, int length, uint color, uint const_alpha)
static void comp_func_solid_DestinationAtop_template(typename Ops::Type *dest, int length, typename Ops::Type color, uint const_alpha)
void QT_FASTCALL comp_func_DestinationAtop(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_solid_HardLight(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL rasterop_NotSourceXorDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_solid_SourceOut(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_solid_Source(uint *dest, int length, uint color, uint const_alpha)
CompositionFunction qt_functionForMode_C[]
void QT_FASTCALL comp_func_solid_SourceOver(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL comp_func_solid_Lighten(uint *dest, int length, uint color, uint const_alpha)
static void QT_FASTCALL comp_func_solid_Exclusion_impl(uint *dest, int length, uint color, const T &coverage)
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)
void QT_FASTCALL comp_func_solid_Plus(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL rasterop_SourceAndNotDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
void QT_FASTCALL comp_func_solid_Destination(uint *, int, uint, uint)
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)
void QT_FASTCALL comp_func_Darken(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
static int darken_op(int dst, int src, int da, int sa)
void QT_FASTCALL comp_func_solid_DestinationAtop(uint *dest, int length, uint color, uint const_alpha)
void QT_FASTCALL rasterop_solid_NotSourceOrDestination(uint *Q_DECL_RESTRICT dest, int length, uint color, uint const_alpha)
void QT_FASTCALL rasterop_ClearDestination(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
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)
void QT_FASTCALL rasterop_solid_SourceOrDestination(uint *dest, int length, uint color, uint const_alpha)
CompositionFunction64 qt_functionForMode64_C[]
void qt_memfill64(quint64 *dest, quint64 color, qsizetype count)
void qt_memfill32(quint32 *dest, quint32 color, qsizetype count)
void(QT_FASTCALL * CompositionFunction64)(QRgba64 *Q_DECL_RESTRICT dest, const QRgba64 *Q_DECL_RESTRICT src, int length, uint const_alpha)
static constexpr uint qt_div_65535(uint x)
void qt_memfill(T *dest, T value, qsizetype count)
void(QT_FASTCALL * CompositionFunctionSolid)(uint *dest, int length, uint color, uint const_alpha)
void(QT_FASTCALL * CompositionFunction)(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
static constexpr int qt_div_255(int x)
static uint INTERPOLATE_PIXEL_255(uint x, uint a, uint y, uint b)
void(QT_FASTCALL * CompositionFunctionFP)(QRgbaFloat32 *Q_DECL_RESTRICT dest, const QRgbaFloat32 *Q_DECL_RESTRICT src, int length, uint const_alpha)
static uint BYTE_MUL(uint x, uint a)
void(QT_FASTCALL * CompositionFunctionSolid64)(QRgba64 *dest, int length, QRgba64 color, uint const_alpha)
uint comp_func_Plus_one_pixel(uint d, const uint s)
void(QT_FASTCALL * CompositionFunctionSolidFP)(QRgbaFloat32 *dest, int length, QRgbaFloat32 color, uint const_alpha)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
qfloat16 qSqrt(qfloat16 f)
static qreal interpolate(const QPair< QGraphicsAnchorLayoutPrivate::Interval, qreal > &factor, qreal min, qreal minPref, qreal pref, qreal maxPref, qreal max)
static ControlElement< T > * ptr(QWidget *widget)
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qMax(const T &a, const T &b)
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLint GLint GLint GLint GLint x
[0]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLenum GLsizei length
GLfloat GLfloat GLfloat alpha
static void add(QPainterPath &path, const QWingedEdge &list, int edge, QPathEdge::Traversal traversal)
QT_BEGIN_NAMESPACE typedef unsigned int QRgb
constexpr int qRed(QRgb rgb)
constexpr int qGreen(QRgb rgb)
constexpr QRgb qRgba(int r, int g, int b, int a)
constexpr int qBlue(QRgb rgb)
constexpr int qAlpha(QRgb rgb)
constexpr QRgba64 qRgba64(quint16 r, quint16 g, quint16 b, quint16 a)
static QRgba64 multiplyAlpha65535(QRgba64 rgba64, uint alpha65535)
static QRgba64 interpolate65535(QRgba64 x, uint alpha1, QRgba64 y, uint alpha2)
static QRgba64 interpolate255(QRgba64 x, uint alpha1, QRgba64 y, uint alpha2)
static T multiplyAlpha255(T rgba64, uint alpha255)
static QRgba64 addWithSaturation(QRgba64 a, QRgba64 b)
unsigned long long quint64
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 OptimalScalar multiplyAlpha8bit(OptimalScalar val, 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 add(OptimalScalar a, OptimalScalar b)
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 OptimalScalar invAlpha(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)