From: Zebediah Figura zfigura@codeweavers.com
--- libs/vkd3d-shader/hlsl_codegen.c | 7 +++---- tests/register-reservations.shader_test | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index 36b66982f..37afdc2db 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -2710,11 +2710,10 @@ static void allocate_register_reservations(struct hlsl_ctx *ctx) type_string->buffer, get_regset_name(regset)); hlsl_release_string_buffer(ctx, type_string); } - else + else if (var->regs[regset].bind_count) { var->regs[regset].allocated = true; var->regs[regset].id = var->reg_reservation.reg_index; - var->regs[regset].bind_count = var->data_type->reg_size[regset]; TRACE("Allocated reserved %s to %c%u-%c%u.\n", var->name, var->reg_reservation.reg_type, var->reg_reservation.reg_index, var->reg_reservation.reg_type, var->reg_reservation.reg_index + var->regs[regset].bind_count); @@ -4124,10 +4123,10 @@ int hlsl_emit_bytecode(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry if (TRACE_ON()) rb_for_each_entry(&ctx->functions, dump_function, ctx);
- allocate_register_reservations(ctx); - calculate_resource_register_counts(ctx);
+ allocate_register_reservations(ctx); + allocate_temp_registers(ctx, entry_func); if (profile->major_version < 4) { diff --git a/tests/register-reservations.shader_test b/tests/register-reservations.shader_test index f5b3da172..23d4ae5cd 100644 --- a/tests/register-reservations.shader_test +++ b/tests/register-reservations.shader_test @@ -114,7 +114,7 @@ probe all rgba (4.0, 4.0, 4.0, 99.0)
% Overlapping reservations, both overlapping objects are unused. -[pixel shader todo] +[pixel shader] Texture2D tex1 : register(t0); Texture2D tex2 : register(t0); Texture2D tex3; @@ -125,12 +125,12 @@ float4 main() : sv_target }
[test] -todo draw quad +draw quad probe all rgba (1.0, 1.0, 1.0, 99.0)
% Overlapping reservations -[pixel shader todo] +[pixel shader] Texture2D tex1 : register(t2); Texture2D tex2 : register(t2);
@@ -140,5 +140,5 @@ float4 main() : sv_target }
[test] -todo draw quad +draw quad probe all rgba (2.0, 2.0, 2.0, 99.0)