forked from enlightenment/efl
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:
parent
d6ed9e048d
commit
d762f74962
|
@ -89,6 +89,7 @@ struct _Outbuf
|
||||||
|
|
||||||
int fd, w, h, bpp;
|
int fd, w, h, bpp;
|
||||||
unsigned int rotation, depth, format;
|
unsigned int rotation, depth, format;
|
||||||
|
int prev_age;
|
||||||
Render_Engine_Swap_Mode swap_mode;
|
Render_Engine_Swap_Mode swap_mode;
|
||||||
|
|
||||||
struct gbm_surface *surface;
|
struct gbm_surface *surface;
|
||||||
|
|
|
@ -600,6 +600,8 @@ evas_outbuf_buffer_state_get(Outbuf *ob)
|
||||||
else if (age == 3) swap_mode = MODE_TRIPLE;
|
else if (age == 3) swap_mode = MODE_TRIPLE;
|
||||||
else if (age == 4) swap_mode = MODE_QUADRUPLE;
|
else if (age == 4) swap_mode = MODE_QUADRUPLE;
|
||||||
else swap_mode = MODE_FULL;
|
else swap_mode = MODE_FULL;
|
||||||
|
if ((int)age != ob->prev_age) swap_mode = MODE_FULL;
|
||||||
|
ob->prev_age = age;
|
||||||
|
|
||||||
return swap_mode;
|
return swap_mode;
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,6 +65,7 @@ struct _Outbuf
|
||||||
Evas_Engine_Info_Wayland *info;
|
Evas_Engine_Info_Wayland *info;
|
||||||
Evas_Engine_GL_Context *gl_context;
|
Evas_Engine_GL_Context *gl_context;
|
||||||
|
|
||||||
|
int prev_age;
|
||||||
Render_Engine_Swap_Mode swap_mode;
|
Render_Engine_Swap_Mode swap_mode;
|
||||||
int vsync;
|
int vsync;
|
||||||
int frame_cnt;
|
int frame_cnt;
|
||||||
|
|
|
@ -380,6 +380,8 @@ eng_outbuf_swap_mode_get(Outbuf *ob)
|
||||||
else if (age == 3) swap_mode = MODE_TRIPLE;
|
else if (age == 3) swap_mode = MODE_TRIPLE;
|
||||||
else if (age == 4) swap_mode = MODE_QUADRUPLE;
|
else if (age == 4) swap_mode = MODE_QUADRUPLE;
|
||||||
else swap_mode = MODE_FULL;
|
else swap_mode = MODE_FULL;
|
||||||
|
if ((int)age != ob->prev_age) swap_mode = MODE_FULL;
|
||||||
|
ob->prev_age = age;
|
||||||
|
|
||||||
return swap_mode;
|
return swap_mode;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue