diff options
author | Mike Blumenkrantz <michael.blumenkrantz@gmail.com> | 2021-04-01 14:48:58 -0400 |
---|---|---|
committer | Mike Blumenkrantz <michael.blumenkrantz@gmail.com> | 2021-05-11 22:39:50 -0400 |
commit | d2ff25c70805056696ab298a793cf3b332563857 (patch) | |
tree | 47ff179823f497156dc1ebe51484c035f7702f50 /src/gallium/drivers | |
parent | 7cc47e59c80efd574a35cadf93f8b352a4ecaa84 (diff) |
zink: use better iterating for buffer rebinds
now that the number of descriptors for a given type is known, we can iterate
over all bound descriptors for the type instead of relying on shader usage
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10699>
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r-- | src/gallium/drivers/zink/zink_context.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 87562b76719..3de6de3970d 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -2615,9 +2615,24 @@ rebind_buffer(struct zink_context *ctx, struct zink_resource *res) if (!(res->bind_history & BITFIELD64_BIT(type))) continue; - uint32_t usage = zink_program_get_descriptor_usage(ctx, shader, type); - while (usage) { - const int i = u_bit_scan(&usage); + unsigned num_descriptors = 0; + switch (type) { + case ZINK_DESCRIPTOR_TYPE_UBO: + num_descriptors = ctx->di.num_ubos[shader]; + break; + case ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW: + num_descriptors = ctx->di.num_sampler_views[shader]; + break; + case ZINK_DESCRIPTOR_TYPE_SSBO: + num_descriptors = ctx->di.num_ssbos[shader]; + break; + case ZINK_DESCRIPTOR_TYPE_IMAGE: + num_descriptors = ctx->di.num_images[shader]; + break; + default: + unreachable("ack"); + } + for (unsigned i = 0; i < num_descriptors; i++) { struct zink_resource *cres = zink_get_resource_for_descriptor(ctx, type, shader, i); if (res != cres) continue; |