diff options
author | Christopher Michael <cp.michael@samsung.com> | 2019-03-21 14:14:57 -0400 |
---|---|---|
committer | Christopher Michael <cp.michael@samsung.com> | 2019-03-21 14:14:57 -0400 |
commit | 6fdcd20397c6da0a1efbe2d9789be58e243b9d5a (patch) | |
tree | bb4d5408fda22e462b109bf9562f54e758dee439 | |
parent | 20e9616e6692745c783a95a15b1df117aaa40fd6 (diff) | |
download | efl-devs/devilhorns/rotation.tar.gz |
evas drm: Implement support for outbuf_idle_flushdevs/devilhorns/rotation
-rw-r--r-- | src/modules/evas/engines/drm/evas_engine.h | 1 | ||||
-rw-r--r-- | src/modules/evas/engines/drm/evas_outbuf.c | 26 |
2 files changed, 24 insertions, 3 deletions
diff --git a/src/modules/evas/engines/drm/evas_engine.h b/src/modules/evas/engines/drm/evas_engine.h index 85e16caf1a..0afb1e3109 100644 --- a/src/modules/evas/engines/drm/evas_engine.h +++ b/src/modules/evas/engines/drm/evas_engine.h @@ -83,5 +83,6 @@ void *_outbuf_update_region_new(Outbuf *ob, int x, int y, int w, int h, int *cx, void _outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, int w, int h); void _outbuf_flush(Outbuf *ob, Tilebuf_Rect *surface_damage, Tilebuf_Rect *buffer_damage, Evas_Render_Mode render_mode); void _outbuf_damage_region_set(Outbuf *ob, Tilebuf_Rect *damage); +void _outbuf_idle_flush(Outbuf *ob); #endif diff --git a/src/modules/evas/engines/drm/evas_outbuf.c b/src/modules/evas/engines/drm/evas_outbuf.c index e30175f10e..1f22ae7faa 100644 --- a/src/modules/evas/engines/drm/evas_outbuf.c +++ b/src/modules/evas/engines/drm/evas_outbuf.c @@ -273,8 +273,6 @@ _outbuf_reconfigure(Outbuf *ob, int w, int h, int rotation, Outbuf_Depth depth) (ob->depth == depth) && (ob->format == format)) return; - while (ecore_drm2_fb_release(ob->priv.output, EINA_TRUE)); - ob->w = w; ob->h = h; ob->depth = depth; @@ -282,7 +280,7 @@ _outbuf_reconfigure(Outbuf *ob, int w, int h, int rotation, Outbuf_Depth depth) ob->rotation = rotation; ob->priv.unused_duration = 0; - /* TODO: idle flush */ + _outbuf_idle_flush(ob); } Render_Output_Swap_Mode @@ -572,3 +570,25 @@ _outbuf_damage_region_set(Outbuf *ob, Tilebuf_Rect *damage) ecore_drm2_fb_dirty(fb, rects, count); } + +void +_outbuf_idle_flush(Outbuf *ob) +{ + while (ob->priv.pending) + { + RGBA_Image *img; + Eina_Rectangle *rect; + + img = ob->priv.pending->data; + ob->priv.pending = + eina_list_remove_list(ob->priv.pending, ob->priv.pending); + + rect = img->extended_info; + + evas_cache_image_drop(&img->cache_entry); + + eina_rectangle_free(rect); + } + + while (ecore_drm2_fb_release(ob->priv.output, EINA_TRUE)); +} |