aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2016-11-07 11:40:02 +0900
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2016-11-07 11:58:45 +0900
commit8e2b550cc46afb5def5332c3a5f009728fe14f72 (patch)
treea09b69fb870c6f8100f365acf1d1d73a29322793
parentemotion gst1 module - disable subtitles by default as that should be (diff)
downloadefl-8e2b550cc46afb5def5332c3a5f009728fe14f72.tar.gz
wl_drm and eayland_egl buffer age fix for gl when age changes
so i was just about to add buffer age debugging evlogs to everywhere doing buffer age and i found... drm gl and wayland gl engines DONT HANDLE age change like gl_x11! they dont reset to a "full render" for that frame. well well. this explains bugs i am seeing for sure. very very bag! i thought this was handled properly. this does lend some credence to my thoughts about somehow having a single universal buffer swapping/update calculating and "applying" api inside efl somewhere... anyway - this fixes this issue for these 2 engines which is a real necessary fix to be correct. @fix
-rw-r--r--src/modules/evas/engines/gl_drm/evas_engine.h1
-rw-r--r--src/modules/evas/engines/gl_drm/evas_outbuf.c2
-rw-r--r--src/modules/evas/engines/wayland_egl/evas_engine.h1
-rw-r--r--src/modules/evas/engines/wayland_egl/evas_wl_main.c2
4 files changed, 6 insertions, 0 deletions
diff --git a/src/modules/evas/engines/gl_drm/evas_engine.h b/src/modules/evas/engines/gl_drm/evas_engine.h
index 8a51d59c93..53117d7246 100644
--- a/src/modules/evas/engines/gl_drm/evas_engine.h
+++ b/src/modules/evas/engines/gl_drm/evas_engine.h
@@ -91,6 +91,7 @@ struct _Outbuf
int fd, w, h, bpp;
unsigned int rotation, depth, format;
+ int prev_age;
Render_Engine_Swap_Mode swap_mode;
struct gbm_surface *surface;
diff --git a/src/modules/evas/engines/gl_drm/evas_outbuf.c b/src/modules/evas/engines/gl_drm/evas_outbuf.c
index cbeae57797..1ad5ceca2e 100644
--- a/src/modules/evas/engines/gl_drm/evas_outbuf.c
+++ b/src/modules/evas/engines/gl_drm/evas_outbuf.c
@@ -672,6 +672,8 @@ evas_outbuf_buffer_state_get(Outbuf *ob)
else if (age == 3) swap_mode = MODE_TRIPLE;
else if (age == 4) swap_mode = MODE_QUADRUPLE;
else swap_mode = MODE_FULL;
+ if ((int)age != ob->prev_age) swap_mode = MODE_FULL;
+ ob->prev_age = age;
return swap_mode;
}
diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.h b/src/modules/evas/engines/wayland_egl/evas_engine.h
index a4ccbf8087..af83a2dabb 100644
--- a/src/modules/evas/engines/wayland_egl/evas_engine.h
+++ b/src/modules/evas/engines/wayland_egl/evas_engine.h
@@ -65,6 +65,7 @@ struct _Outbuf
Evas_Engine_Info_Wayland_Egl *info;
Evas_Engine_GL_Context *gl_context;
+ int prev_age;
Render_Engine_Swap_Mode swap_mode;
int prev_age, vsync;
int frame_cnt;
diff --git a/src/modules/evas/engines/wayland_egl/evas_wl_main.c b/src/modules/evas/engines/wayland_egl/evas_wl_main.c
index a0ac4fa720..213df5459e 100644
--- a/src/modules/evas/engines/wayland_egl/evas_wl_main.c
+++ b/src/modules/evas/engines/wayland_egl/evas_wl_main.c
@@ -381,6 +381,8 @@ eng_outbuf_swap_mode_get(Outbuf *ob)
else if (age == 3) swap_mode = MODE_TRIPLE;
else if (age == 4) swap_mode = MODE_QUADRUPLE;
else swap_mode = MODE_FULL;
+ if ((int)age != ob->prev_age) swap_mode = MODE_FULL;
+ ob->prev_age = age;
if ((int)age != ob->prev_age) swap_mode = MODE_FULL;
ob->prev_age = age;