From 4569a9d5ba3d0cdba3fcf051f54c07cf76b12752 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Tue, 9 Sep 2025 19:11:09 +0200 Subject: [PATCH] vkd3d-shader/hlsl: Set the "flat constant" count in sm1_generate_vsir(). Aside from being required in order to produce valid vsir, this is used by vsir_program_scan() to generate descriptor information. --- libs/vkd3d-shader/hlsl_codegen.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index 8d92e4521..13de9cd16 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -10174,7 +10174,10 @@ static void sm1_generate_vsir(struct hlsl_ctx *ctx, const struct vkd3d_shader_co struct hlsl_ir_function_decl *func, struct list *semantic_vars, struct hlsl_block *body, uint64_t config_flags, struct vsir_program *program) { + struct hlsl_ir_var *var; struct hlsl_block block; + struct hlsl_reg *reg; + unsigned int *count; program->ssa_count = 0; program->temp_count = 0; @@ -10189,6 +10192,17 @@ static void sm1_generate_vsir(struct hlsl_ctx *ctx, const struct vkd3d_shader_co sm1_generate_vsir_block(ctx, body, program); + count = &program->flat_constant_count[VKD3D_SHADER_D3DBC_FLOAT_CONSTANT_REGISTER]; + LIST_FOR_EACH_ENTRY(var, &ctx->extern_vars, struct hlsl_ir_var, extern_entry) + { + if (!var->is_uniform) + continue; + + if (!(reg = &var->regs[HLSL_REGSET_NUMERIC])->allocation_size) + continue; + + *count = max(*count, reg->id + reg->allocation_size); + } program->ssa_count = ctx->ssa_count; program->temp_count = ctx->temp_count;