From: Dongwon Kim Date: Tue, 3 Mar 2026 01:11:51 +0000 (-0800) Subject: ui/gtk-egl: Ensure EGL surface is available before drawing X-Git-Tag: v11.0.0-rc0~4^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c141bcb6afaa73c72cb368bedbf3b36e97d68d1a;p=thirdparty%2Fqemu.git ui/gtk-egl: Ensure EGL surface is available before drawing 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 Cc: Marc-André Lureau Signed-off-by: Vivek Kasireddy Signed-off-by: Dongwon Kim Acked-by: Marc-André Lureau Message-Id: <20260303011151.1925827-1-dongwon.kim@intel.com> --- diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c index 1b5c1d4533c..fa8fe8970c1 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) {