move around - flatter.
[profile/ivi/evas.git] / src / lib / engines / common / evas_op_blend / op_blend_pixel_color_.c
1
2 /* blend pixel x color --> dst */
3
4 #ifdef BUILD_C
5 static void
6 _op_blend_p_c_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
7    DATA32 *e = d + l;
8    while (d < e) {
9         DATA32 sc = MUL4_SYM(c, *s);
10         l = 256 - (sc >> 24);
11         *d = sc + MUL_256(l, *d);
12         d++;
13         s++;
14      }
15 }
16
17 static void
18 _op_blend_pan_c_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
19    DATA32 *e = d + l;
20    l = 256 - (c >> 24);
21    while (d < e) {
22         *d = ((c & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(l, *d);
23         d++;
24         s++;
25      }
26 }
27
28 static void
29 _op_blend_p_can_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
30    DATA32 *e = d + l;
31    while (d < e) {
32         l = 256 - (*s >> 24);
33         *d = ((*s & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(l, *d);
34         d++;
35         s++;
36      }
37 }
38
39 static void
40 _op_blend_pan_can_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
41    DATA32 *e = d + l;
42    while (d < e) {
43         *d++ = 0xff000000 + MUL3_SYM(c, *s);
44         s++;
45      }
46 }
47
48 static void
49 _op_blend_p_caa_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
50    DATA32 *e = d + l;
51    c = 1 + (c & 0xff);
52   while (d < e) {
53         DATA32 sc = MUL_256(c, *s);
54         l = 256 - (sc >> 24);
55         *d = sc + MUL_256(l, *d);
56         d++;
57         s++;
58      }
59 }
60
61 static void
62 _op_blend_pan_caa_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
63    DATA32 *e = d + l;
64    c = 1 + (c & 0xff);
65    while (d < e) {
66         *d = INTERP_256(c, *s, *d);
67         d++;
68         s++;
69      }
70 }
71
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
75
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
85
86 static void
87 init_blend_pixel_color_span_funcs_c(void)
88 {
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;
98
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;
108 }
109 #endif
110
111 #ifdef BUILD_C
112 static void
113 _op_blend_pt_p_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
114         s = MUL4_SYM(c, s);
115         c = 256 - (s >> 24);
116         *d = s + MUL_256(c, *d);
117 }
118
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
127
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
137
138 static void
139 init_blend_pixel_color_pt_funcs_c(void)
140 {
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;
150
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;
160 }
161 #endif
162
163 /*-----*/
164
165 /* blend_rel pixel x color -> dst */
166
167 #ifdef BUILD_C
168 static void
169 _op_blend_rel_p_c_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
170    DATA32 *e = d + l;
171    while (d < e) {
172         DATA32 sc = MUL4_SYM(c, *s);
173         l = 256 - (sc >> 24);
174         *d = MUL_SYM(*d >> 24, sc) + MUL_256(l, *d);
175         d++;
176         s++;
177      }
178 }
179
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
188
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
198
199 static void
200 init_blend_rel_pixel_color_span_funcs_c(void)
201 {
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;
211
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;
221 }
222 #endif
223
224 #ifdef BUILD_C
225 static void
226 _op_blend_rel_pt_p_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
227         s = MUL4_SYM(c, s);
228         c = 256 - (s >> 24);
229         *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
230 }
231
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
240
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
250
251 static void
252 init_blend_rel_pixel_color_pt_funcs_c(void)
253 {
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;
263
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;
273 }
274 #endif