2 /* blend pixel x color --> dst */
6 _op_blend_p_c_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
9 DATA32 sc = MUL4_SYM(c, *s);
11 *d = sc + MUL_256(l, *d);
18 _op_blend_pan_c_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
22 *d = ((c & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(l, *d);
29 _op_blend_p_can_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
33 *d = ((*s & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(l, *d);
40 _op_blend_pan_can_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
43 *d++ = 0xff000000 + MUL3_SYM(c, *s);
49 _op_blend_p_caa_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
53 DATA32 sc = MUL_256(c, *s);
55 *d = sc + MUL_256(l, *d);
62 _op_blend_pan_caa_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
66 *d = INTERP_256(c, *s, *d);
72 #define _op_blend_pas_c_dp _op_blend_p_c_dp
73 #define _op_blend_pas_can_dp _op_blend_p_can_dp
74 #define _op_blend_pas_caa_dp _op_blend_p_caa_dp
76 #define _op_blend_p_c_dpan _op_blend_p_c_dp
77 #define _op_blend_pas_c_dpan _op_blend_pas_c_dp
78 #define _op_blend_pan_c_dpan _op_blend_pan_c_dp
79 #define _op_blend_p_can_dpan _op_blend_p_can_dp
80 #define _op_blend_pas_can_dpan _op_blend_pas_can_dp
81 #define _op_blend_pan_can_dpan _op_blend_pan_can_dp
82 #define _op_blend_p_caa_dpan _op_blend_p_caa_dp
83 #define _op_blend_pas_caa_dpan _op_blend_pas_caa_dp
84 #define _op_blend_pan_caa_dpan _op_blend_pan_caa_dp
87 init_blend_pixel_color_span_funcs_c(void)
89 op_blend_span_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_p_c_dp;
90 op_blend_span_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_pas_c_dp;
91 op_blend_span_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_pan_c_dp;
92 op_blend_span_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_p_can_dp;
93 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_pas_can_dp;
94 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_pan_can_dp;
95 op_blend_span_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_p_caa_dp;
96 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_pas_caa_dp;
97 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_pan_caa_dp;
99 op_blend_span_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_p_c_dpan;
100 op_blend_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_pas_c_dpan;
101 op_blend_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_pan_c_dpan;
102 op_blend_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_p_can_dpan;
103 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pas_can_dpan;
104 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pan_can_dpan;
105 op_blend_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_p_caa_dpan;
106 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pas_caa_dpan;
107 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pan_caa_dpan;
113 _op_blend_pt_p_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
116 *d = s + MUL_256(c, *d);
119 #define _op_blend_pt_pas_c_dp _op_blend_pt_p_c_dp
120 #define _op_blend_pt_pan_c_dp _op_blend_pt_p_c_dp
121 #define _op_blend_pt_p_can_dp _op_blend_pt_p_c_dp
122 #define _op_blend_pt_pas_can_dp _op_blend_pt_p_c_dp
123 #define _op_blend_pt_pan_can_dp _op_blend_pt_p_c_dp
124 #define _op_blend_pt_p_caa_dp _op_blend_pt_p_c_dp
125 #define _op_blend_pt_pas_caa_dp _op_blend_pt_p_c_dp
126 #define _op_blend_pt_pan_caa_dp _op_blend_pt_p_c_dp
128 #define _op_blend_pt_p_c_dpan _op_blend_pt_p_c_dp
129 #define _op_blend_pt_pas_c_dpan _op_blend_pt_pas_c_dp
130 #define _op_blend_pt_pan_c_dpan _op_blend_pt_pan_c_dp
131 #define _op_blend_pt_p_can_dpan _op_blend_pt_p_can_dp
132 #define _op_blend_pt_pas_can_dpan _op_blend_pt_pas_can_dp
133 #define _op_blend_pt_pan_can_dpan _op_blend_pt_pan_can_dp
134 #define _op_blend_pt_p_caa_dpan _op_blend_pt_p_caa_dp
135 #define _op_blend_pt_pas_caa_dpan _op_blend_pt_pas_caa_dp
136 #define _op_blend_pt_pan_caa_dpan _op_blend_pt_pan_caa_dp
139 init_blend_pixel_color_pt_funcs_c(void)
141 op_blend_pt_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_pt_p_c_dp;
142 op_blend_pt_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_pt_pas_c_dp;
143 op_blend_pt_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_pt_pan_c_dp;
144 op_blend_pt_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_pt_p_can_dp;
145 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_pt_pas_can_dp;
146 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_pt_pan_can_dp;
147 op_blend_pt_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_p_caa_dp;
148 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_pas_caa_dp;
149 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_pan_caa_dp;
151 op_blend_pt_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_p_c_dpan;
152 op_blend_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_pas_c_dpan;
153 op_blend_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_pan_c_dpan;
154 op_blend_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pt_p_can_dpan;
155 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pt_pas_can_dpan;
156 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pt_pan_can_dpan;
157 op_blend_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_p_caa_dpan;
158 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_pas_caa_dpan;
159 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_pan_caa_dpan;
165 /* blend_rel pixel x color -> dst */
169 _op_blend_rel_p_c_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
172 DATA32 sc = MUL4_SYM(c, *s);
173 l = 256 - (sc >> 24);
174 *d = MUL_SYM(*d >> 24, sc) + MUL_256(l, *d);
180 #define _op_blend_rel_pas_c_dp _op_blend_rel_p_c_dp
181 #define _op_blend_rel_pan_c_dp _op_blend_rel_p_c_dp
182 #define _op_blend_rel_p_can_dp _op_blend_rel_p_c_dp
183 #define _op_blend_rel_pas_can_dp _op_blend_rel_p_c_dp
184 #define _op_blend_rel_pan_can_dp _op_blend_rel_p_c_dp
185 #define _op_blend_rel_p_caa_dp _op_blend_rel_p_c_dp
186 #define _op_blend_rel_pas_caa_dp _op_blend_rel_p_c_dp
187 #define _op_blend_rel_pan_caa_dp _op_blend_rel_p_c_dp
189 #define _op_blend_rel_p_c_dpan _op_blend_p_c_dpan
190 #define _op_blend_rel_pas_c_dpan _op_blend_pas_c_dpan
191 #define _op_blend_rel_pan_c_dpan _op_blend_pan_c_dpan
192 #define _op_blend_rel_p_can_dpan _op_blend_p_can_dpan
193 #define _op_blend_rel_pas_can_dpan _op_blend_pas_can_dpan
194 #define _op_blend_rel_pan_can_dpan _op_blend_pan_can_dpan
195 #define _op_blend_rel_p_caa_dpan _op_blend_p_caa_dpan
196 #define _op_blend_rel_pas_caa_dpan _op_blend_pas_caa_dpan
197 #define _op_blend_rel_pan_caa_dpan _op_blend_pan_caa_dpan
200 init_blend_rel_pixel_color_span_funcs_c(void)
202 op_blend_rel_span_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_rel_p_c_dp;
203 op_blend_rel_span_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_rel_pas_c_dp;
204 op_blend_rel_span_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_rel_pan_c_dp;
205 op_blend_rel_span_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_p_can_dp;
206 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pas_can_dp;
207 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pan_can_dp;
208 op_blend_rel_span_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_p_caa_dp;
209 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pas_caa_dp;
210 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pan_caa_dp;
212 op_blend_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_p_c_dpan;
213 op_blend_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pas_c_dpan;
214 op_blend_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pan_c_dpan;
215 op_blend_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_p_can_dpan;
216 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pas_can_dpan;
217 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pan_can_dpan;
218 op_blend_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_p_caa_dpan;
219 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pas_caa_dpan;
220 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pan_caa_dpan;
226 _op_blend_rel_pt_p_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
229 *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
232 #define _op_blend_rel_pt_pas_c_dp _op_blend_rel_pt_p_c_dp
233 #define _op_blend_rel_pt_pan_c_dp _op_blend_rel_pt_p_c_dp
234 #define _op_blend_rel_pt_p_can_dp _op_blend_rel_pt_p_c_dp
235 #define _op_blend_rel_pt_pas_can_dp _op_blend_rel_pt_p_c_dp
236 #define _op_blend_rel_pt_pan_can_dp _op_blend_rel_pt_p_c_dp
237 #define _op_blend_rel_pt_p_caa_dp _op_blend_rel_pt_p_c_dp
238 #define _op_blend_rel_pt_pas_caa_dp _op_blend_rel_pt_p_c_dp
239 #define _op_blend_rel_pt_pan_caa_dp _op_blend_rel_pt_p_c_dp
241 #define _op_blend_rel_pt_p_c_dpan _op_blend_pt_p_c_dpan
242 #define _op_blend_rel_pt_pas_c_dpan _op_blend_pt_pas_c_dpan
243 #define _op_blend_rel_pt_pan_c_dpan _op_blend_pt_pan_c_dpan
244 #define _op_blend_rel_pt_p_can_dpan _op_blend_pt_p_can_dpan
245 #define _op_blend_rel_pt_pas_can_dpan _op_blend_pt_pas_can_dpan
246 #define _op_blend_rel_pt_pan_can_dpan _op_blend_pt_pan_can_dpan
247 #define _op_blend_rel_pt_p_caa_dpan _op_blend_pt_p_caa_dpan
248 #define _op_blend_rel_pt_pas_caa_dpan _op_blend_pt_pas_caa_dpan
249 #define _op_blend_rel_pt_pan_caa_dpan _op_blend_pt_pan_caa_dpan
252 init_blend_rel_pixel_color_pt_funcs_c(void)
254 op_blend_rel_pt_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_p_c_dp;
255 op_blend_rel_pt_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_pas_c_dp;
256 op_blend_rel_pt_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_pan_c_dp;
257 op_blend_rel_pt_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pt_p_can_dp;
258 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pt_pas_can_dp;
259 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pt_pan_can_dp;
260 op_blend_rel_pt_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_p_caa_dp;
261 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_pas_caa_dp;
262 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_pan_caa_dp;
264 op_blend_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_p_c_dpan;
265 op_blend_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_pas_c_dpan;
266 op_blend_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_pan_c_dpan;
267 op_blend_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_p_can_dpan;
268 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_pas_can_dpan;
269 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_pan_can_dpan;
270 op_blend_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_p_caa_dpan;
271 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_pas_caa_dpan;
272 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_pan_caa_dpan;