1 #include "evas_common.h"
3 RGBA_Gfx_Func op_blend_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
4 RGBA_Gfx_Pt_Func op_blend_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
6 static void op_blend_init(void);
7 static void op_blend_shutdown(void);
9 static RGBA_Gfx_Func op_blend_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
10 static RGBA_Gfx_Func op_blend_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
11 static RGBA_Gfx_Func op_blend_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels);
12 static RGBA_Gfx_Func op_blend_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
13 static RGBA_Gfx_Func op_blend_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
15 static RGBA_Gfx_Pt_Func op_blend_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
16 static RGBA_Gfx_Pt_Func op_blend_color_pt_get(DATA32 col, RGBA_Image *dst);
17 static RGBA_Gfx_Pt_Func op_blend_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
18 static RGBA_Gfx_Pt_Func op_blend_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
19 static RGBA_Gfx_Pt_Func op_blend_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
21 static RGBA_Gfx_Compositor _composite_blend = { "blend",
22 op_blend_init, op_blend_shutdown,
23 op_blend_pixel_span_get, op_blend_color_span_get,
24 op_blend_pixel_color_span_get, op_blend_mask_color_span_get,
25 op_blend_pixel_mask_span_get,
26 op_blend_pixel_pt_get, op_blend_color_pt_get,
27 op_blend_pixel_color_pt_get, op_blend_mask_color_pt_get,
28 op_blend_pixel_mask_pt_get
32 evas_common_gfx_compositor_blend_get(void)
34 return &(_composite_blend);
38 RGBA_Gfx_Func op_blend_rel_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
39 RGBA_Gfx_Pt_Func op_blend_rel_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
41 static void op_blend_rel_init(void);
42 static void op_blend_rel_shutdown(void);
44 static RGBA_Gfx_Func op_blend_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
45 static RGBA_Gfx_Func op_blend_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
46 static RGBA_Gfx_Func op_blend_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels);
47 static RGBA_Gfx_Func op_blend_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
48 static RGBA_Gfx_Func op_blend_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
50 static RGBA_Gfx_Pt_Func op_blend_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
51 static RGBA_Gfx_Pt_Func op_blend_rel_color_pt_get(DATA32 col, RGBA_Image *dst);
52 static RGBA_Gfx_Pt_Func op_blend_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
53 static RGBA_Gfx_Pt_Func op_blend_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
54 static RGBA_Gfx_Pt_Func op_blend_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
56 static RGBA_Gfx_Compositor _composite_blend_rel = { "blend_rel",
57 op_blend_rel_init, op_blend_rel_shutdown,
58 op_blend_rel_pixel_span_get, op_blend_rel_color_span_get,
59 op_blend_rel_pixel_color_span_get, op_blend_rel_mask_color_span_get,
60 op_blend_rel_pixel_mask_span_get,
61 op_blend_rel_pixel_pt_get, op_blend_rel_color_pt_get,
62 op_blend_rel_pixel_color_pt_get, op_blend_rel_mask_color_pt_get,
63 op_blend_rel_pixel_mask_pt_get
67 evas_common_gfx_compositor_blend_rel_get(void)
69 return &(_composite_blend_rel);
73 # include "./evas_op_blend/op_blend_pixel_.c"
74 # include "./evas_op_blend/op_blend_color_.c"
75 # include "./evas_op_blend/op_blend_pixel_color_.c"
76 # include "./evas_op_blend/op_blend_pixel_mask_.c"
77 # include "./evas_op_blend/op_blend_mask_color_.c"
78 //# include "./evas_op_blend/op_blend_pixel_mask_color_.c"
80 # include "./evas_op_blend/op_blend_pixel_i386.c"
81 # include "./evas_op_blend/op_blend_color_i386.c"
82 # include "./evas_op_blend/op_blend_pixel_color_i386.c"
83 # include "./evas_op_blend/op_blend_pixel_mask_i386.c"
84 # include "./evas_op_blend/op_blend_mask_color_i386.c"
85 //# include "./evas_op_blend/op_blend_pixel_mask_color_i386.c"
87 # include "./evas_op_blend/op_blend_pixel_neon.c"
88 # include "./evas_op_blend/op_blend_color_neon.c"
89 # include "./evas_op_blend/op_blend_pixel_color_neon.c"
90 # include "./evas_op_blend/op_blend_pixel_mask_neon.c"
91 # include "./evas_op_blend/op_blend_mask_color_neon.c"
92 //# include "./evas_op_blend/op_blend_pixel_mask_color_neon.c"
95 void evas_common_op_blend_init_sse3(void);
101 memset(op_blend_span_funcs, 0, sizeof(op_blend_span_funcs));
102 memset(op_blend_pt_funcs, 0, sizeof(op_blend_pt_funcs));
104 evas_common_op_blend_init_sse3();
107 init_blend_pixel_span_funcs_mmx();
108 init_blend_pixel_color_span_funcs_mmx();
109 init_blend_pixel_mask_span_funcs_mmx();
110 init_blend_color_span_funcs_mmx();
111 init_blend_mask_color_span_funcs_mmx();
113 init_blend_pixel_pt_funcs_mmx();
114 init_blend_pixel_color_pt_funcs_mmx();
115 init_blend_pixel_mask_pt_funcs_mmx();
116 init_blend_color_pt_funcs_mmx();
117 init_blend_mask_color_pt_funcs_mmx();
120 init_blend_pixel_span_funcs_neon();
121 init_blend_pixel_color_span_funcs_neon();
122 init_blend_pixel_mask_span_funcs_neon();
123 init_blend_color_span_funcs_neon();
124 init_blend_mask_color_span_funcs_neon();
126 init_blend_pixel_pt_funcs_neon();
127 init_blend_pixel_color_pt_funcs_neon();
128 init_blend_pixel_mask_pt_funcs_neon();
129 init_blend_color_pt_funcs_neon();
130 init_blend_mask_color_pt_funcs_neon();
133 init_blend_pixel_span_funcs_c();
134 init_blend_pixel_color_span_funcs_c();
135 init_blend_pixel_mask_span_funcs_c();
136 init_blend_color_span_funcs_c();
137 init_blend_mask_color_span_funcs_c();
139 init_blend_pixel_pt_funcs_c();
140 init_blend_pixel_color_pt_funcs_c();
141 init_blend_pixel_mask_pt_funcs_c();
142 init_blend_color_pt_funcs_c();
143 init_blend_mask_color_pt_funcs_c();
148 op_blend_shutdown(void)
153 blend_gfx_span_func_cpu(int s, int m, int c, int d)
155 RGBA_Gfx_Func func = NULL;
158 if (evas_common_cpu_has_feature(CPU_FEATURE_SSE3))
161 func = op_blend_span_funcs[s][m][c][d][cpu];
162 if(func) return func;
166 if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
169 func = op_blend_span_funcs[s][m][c][d][cpu];
170 if (func) return func;
174 if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
177 func = op_blend_span_funcs[s][m][c][d][cpu];
178 if (func) return func;
183 func = op_blend_span_funcs[s][m][c][d][cpu];
184 if (func) return func;
190 op_blend_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels __UNUSED__)
192 int s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
194 if (src && src->cache_entry.flags.alpha)
197 if (src->cache_entry.flags.alpha_sparse)
200 if (dst && dst->cache_entry.flags.alpha)
202 return blend_gfx_span_func_cpu(s, m, c, d);
206 op_blend_color_span_get(DATA32 col, RGBA_Image *dst, int pixels __UNUSED__)
208 int s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
210 if ((col >> 24) < 255)
212 if (col == ((col >> 24) * 0x01010101))
214 if (col == 0xffffffff)
216 if (dst && dst->cache_entry.flags.alpha)
218 return blend_gfx_span_func_cpu(s, m, c, d);
222 op_blend_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels __UNUSED__)
224 int s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
226 if (src && src->cache_entry.flags.alpha)
229 if (src->cache_entry.flags.alpha_sparse)
232 if ((col >> 24) < 255)
234 if (col == ((col >> 24) * 0x01010101))
236 if (col == 0xffffffff)
238 if (dst && dst->cache_entry.flags.alpha)
240 return blend_gfx_span_func_cpu(s, m, c, d);
244 op_blend_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels __UNUSED__)
246 int s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
248 if ((col >> 24) < 255)
250 if (col == ((col >> 24) * 0x01010101))
252 if (col == 0xffffffff)
254 if (dst && dst->cache_entry.flags.alpha)
256 return blend_gfx_span_func_cpu(s, m, c, d);
260 op_blend_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels __UNUSED__)
262 int s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
264 if (src && src->cache_entry.flags.alpha)
267 if (src->cache_entry.flags.alpha_sparse)
270 if (dst && dst->cache_entry.flags.alpha)
272 return blend_gfx_span_func_cpu(s, m, c, d);
276 static RGBA_Gfx_Pt_Func
277 blend_gfx_pt_func_cpu(int s, int m, int c, int d)
279 RGBA_Gfx_Pt_Func func = NULL;
282 if(evas_common_cpu_has_feature(CPU_FEATURE_SSE3))
285 func = op_blend_pt_funcs[s][m][c][d][cpu];
286 if(func) return func;
290 if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
293 func = op_blend_pt_funcs[s][m][c][d][cpu];
294 if (func) return func;
298 if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
301 func = op_blend_pt_funcs[s][m][c][d][cpu];
302 if (func) return func;
307 func = op_blend_pt_funcs[s][m][c][d][cpu];
308 if (func) return func;
313 static RGBA_Gfx_Pt_Func
314 op_blend_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
316 int s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
320 if (dst && dst->cache_entry.flags.alpha)
322 return blend_gfx_pt_func_cpu(s, m, c, d);
325 static RGBA_Gfx_Pt_Func
326 op_blend_color_pt_get(DATA32 col, RGBA_Image *dst)
328 int s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
330 if ((col >> 24) < 255)
332 if (col == ((col >> 24) * 0x01010101))
334 if (col == 0xffffffff)
336 if (dst && dst->cache_entry.flags.alpha)
338 return blend_gfx_pt_func_cpu(s, m, c, d);
341 static RGBA_Gfx_Pt_Func
342 op_blend_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
344 int s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
348 if ((col >> 24) < 255)
350 if (col == ((col >> 24) * 0x01010101))
352 if (col == 0xffffffff)
354 if (dst && dst->cache_entry.flags.alpha)
356 return blend_gfx_pt_func_cpu(s, m, c, d);
359 static RGBA_Gfx_Pt_Func
360 op_blend_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
362 int s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
364 if ((col >> 24) < 255)
366 if (col == ((col >> 24) * 0x01010101))
368 if (col == 0xffffffff)
370 if (dst && dst->cache_entry.flags.alpha)
372 return blend_gfx_pt_func_cpu(s, m, c, d);
375 static RGBA_Gfx_Pt_Func
376 op_blend_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
378 int s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
382 if (dst && dst->cache_entry.flags.alpha)
384 return blend_gfx_pt_func_cpu(s, m, c, d);
387 void evas_common_op_blend_rel_init_sse3(void);
390 op_blend_rel_init(void)
392 memset(op_blend_rel_span_funcs, 0, sizeof(op_blend_rel_span_funcs));
393 memset(op_blend_rel_pt_funcs, 0, sizeof(op_blend_rel_pt_funcs));
395 evas_common_op_blend_rel_init_sse3();
398 init_blend_rel_pixel_span_funcs_mmx();
399 init_blend_rel_pixel_color_span_funcs_mmx();
400 init_blend_rel_pixel_mask_span_funcs_mmx();
401 init_blend_rel_color_span_funcs_mmx();
402 init_blend_rel_mask_color_span_funcs_mmx();
404 init_blend_rel_pixel_pt_funcs_mmx();
405 init_blend_rel_pixel_color_pt_funcs_mmx();
406 init_blend_rel_pixel_mask_pt_funcs_mmx();
407 init_blend_rel_color_pt_funcs_mmx();
408 init_blend_rel_mask_color_pt_funcs_mmx();
411 init_blend_rel_pixel_span_funcs_neon();
412 init_blend_rel_pixel_color_span_funcs_neon();
413 init_blend_rel_pixel_mask_span_funcs_neon();
414 init_blend_rel_color_span_funcs_neon();
415 init_blend_rel_mask_color_span_funcs_neon();
417 init_blend_rel_pixel_pt_funcs_neon();
418 init_blend_rel_pixel_color_pt_funcs_neon();
419 init_blend_rel_pixel_mask_pt_funcs_neon();
420 init_blend_rel_color_pt_funcs_neon();
421 init_blend_rel_mask_color_pt_funcs_neon();
424 init_blend_rel_pixel_span_funcs_c();
425 init_blend_rel_pixel_color_span_funcs_c();
426 init_blend_rel_pixel_mask_span_funcs_c();
427 init_blend_rel_color_span_funcs_c();
428 init_blend_rel_mask_color_span_funcs_c();
430 init_blend_rel_pixel_pt_funcs_c();
431 init_blend_rel_pixel_color_pt_funcs_c();
432 init_blend_rel_pixel_mask_pt_funcs_c();
433 init_blend_rel_color_pt_funcs_c();
434 init_blend_rel_mask_color_pt_funcs_c();
439 op_blend_rel_shutdown(void)
444 blend_rel_gfx_span_func_cpu(int s, int m, int c, int d)
446 RGBA_Gfx_Func func = NULL;
449 if (evas_common_cpu_has_feature(CPU_FEATURE_SSE3))
452 func = op_blend_rel_span_funcs[s][m][c][d][cpu];
453 if(func) return func;
457 if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
460 func = op_blend_rel_span_funcs[s][m][c][d][cpu];
461 if (func) return func;
465 if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
468 func = op_blend_rel_span_funcs[s][m][c][d][cpu];
469 if (func) return func;
474 func = op_blend_rel_span_funcs[s][m][c][d][cpu];
475 if (func) return func;
481 op_blend_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels __UNUSED__)
483 int s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
485 if (src && src->cache_entry.flags.alpha)
488 if (src->cache_entry.flags.alpha_sparse)
491 if (dst && dst->cache_entry.flags.alpha)
493 return blend_rel_gfx_span_func_cpu(s, m, c, d);
497 op_blend_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels __UNUSED__)
499 int s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
501 if ((col >> 24) < 255)
503 if (col == ((col >> 24) * 0x01010101))
505 if (col == 0xffffffff)
507 if (dst && dst->cache_entry.flags.alpha)
509 return blend_rel_gfx_span_func_cpu(s, m, c, d);
513 op_blend_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels __UNUSED__)
515 int s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
517 if (src && src->cache_entry.flags.alpha)
519 if ((col >> 24) < 255)
521 if (col == ((col >> 24) * 0x01010101))
523 if (col == 0xffffffff)
525 if (dst && dst->cache_entry.flags.alpha)
527 return blend_rel_gfx_span_func_cpu(s, m, c, d);
531 op_blend_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels __UNUSED__)
533 int s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
535 if ((col >> 24) < 255)
537 if (col == ((col >> 24) * 0x01010101))
539 if (col == 0xffffffff)
541 if (dst && dst->cache_entry.flags.alpha)
543 return blend_rel_gfx_span_func_cpu(s, m, c, d);
547 op_blend_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels __UNUSED__)
549 int s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
551 if (src && src->cache_entry.flags.alpha)
554 if (src->cache_entry.flags.alpha_sparse)
557 if (dst && dst->cache_entry.flags.alpha)
559 return blend_rel_gfx_span_func_cpu(s, m, c, d);
562 static RGBA_Gfx_Pt_Func
563 blend_rel_gfx_pt_func_cpu(int s, int m, int c, int d)
565 RGBA_Gfx_Pt_Func func = NULL;
568 if (evas_common_cpu_has_feature(CPU_FEATURE_SSE3))
571 func = op_blend_rel_pt_funcs[s][m][c][d][cpu];
572 if(func) return func;
576 if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
579 func = op_blend_rel_pt_funcs[s][m][c][d][cpu];
580 if (func) return func;
584 if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
587 func = op_blend_rel_pt_funcs[s][m][c][d][cpu];
588 if (func) return func;
593 func = op_blend_rel_pt_funcs[s][m][c][d][cpu];
594 if (func) return func;
599 static RGBA_Gfx_Pt_Func
600 op_blend_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
602 int s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
606 if (dst && dst->cache_entry.flags.alpha)
608 return blend_rel_gfx_pt_func_cpu(s, m, c, d);
611 static RGBA_Gfx_Pt_Func
612 op_blend_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
614 int s = SP_N, m = SM_N, c = SC_AN, d = DP_AN;
616 if ((col >> 24) < 255)
618 if (col == ((col >> 24) * 0x01010101))
620 if (col == 0xffffffff)
622 if (dst && dst->cache_entry.flags.alpha)
624 return blend_rel_gfx_pt_func_cpu(s, m, c, d);
627 static RGBA_Gfx_Pt_Func
628 op_blend_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
630 int s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
634 if ((col >> 24) < 255)
636 if (col == ((col >> 24) * 0x01010101))
638 if (col == 0xffffffff)
640 if (dst && dst->cache_entry.flags.alpha)
642 return blend_rel_gfx_pt_func_cpu(s, m, c, d);
645 static RGBA_Gfx_Pt_Func
646 op_blend_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
648 int s = SP_N, m = SM_AS, c = SC_AN, d = DP_AN;
650 if ((col >> 24) < 255)
652 if (col == ((col >> 24) * 0x01010101))
654 if (col == 0xffffffff)
656 if (dst && dst->cache_entry.flags.alpha)
658 return blend_rel_gfx_pt_func_cpu(s, m, c, d);
661 static RGBA_Gfx_Pt_Func
662 op_blend_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
664 int s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
668 if (dst && dst->cache_entry.flags.alpha)
670 return blend_rel_gfx_pt_func_cpu(s, m, c, d);