lib/evas/filters/blur/blur_gaussian_alpha_.c \
lib/evas/filters/blur/blur_gaussian_rgba_.c \
lib/evas/filters/blur/blur_box_alpha_.c \
-lib/evas/filters/blur/blur_box_rgba_.c
+lib/evas/filters/blur/blur_box_alpha_i386.c \
+lib/evas/filters/blur/blur_box_alpha_sse3.c \
+lib/evas/filters/blur/blur_box_alpha_neon.c \
+lib/evas/filters/blur/blur_box_rgba_.c \
+lib/evas/filters/blur/blur_box_rgba_i386.c \
+lib/evas/filters/blur/blur_box_rgba_sse3.c \
+lib/evas/filters/blur/blur_box_rgba_neon.c
+
### Engines
--- /dev/null
+#ifdef BUILD_MMX
+
+static inline void
+_box_blur_alpha_horiz_step_mmx(const DATA8* restrict const srcdata,
+ DATA8* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_alpha_horiz_step(srcdata, dstdata, radii, len, loops);
+}
+
+static inline void
+_box_blur_alpha_vert_step_mmx(const DATA8* restrict const srcdata,
+ DATA8* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_alpha_vert_step(srcdata, dstdata, radii, len, loops);
+}
+
+#endif
--- /dev/null
+#ifdef BUILD_NEON
+
+static inline void
+_box_blur_alpha_horiz_step_neon(const DATA8* restrict const srcdata,
+ DATA8* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_alpha_horiz_step(srcdata, dstdata, radii, len, loops);
+}
+
+static inline void
+_box_blur_alpha_vert_step_neon(const DATA8* restrict const srcdata,
+ DATA8* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_alpha_vert_step(srcdata, dstdata, radii, len, loops);
+}
+
+#endif
--- /dev/null
+#ifdef BUILD_SSE3
+
+static inline void
+_box_blur_alpha_horiz_step_sse3(const DATA8* restrict const srcdata,
+ DATA8* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_alpha_horiz_step(srcdata, dstdata, radii, len, loops);
+}
+
+static inline void
+_box_blur_alpha_vert_step_sse3(const DATA8* restrict const srcdata,
+ DATA8* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_alpha_vert_step(srcdata, dstdata, radii, len, loops);
+}
+
+#endif
#include "../evas_filter_private.h"
static inline void
-_box_blur_horiz_rgba_step(const DATA32* restrict const srcdata,
+_box_blur_rgba_horiz_step(const DATA32* restrict const srcdata,
DATA32* restrict const dstdata,
const int* restrict const radii,
const int len,
}
static inline void
-_box_blur_vert_rgba_step(const DATA32* restrict const srcdata,
+_box_blur_rgba_vert_step(const DATA32* restrict const srcdata,
DATA32* restrict const dstdata,
const int* restrict const radii,
const int len,
--- /dev/null
+#ifdef BUILD_MMX
+
+static inline void
+_box_blur_rgba_horiz_step_mmx(const DATA32* restrict const srcdata,
+ DATA32* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_rgba_horiz_step(srcdata, dstdata, radii, len, loops);
+}
+
+static inline void
+_box_blur_rgba_vert_step_mmx(const DATA32* restrict const srcdata,
+ DATA32* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_rgba_vert_step(srcdata, dstdata, radii, len, loops);
+}
+
+#endif
--- /dev/null
+#ifdef BUILD_NEON
+
+static inline void
+_box_blur_rgba_horiz_step_neon(const DATA32* restrict const srcdata,
+ DATA32* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_rgba_horiz_step(srcdata, dstdata, radii, len, loops);
+}
+
+static inline void
+_box_blur_rgba_vert_step_neon(const DATA32* restrict const srcdata,
+ DATA32* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_rgba_vert_step(srcdata, dstdata, radii, len, loops);
+}
+
+#endif
--- /dev/null
+#ifdef BUILD_SSE3
+
+static inline void
+_box_blur_rgba_horiz_step_sse3(const DATA32* restrict const srcdata,
+ DATA32* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_rgba_horiz_step(srcdata, dstdata, radii, len, loops);
+}
+
+static inline void
+_box_blur_rgba_vert_step_sse3(const DATA32* restrict const srcdata,
+ DATA32* restrict const dstdata,
+ const int* restrict const radii,
+ const int len,
+ const int loops)
+{
+ // TODO: implement optimized code here and remove the following line:
+ _box_blur_rgba_vert_step(srcdata, dstdata, radii, len, loops);
+}
+
+#endif
}
#include "./blur/blur_box_rgba_.c"
+#ifdef BUILD_MMX
+#include "./blur/blur_box_rgba_i386.c"
+#endif
+#ifdef BUILD_SSE3
+#include "./blur/blur_box_rgba_sse3.c"
+#endif
+#ifdef BUILD_NEON
+#include "./blur/blur_box_rgba_neon.c"
+#endif
static void
_box_blur_horiz_rgba(DATA32 *src, DATA32 *dst, int* radii, int w, int h)
{
DEBUG_TIME_BEGIN();
- _box_blur_horiz_rgba_step(src, dst, radii, w, h);
+
+#ifdef BUILD_SSE3
+ if (evas_common_cpu_has_feature(CPU_FEATURE_SSE3))
+ {
+ _box_blur_rgba_horiz_step_sse3(src, dst, radii, w, h);
+ goto end;
+ }
+#endif
+#ifdef BUILD_MMX
+ if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
+ {
+ _box_blur_rgba_horiz_step_mmx(src, dst, radii, w, h);
+ goto end;
+ }
+#endif
+#ifdef BUILD_NEON
+ if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
+ {
+ _box_blur_rgba_horiz_step_neon(src, dst, radii, w, h);
+ goto end;
+ }
+#endif
+ _box_blur_rgba_horiz_step(src, dst, radii, w, h);
+
+end:
DEBUG_TIME_END();
}
_box_blur_vert_rgba(DATA32 *src, DATA32 *dst, int* radii, int w, int h)
{
DEBUG_TIME_BEGIN();
- _box_blur_vert_rgba_step(src, dst, radii, h, w);
+
+#ifdef BUILD_SSE3
+ if (evas_common_cpu_has_feature(CPU_FEATURE_SSE3))
+ {
+ _box_blur_rgba_vert_step_sse3(src, dst, radii, h, w);
+ goto end;
+ }
+#endif
+#ifdef BUILD_MMX
+ if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
+ {
+ _box_blur_rgba_vert_step_mmx(src, dst, radii, h, w);
+ goto end;
+ }
+#endif
+#ifdef BUILD_NEON
+ if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
+ {
+ _box_blur_rgba_vert_step_neon(src, dst, radii, h, w);
+ goto end;
+ }
+#endif
+ _box_blur_rgba_vert_step(src, dst, radii, h, w);
+
+end:
DEBUG_TIME_END();
}
}
#include "./blur/blur_box_alpha_.c"
+#ifdef BUILD_MMX
+#include "./blur/blur_box_alpha_i386.c"
+#endif
+#ifdef BUILD_SSE3
+#include "./blur/blur_box_alpha_sse3.c"
+#endif
+#ifdef BUILD_NEON
+#include "./blur/blur_box_alpha_neon.c"
+#endif
static void
_box_blur_horiz_alpha(DATA8 *src, DATA8 *dst, int* radii, int w, int h)
{
DEBUG_TIME_BEGIN();
+
+#ifdef BUILD_SSE3
+ if (evas_common_cpu_has_feature(CPU_FEATURE_SSE3))
+ {
+ _box_blur_alpha_horiz_step_sse3(src, dst, radii, w, h);
+ goto end;
+ }
+#endif
+#ifdef BUILD_MMX
+ if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
+ {
+ _box_blur_alpha_horiz_step_mmx(src, dst, radii, w, h);
+ goto end;
+ }
+#endif
+#ifdef BUILD_NEON
+ if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
+ {
+ _box_blur_alpha_horiz_step_neon(src, dst, radii, w, h);
+ goto end;
+ }
+#endif
_box_blur_alpha_horiz_step(src, dst, radii, w, h);
+
+end:
DEBUG_TIME_END();
}
_box_blur_vert_alpha(DATA8 *src, DATA8 *dst, int* radii, int w, int h)
{
DEBUG_TIME_BEGIN();
+
+#ifdef BUILD_SSE3
+ if (evas_common_cpu_has_feature(CPU_FEATURE_SSE3))
+ {
+ _box_blur_alpha_vert_step_sse3(src, dst, radii, h, w);
+ goto end;
+ }
+#endif
+#ifdef BUILD_MMX
+ if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
+ {
+ _box_blur_alpha_vert_step_mmx(src, dst, radii, h, w);
+ goto end;
+ }
+#endif
+#ifdef BUILD_NEON
+ if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
+ {
+ _box_blur_alpha_vert_step_neon(src, dst, radii, h, w);
+ goto end;
+ }
+#endif
_box_blur_alpha_vert_step(src, dst, radii, h, w);
+
+end:
DEBUG_TIME_END();
}