wayland: Set EGL swap interval to 0.
authorBenjamin Otte <otte@redhat.com>
Fri, 28 Apr 2023 20:40:39 +0000 (22:40 +0200)
committerBenjamin Otte <otte@redhat.com>
Fri, 28 Apr 2023 20:40:39 +0000 (22:40 +0200)
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

gdk/wayland/gdkglcontext-wayland.c

index b0ae79a0b72824c84765759f5b1efd68a1467340..b236854ba9622c60c6b7eb27a87bacac00fe8a26 100644 (file)
@@ -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);