Mesa (main): zink: create all descriptor ref templates at once
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed May 25 04:15:05 UTC 2022
Module: Mesa
Branch: main
Commit: 252cdac5cc2d6f1f168acaae70a32e2a73f5c3c1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=252cdac5cc2d6f1f168acaae70a32e2a73f5c3c1
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Mon May 16 16:52:48 2022 -0400
zink: create all descriptor ref templates at once
no functional changes
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16645>
---
src/gallium/drivers/zink/zink_descriptors.c | 96 +++++++++++++++--------------
1 file changed, 51 insertions(+), 45 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c
index 8442fa4d146..4cfc17c2fb6 100644
--- a/src/gallium/drivers/zink/zink_descriptors.c
+++ b/src/gallium/drivers/zink/zink_descriptors.c
@@ -982,7 +982,7 @@ zink_descriptor_pool_reference(struct zink_context *ctx,
}
static void
-create_descriptor_ref_template(struct zink_context *ctx, struct zink_program *pg, enum zink_descriptor_type type)
+create_descriptor_ref_template(struct zink_context *ctx, struct zink_program *pg)
{
struct zink_shader **stages;
if (pg->is_compute)
@@ -991,51 +991,56 @@ create_descriptor_ref_template(struct zink_context *ctx, struct zink_program *pg
stages = ((struct zink_gfx_program*)pg)->shaders;
unsigned num_shaders = pg->is_compute ? 1 : ZINK_SHADER_COUNT;
- for (int i = 0; i < num_shaders; i++) {
- struct zink_shader *shader = stages[i];
- if (!shader)
- continue;
-
- for (int j = 0; j < shader->num_bindings[type]; j++) {
- int index = shader->bindings[type][j].index;
- if (type == ZINK_DESCRIPTOR_TYPE_UBO && !index)
- continue;
- pdd_cached(pg)->num_refs[type] += shader->bindings[type][j].size;
+ for (unsigned type = 0; type < ZINK_DESCRIPTOR_TYPES; type++) {
+ for (int i = 0; i < num_shaders; i++) {
+ struct zink_shader *shader = stages[i];
+ if (!shader)
+ continue;
+
+ for (int j = 0; j < shader->num_bindings[type]; j++) {
+ int index = shader->bindings[type][j].index;
+ if (type == ZINK_DESCRIPTOR_TYPE_UBO && !index)
+ continue;
+ pdd_cached(pg)->num_refs[type] += shader->bindings[type][j].size;
+ }
}
- }
- pdd_cached(pg)->refs[type] = ralloc_array(pg->dd, union zink_program_descriptor_refs, pdd_cached(pg)->num_refs[type]);
- if (!pdd_cached(pg)->refs[type])
- return;
-
- unsigned ref_idx = 0;
- for (int i = 0; i < num_shaders; i++) {
- struct zink_shader *shader = stages[i];
- if (!shader)
+ if (!pdd_cached(pg)->num_refs[type])
continue;
- enum pipe_shader_type stage = pipe_shader_type_from_mesa(shader->nir->info.stage);
- for (int j = 0; j < shader->num_bindings[type]; j++) {
- int index = shader->bindings[type][j].index;
- for (unsigned k = 0; k < shader->bindings[type][j].size; k++) {
- switch (type) {
- case ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW:
- pdd_cached(pg)->refs[type][ref_idx].sampler.sampler_state = (struct zink_sampler_state**)&ctx->sampler_states[stage][index + k];
- pdd_cached(pg)->refs[type][ref_idx].sampler.dsurf = &ctx->di.sampler_surfaces[stage][index + k];
- break;
- case ZINK_DESCRIPTOR_TYPE_IMAGE:
- pdd_cached(pg)->refs[type][ref_idx].dsurf = &ctx->di.image_surfaces[stage][index + k];
- break;
- case ZINK_DESCRIPTOR_TYPE_UBO:
- if (!index)
- continue;
- FALLTHROUGH;
- default:
- pdd_cached(pg)->refs[type][ref_idx].res = &ctx->di.descriptor_res[type][stage][index + k];
- break;
+ pdd_cached(pg)->refs[type] = ralloc_array(pg->dd, union zink_program_descriptor_refs, pdd_cached(pg)->num_refs[type]);
+ if (!pdd_cached(pg)->refs[type])
+ return;
+
+ unsigned ref_idx = 0;
+ for (int i = 0; i < num_shaders; i++) {
+ struct zink_shader *shader = stages[i];
+ if (!shader)
+ continue;
+
+ enum pipe_shader_type stage = pipe_shader_type_from_mesa(shader->nir->info.stage);
+ for (int j = 0; j < shader->num_bindings[type]; j++) {
+ int index = shader->bindings[type][j].index;
+ for (unsigned k = 0; k < shader->bindings[type][j].size; k++) {
+ switch (type) {
+ case ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW:
+ pdd_cached(pg)->refs[type][ref_idx].sampler.sampler_state = (struct zink_sampler_state**)&ctx->sampler_states[stage][index + k];
+ pdd_cached(pg)->refs[type][ref_idx].sampler.dsurf = &ctx->di.sampler_surfaces[stage][index + k];
+ break;
+ case ZINK_DESCRIPTOR_TYPE_IMAGE:
+ pdd_cached(pg)->refs[type][ref_idx].dsurf = &ctx->di.image_surfaces[stage][index + k];
+ break;
+ case ZINK_DESCRIPTOR_TYPE_UBO:
+ if (!index)
+ continue;
+ FALLTHROUGH;
+ default:
+ pdd_cached(pg)->refs[type][ref_idx].res = &ctx->di.descriptor_res[type][stage][index + k];
+ break;
+ }
+ assert(ref_idx < pdd_cached(pg)->num_refs[type]);
+ ref_idx++;
}
- assert(ref_idx < pdd_cached(pg)->num_refs[type]);
- ref_idx++;
}
}
}
@@ -1057,6 +1062,7 @@ zink_descriptor_program_init(struct zink_context *ctx, struct zink_program *pg)
if (!pg->dd)
return true;
+ bool has_pools = false;
for (unsigned i = 0; i < ZINK_DESCRIPTOR_TYPES; i++) {
if (!pg->dd->pool_key[i])
continue;
@@ -1066,11 +1072,11 @@ zink_descriptor_program_init(struct zink_context *ctx, struct zink_program *pg)
if (!pool)
return false;
pdd_cached(pg)->pool[i] = pool;
-
- if (screen->info.have_KHR_descriptor_update_template &&
- screen->descriptor_mode != ZINK_DESCRIPTOR_MODE_NOTEMPLATES)
- create_descriptor_ref_template(ctx, pg, i);
+ has_pools = true;
}
+ if (has_pools && screen->info.have_KHR_descriptor_update_template &&
+ screen->descriptor_mode != ZINK_DESCRIPTOR_MODE_NOTEMPLATES)
+ create_descriptor_ref_template(ctx, pg);
return true;
}
More information about the mesa-commit
mailing list