[Mesa-dev] [PATCH] mesa/glthread: Avoid unnecessary batch reallocation
Nicolai Hähnle
nhaehnle at gmail.com
Mon Apr 3 18:42:11 UTC 2017
On 03.04.2017 20:38, Bartosz Tomczyk wrote:
> ---
> src/mesa/main/glthread.c | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c
> index 3f07c420d4..aa14292e59 100644
> --- a/src/mesa/main/glthread.c
> +++ b/src/mesa/main/glthread.c
> @@ -53,7 +53,8 @@ glthread_allocate_batch(struct gl_context *ctx)
> }
>
> static void
> -glthread_unmarshal_batch(struct gl_context *ctx, struct glthread_batch *batch)
> +glthread_unmarshal_batch(struct gl_context *ctx, struct glthread_batch *batch,
> + const bool release_batch)
> {
> size_t pos = 0;
>
> @@ -64,7 +65,10 @@ glthread_unmarshal_batch(struct gl_context *ctx, struct glthread_batch *batch)
>
> assert(pos == batch->used);
>
> - free(batch);
> + if (release_batch)
> + free(batch);
> + else
> + memset(batch, 0, offsetof(struct glthread_batch, buffer));
Hmm. Why do we memset the batch? Seems like a trivial optimization to
just not do that...
Apart from that, the patch looks good to me.
Cheers,
Nicolai
> }
>
> static void *
> @@ -103,7 +107,7 @@ glthread_worker(void *data)
> glthread->busy = true;
> pthread_mutex_unlock(&glthread->mutex);
>
> - glthread_unmarshal_batch(ctx, batch);
> + glthread_unmarshal_batch(ctx, batch, true);
>
> pthread_mutex_lock(&glthread->mutex);
> glthread->busy = false;
> @@ -214,7 +218,7 @@ _mesa_glthread_flush_batch_locked(struct gl_context *ctx)
> * need to restore it when it returns.
> */
> if (false) {
> - glthread_unmarshal_batch(ctx, batch);
> + glthread_unmarshal_batch(ctx, batch, true);
> _glapi_set_dispatch(ctx->CurrentClientDispatch);
> return;
> }
> @@ -269,9 +273,8 @@ _mesa_glthread_finish(struct gl_context *ctx)
> if (!(glthread->batch_queue || glthread->busy)) {
> if (glthread->batch && glthread->batch->used) {
> struct _glapi_table *dispatch = _glapi_get_dispatch();
> - glthread_unmarshal_batch(ctx, glthread->batch);
> + glthread_unmarshal_batch(ctx, glthread->batch, false);
> _glapi_set_dispatch(dispatch);
> - glthread_allocate_batch(ctx);
> }
> } else {
> _mesa_glthread_flush_batch_locked(ctx);
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list