From: Matthias Clasen Date: Fri, 27 Jan 2023 12:07:36 +0000 (-0500) Subject: gl: Synchronize when calling MakeCurrent X-Git-Tag: archive/raspbian/3.24.39-1+rpi1~1^2~65^2~1^2~18^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=9811485990b;p=gtk%2B3.0.git gl: Synchronize when calling MakeCurrent When making out GL context current, wait until the GPU is done with commands from the previous context. Fixes: #5517 --- diff --git a/gdk/gdkgl.c b/gdk/gdkgl.c index 9690077cc2..61cf16417b 100644 --- a/gdk/gdkgl.c +++ b/gdk/gdkgl.c @@ -352,6 +352,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr, int alpha_size = 0; cairo_region_t *clip_region; GdkGLContextPaintData *paint_data; + GLsync sync = NULL; impl_window = window->impl_window; @@ -366,7 +367,18 @@ gdk_cairo_draw_from_gl (cairo_t *cr, clip_region = gdk_cairo_region_from_clip (cr); + if (gdk_gl_context_get_current () != paint_context) + sync = glFenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + gdk_gl_context_make_current (paint_context); + + if (sync) + { + glWaitSync (sync, 0, GL_TIMEOUT_IGNORED); + glDeleteSync (sync); + sync = NULL; + } + paint_data = gdk_gl_context_get_paint_data (paint_context); if (paint_data->tmp_framebuffer == 0)