diff --git a/Makefile.am b/Makefile.am index ad6a0a41..400e79e1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -68,6 +68,7 @@ vkd3d_shader_tests = \ tests/hlsl-clamp.shader_test \ tests/hlsl-comma.shader_test \ tests/hlsl-cross.shader_test \ + tests/hlsl-dot.shader_test \ tests/hlsl-duplicate-modifiers.shader_test \ tests/hlsl-for.shader_test \ tests/hlsl-function.shader_test \ diff --git a/tests/hlsl-dot.shader_test b/tests/hlsl-dot.shader_test new file mode 100644 index 00000000..cb117d15 --- /dev/null +++ b/tests/hlsl-dot.shader_test @@ -0,0 +1,96 @@ +[pixel shader] +uniform float4 x; +uniform float4 y; + +float4 main() : SV_TARGET +{ + return dot(x, y); +} + +[test] +uniform 0 float4 2.0 3.0 4.0 5.0 +uniform 4 float4 10.0 11.0 12.0 13.0 +todo draw quad +probe all rgba (166.0, 166.0, 166.0, 166.0) + +[pixel shader] +uniform float2 x; +uniform float4 y; + +float4 main() : SV_TARGET +{ + return dot(x, y); +} + +[test] +uniform 0 float4 2.0 3.0 0.0 0.0 +uniform 4 float4 10.0 11.0 12.0 13.0 +todo draw quad +probe all rgba (53.0, 53.0, 53.0, 53.0) + +[pixel shader] +uniform float x; +uniform float4 y; + +float4 main() : SV_TARGET +{ + return dot(x, y); +} + +[test] +uniform 0 float4 2.0 0.0 0.0 0.0 +uniform 4 float4 10.0 11.0 12.0 13.0 +todo draw quad +probe all rgba (92.0, 92.0, 92.0, 92.0) + +[pixel shader] +uniform float x; +uniform float y; + +float4 main() : SV_TARGET +{ + return dot(x, y); +} + +[test] +% Account for both the SM1 and SM4 uniform layout +uniform 0 float4 2.0 3.0 0.0 0.0 +uniform 4 float4 3.0 0.0 0.0 0.0 +todo draw quad +probe all rgba (6.0, 6.0, 6.0, 6.0) + +[pixel shader fail] +uniform float1x1 x; +uniform float4 y; + +float4 main() : SV_TARGET +{ + return dot(x, y); +} + +[pixel shader fail] +uniform float1x4 x; +uniform float4 y; + +float4 main() : SV_TARGET +{ + return dot(x, y); +} + +[pixel shader fail] +uniform float4x1 x; +uniform float4 y; + +float4 main() : SV_TARGET +{ + return dot(x, y); +} + +[pixel shader fail] +uniform float4x4 x; +uniform float4 y; + +float4 main() : SV_TARGET +{ + return dot(x, y); +}