diff options
author | Eric Anholt <[email protected]> | 2013-02-15 16:33:33 -0800 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-03-16 14:14:19 +1100 |
commit | 47f819d3cb89ab90914181e3c61744ac1f16e056 (patch) | |
tree | b093a34150d1a28d5422a2b5201d354e8a078fc6 | |
parent | 1d6b71c5c6264f9cc0f7ae7c35d27b5c88f3f8bf (diff) |
mesa: Statically allocate glthread command buffer in the batch struct.
This avoids an extra pointer dereference in the marshalling functions,
which, with the instruction count doing in the low 30s, could actually
matter for main-thread performance.
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]>
-rw-r--r-- | src/mesa/main/glthread.c | 5 | ||||
-rw-r--r-- | src/mesa/main/glthread.h | 8 |
2 files changed, 6 insertions, 7 deletions
diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c index c4d1031f4c6..8f300d46344 100644 --- a/src/mesa/main/glthread.c +++ b/src/mesa/main/glthread.c @@ -45,10 +45,10 @@ glthread_allocate_batch(struct gl_context *ctx) struct glthread_state *glthread = ctx->GLThread; /* TODO: handle memory allocation failure. */ - glthread->batch = calloc(1, sizeof(*glthread->batch)); + glthread->batch = malloc(sizeof(*glthread->batch)); if (!glthread->batch) return; - glthread->batch->buffer = malloc(MARSHAL_MAX_CMD_SIZE); + memset(glthread->batch, 0, offsetof(struct glthread_batch, buffer)); } static void @@ -63,7 +63,6 @@ glthread_unmarshal_batch(struct gl_context *ctx, struct glthread_batch *batch) assert(pos == batch->used); - free(batch->buffer); free(batch); } diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h index c38fef32fa0..98ae11509a6 100644 --- a/src/mesa/main/glthread.h +++ b/src/mesa/main/glthread.h @@ -94,14 +94,14 @@ struct glthread_batch struct glthread_batch *next; /** - * Points to the first command in the batch. + * Amount of data used by batch commands, in bytes. */ - uint8_t *buffer; + size_t used; /** - * Amount of data used by batch commands, in bytes. + * Data contained in the command buffer. */ - size_t used; + uint8_t buffer[MARSHAL_MAX_CMD_SIZE]; }; void _mesa_glthread_init(struct gl_context *ctx); |