aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c
new file mode 100644
index 0000000..be70065
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c
@@ -0,0 +1,109 @@
1/* blend color -> dst */
2
3#ifdef BUILD_C
4static void
5_op_blend_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e, a = 256 - (c >> 24);
7 UNROLL8_PLD_WHILE(d, l, e,
8 {
9 *d = c + MUL_256(a, *d);
10 d++;
11 });
12}
13
14#define _op_blend_caa_dp _op_blend_c_dp
15
16#define _op_blend_c_dpan _op_blend_c_dp
17#define _op_blend_caa_dpan _op_blend_c_dpan
18
19static void
20init_blend_color_span_funcs_c(void)
21{
22 op_blend_span_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_blend_c_dp;
23 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_blend_caa_dp;
24
25 op_blend_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_blend_c_dpan;
26 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_caa_dpan;
27}
28#endif
29
30#ifdef BUILD_C
31static void
32_op_blend_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
33 s = 256 - (c >> 24);
34 *d = c + MUL_256(s, *d);
35}
36
37#define _op_blend_pt_caa_dp _op_blend_pt_c_dp
38
39#define _op_blend_pt_c_dpan _op_blend_pt_c_dp
40#define _op_blend_pt_caa_dpan _op_blend_pt_c_dpan
41
42#define _op_blend_pt_c_dpas _op_blend_pt_c_dp
43#define _op_blend_pt_caa_dpas _op_blend_pt_c_dp
44
45static void
46init_blend_color_pt_funcs_c(void)
47{
48 op_blend_pt_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_blend_pt_c_dp;
49 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_caa_dp;
50
51 op_blend_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_c_dpan;
52 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_caa_dpan;
53}
54#endif
55
56/*-----*/
57
58/* blend_rel color -> dst */
59
60#ifdef BUILD_C
61static void
62_op_blend_rel_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
63 DATA32 *e;
64 int alpha = 256 - (c >> 24);
65 UNROLL8_PLD_WHILE(d, l, e,
66 {
67 *d = MUL_SYM(*d >> 24, c) + MUL_256(alpha, *d);
68 d++;
69 });
70}
71
72#define _op_blend_rel_caa_dp _op_blend_rel_c_dp
73
74#define _op_blend_rel_c_dpan _op_blend_c_dpan
75#define _op_blend_rel_caa_dpan _op_blend_caa_dpan
76
77static void
78init_blend_rel_color_span_funcs_c(void)
79{
80 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_blend_rel_c_dp;
81 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_caa_dp;
82
83 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_c_dpan;
84 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_caa_dpan;
85}
86#endif
87
88#ifdef BUILD_C
89static void
90_op_blend_rel_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
91 s = *d >> 24;
92 *d = MUL_SYM(s, c) + MUL_256(256 - (c >> 24), *d);
93}
94
95#define _op_blend_rel_pt_caa_dp _op_blend_rel_pt_c_dp
96
97#define _op_blend_rel_pt_c_dpan _op_blend_pt_c_dpan
98#define _op_blend_rel_pt_caa_dpan _op_blend_pt_caa_dpan
99
100static void
101init_blend_rel_color_pt_funcs_c(void)
102{
103 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_c_dp;
104 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_caa_dp;
105
106 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_c_dpan;
107 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_caa_dpan;
108}
109#endif