Module: Mesa Branch: main Commit: e32afce507782d254534549dc25ab22f68fcb5ac URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e32afce507782d254534549dc25ab22f68fcb5ac
Author: Mike Blumenkrantz <[email protected]> Date: Mon Sep 12 12:05:09 2022 -0400 zink: simplify ntv shader descriptor emission these can be emitted directly Reviewed-by: Erik Faye-Lund <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18144> --- .../drivers/zink/nir_to_spirv/nir_to_spirv.c | 28 ++++++---------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index 5f14f83969a..0984b363239 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -1086,20 +1086,6 @@ emit_bo(struct ntv_context *ctx, struct nir_variable *var) spirv_builder_emit_binding(&ctx->builder, var_id, var->data.binding); } -static void -emit_uniform(struct ntv_context *ctx, struct nir_variable *var) -{ - if (var->data.mode == nir_var_mem_ubo || var->data.mode == nir_var_mem_ssbo) - emit_bo(ctx, var); - else { - assert(var->data.mode == nir_var_uniform || - var->data.mode == nir_var_image); - const struct glsl_type *type = glsl_without_array(var->type); - if (glsl_type_is_sampler(type) || glsl_type_is_image(type)) - emit_image(ctx, var, false); - } -} - static SpvId get_vec_from_bit_size(struct ntv_context *ctx, uint32_t bit_size, uint32_t num_components) { @@ -4334,13 +4320,13 @@ nir_to_spirv(struct nir_shader *s, const struct zink_shader_info *sinfo, uint32_ emit_so_info(&ctx, sinfo, max_output); uint32_t tcs_vertices_out_word = 0; - /* we have to reverse iterate to match what's done in zink_compiler.c */ - foreach_list_typed_reverse(nir_variable, var, node, &s->variables) - if (_nir_shader_variable_has_mode(var, nir_var_uniform | - nir_var_image | - nir_var_mem_ubo | - nir_var_mem_ssbo)) - emit_uniform(&ctx, var); + nir_foreach_variable_with_modes(var, s, nir_var_mem_ubo | nir_var_mem_ssbo) + emit_bo(&ctx, var); + nir_foreach_variable_with_modes(var, s, nir_var_uniform | nir_var_image) { + const struct glsl_type *type = glsl_without_array(var->type); + if (glsl_type_is_sampler(type) || glsl_type_is_image(type)) + emit_image(&ctx, var, false); + } switch (s->info.stage) { case MESA_SHADER_FRAGMENT:
