From: Dongwon Kim <[email protected]> The EGL surface and context are destroyed when a new GTK window is created. We must ensure these are recreated and initialized before any rendering happens in gd_egl_refresh.
Currently, the check for a pending draw is performed before the surface initialization block. This can result in an attempt to draw when the EGL surface (vc->gfx.esurface) is not yet available. This patch moves the drawing check after the surface initialization to ensure a valid surface exists before rendering in gd_egl_refresh. Cc: Gerd Hoffmann <[email protected]> Cc: Marc-André Lureau <[email protected]> Signed-off-by: Vivek Kasireddy <[email protected]> Signed-off-by: Dongwon Kim <[email protected]> --- ui/gtk-egl.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c index ae9239999c..52d187c482 100644 --- a/ui/gtk-egl.c +++ b/ui/gtk-egl.c @@ -152,12 +152,6 @@ void gd_egl_refresh(DisplayChangeListener *dcl) gd_update_monitor_refresh_rate( vc, vc->window ? vc->window : vc->gfx.drawing_area); - if (vc->gfx.guest_fb.dmabuf && - qemu_dmabuf_get_draw_submitted(vc->gfx.guest_fb.dmabuf)) { - gd_egl_draw(vc); - return; - } - if (!vc->gfx.esurface) { gd_egl_init(vc); if (!vc->gfx.esurface) { @@ -176,6 +170,12 @@ void gd_egl_refresh(DisplayChangeListener *dcl) #endif } + if (vc->gfx.guest_fb.dmabuf && + qemu_dmabuf_get_draw_submitted(vc->gfx.guest_fb.dmabuf)) { + gd_egl_draw(vc); + return; + } + graphic_hw_update(dcl->con); if (vc->gfx.glupdates) { -- 2.43.0
