From 4a3b344b23583e229b837ca51ca7f3658ac2e32b Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 7 Oct 2020 09:47:08 -0400 Subject: [PATCH] zink: directly use resource count from pool instead of accumulating every time this is a surprisingly impactful speedup Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/gallium/drivers/zink/zink_descriptors.c | 2 +- src/gallium/drivers/zink/zink_draw.c | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c index afa3acc85d6..45f162d4ee3 100644 --- a/src/gallium/drivers/zink/zink_descriptors.c +++ b/src/gallium/drivers/zink/zink_descriptors.c @@ -216,7 +216,7 @@ allocate_desc_set(struct zink_screen *screen, struct zink_program *pg, enum zink struct zink_descriptor_set *alloc = ralloc_array(pool, struct zink_descriptor_set, bucket_size); assert(alloc); - unsigned num_resources = zink_program_num_bindings_typed(pg, type, is_compute); + unsigned num_resources = pool->num_resources; struct zink_resource **resources = rzalloc_array(pool, struct zink_resource*, num_resources * bucket_size); assert(resources); void **samplers = NULL; diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c index f391be691ff..34577d88d63 100644 --- a/src/gallium/drivers/zink/zink_draw.c +++ b/src/gallium/drivers/zink/zink_draw.c @@ -344,14 +344,12 @@ write_descriptors(struct zink_context *ctx, struct zink_descriptor_set *zds, uns bool is_compute, bool cache_hit) { bool need_flush = false; - struct zink_program *pg = is_compute ? (struct zink_program *)ctx->curr_compute : (struct zink_program *)ctx->curr_program; struct zink_batch *batch = is_compute ? &ctx->compute_batch : zink_curr_batch(ctx); struct zink_screen *screen = zink_screen(ctx->base.screen); assert(zds->desc_set); unsigned check_flush_id = is_compute ? 0 : ZINK_COMPUTE_BATCH_ID; for (int i = 0; i < num_resources; ++i) { - assert(num_resources <= zink_program_num_bindings_typed(pg, zds->pool->type, is_compute)); - assert(num_resources <= zds->num_resources); + assert(num_resources <= zds->pool->num_resources); struct zink_resource *res = resources[i].res; if (res) { @@ -390,7 +388,7 @@ update_ubo_descriptors(struct zink_context *ctx, struct zink_descriptor_set *zds struct zink_program *pg = is_compute ? (struct zink_program *)ctx->curr_compute : (struct zink_program *)ctx->curr_program; struct zink_screen *screen = zink_screen(ctx->base.screen); unsigned num_descriptors = pg->pool[zds->pool->type]->key.num_descriptors; - unsigned num_bindings = zink_program_num_bindings_typed(pg, zds->pool->type, is_compute); + unsigned num_bindings = zds->pool->num_resources; VkWriteDescriptorSet wds[num_descriptors]; struct zink_descriptor_resource resources[num_bindings]; VkDescriptorBufferInfo buffer_infos[num_bindings]; @@ -474,7 +472,7 @@ update_ssbo_descriptors(struct zink_context *ctx, struct zink_descriptor_set *zd struct zink_program *pg = is_compute ? (struct zink_program *)ctx->curr_compute : (struct zink_program *)ctx->curr_program; ASSERTED struct zink_screen *screen = zink_screen(ctx->base.screen); unsigned num_descriptors = pg->pool[zds->pool->type]->key.num_descriptors; - unsigned num_bindings = zink_program_num_bindings_typed(pg, zds->pool->type, is_compute); + unsigned num_bindings = zds->pool->num_resources; VkWriteDescriptorSet wds[num_descriptors]; struct zink_descriptor_resource resources[num_bindings]; VkDescriptorBufferInfo buffer_infos[num_bindings]; @@ -580,7 +578,7 @@ update_sampler_descriptors(struct zink_context *ctx, struct zink_descriptor_set struct zink_program *pg = is_compute ? (struct zink_program *)ctx->curr_compute : (struct zink_program *)ctx->curr_program; struct zink_screen *screen = zink_screen(ctx->base.screen); unsigned num_descriptors = pg->pool[zds->pool->type]->key.num_descriptors; - unsigned num_bindings = zink_program_num_bindings(pg, is_compute); + unsigned num_bindings = zds->pool->num_resources; VkWriteDescriptorSet wds[num_descriptors]; struct zink_descriptor_resource resources[num_bindings]; VkDescriptorImageInfo image_infos[num_bindings]; @@ -656,7 +654,7 @@ update_image_descriptors(struct zink_context *ctx, struct zink_descriptor_set *z struct zink_program *pg = is_compute ? (struct zink_program *)ctx->curr_compute : (struct zink_program *)ctx->curr_program; struct zink_screen *screen = zink_screen(ctx->base.screen); unsigned num_descriptors = pg->pool[zds->pool->type]->key.num_descriptors; - unsigned num_bindings = zink_program_num_bindings(pg, is_compute); + unsigned num_bindings = zds->pool->num_resources; VkWriteDescriptorSet wds[num_descriptors]; struct zink_descriptor_resource resources[num_bindings]; VkDescriptorImageInfo image_infos[num_bindings];