devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=8a516c4d4fabf2e0f04acbe3f79a09c3eca174a3

commit 8a516c4d4fabf2e0f04acbe3f79a09c3eca174a3
Author: Chris Michael <[email protected]>
Date:   Tue Sep 19 11:51:30 2017 -0400

    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 <[email protected]>
---
 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 5cbd5e14ba..c4dbe48bee 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 9891945781..5faf32b8f1 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;

-- 


Reply via email to