diff mbox series

[v1,1/6] ui/sdl2: Restore original context after new context creation

Message ID 20241006232350.3198759-2-dmitry.osipenko@collabora.com (mailing list archive)
State New, archived
Headers show
Series Support virtio-gpu DRM native context | expand

Commit Message

Dmitry Osipenko Oct. 6, 2024, 11:23 p.m. UTC
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 context, otherwise it's
impossible for virglrenderer to switch GL context from a thread that waits
for async-fences.

Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
---
 ui/sdl2-gl.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Akihiko Odaki Oct. 7, 2024, 9:41 a.m. UTC | #1
On 2024/10/07 8:23, 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 context, otherwise it's
> impossible for virglrenderer to switch GL context from a thread that waits
> for async-fences.

The expression "to switch GL context" is somewhat unclear. I suppose it 
means to switch to the newly created GL context. It would be nice if it 
describes why such a switching operation fails.

> 
> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
> ---
>   ui/sdl2-gl.c | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/ui/sdl2-gl.c b/ui/sdl2-gl.c
> index e01d9ab0c7bf..b1fe96d6af22 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);
> +
>       return (QEMUGLContext)ctx;
>   }
>
diff mbox series

Patch

diff --git a/ui/sdl2-gl.c b/ui/sdl2-gl.c
index e01d9ab0c7bf..b1fe96d6af22 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);
+
     return (QEMUGLContext)ctx;
 }