aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c284
1 files changed, 284 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c
new file mode 100644
index 0000000..c5e40a0
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c
@@ -0,0 +1,284 @@
1/* blend pixel x color --> dst */
2
3#ifdef BUILD_C
4static void
5_op_blend_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e;
7 int alpha;
8 UNROLL8_PLD_WHILE(d, l, e,
9 {
10 DATA32 sc = MUL4_SYM(c, *s);
11 alpha = 256 - (sc >> 24);
12 *d = sc + MUL_256(alpha, *d);
13 d++;
14 s++;
15 });
16}
17
18static void
19_op_blend_pan_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
20 DATA32 *e;
21 int alpha = 256 - (c >> 24);
22 UNROLL8_PLD_WHILE(d, l, e,
23 {
24 *d = ((c & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(alpha, *d);
25 d++;
26 s++;
27 });
28}
29
30static void
31_op_blend_p_can_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
32 DATA32 *e;
33 int alpha;
34 UNROLL8_PLD_WHILE(d, l, e,
35 {
36 alpha = 256 - (*s >> 24);
37 *d = ((*s & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(alpha, *d);
38 d++;
39 s++;
40 });
41}
42
43static void
44_op_blend_pan_can_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
45 DATA32 *e;
46 UNROLL8_PLD_WHILE(d, l, e,
47 {
48 *d++ = 0xff000000 + MUL3_SYM(c, *s);
49 s++;
50 });
51}
52
53static void
54_op_blend_p_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
55 DATA32 *e;
56 int alpha;
57 c = 1 + (c & 0xff);
58 UNROLL8_PLD_WHILE(d, l, e,
59 {
60 DATA32 sc = MUL_256(c, *s);
61 alpha = 256 - (sc >> 24);
62 *d = sc + MUL_256(alpha, *d);
63 d++;
64 s++;
65 });
66}
67
68static void
69_op_blend_pan_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
70 DATA32 *e;
71 c = 1 + (c & 0xff);
72 UNROLL8_PLD_WHILE(d, l, e,
73 {
74 *d = INTERP_256(c, *s, *d);
75 d++;
76 s++;
77 });
78}
79
80#define _op_blend_pas_c_dp _op_blend_p_c_dp
81#define _op_blend_pas_can_dp _op_blend_p_can_dp
82#define _op_blend_pas_caa_dp _op_blend_p_caa_dp
83
84#define _op_blend_p_c_dpan _op_blend_p_c_dp
85#define _op_blend_pas_c_dpan _op_blend_pas_c_dp
86#define _op_blend_pan_c_dpan _op_blend_pan_c_dp
87#define _op_blend_p_can_dpan _op_blend_p_can_dp
88#define _op_blend_pas_can_dpan _op_blend_pas_can_dp
89#define _op_blend_pan_can_dpan _op_blend_pan_can_dp
90#define _op_blend_p_caa_dpan _op_blend_p_caa_dp
91#define _op_blend_pas_caa_dpan _op_blend_pas_caa_dp
92#define _op_blend_pan_caa_dpan _op_blend_pan_caa_dp
93
94static void
95init_blend_pixel_color_span_funcs_c(void)
96{
97 op_blend_span_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_p_c_dp;
98 op_blend_span_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_pas_c_dp;
99 op_blend_span_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_pan_c_dp;
100 op_blend_span_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_p_can_dp;
101 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_pas_can_dp;
102 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_pan_can_dp;
103 op_blend_span_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_p_caa_dp;
104 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_pas_caa_dp;
105 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_pan_caa_dp;
106
107 op_blend_span_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_p_c_dpan;
108 op_blend_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_pas_c_dpan;
109 op_blend_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_pan_c_dpan;
110 op_blend_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_p_can_dpan;
111 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pas_can_dpan;
112 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pan_can_dpan;
113 op_blend_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_p_caa_dpan;
114 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pas_caa_dpan;
115 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pan_caa_dpan;
116}
117#endif
118
119#ifdef BUILD_C
120static void
121_op_blend_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
122 s = MUL4_SYM(c, s);
123 c = 256 - (s >> 24);
124 *d = s + MUL_256(c, *d);
125}
126
127#define _op_blend_pt_pas_c_dp _op_blend_pt_p_c_dp
128#define _op_blend_pt_pan_c_dp _op_blend_pt_p_c_dp
129#define _op_blend_pt_p_can_dp _op_blend_pt_p_c_dp
130#define _op_blend_pt_pas_can_dp _op_blend_pt_p_c_dp
131#define _op_blend_pt_pan_can_dp _op_blend_pt_p_c_dp
132#define _op_blend_pt_p_caa_dp _op_blend_pt_p_c_dp
133#define _op_blend_pt_pas_caa_dp _op_blend_pt_p_c_dp
134#define _op_blend_pt_pan_caa_dp _op_blend_pt_p_c_dp
135
136#define _op_blend_pt_p_c_dpan _op_blend_pt_p_c_dp
137#define _op_blend_pt_pas_c_dpan _op_blend_pt_pas_c_dp
138#define _op_blend_pt_pan_c_dpan _op_blend_pt_pan_c_dp
139#define _op_blend_pt_p_can_dpan _op_blend_pt_p_can_dp
140#define _op_blend_pt_pas_can_dpan _op_blend_pt_pas_can_dp
141#define _op_blend_pt_pan_can_dpan _op_blend_pt_pan_can_dp
142#define _op_blend_pt_p_caa_dpan _op_blend_pt_p_caa_dp
143#define _op_blend_pt_pas_caa_dpan _op_blend_pt_pas_caa_dp
144#define _op_blend_pt_pan_caa_dpan _op_blend_pt_pan_caa_dp
145
146static void
147init_blend_pixel_color_pt_funcs_c(void)
148{
149 op_blend_pt_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_pt_p_c_dp;
150 op_blend_pt_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_pt_pas_c_dp;
151 op_blend_pt_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_pt_pan_c_dp;
152 op_blend_pt_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_pt_p_can_dp;
153 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_pt_pas_can_dp;
154 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_pt_pan_can_dp;
155 op_blend_pt_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_p_caa_dp;
156 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_pas_caa_dp;
157 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_pan_caa_dp;
158
159 op_blend_pt_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_p_c_dpan;
160 op_blend_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_pas_c_dpan;
161 op_blend_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_pan_c_dpan;
162 op_blend_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pt_p_can_dpan;
163 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pt_pas_can_dpan;
164 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pt_pan_can_dpan;
165 op_blend_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_p_caa_dpan;
166 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_pas_caa_dpan;
167 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_pan_caa_dpan;
168}
169#endif
170
171/*-----*/
172
173/* blend_rel pixel x color -> dst */
174
175#ifdef BUILD_C
176static void
177_op_blend_rel_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
178 DATA32 *e;
179 int alpha;
180 UNROLL8_PLD_WHILE(d, l, e,
181 {
182 DATA32 sc = MUL4_SYM(c, *s);
183 alpha = 256 - (sc >> 24);
184 *d = MUL_SYM(*d >> 24, sc) + MUL_256(alpha, *d);
185 d++;
186 s++;
187 });
188}
189
190#define _op_blend_rel_pas_c_dp _op_blend_rel_p_c_dp
191#define _op_blend_rel_pan_c_dp _op_blend_rel_p_c_dp
192#define _op_blend_rel_p_can_dp _op_blend_rel_p_c_dp
193#define _op_blend_rel_pas_can_dp _op_blend_rel_p_c_dp
194#define _op_blend_rel_pan_can_dp _op_blend_rel_p_c_dp
195#define _op_blend_rel_p_caa_dp _op_blend_rel_p_c_dp
196#define _op_blend_rel_pas_caa_dp _op_blend_rel_p_c_dp
197#define _op_blend_rel_pan_caa_dp _op_blend_rel_p_c_dp
198
199#define _op_blend_rel_p_c_dpan _op_blend_p_c_dpan
200#define _op_blend_rel_pas_c_dpan _op_blend_pas_c_dpan
201#define _op_blend_rel_pan_c_dpan _op_blend_pan_c_dpan
202#define _op_blend_rel_p_can_dpan _op_blend_p_can_dpan
203#define _op_blend_rel_pas_can_dpan _op_blend_pas_can_dpan
204#define _op_blend_rel_pan_can_dpan _op_blend_pan_can_dpan
205#define _op_blend_rel_p_caa_dpan _op_blend_p_caa_dpan
206#define _op_blend_rel_pas_caa_dpan _op_blend_pas_caa_dpan
207#define _op_blend_rel_pan_caa_dpan _op_blend_pan_caa_dpan
208
209static void
210init_blend_rel_pixel_color_span_funcs_c(void)
211{
212 op_blend_rel_span_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_rel_p_c_dp;
213 op_blend_rel_span_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_rel_pas_c_dp;
214 op_blend_rel_span_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_rel_pan_c_dp;
215 op_blend_rel_span_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_p_can_dp;
216 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pas_can_dp;
217 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pan_can_dp;
218 op_blend_rel_span_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_p_caa_dp;
219 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pas_caa_dp;
220 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pan_caa_dp;
221
222 op_blend_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_p_c_dpan;
223 op_blend_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pas_c_dpan;
224 op_blend_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pan_c_dpan;
225 op_blend_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_p_can_dpan;
226 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pas_can_dpan;
227 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pan_can_dpan;
228 op_blend_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_p_caa_dpan;
229 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pas_caa_dpan;
230 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pan_caa_dpan;
231}
232#endif
233
234#ifdef BUILD_C
235static void
236_op_blend_rel_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
237 s = MUL4_SYM(c, s);
238 c = 256 - (s >> 24);
239 *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
240}
241
242#define _op_blend_rel_pt_pas_c_dp _op_blend_rel_pt_p_c_dp
243#define _op_blend_rel_pt_pan_c_dp _op_blend_rel_pt_p_c_dp
244#define _op_blend_rel_pt_p_can_dp _op_blend_rel_pt_p_c_dp
245#define _op_blend_rel_pt_pas_can_dp _op_blend_rel_pt_p_c_dp
246#define _op_blend_rel_pt_pan_can_dp _op_blend_rel_pt_p_c_dp
247#define _op_blend_rel_pt_p_caa_dp _op_blend_rel_pt_p_c_dp
248#define _op_blend_rel_pt_pas_caa_dp _op_blend_rel_pt_p_c_dp
249#define _op_blend_rel_pt_pan_caa_dp _op_blend_rel_pt_p_c_dp
250
251#define _op_blend_rel_pt_p_c_dpan _op_blend_pt_p_c_dpan
252#define _op_blend_rel_pt_pas_c_dpan _op_blend_pt_pas_c_dpan
253#define _op_blend_rel_pt_pan_c_dpan _op_blend_pt_pan_c_dpan
254#define _op_blend_rel_pt_p_can_dpan _op_blend_pt_p_can_dpan
255#define _op_blend_rel_pt_pas_can_dpan _op_blend_pt_pas_can_dpan
256#define _op_blend_rel_pt_pan_can_dpan _op_blend_pt_pan_can_dpan
257#define _op_blend_rel_pt_p_caa_dpan _op_blend_pt_p_caa_dpan
258#define _op_blend_rel_pt_pas_caa_dpan _op_blend_pt_pas_caa_dpan
259#define _op_blend_rel_pt_pan_caa_dpan _op_blend_pt_pan_caa_dpan
260
261static void
262init_blend_rel_pixel_color_pt_funcs_c(void)
263{
264 op_blend_rel_pt_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_p_c_dp;
265 op_blend_rel_pt_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_pas_c_dp;
266 op_blend_rel_pt_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_pan_c_dp;
267 op_blend_rel_pt_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pt_p_can_dp;
268 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pt_pas_can_dp;
269 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pt_pan_can_dp;
270 op_blend_rel_pt_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_p_caa_dp;
271 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_pas_caa_dp;
272 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_pan_caa_dp;
273
274 op_blend_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_p_c_dpan;
275 op_blend_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_pas_c_dpan;
276 op_blend_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_pan_c_dpan;
277 op_blend_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_p_can_dpan;
278 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_pas_can_dpan;
279 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_pan_can_dpan;
280 op_blend_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_p_caa_dpan;
281 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_pas_caa_dpan;
282 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_pan_caa_dpan;
283}
284#endif