diff options
author | Paul Berry <[email protected]> | 2012-11-16 11:43:08 -0800 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-03-16 14:14:18 +1100 |
commit | a4a5de6f18feba0a3dd439163f3505f2ba20fa0c (patch) | |
tree | 28e9fac5b8e81fbeb8f46bdc40e3ab0f3011acc9 /src | |
parent | 154a4f267959f6975647720237a28bae1ae86c8d (diff) |
mesa: Custom thread marshalling for Flush.
Acked-by: Timothy Arceri <[email protected]>
Acked-by: Marek Olšák <[email protected]>
Tested-by: Dieter Nützel <[email protected]>
Tested-by: Mike Lothian <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mapi/glapi/gen/gl_API.xml | 3 | ||||
-rw-r--r-- | src/mesa/main/marshal.c | 33 | ||||
-rw-r--r-- | src/mesa/main/marshal.h | 8 |
3 files changed, 42 insertions, 2 deletions
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index c7a7253119e..0da1589da7e 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -2377,8 +2377,7 @@ specially to ensure that it causes all previous commands to get delivered to the server thread. --> - - <function name="Flush" es1="1.0" es2="2.0" marshal="sync"> + <function name="Flush" es1="1.0" es2="2.0" marshal="custom"> <glx sop="142" handcode="true"/> </function> diff --git a/src/mesa/main/marshal.c b/src/mesa/main/marshal.c index c0760d25518..14577dd4cb4 100644 --- a/src/mesa/main/marshal.c +++ b/src/mesa/main/marshal.c @@ -31,6 +31,39 @@ #include "dispatch.h" #include "marshal_generated.h" +struct marshal_cmd_Flush +{ + struct marshal_cmd_base cmd_base; +}; + + +void +_mesa_unmarshal_Flush(struct gl_context *ctx, + const struct marshal_cmd_Flush *cmd) +{ + CALL_Flush(ctx->CurrentServerDispatch, ()); +} + + +void GLAPIENTRY +_mesa_marshal_Flush(void) +{ + GET_CURRENT_CONTEXT(ctx); + struct marshal_cmd_Flush *cmd = + _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_Flush, + sizeof(struct marshal_cmd_Flush)); + (void) cmd; + _mesa_post_marshal_hook(ctx); + + /* Flush() needs to be handled specially. In addition to telling the + * background thread to flush, we need to ensure that our own buffer is + * submitted to the background thread so that it will complete in a finite + * amount of time. + */ + _mesa_glthread_flush_batch(ctx); +} + + struct marshal_cmd_ShaderSource { struct marshal_cmd_base cmd_base; diff --git a/src/mesa/main/marshal.h b/src/mesa/main/marshal.h index 0b69d66d9af..0e0e9b280c6 100644 --- a/src/mesa/main/marshal.h +++ b/src/mesa/main/marshal.h @@ -110,6 +110,7 @@ _mesa_post_marshal_hook(struct gl_context *ctx) } struct marshal_cmd_ShaderSource; +struct marshal_cmd_Flush; void GLAPIENTRY _mesa_marshal_ShaderSource(GLuint shader, GLsizei count, @@ -119,4 +120,11 @@ void _mesa_unmarshal_ShaderSource(struct gl_context *ctx, const struct marshal_cmd_ShaderSource *cmd); +void GLAPIENTRY +_mesa_marshal_Flush(void); + +void +_mesa_unmarshal_Flush(struct gl_context *ctx, + const struct marshal_cmd_Flush *cmd); + #endif /* MARSHAL_H */ |