From 2dce34d7e0ce560a8edd89f366e26a51193c6ba3 Mon Sep 17 00:00:00 2001 From: Francisco Casas Date: Mon, 7 Apr 2025 18:54:15 -0400 Subject: [PATCH] tests/hlsl: Test the object .Length property. --- Makefile.am | 1 + tests/hlsl/length-property.shader_test | 162 +++++++++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 tests/hlsl/length-property.shader_test diff --git a/Makefile.am b/Makefile.am index 24779e72a..d55740aaf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -169,6 +169,7 @@ vkd3d_shader_tests = \ tests/hlsl/is-front-face.shader_test \ tests/hlsl/isinf.shader_test \ tests/hlsl/ldexp.shader_test \ + tests/hlsl/length-property.shader_test \ tests/hlsl/length.shader_test \ tests/hlsl/lerp.shader_test \ tests/hlsl/lhs-cast.shader_test \ diff --git a/tests/hlsl/length-property.shader_test b/tests/hlsl/length-property.shader_test new file mode 100644 index 000000000..42002318f --- /dev/null +++ b/tests/hlsl/length-property.shader_test @@ -0,0 +1,162 @@ +[pixel shader fail(sm<4 | sm>=6) todo(sm>=4)] +Texture1D tex1d; +Texture1DArray tex1da; +Texture2D tex2d; +Texture2DMS tex2dms; +Texture2DArray tex2da; +Texture2DMSArray tex2dmsa; +Texture3D tex3d; + +float4 main() : sv_target +{ + uint le1 = tex1d.Length; + uint2 le2 = tex1da.Length; + uint2 le3 = tex2d.Length; + uint2 le4 = tex2dms.Length; + uint3 le5 = tex2da.Length; + uint3 le6 = tex2dmsa.Length; + uint3 le7 = tex3d.Length; + + return le1.xxxx + le2.xyxy + le3.xyxy + le4.xyxy + le5.xyzx + le6.xyzx + le7.xyzx; +} + +[srv 0] +size (2d, 2, 3) +0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + +[pixel shader fail(sm<4 | sm>=6) todo(sm>=4)] +Texture2D t; + +float4 main() : sv_target +{ + return float4(t.Length, 0, 0); +} + +[test] +todo draw quad +probe (0, 0) rgba(2, 3, 0, 0) + +[pixel shader fail(sm<4 | sm>=6) todo(sm>=4)] +Texture2D t; + +float4 fun(float2 x) { return 1; } +float4 fun(uint2 x) { return 2; } + +float4 main() : sv_target +{ + return fun(t.Length); // property is always uint. +} + +[test] +todo draw quad +probe (0, 0) rgba(2, 2, 2, 2) + +[pixel shader fail] +TextureCube texcube; + +float4 main() : sv_target +{ + return texcube.Length.xxxx; +} + +[pixel shader fail] +TextureCubeArray texcubearr; + +float4 main() : sv_target +{ + return texcubearr.Length.xxxx; +} + +[require] +shader model >= 5.0 + +[pixel shader fail(sm<4 | sm>=6) todo(sm>=4)] +RWTexture1D tex1d; +RWTexture1DArray tex1da; +RWTexture2D tex2d; +RWTexture2DArray tex2da; +RWTexture3D tex3d; + +float4 main() : sv_target +{ + uint le1 = tex1d.Length; + uint2 le2 = tex1da.Length; + uint2 le3 = tex2d.Length; + uint3 le4 = tex2da.Length; + uint3 le5 = tex3d.Length; + + return le1.xxxx + le2.xyxy + le3.xyxy + le4.xyzx + le5.xyzx; +} + +[srv 0] +format r32-float +size (buffer, 3) +0.0 0.0 0.0 + +[pixel shader fail(sm>=6) todo] +Buffer buff; + +float4 main() : sv_target +{ + return float4(buff.Length, 0, 0, 0); +} + +[test] +todo draw quad +probe (0, 0) rgba(3, 0, 0, 0) + +[uav 1] +format r32-float +size (2d, 2, 4) +0.0 0.0 +0.0 0.0 +0.0 0.0 +0.0 0.0 + +[pixel shader fail(sm>=6) todo] +RWTexture2D t : register(u1); + +float4 main() : sv_target +{ + return float4(t.Length, 0, 0); +} + +[test] +todo draw quad +probe (0, 0) rgba(2, 4, 0, 0) + +[uav 1] +stride 4 +size (buffer, 5) +0.0 0.0 0.0 0.0 0.0 + +[pixel shader fail(sm>=6) todo] +RWBuffer buff : register(u1); + +float4 main() : sv_target +{ + return float4(buff.Length, 0, 0, 0); +} + +[test] +todo draw quad +probe (0, 0) rgba(5, 0, 0, 0) + +[srv 0] +format r32-float +size (buffer, 4) +0.0 0.0 0.0 0.0 + +[pixel shader fail(sm>=6) todo] +StructuredBuffer buff; + +float4 main() : sv_target +{ + return float4(buff.Length, 0, 0, 0); +} + +[test] +todo draw quad +probe (0, 0) rgba(4, 0, 0, 0)