From cfbf60b0c21b105ad162a0a451cd2f65124efedc Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Mon, 10 Jul 2017 01:55:52 +0200 Subject: [PATCH] mesa/marshal: fix glNamedBufferData with NULL data MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The semantics are similar to glBufferData. Tested-by: Marc Dietrich Reviewed-by: Marek Olšák --- src/mesa/main/marshal.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/mesa/main/marshal.c b/src/mesa/main/marshal.c index 391b6e746c2..8f8e8c78ed2 100644 --- a/src/mesa/main/marshal.c +++ b/src/mesa/main/marshal.c @@ -415,6 +415,7 @@ struct marshal_cmd_NamedBufferData GLuint name; GLsizei size; GLenum usage; + bool data_null; /* If set, no data follows for "data" */ /* Next size bytes are GLubyte data[size] */ }; @@ -425,7 +426,12 @@ _mesa_unmarshal_NamedBufferData(struct gl_context *ctx, const GLuint name = cmd->name; const GLsizei size = cmd->size; const GLenum usage = cmd->usage; - const void *data = (const void *) (cmd + 1); + const void *data; + + if (cmd->data_null) + data = NULL; + else + data = (const void *) (cmd + 1); CALL_NamedBufferData(ctx->CurrentServerDispatch, (name, size, data, usage)); @@ -436,7 +442,7 @@ _mesa_marshal_NamedBufferData(GLuint buffer, GLsizeiptr size, const GLvoid * data, GLenum usage) { GET_CURRENT_CONTEXT(ctx); - size_t cmd_size = sizeof(struct marshal_cmd_NamedBufferData) + size; + size_t cmd_size = sizeof(struct marshal_cmd_NamedBufferData) + (data ? size : 0); debug_print_marshal("NamedBufferData"); if (unlikely(size < 0)) { @@ -452,8 +458,11 @@ _mesa_marshal_NamedBufferData(GLuint buffer, GLsizeiptr size, cmd->name = buffer; cmd->size = size; cmd->usage = usage; - char *variable_data = (char *) (cmd + 1); - memcpy(variable_data, data, size); + cmd->data_null = !data; + if (data) { + char *variable_data = (char *) (cmd + 1); + memcpy(variable_data, data, size); + } _mesa_post_marshal_hook(ctx); } else { _mesa_glthread_finish(ctx); -- 2.30.2