@@ -1682,6 +1682,12 @@ bool dpy_cursor_define_supported(QemuConsole *con)
return false;
}
+bool dpy_gl_ctx_is_mt_safe(QemuConsole *con)
+{
+ assert(con->gl);
+ return con->gl->ops->dpy_gl_ctx_is_mt_safe;
+}
+
QEMUGLContext dpy_gl_ctx_create(QemuConsole *con,
struct QEMUGLParams *qparams)
{
@@ -916,6 +916,7 @@ static const DisplayChangeListenerOps display_listener_gl_ops = {
.dpy_gl_ctx_destroy = qemu_egl_destroy_context,
.dpy_gl_ctx_make_current = qemu_egl_make_context_current,
.dpy_gl_ctx_get_current = qemu_egl_get_current_context,
+ .dpy_gl_ctx_is_mt_safe = true,
.dpy_gl_scanout = qemu_spice_gl_scanout,
.dpy_gl_update = qemu_spice_gl_update,
@@ -221,7 +221,7 @@ typedef struct DisplayChangeListenerOps {
uint32_t x, uint32_t y, uint32_t w, uint32_t h);
void (*dpy_gl_update)(DisplayChangeListener *dcl,
uint32_t x, uint32_t y, uint32_t w, uint32_t h);
-
+ bool dpy_gl_ctx_is_mt_safe; /* the ctx* functions are mt-safe */
} DisplayChangeListenerOps;
struct DisplayChangeListener {
@@ -296,6 +296,7 @@ QEMUGLContext dpy_gl_ctx_create(QemuConsole *con,
void dpy_gl_ctx_destroy(QemuConsole *con, QEMUGLContext ctx);
int dpy_gl_ctx_make_current(QemuConsole *con, QEMUGLContext ctx);
QEMUGLContext dpy_gl_ctx_get_current(QemuConsole *con);
+bool dpy_gl_ctx_is_mt_safe(QemuConsole *con);
bool console_has_gl(QemuConsole *con);
Not all display backends support various opengl contexts in multi-threads. Add a field to declare it. For now, only spice/egl has been tested successfully. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- ui/console.c | 6 ++++++ ui/spice-display.c | 1 + include/ui/console.h | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-)