mesa: Custom thread marshalling for Flush.

Acked-by: Timothy Arceri <tarceri@itsqueeze.com>
Acked-by: Marek Olšák <maraeo@gmail.com>
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
Tested-by: Mike Lothian <mike@fireburn.co.uk>
This commit is contained in:
Paul Berry 2012-11-16 11:43:08 -08:00 committed by Timothy Arceri
parent 154a4f2679
commit a4a5de6f18
3 changed files with 42 additions and 2 deletions

View File

@ -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>

View File

@ -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;

View File

@ -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 */