On 2026/02/18 6:49, Dmitry Osipenko wrote:
SDL API changes GL context to a newly created GL context, which differs
from other GL providers that don't switch context. Change SDL backend to
restore the original GL context. This allows Qemu's virtio-gpu to support
new virglrenderer async-fencing feature for Virgl contexts, otherwise
virglrenderer's vrend creates a fence-sync context on the Qemu's
main-loop thread that erroneously stays in-use by the main-loop after
creation, not allowing vrend's fence-sync thread switch to this new
context that belongs to it.
Reviewed-by: Akihiko Odaki <[email protected]>
Acked-by: Michael S. Tsirkin <[email protected]>
Tested-by: Alex Bennée <[email protected]>
Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]>
Reviewed-by: Yiwei Zhang <[email protected]>
Signed-off-by: Dmitry Osipenko <[email protected]>
---
ui/sdl2-gl.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/ui/sdl2-gl.c b/ui/sdl2-gl.c
index 3be17d1079af..ea2301305d3e 100644
--- a/ui/sdl2-gl.c
+++ b/ui/sdl2-gl.c
@@ -168,6 +168,9 @@ QEMUGLContext sdl2_gl_create_context(DisplayGLCtx *dgc,
SDL_GL_CONTEXT_PROFILE_ES);
ctx = SDL_GL_CreateContext(scon->real_window);
}
+
+ SDL_GL_MakeCurrent(scon->real_window, scon->winctx);
Looking at this patch now, I think this should pass NULL instead of
scon->winctx instead. The patch message says it restores "the original
GL context", but with all the "unset context after GL operations"
patches, no context should be bound. As those patches do, this should
also unset the context and prevent a thread from keeping holding the
context.
Regards,
Akihiko Odaki