From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- libs/vkd3d-shader/hlsl_codegen.c | 2 +- tests/register-reservations.shader_test | 31 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index 96b4cb660..829e11c34 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -3658,7 +3658,7 @@ static void allocate_objects(struct hlsl_ctx *ctx, enum hlsl_regset regset) { unsigned int count = var->regs[regset].bind_count;
- if (count == 0) + if (count == 0 || !var->last_read) continue;
if (var->regs[regset].allocated) diff --git a/tests/register-reservations.shader_test b/tests/register-reservations.shader_test index 72f68c1e0..630540149 100644 --- a/tests/register-reservations.shader_test +++ b/tests/register-reservations.shader_test @@ -81,3 +81,34 @@ float4 main() : sv_target [test] draw quad probe all rgba (4.0, 4.0, 4.0, 99.0) + + +% Overlapping reservations, both overllaping objects are unused +[pixel shader] +Texture2D tex1 : register(t0); +Texture2D tex2 : register(t0); +Texture2D tex3; + +float4 main() : sv_target +{ + return tex3.Load(int3(0, 0, 0)); +} + +[test] +draw quad +probe all rgba (1.0, 1.0, 1.0, 99.0) + + +% Overlapping reservations +[pixel shader] +Texture2D tex1 : register(t2); +Texture2D tex2 : register(t2); + +float4 main() : sv_target +{ + return tex1.Load(int3(0, 0, 0)); +} + +[test] +draw quad +probe all rgba (2.0, 2.0, 2.0, 99.0)