aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_mask_.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_mask_.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_mask_.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_mask_.c b/libraries/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_mask_.c
new file mode 100644
index 0000000..b948aa6
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_mask_.c
@@ -0,0 +1,62 @@
1/* mask pixel x mask --> dst */
2
3#ifdef BUILD_C
4static void
5_op_mask_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
6 DATA32 *e = d + l;
7 while (d < e) {
8 l = *m;
9 switch(l)
10 {
11 case 0:
12 break;
13 case 255:
14 *d = MUL_SYM(*s >> 24, *d);
15 break;
16 default:
17 l = 256 - (((256 - (*s >> 24)) * l) >> 8);
18 *d = MUL_256(l, *d);
19 break;
20 }
21 m++; s++; d++;
22 }
23}
24
25#define _op_mask_pas_mas_dp _op_mask_p_mas_dp
26
27#define _op_mask_p_mas_dpan _op_mask_p_mas_dp
28#define _op_mask_pas_mas_dpan _op_mask_pas_mas_dp
29
30static void
31init_mask_pixel_mask_span_funcs_c(void)
32{
33 op_mask_span_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_mask_p_mas_dp;
34 op_mask_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_mask_pas_mas_dp;
35
36 op_mask_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_mask_p_mas_dpan;
37 op_mask_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_mask_pas_mas_dpan;
38}
39#endif
40
41#ifdef BUILD_C
42static void
43_op_mask_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c __UNUSED__, DATA32 *d) {
44 s = 256 - (((256 - (s >> 24)) * m) >> 8);
45 *d = MUL_256(s, *d);
46}
47
48#define _op_mask_pt_pas_mas_dp _op_mask_pt_p_mas_dp
49
50#define _op_mask_pt_p_mas_dpan _op_mask_pt_p_mas_dp
51#define _op_mask_pt_pas_mas_dpan _op_mask_pt_pas_mas_dp
52
53static void
54init_mask_pixel_mask_pt_funcs_c(void)
55{
56 op_mask_pt_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_mask_pt_p_mas_dp;
57 op_mask_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_mask_pt_pas_mas_dp;
58
59 op_mask_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_mask_pt_p_mas_dpan;
60 op_mask_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_mask_pt_pas_mas_dpan;
61}
62#endif