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
This commit is contained in:
Carsten Haitzler 2016-11-07 11:40:02 +09:00
parent d6ed9e048d
commit d762f74962
4 changed files with 6 additions and 0 deletions

View File

@ -89,6 +89,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;

View File

@ -600,6 +600,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;
}

View File

@ -65,6 +65,7 @@ struct _Outbuf
Evas_Engine_Info_Wayland *info;
Evas_Engine_GL_Context *gl_context;
int prev_age;
Render_Engine_Swap_Mode swap_mode;
int vsync;
int frame_cnt;

View File

@ -380,6 +380,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;
return swap_mode;
}