mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 16:28:08 +02:00
gallium/u_threaded: add a fast path for unbinding shader images
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
ae7f7e8162
commit
d4c8f429d1
1 changed files with 10 additions and 4 deletions
|
|
@ -155,7 +155,7 @@ tc_add_sized_call(struct threaded_context *tc, enum tc_call_id id,
|
|||
((struct type*)tc_add_sized_call(tc, execute, \
|
||||
sizeof(struct type) + \
|
||||
sizeof(((struct type*)NULL)->slot[0]) * \
|
||||
num_slots))
|
||||
(num_slots)))
|
||||
|
||||
static union tc_payload *
|
||||
tc_add_small_call(struct threaded_context *tc, enum tc_call_id id)
|
||||
|
|
@ -764,6 +764,7 @@ tc_set_sampler_views(struct pipe_context *_pipe,
|
|||
|
||||
struct tc_shader_images {
|
||||
ubyte shader, start, count;
|
||||
bool unbind;
|
||||
struct pipe_image_view slot[0]; /* more will be allocated if needed */
|
||||
};
|
||||
|
||||
|
|
@ -773,6 +774,11 @@ tc_call_set_shader_images(struct pipe_context *pipe, union tc_payload *payload)
|
|||
struct tc_shader_images *p = (struct tc_shader_images *)payload;
|
||||
unsigned count = p->count;
|
||||
|
||||
if (p->unbind) {
|
||||
pipe->set_shader_images(pipe, p->shader, p->start, p->count, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
pipe->set_shader_images(pipe, p->shader, p->start, p->count, p->slot);
|
||||
|
||||
for (unsigned i = 0; i < count; i++)
|
||||
|
|
@ -790,11 +796,13 @@ tc_set_shader_images(struct pipe_context *_pipe,
|
|||
|
||||
struct threaded_context *tc = threaded_context(_pipe);
|
||||
struct tc_shader_images *p =
|
||||
tc_add_slot_based_call(tc, TC_CALL_set_shader_images, tc_shader_images, count);
|
||||
tc_add_slot_based_call(tc, TC_CALL_set_shader_images, tc_shader_images,
|
||||
images ? count : 0);
|
||||
|
||||
p->shader = shader;
|
||||
p->start = start;
|
||||
p->count = count;
|
||||
p->unbind = images == NULL;
|
||||
|
||||
if (images) {
|
||||
for (unsigned i = 0; i < count; i++) {
|
||||
|
|
@ -811,8 +819,6 @@ tc_set_shader_images(struct pipe_context *_pipe,
|
|||
}
|
||||
}
|
||||
memcpy(p->slot, images, count * sizeof(images[0]));
|
||||
} else {
|
||||
memset(p->slot, 0, count * sizeof(images[0]));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue