From: Benjamin Otte Date: Fri, 28 Apr 2023 20:40:39 +0000 (+0200) Subject: wayland: Set EGL swap interval to 0. X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~342^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b4c859c0113f8802d9c6f047dcf2b689223848da;p=gtk4.git wayland: Set EGL swap interval to 0. There's no need for EGL to do any timing, we do it in GTK already. This fixes hangs in Mesa when we hide a surface after a SwapBuffers() but before the frame callback arrives. If we then reshow the surface and immediately render to it, Mesa would still have a frame callback from before the hiding and forever poll() waiting for the compositor to send the callback. Fixes #5761 --- diff --git a/gdk/wayland/gdkglcontext-wayland.c b/gdk/wayland/gdkglcontext-wayland.c index b0ae79a0b7..b236854ba9 100644 --- a/gdk/wayland/gdkglcontext-wayland.c +++ b/gdk/wayland/gdkglcontext-wayland.c @@ -75,6 +75,9 @@ gdk_wayland_gl_context_end_frame (GdkDrawContext *draw_context, WL_SURFACE_OFFSET_SINCE_VERSION) wl_surface_offset (impl->display_server.wl_surface, dx, dy); + /* We should do ths when setting up the EGLSurface, but we don't make_current then */ + eglSwapInterval (gdk_display_get_egl_display (gdk_draw_context_get_display (draw_context)), 0); + GDK_DRAW_CONTEXT_CLASS (gdk_wayland_gl_context_parent_class)->end_frame (draw_context, painted); gdk_wayland_surface_notify_committed (surface);