From faeff50548e5b3513f4ced15ed46d56568edb40b Mon Sep 17 00:00:00 2001 From: Francisco Casas Date: Mon, 16 Jun 2025 16:38:55 -0400 Subject: [PATCH] tests/hlsl: Add additional semantic cascading tests. These test make the shader runner segfault before implementing it, because it miscompiles and there are unused input layout elements. So they are on their own commit. --- tests/hlsl/semantic-cascading.shader_test | 126 ++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/tests/hlsl/semantic-cascading.shader_test b/tests/hlsl/semantic-cascading.shader_test index 95a9d7a2c..4554e261d 100644 --- a/tests/hlsl/semantic-cascading.shader_test +++ b/tests/hlsl/semantic-cascading.shader_test @@ -264,3 +264,129 @@ float4 main(float4 position : position, struct banana ba : CASCADE, out float4 r clear rtv 0 0.0 0.0 0.0 0.0 draw triangle strip 4 probe (0, 0) f32(0.0, 1.0, 2.0, 0.0) + +[input layout] +0 r32g32-float POSITION +1 r32-float INPLACE 0 +1 r32-float INPLACE 1 +1 r32-float CASCADE 0 +1 r32-float CASCADE 1 + +[vb 1] +100.0 101.0 0.0 1.0 +100.0 101.0 0.0 1.0 +100.0 101.0 0.0 1.0 +100.0 101.0 0.0 1.0 + +[vertex shader] +struct apple +{ + float aa : INPLACE0; + float bb : INPLACE1; +}; + +float4 main(float4 position : position, struct apple ap1 : CASCADE, + struct apple ap2, out float4 res : RESULT) : sv_position +{ + res = float4(ap1.aa, ap1.bb, ap2.aa, ap2.bb); + return float4(position.xy, 1.0, 1.0); +} + +[test] +clear rtv 0 0.0 0.0 0.0 0.0 +draw triangle strip 4 +probe (0, 0) f32(0.0, 1.0, 100.0, 101.0) + + +[input layout] +0 r32g32-float POSITION +1 r32g32b32a32-float SEMA 0 +1 r32g32b32a32-float SEMB 0 + +[vb 1] +40.0 41.0 42.0 43.0 80.0 81.0 82.0 83.0 +40.0 41.0 42.0 43.0 80.0 81.0 82.0 83.0 +40.0 41.0 42.0 43.0 80.0 81.0 82.0 83.0 +40.0 41.0 42.0 43.0 80.0 81.0 82.0 83.0 + +[vertex shader] +struct apple +{ + float4 f : SOMETHING_ELSE; +}; + +// RESULT on the return value overrides the SOMETHING_ELSE in the struct declaration. +// Note that native only accepts a 4-component float32 vector as output. +struct apple main(in float2 pos : POSITION, in float4 sema : SEMA, + in float4 semb : SEMB, out float4 out_pos : SV_POSITION) : RESULT +{ + struct apple res; + + out_pos = float4(pos, 1.0, 1.0); + res.f = 100 * sema + semb; + return res; +} + +[pixel shader] +// Since the RETURN semantic got allocated before SV_POSITION in the vertex +// shader output, swap the order in the pixel shader. +float4 main(float4 res : RESULT, float4 pos : sv_position) : sv_target +{ + return res; +} + +[test] +clear rtv 0 0.0 0.0 0.0 0.0 +draw triangle strip 4 +todo(opengl) probe (0, 0) f32(4080.0, 4181.0, 4282.0, 4383.0) + + +% Test multiple overrides. +[vertex shader] +struct apple +{ + float4 f : SOMETHING_ELSE; +}; + +void main(in float2 pos : POSITION, apple sema : SEMA, apple semb : SEMB, + out apple res : RESULT, out apple out_pos : SV_POSITION) +{ + out_pos.f = float4(pos, 1.0, 1.0); + res.f = 100 * semb.f + sema.f; +} + +[test] +clear rtv 0 0.0 0.0 0.0 0.0 +draw triangle strip 4 +probe (0, 0) f32(8040.0, 8141.0, 8242.0, 8343.0) + + +[input layout] +0 r32g32-float POSITION +1 r32g32b32a32-float SEMA 3 +1 r32g32b32a32-float SEMA 4 + +[vb 1] +30.0 31.0 32.0 33.0 40.0 41.0 42.0 43.0 +30.0 31.0 32.0 33.0 40.0 41.0 42.0 43.0 +30.0 31.0 32.0 33.0 40.0 41.0 42.0 43.0 +30.0 31.0 32.0 33.0 40.0 41.0 42.0 43.0 + +% Test semantic cascading with initial offset. +[vertex shader] +struct apple +{ + float4 f : SOMETHING_ELSE; // gets SEMA3 + float4 g : OVERRIDDEN2; // gets SEMA4 +}; + +void main(in float2 pos : POSITION, apple ap : SEMA3, out float4 res : RESULT, out float4 out_pos : SV_POSITION) +{ + out_pos = float4(pos, 1, 1); + res = float4(ap.f.xy, ap.g.zw); +} + +[test] +clear rtv 0 0.0 0.0 0.0 0.0 +draw triangle strip 4 +probe (0, 0) f32(30.0, 31.0, 42.0, 43.0)