From 8a516c4d4fabf2e0f04acbe3f79a09c3eca174a3 Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Tue, 19 Sep 2017 11:51:30 -0400 Subject: [PATCH] evas-drm: Override eng_output_resize function This patch provides an override in the evas drm engine for the output resize function. We override this function so that we can reconfigure the output buffer. ref T5999 Signed-off-by: Chris Michael --- src/modules/evas/engines/drm/evas_engine.c | 29 ++++++++++++++++++++++++++--- src/modules/evas/engines/drm/evas_engine.h | 2 ++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/modules/evas/engines/drm/evas_engine.c b/src/modules/evas/engines/drm/evas_engine.c index 5cbd5e1..c4dbe48 100644 --- a/src/modules/evas/engines/drm/evas_engine.c +++ b/src/modules/evas/engines/drm/evas_engine.c @@ -49,6 +49,10 @@ eng_output_setup(void *engine, void *einfo, unsigned int w, unsigned int h) ob->w, ob->h)) goto init_err; + evas_render_engine_software_generic_merge_mode_set(&re->generic); + + re->generic.ob->info = einfo; + return re; init_err: @@ -66,15 +70,33 @@ eng_output_info_setup(void *info) einfo->render_mode = EVAS_RENDER_MODE_BLOCKING; } -static int -eng_output_update(void *engine EINA_UNUSED, void *data, void *einfo, unsigned int w, unsigned int h) +static void +eng_output_resize(void *engine EINA_UNUSED, void *data, int w, int h) { - Evas_Engine_Info_Drm *info = einfo; Render_Engine *re = data; + Evas_Engine_Info_Drm *info; + + info = re->generic.ob->info; + if (!info) return; _outbuf_reconfigure(re->generic.ob, w, h, info->info.rotation, info->info.depth); + evas_common_tilebuf_free(re->generic.tb); + if ((re->generic.tb = evas_common_tilebuf_new(w, h))) + evas_common_tilebuf_set_tile_size(re->generic.tb, TILESIZE, TILESIZE); + + re->generic.w = w; + re->generic.h = h; +} + +static int +eng_output_update(void *engine, void *data, void *einfo EINA_UNUSED, unsigned int w, unsigned int h) +{ + Render_Engine *re = data; + + eng_output_resize(engine, data, w, h); + evas_render_engine_software_generic_update(&re->generic, re->generic.ob, w, h); @@ -227,6 +249,7 @@ module_open(Evas_Module *em) ORD(output_setup); ORD(output_update); ORD(output_free); + ORD(output_resize); ORD(image_plane_assign); ORD(image_plane_release); diff --git a/src/modules/evas/engines/drm/evas_engine.h b/src/modules/evas/engines/drm/evas_engine.h index 9891945..5faf32b 100644 --- a/src/modules/evas/engines/drm/evas_engine.h +++ b/src/modules/evas/engines/drm/evas_engine.h @@ -56,6 +56,8 @@ struct _Outbuf int w, h, bpp, rotation; unsigned int depth, format; + Evas_Engine_Info_Drm *info; + struct { int num; -- 2.7.4