From a8d283567a21b2716cdc0b888a49bda46abfb95c Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Tue, 17 Jan 2017 21:18:46 +0900 Subject: [PATCH] evas filters: Move blur to software generic (8/8) This completes the series of refactoring patches, where only the filter implementation is moved to the engine rather than inside evas itself. --- src/Makefile_Evas.am | 22 +++++++-------- src/lib/evas/filters/evas_filter.c | 31 ++-------------------- src/lib/evas/filters/evas_filter_private.h | 4 --- .../evas/engines/software_generic/evas_engine.c | 3 +-- .../filters/blur/blur_box_alpha_.c | 2 +- .../filters/blur/blur_box_alpha_i386.c | 0 .../filters/blur/blur_box_alpha_neon.c | 0 .../filters/blur/blur_box_alpha_sse3.c | 0 .../filters/blur/blur_box_rgba_.c | 2 +- .../filters/blur/blur_box_rgba_i386.c | 0 .../filters/blur/blur_box_rgba_neon.c | 0 .../filters/blur/blur_box_rgba_sse3.c | 0 .../filters/blur/blur_gaussian_alpha_.c | 2 +- .../filters/blur/blur_gaussian_rgba_.c | 2 +- .../software_generic/filters/evas_engine_filter.h | 1 + .../software_generic}/filters/evas_filter_blur.c | 27 +++++++++---------- 16 files changed, 32 insertions(+), 64 deletions(-) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/blur/blur_box_alpha_.c (99%) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/blur/blur_box_alpha_i386.c (100%) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/blur/blur_box_alpha_neon.c (100%) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/blur/blur_box_alpha_sse3.c (100%) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/blur/blur_box_rgba_.c (99%) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/blur/blur_box_rgba_i386.c (100%) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/blur/blur_box_rgba_neon.c (100%) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/blur/blur_box_rgba_sse3.c (100%) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/blur/blur_gaussian_alpha_.c (98%) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/blur/blur_gaussian_rgba_.c (98%) rename src/{lib/evas => modules/evas/engines/software_generic}/filters/evas_filter_blur.c (93%) diff --git a/src/Makefile_Evas.am b/src/Makefile_Evas.am index 061744a..d6dcd9c 100644 --- a/src/Makefile_Evas.am +++ b/src/Makefile_Evas.am @@ -592,26 +592,26 @@ lib/evas/common/evas_op_sub/op_sub_pixel_mask_i386.c lib_evas_libevas_la_SOURCES += \ lib/evas/canvas/evas_filter_mixin.c \ lib/evas/filters/evas_filter.c \ -lib/evas/filters/evas_filter_blur.c \ lib/evas/filters/evas_filter_parser.c \ lib/evas/filters/evas_filter_utils.c \ lib/evas/filters/evas_filter_private.h EXTRA_DIST2 += \ -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_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 +modules/evas/engines/software_generic/filters/blur/blur_gaussian_alpha_.c \ +modules/evas/engines/software_generic/filters/blur/blur_gaussian_rgba_.c \ +modules/evas/engines/software_generic/filters/blur/blur_box_alpha_.c \ +modules/evas/engines/software_generic/filters/blur/blur_box_alpha_i386.c \ +modules/evas/engines/software_generic/filters/blur/blur_box_alpha_sse3.c \ +modules/evas/engines/software_generic/filters/blur/blur_box_alpha_neon.c \ +modules/evas/engines/software_generic/filters/blur/blur_box_rgba_.c \ +modules/evas/engines/software_generic/filters/blur/blur_box_rgba_i386.c \ +modules/evas/engines/software_generic/filters/blur/blur_box_rgba_sse3.c \ +modules/evas/engines/software_generic/filters/blur/blur_box_rgba_neon.c GFX_FILTER_SW_FILES = \ modules/evas/engines/software_generic/filters/evas_engine_filter.h \ modules/evas/engines/software_generic/filters/evas_filter_blend.c \ +modules/evas/engines/software_generic/filters/evas_filter_blur.c \ modules/evas/engines/software_generic/filters/evas_filter_bump.c \ modules/evas/engines/software_generic/filters/evas_filter_curve.c \ modules/evas/engines/software_generic/filters/evas_filter_displace.c \ diff --git a/src/lib/evas/filters/evas_filter.c b/src/lib/evas/filters/evas_filter.c index f3ea207..b8b993e 100644 --- a/src/lib/evas/filters/evas_filter.c +++ b/src/lib/evas/filters/evas_filter.c @@ -1492,16 +1492,6 @@ _filter_name_get(int mode) #endif static Eina_Bool -_engine_gfx_filter_func(Evas_Filter_Command *cmd) -{ - // This should be temporary porting code, when moving filter implementations - // from here to the engine. Ideally the filters should be in ector though. - - EINA_SAFETY_ON_NULL_RETURN_VAL(cmd->ENFN->gfx_filter_process, EINA_FALSE); - return cmd->ENFN->gfx_filter_process(cmd->ENDT, cmd); -} - -static Eina_Bool _filter_command_run(Evas_Filter_Command *cmd) { Evas_Filter_Support support = EVAS_FILTER_SUPPORT_NONE; @@ -1530,30 +1520,13 @@ _filter_command_run(Evas_Filter_Command *cmd) } support = cmd->ENFN->gfx_filter_supports(cmd->ENDT, cmd); - if (support != EVAS_FILTER_SUPPORT_NONE) - { - func = &_engine_gfx_filter_func; - } - else - { - switch (cmd->mode) - { - case EVAS_FILTER_MODE_BLUR: - func = evas_filter_blur_cpu_func_get(cmd); - break; - default: - CRI("Invalid filter mode."); - break; - } - } - - if (!func) + if (support == EVAS_FILTER_SUPPORT_NONE) { ERR("No function to process this filter (mode %d)", cmd->mode); return EINA_FALSE; } - return func(cmd); + return cmd->ENFN->gfx_filter_process(cmd->ENDT, cmd); } static Eina_Bool diff --git a/src/lib/evas/filters/evas_filter_private.h b/src/lib/evas/filters/evas_filter_private.h index bdbfd80..6ba1a89 100644 --- a/src/lib/evas/filters/evas_filter_private.h +++ b/src/lib/evas/filters/evas_filter_private.h @@ -260,10 +260,6 @@ enum _Evas_Filter_Support void evas_filter_context_clear(Evas_Filter_Context *ctx); void evas_filter_context_source_set(Evas_Filter_Context *ctx, Evas_Object *eo_proxy, Evas_Object *eo_source, int bufid, Eina_Stringshare *name); -/* FIXME: CPU filters entry points. Move these to the Evas Engine itself. */ -Evas_Filter_Apply_Func evas_filter_blur_cpu_func_get(Evas_Filter_Command *cmd); -Evas_Filter_Apply_Func evas_filter_bump_map_cpu_func_get(Evas_Filter_Command *cmd); - /* Utility functions */ void _clip_to_target(int *sx, int *sy, int sw, int sh, int ox, int oy, int dw, int dh, int *dx, int *dy, int *rows, int *cols); Eina_Bool evas_filter_buffer_alloc(Evas_Filter_Buffer *fb, int w, int h); diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index 9bc0436..84c8937 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -4628,6 +4628,7 @@ _gfx_filter_func_get(Evas_Filter_Command *cmd) switch (cmd->mode) { case EVAS_FILTER_MODE_BLEND: func = eng_filter_blend_func_get(cmd); break; + case EVAS_FILTER_MODE_BLUR: func = eng_filter_blur_func_get(cmd); break; case EVAS_FILTER_MODE_BUMP: func = eng_filter_bump_func_get(cmd); break; case EVAS_FILTER_MODE_CURVE: func = eng_filter_curve_func_get(cmd); break; case EVAS_FILTER_MODE_DISPLACE: func = eng_filter_displace_func_get(cmd); break; @@ -4660,8 +4661,6 @@ eng_gfx_filter_process(void *data EINA_UNUSED, Evas_Filter_Command *cmd) return func(cmd); } -#undef FINDSYM - //------------------------------------------------// /* diff --git a/src/lib/evas/filters/blur/blur_box_alpha_.c b/src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_.c similarity index 99% rename from src/lib/evas/filters/blur/blur_box_alpha_.c rename to src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_.c index c1b8ec1..ba7ceeb 100644 --- a/src/lib/evas/filters/blur/blur_box_alpha_.c +++ b/src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_.c @@ -4,7 +4,7 @@ * _box_blur_alpha_vert_step */ -#include "../evas_filter_private.h" +#include "evas_filter_private.h" static inline void _box_blur_alpha_horiz_step(const DATA8* restrict const srcdata, diff --git a/src/lib/evas/filters/blur/blur_box_alpha_i386.c b/src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_i386.c similarity index 100% rename from src/lib/evas/filters/blur/blur_box_alpha_i386.c rename to src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_i386.c diff --git a/src/lib/evas/filters/blur/blur_box_alpha_neon.c b/src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_neon.c similarity index 100% rename from src/lib/evas/filters/blur/blur_box_alpha_neon.c rename to src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_neon.c diff --git a/src/lib/evas/filters/blur/blur_box_alpha_sse3.c b/src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_sse3.c similarity index 100% rename from src/lib/evas/filters/blur/blur_box_alpha_sse3.c rename to src/modules/evas/engines/software_generic/filters/blur/blur_box_alpha_sse3.c diff --git a/src/lib/evas/filters/blur/blur_box_rgba_.c b/src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_.c similarity index 99% rename from src/lib/evas/filters/blur/blur_box_rgba_.c rename to src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_.c index 033f249..8d90b4d 100644 --- a/src/lib/evas/filters/blur/blur_box_rgba_.c +++ b/src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_.c @@ -4,7 +4,7 @@ * - _box_blur_vert_rgba_step */ -#include "../evas_filter_private.h" +#include "evas_filter_private.h" static inline void _box_blur_rgba_horiz_step(const DATA32* restrict const srcdata, diff --git a/src/lib/evas/filters/blur/blur_box_rgba_i386.c b/src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_i386.c similarity index 100% rename from src/lib/evas/filters/blur/blur_box_rgba_i386.c rename to src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_i386.c diff --git a/src/lib/evas/filters/blur/blur_box_rgba_neon.c b/src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_neon.c similarity index 100% rename from src/lib/evas/filters/blur/blur_box_rgba_neon.c rename to src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_neon.c diff --git a/src/lib/evas/filters/blur/blur_box_rgba_sse3.c b/src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_sse3.c similarity index 100% rename from src/lib/evas/filters/blur/blur_box_rgba_sse3.c rename to src/modules/evas/engines/software_generic/filters/blur/blur_box_rgba_sse3.c diff --git a/src/lib/evas/filters/blur/blur_gaussian_alpha_.c b/src/modules/evas/engines/software_generic/filters/blur/blur_gaussian_alpha_.c similarity index 98% rename from src/lib/evas/filters/blur/blur_gaussian_alpha_.c rename to src/modules/evas/engines/software_generic/filters/blur/blur_gaussian_alpha_.c index fad14e2..5a72fa5 100644 --- a/src/lib/evas/filters/blur/blur_gaussian_alpha_.c +++ b/src/modules/evas/engines/software_generic/filters/blur/blur_gaussian_alpha_.c @@ -5,7 +5,7 @@ */ /* Datatypes and MIN macro */ -#include "../evas_filter_private.h" +#include "evas_filter_private.h" #if !defined (FUNCTION_NAME) || !defined (STEP) # error Must define FUNCTION_NAME and STEP diff --git a/src/lib/evas/filters/blur/blur_gaussian_rgba_.c b/src/modules/evas/engines/software_generic/filters/blur/blur_gaussian_rgba_.c similarity index 98% rename from src/lib/evas/filters/blur/blur_gaussian_rgba_.c rename to src/modules/evas/engines/software_generic/filters/blur/blur_gaussian_rgba_.c index fdbf3da..3a862fe 100644 --- a/src/lib/evas/filters/blur/blur_gaussian_rgba_.c +++ b/src/modules/evas/engines/software_generic/filters/blur/blur_gaussian_rgba_.c @@ -4,7 +4,7 @@ * - _gaussian_blur_vert_rgba_step */ -#include "../evas_filter_private.h" +#include "evas_filter_private.h" #if !defined (FUNCTION_NAME) || !defined (STEP) # error Must define FUNCTION_NAME and STEP diff --git a/src/modules/evas/engines/software_generic/filters/evas_engine_filter.h b/src/modules/evas/engines/software_generic/filters/evas_engine_filter.h index 2ae3618..9d67574 100644 --- a/src/modules/evas/engines/software_generic/filters/evas_engine_filter.h +++ b/src/modules/evas/engines/software_generic/filters/evas_engine_filter.h @@ -5,6 +5,7 @@ #include "draw.h" Evas_Filter_Apply_Func eng_filter_blend_func_get(Evas_Filter_Command *cmd); +Evas_Filter_Apply_Func eng_filter_blur_func_get(Evas_Filter_Command *cmd); Evas_Filter_Apply_Func eng_filter_bump_func_get(Evas_Filter_Command *cmd); Evas_Filter_Apply_Func eng_filter_curve_func_get(Evas_Filter_Command *cmd); Evas_Filter_Apply_Func eng_filter_displace_func_get(Evas_Filter_Command *cmd); diff --git a/src/lib/evas/filters/evas_filter_blur.c b/src/modules/evas/engines/software_generic/filters/evas_filter_blur.c similarity index 93% rename from src/lib/evas/filters/evas_filter_blur.c rename to src/modules/evas/engines/software_generic/filters/evas_filter_blur.c index ae35a4f..1dd59fd 100644 --- a/src/lib/evas/filters/evas_filter_blur.c +++ b/src/modules/evas/engines/software_generic/filters/evas_filter_blur.c @@ -1,4 +1,3 @@ -#include "evas_filter.h" #include "evas_filter_private.h" #include @@ -52,21 +51,21 @@ _box_blur_horiz_rgba(uint32_t *src, uint32_t *dst, int* radii, int w, int h) DEBUG_TIME_BEGIN(); #ifdef BUILD_SSE3 - if (evas_common_cpu_has_feature(CPU_FEATURE_SSE3)) + if (eina_cpu_features_get() & EINA_CPU_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)) + if (eina_cpu_features_get() & EINA_CPU_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)) + if (eina_cpu_features_get() & EINA_CPU_NEON) { _box_blur_rgba_horiz_step_neon(src, dst, radii, w, h); goto end; @@ -84,21 +83,21 @@ _box_blur_vert_rgba(uint32_t *src, uint32_t *dst, int* radii, int w, int h) DEBUG_TIME_BEGIN(); #ifdef BUILD_SSE3 - if (evas_common_cpu_has_feature(CPU_FEATURE_SSE3)) + if (eina_cpu_features_get() & EINA_CPU_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)) + if (eina_cpu_features_get() & EINA_CPU_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)) + if (eina_cpu_features_get() & EINA_CPU_NEON) { _box_blur_rgba_vert_step_neon(src, dst, radii, h, w); goto end; @@ -127,21 +126,21 @@ _box_blur_horiz_alpha(const 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)) + if (eina_cpu_features_get() & EINA_CPU_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)) + if (eina_cpu_features_get() & EINA_CPU_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)) + if (eina_cpu_features_get() & EINA_CPU_NEON) { _box_blur_alpha_horiz_step_neon(src, dst, radii, w, h); goto end; @@ -159,21 +158,21 @@ _box_blur_vert_alpha(const 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)) + if (eina_cpu_features_get() & EINA_CPU_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)) + if (eina_cpu_features_get() & EINA_CPU_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)) + if (eina_cpu_features_get() & EINA_CPU_NEON) { _box_blur_alpha_vert_step_neon(src, dst, radii, h, w); goto end; @@ -380,7 +379,7 @@ _gaussian_blur_vert_apply_rgba(Evas_Filter_Command *cmd) /* Main entry point */ Evas_Filter_Apply_Func -evas_filter_blur_cpu_func_get(Evas_Filter_Command *cmd) +eng_filter_blur_func_get(Evas_Filter_Command *cmd) { EINA_SAFETY_ON_NULL_RETURN_VAL(cmd, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(cmd->input, NULL); -- 2.7.4