vkd3d/tests/hlsl/state-block-function-syntax.shader_test

118 lines
2.3 KiB
Plaintext
Raw Normal View History

% Unlike assignment syntax, only these names are allowed.
% The parameter count is also checked.
[pixel shader]
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(ARG); // 1 parameter
OMSetRenderTargets(RTV0, RTV1, RTV2, RTV3, RTV4, RTV5, RTV6, RTV7, DSV); // 2 to 9 parameters
};
float4 main() : sv_target { return 0; }
[pixel shader]
sampler sam
{
SetComputeShader("random string");
};
float4 main() : sv_target { return 0; }
[pixel shader fail(sm<6)]
sampler sam
{
SetSomeotherState();
};
float4 main() : sv_target { return 0; }
[pixel shader fail(sm<6)]
sampler sam
{
Setblendstate(1, 2, 3); // Test case-sensitivity.
};
float4 main() : sv_target { return 0; }
% It is allowed to use functions together with assignment syntax.
[pixel shader]
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]
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]
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;
}