From efe5c2d6f33ccfd85488a68a3b146253881f82fd Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Tue, 1 Feb 2022 14:36:32 -0800 Subject: [PATCH] microsoft/compiler: Process signatures before the shader code This lets us set up some metadata based on I/O vars without having to do multiple passes over them. Reviewed-by: Bill Kristiansen Reviewed-By: Sil Vilerino Part-of: --- src/microsoft/compiler/nir_to_dxil.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/microsoft/compiler/nir_to_dxil.c b/src/microsoft/compiler/nir_to_dxil.c index d83a623fa14..444fbeeaae8 100644 --- a/src/microsoft/compiler/nir_to_dxil.c +++ b/src/microsoft/compiler/nir_to_dxil.c @@ -1517,7 +1517,7 @@ emit_tag(struct ntd_context *ctx, enum dxil_shader_tag tag, } static bool -emit_metadata(struct ntd_context *ctx) +emit_metadata(struct ntd_context *ctx, const struct dxil_mdnode *signatures) { unsigned dxilMinor = ctx->mod.minor_version; if (!emit_llvm_ident(&ctx->mod) || @@ -1587,12 +1587,6 @@ emit_metadata(struct ntd_context *ctx) return false; } - unsigned input_clip_size = ctx->mod.shader_kind == DXIL_PIXEL_SHADER ? - ctx->shader->info.clip_distance_array_size : ctx->opts->input_clip_size; - const struct dxil_mdnode *signatures = get_signatures(&ctx->mod, ctx->shader, - ctx->opts->environment == DXIL_ENVIRONMENT_VULKAN, - input_clip_size); - nir_function_impl *entry_func_impl = nir_shader_get_entrypoint(ctx->shader); const struct dxil_mdnode *dx_entry_point = emit_entrypoint(ctx, main_func, entry_func_impl->function->name, signatures, resources_node, shader_properties); @@ -5356,6 +5350,12 @@ emit_module(struct ntd_context *ctx, const struct nir_to_dxil_options *opts) } } + unsigned input_clip_size = ctx->mod.shader_kind == DXIL_PIXEL_SHADER ? + ctx->shader->info.clip_distance_array_size : ctx->opts->input_clip_size; + const struct dxil_mdnode *signatures = get_signatures(&ctx->mod, ctx->shader, + ctx->opts->environment == DXIL_ENVIRONMENT_VULKAN, + input_clip_size); + nir_foreach_function(func, ctx->shader) { if (!emit_function(ctx, func)) return false; @@ -5372,7 +5372,7 @@ emit_module(struct ntd_context *ctx, const struct nir_to_dxil_options *opts) if (ctx->mod.feats.native_low_precision) ctx->mod.minor_version = MAX2(ctx->mod.minor_version, 2); - return emit_metadata(ctx) && + return emit_metadata(ctx, signatures) && dxil_emit_module(&ctx->mod); }