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.
This commit is contained in:
Henri Verbeet
2025-09-09 19:11:09 +02:00
parent 2b5dc156c7
commit 4569a9d5ba
Notes: Henri Verbeet 2025-09-11 16:15:21 +02:00
Approved-by: Francisco Casas (@fcasas)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1724

View File

@@ -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;