diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py index df43097556a..ef3b4242ab2 100644 --- a/src/mapi/glapi/gen/gl_marshal.py +++ b/src/mapi/glapi/gen/gl_marshal.py @@ -240,7 +240,7 @@ class PrintCode(gl_XML.gl_print_base): out('void') out(('_mesa_unmarshal_{0}(struct gl_context *ctx, ' - 'const struct marshal_cmd_{0} *cmd)').format(func.name)) + 'const struct marshal_cmd_{0} *cmd, const uint64_t *last)').format(func.name)) out('{') with indent(): for p in fixed_params: diff --git a/src/mapi/glapi/gen/gl_marshal_h.py b/src/mapi/glapi/gen/gl_marshal_h.py index 729103b456d..34717f1de90 100644 --- a/src/mapi/glapi/gen/gl_marshal_h.py +++ b/src/mapi/glapi/gen/gl_marshal_h.py @@ -72,7 +72,7 @@ class PrintCode(gl_XML.gl_print_base): if flavor in ('custom', 'async'): print('struct marshal_cmd_{0};'.format(func.name)) print(('void _mesa_unmarshal_{0}(struct gl_context *ctx, ' - 'const struct marshal_cmd_{0} *cmd);').format(func.name)) + 'const struct marshal_cmd_{0} *cmd, const uint64_t *last);').format(func.name)) print('{0} GLAPIENTRY _mesa_marshal_{1}({2});'.format(func.return_type, func.name, func.get_parameter_string())) elif flavor == 'sync': print('{0} GLAPIENTRY _mesa_marshal_{1}({2});'.format(func.return_type, func.name, func.get_parameter_string())) diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c index e0822b8c8c7..88e4b47a7d3 100644 --- a/src/mesa/main/glthread.c +++ b/src/mesa/main/glthread.c @@ -49,6 +49,7 @@ glthread_unmarshal_batch(void *job, void *gdata, int thread_index) unsigned pos = 0; unsigned used = batch->used; uint64_t *buffer = batch->buffer; + const uint64_t *last = &buffer[used]; _glapi_set_dispatch(ctx->CurrentServerDispatch); @@ -61,7 +62,7 @@ glthread_unmarshal_batch(void *job, void *gdata, int thread_index) const struct marshal_cmd_base *cmd = (const struct marshal_cmd_base *)&buffer[pos]; - _mesa_unmarshal_dispatch[cmd->cmd_id](ctx, cmd); + _mesa_unmarshal_dispatch[cmd->cmd_id](ctx, cmd, last); pos += cmd->cmd_size; } diff --git a/src/mesa/main/glthread_bufferobj.c b/src/mesa/main/glthread_bufferobj.c index 6413780a8a5..b26fb653e95 100644 --- a/src/mesa/main/glthread_bufferobj.c +++ b/src/mesa/main/glthread_bufferobj.c @@ -239,7 +239,8 @@ struct marshal_cmd_BufferData void _mesa_unmarshal_BufferData(struct gl_context *ctx, - const struct marshal_cmd_BufferData *cmd) + const struct marshal_cmd_BufferData *cmd, + const uint64_t *last) { const GLuint target_or_name = cmd->target_or_name; const GLsizei size = cmd->size; @@ -267,14 +268,16 @@ _mesa_unmarshal_BufferData(struct gl_context *ctx, void _mesa_unmarshal_NamedBufferData(struct gl_context *ctx, - const struct marshal_cmd_NamedBufferData *cmd) + const struct marshal_cmd_NamedBufferData *cmd, + const uint64_t *last) { unreachable("never used - all BufferData variants use DISPATCH_CMD_BufferData"); } void _mesa_unmarshal_NamedBufferDataEXT(struct gl_context *ctx, - const struct marshal_cmd_NamedBufferDataEXT *cmd) + const struct marshal_cmd_NamedBufferDataEXT *cmd, + const uint64_t *last) { unreachable("never used - all BufferData variants use DISPATCH_CMD_BufferData"); } @@ -360,7 +363,8 @@ struct marshal_cmd_BufferSubData void _mesa_unmarshal_BufferSubData(struct gl_context *ctx, - const struct marshal_cmd_BufferSubData *cmd) + const struct marshal_cmd_BufferSubData *cmd, + const uint64_t *last) { const GLenum target_or_name = cmd->target_or_name; const GLintptr offset = cmd->offset; @@ -381,14 +385,16 @@ _mesa_unmarshal_BufferSubData(struct gl_context *ctx, void _mesa_unmarshal_NamedBufferSubData(struct gl_context *ctx, - const struct marshal_cmd_NamedBufferSubData *cmd) + const struct marshal_cmd_NamedBufferSubData *cmd, + const uint64_t *last) { unreachable("never used - all BufferSubData variants use DISPATCH_CMD_BufferSubData"); } void _mesa_unmarshal_NamedBufferSubDataEXT(struct gl_context *ctx, - const struct marshal_cmd_NamedBufferSubDataEXT *cmd) + const struct marshal_cmd_NamedBufferSubDataEXT *cmd, + const uint64_t *last) { unreachable("never used - all BufferSubData variants use DISPATCH_CMD_BufferSubData"); } diff --git a/src/mesa/main/glthread_draw.c b/src/mesa/main/glthread_draw.c index a534c51ab84..6779995f9cb 100644 --- a/src/mesa/main/glthread_draw.c +++ b/src/mesa/main/glthread_draw.c @@ -266,7 +266,8 @@ struct marshal_cmd_DrawArrays void _mesa_unmarshal_DrawArrays(struct gl_context *ctx, - const struct marshal_cmd_DrawArrays *cmd) + const struct marshal_cmd_DrawArrays *cmd, + const uint64_t *last) { /* Ignore the function name. We use DISPATCH_CMD_DrawArrays * for all DrawArrays variants without user buffers, and @@ -313,7 +314,8 @@ struct marshal_cmd_DrawArraysInstancedBaseInstance void _mesa_unmarshal_DrawArraysInstancedBaseInstance(struct gl_context *ctx, - const struct marshal_cmd_DrawArraysInstancedBaseInstance *cmd) + const struct marshal_cmd_DrawArraysInstancedBaseInstance *cmd, + const uint64_t *last) { /* Ignore the function name. We use DISPATCH_CMD_DrawArrays * for all DrawArrays variants without user buffers, and @@ -423,7 +425,8 @@ struct marshal_cmd_MultiDrawArrays void _mesa_unmarshal_MultiDrawArrays(struct gl_context *ctx, - const struct marshal_cmd_MultiDrawArrays *cmd) + const struct marshal_cmd_MultiDrawArrays *cmd, + const uint64_t *last) { const GLenum mode = cmd->mode; const GLsizei draw_count = cmd->draw_count; @@ -564,7 +567,8 @@ struct marshal_cmd_DrawElementsInstancedARB void _mesa_unmarshal_DrawElementsInstancedARB(struct gl_context *ctx, - const struct marshal_cmd_DrawElementsInstancedARB *cmd) + const struct marshal_cmd_DrawElementsInstancedARB *cmd, + const uint64_t *last) { /* Ignore the function name. We use DISPATCH_CMD_DrawElementsInstanced- * BaseVertexBaseInstance for all DrawElements variants with user buffers, @@ -600,7 +604,8 @@ struct marshal_cmd_DrawRangeElementsBaseVertex void _mesa_unmarshal_DrawRangeElementsBaseVertex(struct gl_context *ctx, - const struct marshal_cmd_DrawRangeElementsBaseVertex *cmd) + const struct marshal_cmd_DrawRangeElementsBaseVertex *cmd, + const uint64_t *last) { const GLenum mode = cmd->mode; const GLsizei count = cmd->count; @@ -667,7 +672,8 @@ struct marshal_cmd_DrawElementsInstancedBaseVertexBaseInstance void _mesa_unmarshal_DrawElementsInstancedBaseVertexBaseInstance(struct gl_context *ctx, - const struct marshal_cmd_DrawElementsInstancedBaseVertexBaseInstance *cmd) + const struct marshal_cmd_DrawElementsInstancedBaseVertexBaseInstance *cmd, + const uint64_t *last) { /* Ignore the function name. We use DISPATCH_CMD_DrawElementsInstanced- * BaseVertexBaseInstance for all DrawElements variants with user buffers, @@ -873,7 +879,8 @@ struct marshal_cmd_MultiDrawElementsBaseVertex void _mesa_unmarshal_MultiDrawElementsBaseVertex(struct gl_context *ctx, - const struct marshal_cmd_MultiDrawElementsBaseVertex *cmd) + const struct marshal_cmd_MultiDrawElementsBaseVertex *cmd, + const uint64_t *last) { const GLenum mode = cmd->mode; const GLenum type = cmd->type; @@ -1208,43 +1215,43 @@ _mesa_marshal_MultiDrawElementsEXT(GLenum mode, const GLsizei *count, } void -_mesa_unmarshal_DrawArraysInstancedARB(struct gl_context *ctx, const struct marshal_cmd_DrawArraysInstancedARB *cmd) +_mesa_unmarshal_DrawArraysInstancedARB(struct gl_context *ctx, const struct marshal_cmd_DrawArraysInstancedARB *cmd, const uint64_t *last) { unreachable("never used - DrawArraysInstancedBaseInstance is used instead"); } void -_mesa_unmarshal_DrawElements(struct gl_context *ctx, const struct marshal_cmd_DrawElements *cmd) +_mesa_unmarshal_DrawElements(struct gl_context *ctx, const struct marshal_cmd_DrawElements *cmd, const uint64_t *last) { unreachable("never used - DrawElementsInstancedBaseVertexBaseInstance is used instead"); } void -_mesa_unmarshal_DrawRangeElements(struct gl_context *ctx, const struct marshal_cmd_DrawRangeElements *cmd) +_mesa_unmarshal_DrawRangeElements(struct gl_context *ctx, const struct marshal_cmd_DrawRangeElements *cmd, const uint64_t *last) { unreachable("never used - DrawElementsInstancedBaseVertexBaseInstance is used instead"); } void -_mesa_unmarshal_DrawElementsBaseVertex(struct gl_context *ctx, const struct marshal_cmd_DrawElementsBaseVertex *cmd) +_mesa_unmarshal_DrawElementsBaseVertex(struct gl_context *ctx, const struct marshal_cmd_DrawElementsBaseVertex *cmd, const uint64_t *last) { unreachable("never used - DrawElementsInstancedBaseVertexBaseInstance is used instead"); } void -_mesa_unmarshal_DrawElementsInstancedBaseVertex(struct gl_context *ctx, const struct marshal_cmd_DrawElementsInstancedBaseVertex *cmd) +_mesa_unmarshal_DrawElementsInstancedBaseVertex(struct gl_context *ctx, const struct marshal_cmd_DrawElementsInstancedBaseVertex *cmd, const uint64_t *last) { unreachable("never used - DrawElementsInstancedBaseVertexBaseInstance is used instead"); } void -_mesa_unmarshal_DrawElementsInstancedBaseInstance(struct gl_context *ctx, const struct marshal_cmd_DrawElementsInstancedBaseInstance *cmd) +_mesa_unmarshal_DrawElementsInstancedBaseInstance(struct gl_context *ctx, const struct marshal_cmd_DrawElementsInstancedBaseInstance *cmd, const uint64_t *last) { unreachable("never used - DrawElementsInstancedBaseVertexBaseInstance is used instead"); } void -_mesa_unmarshal_MultiDrawElementsEXT(struct gl_context *ctx, const struct marshal_cmd_MultiDrawElementsEXT *cmd) +_mesa_unmarshal_MultiDrawElementsEXT(struct gl_context *ctx, const struct marshal_cmd_MultiDrawElementsEXT *cmd, const uint64_t *last) { unreachable("never used - MultiDrawElementsBaseVertex is used instead"); } diff --git a/src/mesa/main/glthread_get.c b/src/mesa/main/glthread_get.c index 34627395173..3a9b90b8346 100644 --- a/src/mesa/main/glthread_get.c +++ b/src/mesa/main/glthread_get.c @@ -26,7 +26,8 @@ void _mesa_unmarshal_GetIntegerv(struct gl_context *ctx, - const struct marshal_cmd_GetIntegerv *cmd) + const struct marshal_cmd_GetIntegerv *cmd, + const uint64_t *last) { unreachable("never executed"); } diff --git a/src/mesa/main/glthread_marshal.h b/src/mesa/main/glthread_marshal.h index c3dbebb1773..f66f1408b1c 100644 --- a/src/mesa/main/glthread_marshal.h +++ b/src/mesa/main/glthread_marshal.h @@ -48,7 +48,7 @@ struct marshal_cmd_base uint16_t cmd_size; }; -typedef void (*_mesa_unmarshal_func)(struct gl_context *ctx, const void *cmd); +typedef void (*_mesa_unmarshal_func)(struct gl_context *ctx, const void *cmd, const uint64_t *last); extern const _mesa_unmarshal_func _mesa_unmarshal_dispatch[NUM_DISPATCH_CMD]; static inline void * diff --git a/src/mesa/main/glthread_shaderobj.c b/src/mesa/main/glthread_shaderobj.c index 7c47860390c..630f82224fd 100644 --- a/src/mesa/main/glthread_shaderobj.c +++ b/src/mesa/main/glthread_shaderobj.c @@ -38,7 +38,8 @@ struct marshal_cmd_ShaderSource void _mesa_unmarshal_ShaderSource(struct gl_context *ctx, - const struct marshal_cmd_ShaderSource *cmd) + const struct marshal_cmd_ShaderSource *cmd, + const uint64_t *last) { const GLint *cmd_length = (const GLint *) (cmd + 1); const GLchar *cmd_strings = (const GLchar *) (cmd_length + cmd->count); @@ -127,7 +128,8 @@ _mesa_glthread_ProgramChanged(struct gl_context *ctx) void _mesa_unmarshal_GetActiveUniform(struct gl_context *ctx, - const struct marshal_cmd_GetActiveUniform *cmd) + const struct marshal_cmd_GetActiveUniform *cmd, + const uint64_t *last) { unreachable("never executed"); }