On Tue, Mar 3, 2026 at 2:17 AM <[email protected]> wrote:
>
> 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]>

Acked-by: Marc-André Lureau <[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
>
>


-- 
Marc-André Lureau

Reply via email to