From: Francisco Casas fcasas@codeweavers.com
--- Makefile.am | 1 + .../state-block-function-syntax.shader_test | 100 ++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 tests/hlsl/state-block-function-syntax.shader_test
diff --git a/Makefile.am b/Makefile.am index 68e8642e0..920c3de0c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -185,6 +185,7 @@ vkd3d_shader_tests = \ tests/hlsl/smoothstep.shader_test \ tests/hlsl/sqrt.shader_test \ tests/hlsl/srv-buffers.shader_test \ + tests/hlsl/state-block-function-syntax.shader_test \ tests/hlsl/state-block-syntax.shader_test \ tests/hlsl/static-initializer.shader_test \ tests/hlsl/step.shader_test \ diff --git a/tests/hlsl/state-block-function-syntax.shader_test b/tests/hlsl/state-block-function-syntax.shader_test new file mode 100644 index 000000000..773b37429 --- /dev/null +++ b/tests/hlsl/state-block-function-syntax.shader_test @@ -0,0 +1,100 @@ +% Unlike assignment syntax, only these names are allowed. +% The parameter count is also checked. +[pixel shader todo] +sampler sam +{ + SetBlendState(foo, bar, baz); // 3 parameters + SetDepthStencilState(foo, 2); // 2 parameters + SetRasterizerState(foo); // 1 parameter + SetVertexShader(vs); // 1 parameter + SetDomainShader(ds); // 1 paramter + SetHullShader(100); // 1 parameter + SetGeometryShader(foo + bar); // 1 parameter + SetPixelShader(ps1); // 1 parameter + SetComputeShader("random string"); // 1 parameter + OMSetRenderTargets(RTV0, RTV1, RTV2, RTV3, RTV4, RTV5, RTV6, RTV7, DSV); // 2 to 9 parameters +}; + +float4 main() : sv_target { return 0; } + + +[pixel shader fail(sm<6)] +sampler sam +{ + SetSomeotherState(); +}; + +float4 main() : sv_target { return 0; } + + +% It is allowed to use functions together with assignment syntax. +[pixel shader todo] +sampler sam +{ + SetDepthStencilState(foo, bar); + arbitrary_field = 42; +}; + +float4 main() : sv_target { return 0; } + + +% Test complex expression on the arguments, including function calls. +[pixel shader todo] +float4 addition(float4 a, float4 b) +{ + return a + b; +} + +sampler sam +{ + SetBlendState(addition(foo, bar), p + q, p / q); +}; + +float4 main() : sv_target { return 0; } + + +% Test the same thing on technique passes +[pixel shader todo] +technique tech1 +{ + pass pass1 + { + SetBlendState(foo, bar, baz); + SetDepthStencilState(foo, 2); + SetRasterizerState(foo); + SetVertexShader(vs); + } +} + +float4 main() : sv_target { return 0; } + + +% It is not allowed to call the functions to set state blocks on the rhs using the assignment syntax +% for state groups or passes. +[pixel shader fail(sm<6)] +float4 main() : sv_target { return 0; } + +technique +{ + pass + { + cat = SetPixelShader(foobar); + } +} + + +% It not allowed to call the functions to set states outside state blocks or passes. +[pixel shader fail] +DepthStencilState dss1 +{ + DepthEnable = false; + DepthWriteMask = Zero; + DepthFunc = Less; +}; + +float4 main() : sv_target +{ + SetDepthStencilState(NULL, dss1); + return 0; +} +