From d88ca123508ae960c47c5ba1e4ce6e2d19d6a540 Mon Sep 17 00:00:00 2001 From: Marek Olšák Date: Fri, 12 May 2017 21:38:12 +0200 Subject: gallium/u_threaded: add a fast path for unbinding shader buffers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Samuel Pitoiset Reviewed-by: Nicolai Hähnle --- src/gallium/auxiliary/util/u_threaded_context.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/gallium/auxiliary/util/u_threaded_context.c b/src/gallium/auxiliary/util/u_threaded_context.c index e33c8463796..8ea7f8aa260 100644 --- a/src/gallium/auxiliary/util/u_threaded_context.c +++ b/src/gallium/auxiliary/util/u_threaded_context.c @@ -824,6 +824,7 @@ tc_set_shader_images(struct pipe_context *_pipe, struct tc_shader_buffers { ubyte shader, start, count; + bool unbind; struct pipe_shader_buffer slot[0]; /* more will be allocated if needed */ }; @@ -833,6 +834,11 @@ tc_call_set_shader_buffers(struct pipe_context *pipe, union tc_payload *payload) struct tc_shader_buffers *p = (struct tc_shader_buffers *)payload; unsigned count = p->count; + if (p->unbind) { + pipe->set_shader_buffers(pipe, p->shader, p->start, p->count, NULL); + return; + } + pipe->set_shader_buffers(pipe, p->shader, p->start, p->count, p->slot); for (unsigned i = 0; i < count; i++) @@ -849,11 +855,13 @@ tc_set_shader_buffers(struct pipe_context *_pipe, unsigned shader, struct threaded_context *tc = threaded_context(_pipe); struct tc_shader_buffers *p = - tc_add_slot_based_call(tc, TC_CALL_set_shader_buffers, tc_shader_buffers, count); + tc_add_slot_based_call(tc, TC_CALL_set_shader_buffers, tc_shader_buffers, + buffers ? count : 0); p->shader = shader; p->start = start; p->count = count; + p->unbind = buffers == NULL; if (buffers) { for (unsigned i = 0; i < count; i++) { @@ -871,8 +879,6 @@ tc_set_shader_buffers(struct pipe_context *_pipe, unsigned shader, src->buffer_offset + src->buffer_size); } } - } else { - memset(p->slot, 0, count * sizeof(buffers[0])); } } -- cgit v1.2.3