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 <billkris@microsoft.com> Reviewed-By: Sil Vilerino <sivileri@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14837>
This commit is contained in:
parent
c154d403d3
commit
efe5c2d6f3
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue