summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2017-03-31 11:45:34 +1100
committerTimothy Arceri <[email protected]>2017-04-03 09:31:11 +1000
commitdbdd7231c252cbed52a196c86725730c07cd8006 (patch)
treee4f17425dbef484f471380334a8397ce8c16f041
parenta0f0f3958e012335e8b1c30e4a10ed1141c7758c (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]>
-rw-r--r--src/mapi/glapi/gen/gl_API.xml2
-rw-r--r--src/mesa/main/marshal.c37
-rw-r--r--src/mesa/main/marshal.h8
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);