move around - flatter.
[profile/ivi/evas.git] / src / lib / engines / common / evas_op_blend / op_blend_pixel_mask_.c
1
2 /* blend pixel x mask --> dst */
3
4 #ifdef BUILD_C
5 static void
6 _op_blend_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
7    DATA32 *e = d + l;
8    while (d < e) {
9         l = *m;
10         switch(l)
11           {
12             case 0:
13                 break;
14             case 255:
15                 l = 256 - (*s >> 24);
16                 *d = *s + MUL_256(l, *d);
17                 break;
18             default:
19                 c = MUL_SYM(l, *s);
20                 l = 256 - (c >> 24);
21                 *d = c + MUL_256(l, *d);
22                 break;
23           }
24         m++;  s++;  d++;
25      }
26 }
27
28 static void
29 _op_blend_pas_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
30    DATA32 *e = d + l;
31    while (d < e) {
32         l = (*s >> 24);
33         switch(*m & l)
34           {
35             case 0:
36                 break;
37             case 255:
38                 *d = *s;
39                 break;
40             default:
41                 c = MUL_SYM(l, *s);
42                 l = 256 - (c >> 24);
43                 *d = c + MUL_256(l, *d);
44                 break;
45           }
46         m++;  s++;  d++;
47      }
48 }
49
50 static void
51 _op_blend_pan_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
52    DATA32 *e = d + l;
53    while (d < e) {
54         l = *m;
55         switch(l)
56           {
57             case 0:
58                 break;
59             case 255:
60                 *d = *s;
61                 break;
62             default:
63                 l++;
64                 *d = INTERP_256(l, *s, *d);
65                 break;
66           }
67         m++;  s++;  d++;
68      }
69 }
70
71
72 #define _op_blend_p_mas_dpan _op_blend_p_mas_dp
73 #define _op_blend_pas_mas_dpan _op_blend_pas_mas_dp
74 #define _op_blend_pan_mas_dpan _op_blend_pan_mas_dp
75
76 static void
77 init_blend_pixel_mask_span_funcs_c(void)
78 {
79    op_blend_span_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_blend_p_mas_dp;
80    op_blend_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_blend_pas_mas_dp;
81    op_blend_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_blend_pan_mas_dp;
82
83    op_blend_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_p_mas_dpan;
84    op_blend_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pas_mas_dpan;
85    op_blend_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pan_mas_dpan;
86 }
87 #endif
88
89 #ifdef BUILD_C
90 static void
91 _op_blend_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
92         s = MUL_SYM(m, s);
93         c = 256 - (s >> 24);
94         *d = s + MUL_256(c, *d);
95 }
96
97 static void
98 _op_blend_pt_pan_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
99         *d = INTERP_256(m + 1, s, *d);
100 }
101
102 #define _op_blend_pt_pas_mas_dp _op_blend_pt_p_mas_dp
103
104 #define _op_blend_pt_p_mas_dpan _op_blend_pt_p_mas_dp
105 #define _op_blend_pt_pas_mas_dpan _op_blend_pt_pas_mas_dp
106 #define _op_blend_pt_pan_mas_dpan _op_blend_pt_pan_mas_dp
107
108 static void
109 init_blend_pixel_mask_pt_funcs_c(void)
110 {
111    op_blend_pt_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_blend_pt_p_mas_dp;
112    op_blend_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_blend_pt_pas_mas_dp;
113    op_blend_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_blend_pt_pan_mas_dp;
114
115    op_blend_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pt_p_mas_dpan;
116    op_blend_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pt_pas_mas_dpan;
117    op_blend_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pt_pan_mas_dpan;
118 }
119 #endif
120
121 /*-----*/
122
123 /* blend_rel pixel x mask -> dst */
124
125 #ifdef BUILD_C
126 static void
127 _op_blend_rel_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
128    DATA32 *e = d + l;
129    while (d < e) {
130         c = MUL_SYM(*m, *s);
131         l = 256 - (c >> 24);
132         *d = MUL_SYM(*d >> 24, c) + MUL_256(l, *d);
133         d++;
134         m++;
135         s++;
136      }
137 }
138
139 #define _op_blend_rel_pas_mas_dp _op_blend_rel_p_mas_dp
140 #define _op_blend_rel_pan_mas_dp _op_blend_rel_p_mas_dp
141
142 #define _op_blend_rel_p_mas_dpan _op_blend_p_mas_dpan
143 #define _op_blend_rel_pas_mas_dpan _op_blend_pas_mas_dpan
144 #define _op_blend_rel_pan_mas_dpan _op_blend_pan_mas_dpan
145
146 static void
147 init_blend_rel_pixel_mask_span_funcs_c(void)
148 {
149    op_blend_rel_span_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_p_mas_dp;
150    op_blend_rel_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pas_mas_dp;
151    op_blend_rel_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pan_mas_dp;
152
153    op_blend_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_p_mas_dpan;
154    op_blend_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pas_mas_dpan;
155    op_blend_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pan_mas_dpan;
156 }
157 #endif
158
159 #ifdef BUILD_C
160 static void
161 _op_blend_rel_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
162         s = MUL_SYM(m, s);
163         c = 256 - (s >> 24);
164         *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
165 }
166
167 #define _op_blend_rel_pt_pas_mas_dp _op_blend_rel_pt_p_mas_dp
168 #define _op_blend_rel_pt_pan_mas_dp _op_blend_rel_pt_p_mas_dp
169
170 #define _op_blend_rel_pt_p_mas_dpan _op_blend_pt_p_mas_dpan
171 #define _op_blend_rel_pt_pas_mas_dpan _op_blend_pt_pas_mas_dpan
172 #define _op_blend_rel_pt_pan_mas_dpan _op_blend_pt_pan_mas_dpan
173
174 static void
175 init_blend_rel_pixel_mask_pt_funcs_c(void)
176 {
177    op_blend_rel_pt_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pt_p_mas_dp;
178    op_blend_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pt_pas_mas_dp;
179    op_blend_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pt_pan_mas_dp;
180
181    op_blend_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_p_mas_dpan;
182    op_blend_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_pas_mas_dpan;
183    op_blend_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_pan_mas_dpan;
184 }
185 #endif