This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository efl.
View the commit online.
commit 9f3d7b9cff65738475f65121938f1eef960145a2
Author: Carsten Haitzler <ras...@rasterman.com>
AuthorDate: Fri Oct 20 19:47:47 2023 +0100
evas gl engines - support tuning of cutouts much more
also re-tune them nby default
---
src/lib/evas/common/evas_draw.h | 2 ++
src/lib/evas/common/evas_draw_main.c | 18 ++++++++++++++++--
src/lib/evas/include/evas_common_private.h | 2 ++
.../evas/engines/gl_common/evas_gl_common.h | 6 +++++-
.../evas/engines/gl_common/evas_gl_context.c | 4 ++++
src/modules/evas/engines/gl_generic/evas_engine.c | 22 ++++++++++++++++++++++
6 files changed, 51 insertions(+), 3 deletions(-)
diff --git a/src/lib/evas/common/evas_draw.h b/src/lib/evas/common/evas_draw.h
index 2906d6a895..14fa3ca811 100644
--- a/src/lib/evas/common/evas_draw.h
+++ b/src/lib/evas/common/evas_draw.h
@@ -25,6 +25,8 @@ EVAS_API Cutout_Rects *evas_common_draw_context_cutouts_new (vo
EVAS_API void evas_common_draw_context_cutouts_free (Cutout_Rects* rects);
EVAS_API void evas_common_draw_context_cutouts_real_free (Cutout_Rects* rects);
EVAS_API void evas_common_draw_context_cutouts_del (Cutout_Rects* rects, int idx);
+EVAS_API void evas_common_draw_context_cutout_max_set (RGBA_Draw_Context *dc, int max);
+EVAS_API void evas_common_draw_context_cutout_size_min_set (RGBA_Draw_Context *dc, int min);
EVAS_API void evas_common_draw_context_add_cutout (RGBA_Draw_Context *dc, int x, int y, int w, int h);
EVAS_API void evas_common_draw_context_clear_cutouts (RGBA_Draw_Context *dc);
EVAS_API Cutout_Rects *evas_common_draw_context_apply_cutouts (RGBA_Draw_Context *dc, Cutout_Rects *recycle);
diff --git a/src/lib/evas/common/evas_draw_main.c b/src/lib/evas/common/evas_draw_main.c
index 832235765f..df5a4a59cb 100644
--- a/src/lib/evas/common/evas_draw_main.c
+++ b/src/lib/evas/common/evas_draw_main.c
@@ -174,6 +174,8 @@ evas_common_draw_context_new(void)
dc = _evas_common_draw_context_find();
if (!dc) return NULL;
memset(dc, 0, sizeof(RGBA_Draw_Context));
+ dc->cutout.count_max = 0x7fffffff;
+ dc->cutout.size_min = 8 * 8;
return dc;
}
@@ -296,11 +298,23 @@ evas_common_draw_context_unset_multiplier(RGBA_Draw_Context *dc)
dc->mul.use = 0;
}
+EVAS_API void
+evas_common_draw_context_cutout_max_set(RGBA_Draw_Context *dc, int max)
+{
+ dc->cutout.count_max = max;
+}
+
+EVAS_API void
+evas_common_draw_context_cutout_size_min_set(RGBA_Draw_Context *dc, int min)
+{
+ dc->cutout.size_min = min;
+}
EVAS_API void
evas_common_draw_context_add_cutout(RGBA_Draw_Context *dc, int x, int y, int w, int h)
{
-// if (dc->cutout.rects > 512) return;
+ if (dc->cutout.active >= dc->cutout.count_max) return;
+ if ((w * h) < dc->cutout.size_min) return;
if (dc->clip.use)
{
#if 1 // this is a bit faster
@@ -335,8 +349,8 @@ evas_common_draw_context_add_cutout(RGBA_Draw_Context *dc, int x, int y, int w,
RECTS_CLIP_TO_RECT(x, y, w, h,
dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h);
#endif
+ if ((w * h) < dc->cutout.size_min) return;
}
- if ((w * h) <= (8 * 8)) return;
if (dc->cutout.last_add.w > 0)
{
if ((dc->cutout.last_add.x == x) && (dc->cutout.last_add.y == y) &&
diff --git a/src/lib/evas/include/evas_common_private.h b/src/lib/evas/include/evas_common_private.h
index f2f52e4b85..7d7ae02ef9 100644
--- a/src/lib/evas/include/evas_common_private.h
+++ b/src/lib/evas/include/evas_common_private.h
@@ -645,6 +645,8 @@ struct _Cutout_Rects
Cutout_Rect *rects;
int active;
int max;
+ int count_max;
+ int size_min;
struct {
int x, w, y, h;
} last_add;
diff --git a/src/modules/evas/engines/gl_common/evas_gl_common.h b/src/modules/evas/engines/gl_common/evas_gl_common.h
index 28ddb4b8da..dafabbbe95 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_common.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_common.h
@@ -158,7 +158,8 @@ struct _Evas_GL_Shared
Eina_Bool etc1_subimage : 1;
Eina_Bool s3tc : 1;
// tuning params - per gpu/cpu combo?
-#define DEF_CUTOUT 4096
+#define DEF_CUTOUT 64
+#define DEF_CUTOUT_SIZE_MIN (64*64)
#define MAX_PIPES 32
#define DEF_PIPES 8
@@ -188,6 +189,9 @@ struct _Evas_GL_Shared
struct {
int max;
} cutout;
+ struct {
+ int min;
+ } cutout_size;
struct {
int max;
} pipes;
diff --git a/src/modules/evas/engines/gl_common/evas_gl_context.c b/src/modules/evas/engines/gl_common/evas_gl_context.c
index 2c07ea6d7e..ee73fe281a 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_context.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_context.c
@@ -1004,6 +1004,7 @@ evas_gl_common_context_new(void)
// magic numbers that are a result of imperical testing and getting
// "best case" performance across a range of systems
shared->info.tune.cutout.max = DEF_CUTOUT;
+ shared->info.tune.cutout_size.min = DEF_CUTOUT_SIZE_MIN;
shared->info.tune.pipes.max = DEF_PIPES;
shared->info.tune.atlas.max_alloc_size = DEF_ATLAS_ALLOC;
shared->info.tune.atlas.max_alloc_alpha_size = DEF_ATLAS_ALLOC_ALPHA;
@@ -1040,6 +1041,7 @@ evas_gl_common_context_new(void)
} while (0)
GETENVOPT("EVAS_GL_CUTOUT_MAX", cutout.max, -1, 0x7fffffff);
+ GETENVOPT("EVAS_GL_CUTOUT_SIZE_MIN", cutout_size.min, -1, 0x7fffffff);
GETENVOPT("EVAS_GL_PIPES_MAX", pipes.max, 1, MAX_PIPES);
GETENVOPT("EVAS_GL_ATLAS_ALLOC_SIZE", atlas.max_alloc_size, MIN_ATLAS_ALLOC, MAX_ATLAS_ALLOC);
GETENVOPT("EVAS_GL_ATLAS_ALLOC_ALPHA_SIZE", atlas.max_alloc_alpha_size, MIN_ATLAS_ALLOC_ALPHA, MAX_ATLAS_ALLOC_ALPHA);
@@ -1109,6 +1111,7 @@ evas_gl_common_context_new(void)
"\n"
"EVAS_GL_GET_PROGRAM_BINARY: %i\n"
"EVAS_GL_CUTOUT_MAX: %i\n"
+ "EVAS_GL_CUTOUT_SIZE_MIN: %i\n"
"EVAS_GL_PIPES_MAX: %i\n"
"EVAS_GL_ATLAS_ALLOC_SIZE: %i\n"
"EVAS_GL_ATLAS_ALLOC_ALPHA_SIZE: %i\n"
@@ -1128,6 +1131,7 @@ evas_gl_common_context_new(void)
(int)shared->info.bin_program,
(int)shared->info.tune.cutout.max,
+ (int)shared->info.tune.cutout_size.min,
(int)shared->info.tune.pipes.max,
(int)shared->info.tune.atlas.max_alloc_size,
(int)shared->info.tune.atlas.max_alloc_alpha_size,
diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c
index 021e798169..8d3d021000 100644
--- a/src/modules/evas/engines/gl_generic/evas_engine.c
+++ b/src/modules/evas/engines/gl_generic/evas_engine.c
@@ -788,6 +788,10 @@ _rotate_image_data(Render_Engine_GL_Generic *re, Evas_GL_Image *im1)
// Create a new and temporary context
dc = evas_common_draw_context_new();
+ evas_common_draw_context_cutout_max_set
+ (dc, gl_context->shared->info.tune.cutout.max);
+ evas_common_draw_context_cutout_size_min_set
+ (dc, gl_context->shared->info.tune.cutout_size.min);
evas_common_draw_context_set_clip(dc, 0, 0, im2->w, im2->h);
gl_context->dc = dc;
@@ -2317,6 +2321,23 @@ eng_pixel_alpha_get(void *image, int x, int y, DATA8 *alpha, int src_region_x, i
return EINA_TRUE;
}
+static void *
+eng_context_new(void *engine)
+{
+ Render_Engine_GL_Generic *re = engine;
+ Evas_Engine_GL_Context *gl_context;
+ void *ctx;
+
+ gl_context = gl_generic_context_find(re, 1);
+
+ ctx = pfunc.context_new(&re->software);
+ evas_common_draw_context_cutout_max_set
+ (ctx, gl_context->shared->info.tune.cutout.max);
+ evas_common_draw_context_cutout_size_min_set
+ (ctx, gl_context->shared->info.tune.cutout_size.min);
+ return ctx;
+}
+
static void
eng_context_flush(void *engine)
{
@@ -3110,6 +3131,7 @@ module_open(Evas_Module *em)
ORD(engine_new);
ORD(engine_free);
+ ORD(context_new);
ORD(context_clip_image_set);
ORD(context_clip_image_unset);
ORD(context_clip_image_get);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.