move around - flatter.
[profile/ivi/evas.git] / src / lib / engines / common / evas_op_add_main_.c
1 /*
2  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3  */
4
5 #include "evas_common.h"
6
7 static RGBA_Gfx_Func     op_add_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
8 static RGBA_Gfx_Pt_Func  op_add_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
9
10 static void op_add_init(void);
11 static void op_add_shutdown(void);
12
13 static RGBA_Gfx_Func op_add_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
14 static RGBA_Gfx_Func op_add_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
15 static RGBA_Gfx_Func op_add_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels);
16 static RGBA_Gfx_Func op_add_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
17 static RGBA_Gfx_Func op_add_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
18
19 static RGBA_Gfx_Pt_Func op_add_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
20 static RGBA_Gfx_Pt_Func op_add_color_pt_get(DATA32 col, RGBA_Image *dst);
21 static RGBA_Gfx_Pt_Func op_add_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
22 static RGBA_Gfx_Pt_Func op_add_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
23 static RGBA_Gfx_Pt_Func op_add_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
24
25 static RGBA_Gfx_Compositor  _composite_add = { "add",
26  op_add_init, op_add_shutdown,
27  op_add_pixel_span_get, op_add_color_span_get,
28  op_add_pixel_color_span_get, op_add_mask_color_span_get,
29  op_add_pixel_mask_span_get,
30  op_add_pixel_pt_get, op_add_color_pt_get,
31  op_add_pixel_color_pt_get, op_add_mask_color_pt_get,
32  op_add_pixel_mask_pt_get
33  };
34
35 RGBA_Gfx_Compositor  *
36 evas_common_gfx_compositor_add_get(void)
37 {
38    return &(_composite_add);
39 }
40
41 static RGBA_Gfx_Func     op_add_rel_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
42 static RGBA_Gfx_Pt_Func  op_add_rel_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
43
44 static void op_add_rel_init(void);
45 static void op_add_rel_shutdown(void);
46
47 static RGBA_Gfx_Func op_add_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
48 static RGBA_Gfx_Func op_add_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
49 static RGBA_Gfx_Func op_add_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels);
50 static RGBA_Gfx_Func op_add_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
51 static RGBA_Gfx_Func op_add_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
52
53 static RGBA_Gfx_Pt_Func op_add_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
54 static RGBA_Gfx_Pt_Func op_add_rel_color_pt_get(DATA32 col, RGBA_Image *dst);
55 static RGBA_Gfx_Pt_Func op_add_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
56 static RGBA_Gfx_Pt_Func op_add_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
57 static RGBA_Gfx_Pt_Func op_add_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
58
59 static RGBA_Gfx_Compositor  _composite_add_rel = { "add_rel",
60  op_add_rel_init, op_add_rel_shutdown,
61  op_add_rel_pixel_span_get, op_add_rel_color_span_get,
62  op_add_rel_pixel_color_span_get, op_add_rel_mask_color_span_get,
63  op_add_rel_pixel_mask_span_get,
64  op_add_rel_pixel_pt_get, op_add_rel_color_pt_get,
65  op_add_rel_pixel_color_pt_get, op_add_rel_mask_color_pt_get,
66  op_add_rel_pixel_mask_pt_get
67  };
68
69 RGBA_Gfx_Compositor  *
70 evas_common_gfx_compositor_add_rel_get(void)
71 {
72    return &(_composite_add_rel);
73 }
74
75
76 # include "./evas_op_add/op_add_pixel_.c"
77 # include "./evas_op_add/op_add_color_.c"
78 # include "./evas_op_add/op_add_pixel_color_.c"
79 # include "./evas_op_add/op_add_pixel_mask_.c"
80 # include "./evas_op_add/op_add_mask_color_.c"
81 //# include "./evas_op_add/op_add_pixel_mask_color_.c"
82
83 # include "./evas_op_add/op_add_pixel_i386.c"
84 # include "./evas_op_add/op_add_color_i386.c"
85 # include "./evas_op_add/op_add_pixel_color_i386.c"
86 # include "./evas_op_add/op_add_pixel_mask_i386.c"
87 # include "./evas_op_add/op_add_mask_color_i386.c"
88 //# include "op_add_pixel_mask_color_.c"
89
90 static void
91 op_add_init(void)
92 {
93    memset(op_add_span_funcs, 0, sizeof(op_add_span_funcs));
94    memset(op_add_pt_funcs, 0, sizeof(op_add_pt_funcs));
95 #ifdef BUILD_MMX
96    init_add_pixel_span_funcs_mmx();
97    init_add_pixel_color_span_funcs_mmx();
98    init_add_pixel_mask_span_funcs_mmx();
99    init_add_color_span_funcs_mmx();
100    init_add_mask_color_span_funcs_mmx();
101
102    init_add_pixel_pt_funcs_mmx();
103    init_add_pixel_color_pt_funcs_mmx();
104    init_add_pixel_mask_pt_funcs_mmx();
105    init_add_color_pt_funcs_mmx();
106    init_add_mask_color_pt_funcs_mmx();
107 #endif
108 #ifdef BUILD_C
109    init_add_pixel_span_funcs_c();
110    init_add_pixel_color_span_funcs_c();
111    init_add_rel_pixel_mask_span_funcs_c();
112    init_add_color_span_funcs_c();
113    init_add_mask_color_span_funcs_c();
114
115    init_add_pixel_pt_funcs_c();
116    init_add_pixel_color_pt_funcs_c();
117    init_add_rel_pixel_mask_pt_funcs_c();
118    init_add_color_pt_funcs_c();
119    init_add_mask_color_pt_funcs_c();
120 #endif
121 }
122
123 static void
124 op_add_shutdown(void)
125 {
126 }
127
128 static RGBA_Gfx_Func
129 add_gfx_span_func_cpu(int s, int m, int c, int d)
130 {
131    RGBA_Gfx_Func  func = NULL;
132    int cpu = CPU_N;
133 #ifdef BUILD_MMX
134    if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
135      {
136         cpu = CPU_MMX;
137         func = op_add_span_funcs[s][m][c][d][cpu];
138         if (func) return func;
139      }
140 #endif
141 #ifdef BUILD_C
142    cpu = CPU_C;
143    func = op_add_span_funcs[s][m][c][d][cpu];
144    if (func) return func;
145 #endif
146    return func;
147 }
148
149 static RGBA_Gfx_Func
150 op_add_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
151 {
152    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
153
154    if (src && src->cache_entry.flags.alpha)
155         s = SP;
156    if (dst && dst->cache_entry.flags.alpha)
157         d = DP;
158    return add_gfx_span_func_cpu(s, m, c, d);
159 }
160
161 static RGBA_Gfx_Func
162 op_add_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
163 {
164    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
165
166    if ((col >> 24) < 255)
167         c = SC;
168    if (col == (col | 0x00ffffff))
169         c = SC_AA;
170    if (col == 0xffffffff)
171         c = SC_N;
172    if (dst && dst->cache_entry.flags.alpha)
173         d = DP;
174    return add_gfx_span_func_cpu(s, m, c, d);
175 }
176
177 static RGBA_Gfx_Func
178 op_add_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels)
179 {
180    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
181
182    if (src && src->cache_entry.flags.alpha)
183         s = SP;
184    if ((col >> 24) < 255)
185         c = SC;
186    if (col == (col | 0x00ffffff))
187         c = SC_AA;
188    if (col == 0xffffffff)
189         c = SC_N;
190    if (dst && dst->cache_entry.flags.alpha)
191         d = DP;
192    return add_gfx_span_func_cpu(s, m, c, d);
193 }
194
195 static RGBA_Gfx_Func
196 op_add_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
197 {
198    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
199
200    if ((col >> 24) < 255)
201         c = SC;
202    if (col == (col | 0x00ffffff))
203         c = SC_AA;
204    if (col == 0xffffffff)
205         c = SC_N;
206    if (dst && dst->cache_entry.flags.alpha)
207         d = DP;
208    return add_gfx_span_func_cpu(s, m, c, d);
209 }
210
211 static RGBA_Gfx_Func
212 op_add_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
213 {
214    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
215
216    if (src && src->cache_entry.flags.alpha)
217         s = SP;
218    if (dst && dst->cache_entry.flags.alpha)
219         d = DP;
220    return add_gfx_span_func_cpu(s, m, c, d);
221 }
222
223 static RGBA_Gfx_Pt_Func
224 add_gfx_pt_func_cpu(int s, int m, int c, int d)
225 {
226    RGBA_Gfx_Pt_Func  func = NULL;
227    int cpu = CPU_N;
228 #ifdef BUILD_MMX
229    if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
230      {
231         cpu = CPU_MMX;
232         func = op_add_pt_funcs[s][m][c][d][cpu];
233         if (func) return func;
234      }
235 #endif
236 #ifdef BUILD_C
237    cpu = CPU_C;
238    func = op_add_pt_funcs[s][m][c][d][cpu];
239    if (func) return func;
240 #endif
241    return func;
242 }
243
244 static RGBA_Gfx_Pt_Func
245 op_add_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
246 {
247    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
248
249    if (src_flags.alpha)
250         s = SP;
251    if (dst && dst->cache_entry.flags.alpha)
252         d = DP;
253    return add_gfx_pt_func_cpu(s, m, c, d);
254 }
255
256 static RGBA_Gfx_Pt_Func
257 op_add_color_pt_get(DATA32 col, RGBA_Image *dst)
258 {
259    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
260
261    if ((col >> 24) < 255)
262         c = SC;
263    if (col == (col | 0x00ffffff))
264         c = SC_AA;
265    if (col == 0xffffffff)
266         c = SC_N;
267    if (dst && dst->cache_entry.flags.alpha)
268         d = DP;
269    return add_gfx_pt_func_cpu(s, m, c, d);
270 }
271
272 static RGBA_Gfx_Pt_Func
273 op_add_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
274 {
275    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
276
277    if (src_flags.alpha)
278         s = SP;
279    if ((col >> 24) < 255)
280         c = SC;
281    if (col == (col | 0x00ffffff))
282         c = SC_AA;
283    if (col == 0xffffffff)
284         c = SC_N;
285    if (dst && dst->cache_entry.flags.alpha)
286         d = DP;
287    return add_gfx_pt_func_cpu(s, m, c, d);
288 }
289
290 static RGBA_Gfx_Pt_Func
291 op_add_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
292 {
293    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
294
295    if ((col >> 24) < 255)
296         c = SC;
297    if (col == (col | 0x00ffffff))
298         c = SC_AA;
299    if (col == 0xffffffff)
300         c = SC_N;
301    if (dst && dst->cache_entry.flags.alpha)
302         d = DP;
303    return add_gfx_pt_func_cpu(s, m, c, d);
304 }
305
306 static RGBA_Gfx_Pt_Func
307 op_add_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
308 {
309    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
310
311    if (src_flags.alpha)
312         s = SP;
313    if (dst && dst->cache_entry.flags.alpha)
314         d = DP;
315    return add_gfx_pt_func_cpu(s, m, c, d);
316 }
317
318
319
320 static void
321 op_add_rel_init(void)
322 {
323    memset(op_add_rel_span_funcs, 0, sizeof(op_add_rel_span_funcs));
324    memset(op_add_rel_pt_funcs, 0, sizeof(op_add_rel_pt_funcs));
325 #ifdef BUILD_MMX
326    init_add_rel_pixel_span_funcs_mmx();
327    init_add_rel_pixel_color_span_funcs_mmx();
328    init_add_rel_pixel_mask_span_funcs_mmx();
329    init_add_rel_color_span_funcs_mmx();
330    init_add_rel_mask_color_span_funcs_mmx();
331
332    init_add_rel_pixel_pt_funcs_mmx();
333    init_add_rel_pixel_color_pt_funcs_mmx();
334    init_add_rel_pixel_mask_pt_funcs_mmx();
335    init_add_rel_color_pt_funcs_mmx();
336    init_add_rel_mask_color_pt_funcs_mmx();
337 #endif
338 #ifdef BUILD_C
339    init_add_rel_pixel_span_funcs_c();
340    init_add_rel_pixel_color_span_funcs_c();
341    init_add_rel_pixel_mask_span_funcs_c();
342    init_add_rel_color_span_funcs_c();
343    init_add_rel_mask_color_span_funcs_c();
344
345    init_add_rel_pixel_pt_funcs_c();
346    init_add_rel_pixel_color_pt_funcs_c();
347    init_add_rel_pixel_mask_pt_funcs_c();
348    init_add_rel_color_pt_funcs_c();
349    init_add_rel_mask_color_pt_funcs_c();
350 #endif
351 }
352
353 static void
354 op_add_rel_shutdown(void)
355 {
356 }
357
358 static RGBA_Gfx_Func
359 add_rel_gfx_span_func_cpu(int s, int m, int c, int d)
360 {
361    RGBA_Gfx_Func  func = NULL;
362    int cpu = CPU_N;
363 #ifdef BUILD_MMX
364    if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
365      {
366         cpu = CPU_MMX;
367         func = op_add_rel_span_funcs[s][m][c][d][cpu];
368         if (func) return func;
369      }
370 #endif
371 #ifdef BUILD_C
372    cpu = CPU_C;
373    func = op_add_rel_span_funcs[s][m][c][d][cpu];
374    if (func) return func;
375 #endif
376    return func;
377 }
378
379 static RGBA_Gfx_Func
380 op_add_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
381 {
382    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
383
384    if (src && src->cache_entry.flags.alpha)
385         s = SP;
386    if (dst && dst->cache_entry.flags.alpha)
387         d = DP;
388    return add_rel_gfx_span_func_cpu(s, m, c, d);
389 }
390
391 static RGBA_Gfx_Func
392 op_add_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
393 {
394    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
395
396    if ((col >> 24) < 255)
397         c = SC;
398    if (col == (col | 0x00ffffff))
399         c = SC_AA;
400    if (col == 0xffffffff)
401         c = SC_N;
402    if (dst && dst->cache_entry.flags.alpha)
403         d = DP;
404    return add_rel_gfx_span_func_cpu(s, m, c, d);
405 }
406
407 static RGBA_Gfx_Func
408 op_add_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels)
409 {
410    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
411
412    if (src && src->cache_entry.flags.alpha)
413         s = SP;
414    if ((col >> 24) < 255)
415         c = SC;
416    if (col == (col | 0x00ffffff))
417         c = SC_AA;
418    if (col == 0xffffffff)
419         c = SC_N;
420    if (dst && dst->cache_entry.flags.alpha)
421         d = DP;
422    return add_rel_gfx_span_func_cpu(s, m, c, d);
423 }
424
425 static RGBA_Gfx_Func
426 op_add_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
427 {
428    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
429
430    if ((col >> 24) < 255)
431         c = SC;
432    if (col == (col | 0x00ffffff))
433         c = SC_AA;
434    if (col == 0xffffffff)
435         c = SC_N;
436    if (dst && dst->cache_entry.flags.alpha)
437         d = DP;
438    return add_rel_gfx_span_func_cpu(s, m, c, d);
439 }
440
441 static RGBA_Gfx_Func
442 op_add_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
443 {
444    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
445
446    if (src && src->cache_entry.flags.alpha)
447         s = SP;
448    if (dst && dst->cache_entry.flags.alpha)
449         d = DP;
450    return add_rel_gfx_span_func_cpu(s, m, c, d);
451 }
452
453 static RGBA_Gfx_Pt_Func
454 add_rel_gfx_pt_func_cpu(int s, int m, int c, int d)
455 {
456    RGBA_Gfx_Pt_Func  func = NULL;
457    int cpu = CPU_N;
458 #ifdef BUILD_MMX
459    if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
460      {
461         cpu = CPU_MMX;
462         func = op_add_rel_pt_funcs[s][m][c][d][cpu];
463         if (func) return func;
464      }
465 #endif
466 #ifdef BUILD_C
467    cpu = CPU_C;
468    func = op_add_rel_pt_funcs[s][m][c][d][cpu];
469    if (func) return func;
470 #endif
471    return func;
472 }
473
474 static RGBA_Gfx_Pt_Func
475 op_add_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
476 {
477    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
478
479    if (src_flags.alpha)
480         s = SP;
481    if (dst && dst->cache_entry.flags.alpha)
482         d = DP;
483    return add_rel_gfx_pt_func_cpu(s, m, c, d);
484 }
485
486 static RGBA_Gfx_Pt_Func
487 op_add_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
488 {
489    int  s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
490
491    if ((col >> 24) < 255)
492         c = SC;
493    if (col == (col | 0x00ffffff))
494         c = SC_AA;
495    if (col == 0xffffffff)
496         c = SC_N;
497    if (dst && dst->cache_entry.flags.alpha)
498         d = DP;
499    return add_rel_gfx_pt_func_cpu(s, m, c, d);
500 }
501
502 static RGBA_Gfx_Pt_Func
503 op_add_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
504 {
505    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
506
507    if (src_flags.alpha)
508         s = SP;
509    if ((col >> 24) < 255)
510         c = SC;
511    if (col == (col | 0x00ffffff))
512         c = SC_AA;
513    if (col == 0xffffffff)
514         c = SC_N;
515    if (dst && dst->cache_entry.flags.alpha)
516         d = DP;
517    return add_rel_gfx_pt_func_cpu(s, m, c, d);
518 }
519
520 static RGBA_Gfx_Pt_Func
521 op_add_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
522 {
523    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
524
525    if ((col >> 24) < 255)
526         c = SC;
527    if (col == (col | 0x00ffffff))
528         c = SC_AA;
529    if (col == 0xffffffff)
530         c = SC_N;
531    if (dst && dst->cache_entry.flags.alpha)
532         d = DP;
533    return add_rel_gfx_pt_func_cpu(s, m, c, d);
534 }
535
536 static RGBA_Gfx_Pt_Func
537 op_add_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
538 {
539    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
540
541    if (src_flags.alpha)
542         s = SP;
543    if (dst && dst->cache_entry.flags.alpha)
544         d = DP;
545    return add_rel_gfx_pt_func_cpu(s, m, c, d);
546 }