diff options
author | Timothy Arceri <[email protected]> | 2017-03-31 11:45:34 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-04-03 09:31:11 +1000 |
commit | dbdd7231c252cbed52a196c86725730c07cd8006 (patch) | |
tree | e4f17425dbef484f471380334a8397ce8c16f041 /src | |
parent | a0f0f3958e012335e8b1c30e4a10ed1141c7758c (diff) |
mesa: disable glthread when DEBUG_OUTPUT_SYNCHRONOUS is enabled
We could re-enable it also but I haven't tested that yet, and I'm
not sure we care much anyway.
V2: don't disable it from with the call itself. We need a custom
marshalling function or we get stuck waiting for thread to
finish.
V3: tidy up redundant code copied from generated version.
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mapi/glapi/gen/gl_API.xml | 2 | ||||
-rw-r--r-- | src/mesa/main/marshal.c | 37 | ||||
-rw-r--r-- | src/mesa/main/marshal.h | 8 |
3 files changed, 46 insertions, 1 deletions
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index 8392e3a520b..af482707d03 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -2361,7 +2361,7 @@ <glx rop="138" handcode="client"/> </function> - <function name="Enable" es1="1.0" es2="2.0"> + <function name="Enable" es1="1.0" es2="2.0" marshal="custom"> <param name="cap" type="GLenum"/> <glx rop="139" handcode="client"/> </function> diff --git a/src/mesa/main/marshal.c b/src/mesa/main/marshal.c index b01c0739972..ae32d257e93 100644 --- a/src/mesa/main/marshal.c +++ b/src/mesa/main/marshal.c @@ -67,6 +67,43 @@ _mesa_marshal_Flush(void) _mesa_glthread_flush_batch(ctx); } +/* Enable: marshalled asynchronously */ +struct marshal_cmd_Enable +{ + struct marshal_cmd_base cmd_base; + GLenum cap; +}; + +void +_mesa_unmarshal_Enable(struct gl_context *ctx, + const struct marshal_cmd_Enable *cmd) +{ + const GLenum cap = cmd->cap; + CALL_Enable(ctx->CurrentServerDispatch, (cap)); +} + +void GLAPIENTRY +_mesa_marshal_Enable(GLenum cap) +{ + GET_CURRENT_CONTEXT(ctx); + struct marshal_cmd_Enable *cmd; + debug_print_marshal("Enable"); + + if (cap == GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB) { + _mesa_glthread_finish(ctx); + _mesa_glthread_restore_dispatch(ctx); + } else { + cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_Enable, + sizeof(*cmd)); + cmd->cap = cap; + _mesa_post_marshal_hook(ctx); + return; + } + + _mesa_glthread_finish(ctx); + debug_print_sync_fallback("Enable"); + CALL_Enable(ctx->CurrentServerDispatch, (cap)); +} struct marshal_cmd_ShaderSource { diff --git a/src/mesa/main/marshal.h b/src/mesa/main/marshal.h index 3d104240afe..2f1509b2d55 100644 --- a/src/mesa/main/marshal.h +++ b/src/mesa/main/marshal.h @@ -197,6 +197,7 @@ _mesa_glthread_is_compat_bind_vertex_array(const struct gl_context *ctx) return ctx->API != API_OPENGL_CORE; } +struct marshal_cmd_Enable; struct marshal_cmd_ShaderSource; struct marshal_cmd_Flush; struct marshal_cmd_BindBuffer; @@ -204,6 +205,13 @@ struct marshal_cmd_BufferData; struct marshal_cmd_BufferSubData; struct marshal_cmd_ClearBufferfv; +void +_mesa_unmarshal_Enable(struct gl_context *ctx, + const struct marshal_cmd_Enable *cmd); + +void GLAPIENTRY +_mesa_marshal_Enable(GLenum cap); + void GLAPIENTRY _mesa_marshal_ShaderSource(GLuint shader, GLsizei count, const GLchar * const *string, const GLint *length); |