summaryrefslogtreecommitdiff
path: root/src/gallium/drivers
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2021-04-01 14:48:58 -0400
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>2021-05-11 22:39:50 -0400
commitd2ff25c70805056696ab298a793cf3b332563857 (patch)
tree47ff179823f497156dc1ebe51484c035f7702f50 /src/gallium/drivers
parent7cc47e59c80efd574a35cadf93f8b352a4ecaa84 (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.c21
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;