2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
5 #include "evas_common.h"
6 #include "evas_blend_private.h"
8 #if defined BUILD_MMX || defined BUILD_SSE
12 const DATA32 ALPHA_255 = 255;
13 const DATA32 ALPHA_256 = 256;
16 _composite_span_nothing(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l)
21 _composite_pt_nothing(DATA32 s, DATA8 m, DATA32 c, DATA32 *d)
25 static RGBA_Gfx_Compositor *
26 evas_gfx_compositor_get(unsigned char op)
28 RGBA_Gfx_Compositor *comp;
32 case _EVAS_RENDER_BLEND:
33 comp = evas_common_gfx_compositor_blend_get();
35 case _EVAS_RENDER_BLEND_REL:
36 comp = evas_common_gfx_compositor_blend_rel_get();
38 case _EVAS_RENDER_COPY:
39 comp = evas_common_gfx_compositor_copy_get();
41 case _EVAS_RENDER_COPY_REL:
42 comp = evas_common_gfx_compositor_copy_rel_get();
45 case _EVAS_RENDER_ADD:
46 comp = evas_common_gfx_compositor_add_get();
48 case _EVAS_RENDER_ADD_REL:
49 comp = evas_common_gfx_compositor_add_rel_get();
51 case _EVAS_RENDER_SUB:
52 comp = evas_common_gfx_compositor_sub_get();
54 case _EVAS_RENDER_SUB_REL:
55 comp = evas_common_gfx_compositor_sub_rel_get();
58 case _EVAS_RENDER_MASK:
59 comp = evas_common_gfx_compositor_mask_get();
61 case _EVAS_RENDER_MUL:
62 comp = evas_common_gfx_compositor_mul_get();
65 comp = evas_common_gfx_compositor_blend_get();
72 evas_common_blend_init(void)
74 static int gfx_initialised = 0;
78 RGBA_Gfx_Compositor *comp;
80 if (gfx_initialised) return;
83 evas_common_cpu_can_do(&mmx, &sse, &sse2);
85 comp = evas_common_gfx_compositor_copy_get();
86 if (comp) comp->init();
87 comp = evas_common_gfx_compositor_copy_rel_get();
88 if (comp) comp->init();
90 comp = evas_common_gfx_compositor_blend_get();
91 if (comp) comp->init();
92 comp = evas_common_gfx_compositor_blend_rel_get();
93 if (comp) comp->init();
96 comp = evas_common_gfx_compositor_add_get();
97 if (comp) comp->init();
98 comp = evas_common_gfx_compositor_add_rel_get();
99 if (comp) comp->init();
100 comp = evas_common_gfx_compositor_sub_get();
101 if (comp) comp->init();
102 comp = evas_common_gfx_compositor_sub_rel_get();
103 if (comp) comp->init();
105 comp = evas_common_gfx_compositor_mask_get();
106 if (comp) comp->init();
108 comp = evas_common_gfx_compositor_mul_get();
109 if (comp) comp->init();
113 evas_common_blend_shutdown(void)
115 RGBA_Gfx_Compositor *comp;
117 comp = evas_common_gfx_compositor_copy_get();
118 if (comp) comp->shutdown();
119 comp = evas_common_gfx_compositor_copy_rel_get();
120 if (comp) comp->shutdown();
122 comp = evas_common_gfx_compositor_blend_get();
123 if (comp) comp->shutdown();
124 comp = evas_common_gfx_compositor_blend_rel_get();
125 if (comp) comp->shutdown();
128 comp = evas_common_gfx_compositor_add_get();
129 if (comp) comp->shutdown();
130 comp = evas_common_gfx_compositor_add_rel_get();
131 if (comp) comp->shutdown();
132 comp = evas_common_gfx_compositor_sub_get();
133 if (comp) comp->shutdown();
134 comp = evas_common_gfx_compositor_sub_rel_get();
135 if (comp) comp->shutdown();
137 comp = evas_common_gfx_compositor_mask_get();
138 if (comp) comp->shutdown();
140 comp = evas_common_gfx_compositor_mul_get();
141 if (comp) comp->shutdown();
146 evas_common_gfx_func_composite_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels, int op)
148 RGBA_Gfx_Compositor *comp;
149 RGBA_Gfx_Func func = NULL;
151 if (src && (!src->cache_entry.flags.alpha))
153 if (op == _EVAS_RENDER_BLEND)
154 op = _EVAS_RENDER_COPY;
155 if (op == _EVAS_RENDER_BLEND_REL)
156 op = _EVAS_RENDER_COPY_REL;
158 comp = evas_gfx_compositor_get(op);
160 func = comp->composite_pixel_span_get(src, dst, pixels);
163 return _composite_span_nothing;
167 evas_common_gfx_func_composite_color_span_get(DATA32 col, RGBA_Image *dst, int pixels, int op)
169 RGBA_Gfx_Compositor *comp;
170 RGBA_Gfx_Func func = NULL;
172 if ((col & 0xff000000) == 0xff000000)
174 if (op == _EVAS_RENDER_BLEND)
175 op = _EVAS_RENDER_COPY;
176 if (op == EVAS_RENDER_BLEND_REL)
177 op = _EVAS_RENDER_COPY_REL;
180 comp = evas_gfx_compositor_get(op);
182 func = comp->composite_color_span_get(col, dst, pixels);
185 return _composite_span_nothing;
189 evas_common_gfx_func_composite_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels, int op)
191 RGBA_Gfx_Compositor *comp;
192 RGBA_Gfx_Func func = NULL;
194 if ((src && (!src->cache_entry.flags.alpha)) && ((col & 0xff000000) == 0xff000000))
196 if (op == _EVAS_RENDER_BLEND)
197 op = _EVAS_RENDER_COPY;
198 if (op == _EVAS_RENDER_BLEND_REL)
199 op = _EVAS_RENDER_COPY_REL;
202 comp = evas_gfx_compositor_get(op);
204 func = comp->composite_pixel_color_span_get(src, col, dst, pixels);
207 return _composite_span_nothing;
211 evas_common_gfx_func_composite_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels, int op)
213 RGBA_Gfx_Compositor *comp;
214 RGBA_Gfx_Func func = NULL;
216 comp = evas_gfx_compositor_get(op);
218 func = comp->composite_mask_color_span_get(col, dst, pixels);
221 return _composite_span_nothing;
225 evas_common_gfx_func_composite_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels, int op)
227 RGBA_Gfx_Compositor *comp;
228 RGBA_Gfx_Func func = NULL;
230 comp = evas_gfx_compositor_get(op);
232 func = comp->composite_pixel_mask_span_get(src, dst, pixels);
235 return _composite_span_nothing;
239 evas_common_gfx_func_composite_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst, int op)
241 RGBA_Gfx_Compositor *comp;
242 RGBA_Gfx_Pt_Func func = NULL;
244 if (!src_flags.alpha)
246 if (op == _EVAS_RENDER_BLEND)
247 op = _EVAS_RENDER_COPY;
248 if (op == _EVAS_RENDER_BLEND_REL)
249 op = _EVAS_RENDER_COPY_REL;
251 comp = evas_gfx_compositor_get(op);
253 func = comp->composite_pixel_pt_get(src_flags, dst);
256 return _composite_pt_nothing;
260 evas_common_gfx_func_composite_color_pt_get(DATA32 col, RGBA_Image *dst, int op)
262 RGBA_Gfx_Compositor *comp;
263 RGBA_Gfx_Pt_Func func = NULL;
265 if ((col & 0xff000000) == 0xff000000)
267 if (op == _EVAS_RENDER_BLEND)
268 op = _EVAS_RENDER_COPY;
269 if (op == EVAS_RENDER_BLEND_REL)
270 op = _EVAS_RENDER_COPY_REL;
273 comp = evas_gfx_compositor_get(op);
275 func = comp->composite_color_pt_get(col, dst);
278 return _composite_pt_nothing;
282 evas_common_gfx_func_composite_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst, int op)
284 RGBA_Gfx_Compositor *comp;
285 RGBA_Gfx_Pt_Func func = NULL;
287 if ((!src_flags.alpha) && ((col & 0xff000000) == 0xff000000))
289 if (op == _EVAS_RENDER_BLEND)
290 op = _EVAS_RENDER_COPY;
291 if (op == _EVAS_RENDER_BLEND_REL)
292 op = _EVAS_RENDER_COPY_REL;
295 comp = evas_gfx_compositor_get(op);
297 func = comp->composite_pixel_color_pt_get(src_flags, col, dst);
300 return _composite_pt_nothing;
304 evas_common_gfx_func_composite_mask_color_pt_get(DATA32 col, RGBA_Image *dst, int op)
306 RGBA_Gfx_Compositor *comp;
307 RGBA_Gfx_Pt_Func func = NULL;
309 comp = evas_gfx_compositor_get(op);
311 func = comp->composite_mask_color_pt_get(col, dst);
314 return _composite_pt_nothing;
318 evas_common_gfx_func_composite_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst, int op)
320 RGBA_Gfx_Compositor *comp;
321 RGBA_Gfx_Pt_Func func = NULL;
323 comp = evas_gfx_compositor_get(op);
325 func = comp->composite_pixel_mask_pt_get(src_flags, dst);
328 return _composite_pt_nothing;