From 36f9510bb395de948b5e0de822594ba6f30a3564 Mon Sep 17 00:00:00 2001 From: Conor McCarthy Date: Tue, 4 Feb 2025 14:49:47 +1000 Subject: [PATCH] tests/hlsl: Add interstage interface 16-bit tests. --- .../shader-interstage-interface.shader_test | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/tests/hlsl/shader-interstage-interface.shader_test b/tests/hlsl/shader-interstage-interface.shader_test index ac641c32..cab8ae0d 100644 --- a/tests/hlsl/shader-interstage-interface.shader_test +++ b/tests/hlsl/shader-interstage-interface.shader_test @@ -54,3 +54,101 @@ void main(float4 position : SV_Position, float2 t0 : TEXCOORD0, [test] todo(msl) draw triangle strip 4 probe (0, 0) rgba (10.0, 8.0, 7.0, 3.0) + +[require] +shader model >= 6.2 +native-16-bit + +[input layout] +0 r32g32-float SV_POSITION +0 r32g32-float TEXCOORD 0 +1 r32g32-uint TEXCOORD 1 + +[vb 0] +-1.0 -1.0 70000.0 5.0 +-1.0 1.0 70000.0 5.0 + 1.0 -1.0 70000.0 5.0 + 1.0 1.0 70000.0 5.0 + +[vb 1] +format r32-uint +0x37fff 2 +0x37fff 2 +0x37fff 2 +0x37fff 2 + +[vertex shader] +struct vertex +{ + float4 position : SV_Position; + half2 t0 : TEXCOORD0; + uint16_t2 t1 : TEXCOORD1; +}; + +void main(in vertex vin, out vertex vout) +{ + vout = vin; +} + +[pixel shader] +uniform half h; + +float4 main(float4 position : SV_Position, half2 t0 : TEXCOORD0, uint16_t2 t1 : TEXCOORD1) : SV_Target +{ + // Prevent float -> half -> float being optimised out by doing a half-precision operation. + return float4(t0 - half2(h, h), t1); +} + +[test] +uniform 0 uint 0 +draw triangle strip 4 +probe (0, 0) rgba(65504.0, 5.0, 65535.0, 2.0) + +[input layout] +0 r32g32-float SV_POSITION +1 r32g32-sint TEXCOORD 0 + +[vb 0] +-1.0 -1.0 +-1.0 1.0 + 1.0 -1.0 + 1.0 1.0 + +[vb 1] +format r32-sint +-70000 -2 +-70000 -2 +-70000 -2 +-70000 -2 + +[vertex shader] +struct vertex +{ + float4 position : SV_Position; + int16_t2 t0 : TEXCOORD0; +}; + +void main(in vertex vin, out vertex vout) +{ + vout = vin; +} + +[pixel shader] +int4 main(float4 position : SV_Position, int16_t2 t0 : TEXCOORD0) : SV_Target +{ + return int4(t0, 0, 0); +} + +[test] +draw triangle strip 4 +probe (0, 0) rgbai(-32768, -2, 0, 0) + +[pixel shader] +uint4 main(float4 position : SV_Position, int16_t2 t0 : TEXCOORD0) : SV_Target +{ + return uint4(t0, 0, 0); +} + +[test] +draw triangle strip 4 +probe (0, 0) rgbai(-32768, -2, 0, 0)