vkd3d/tests/hlsl/vertex-shader-ops.shader_test
2024-03-11 22:09:44 +01:00

114 lines
2.6 KiB
Plaintext

% The main objective of this test is to see if operations for SM1 vertex shaders work, because they
% have a different instruction set than pixel shaders.
% Considerations so that the vertex shader output matches the pixel shader input properly on all
% backends:
% - sv_position must be the last field in the output signature.
% - the d3d9 backend, on Windows, clamps the value of the COLORX semantics before passing it to
% the pixel shader, so their values must be between 0.0 and 1.0.
[pixel shader]
float4 main(in float4 res : COLOR1) : sv_target
{
return res;
}
% Check that -0.0f is not less than 0.0f
[vertex shader todo(sm<4)]
float a;
void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
{
out_pos = pos;
res = -0.0f < a;
}
[test]
if(sm<4) uniform 0 float 0.0
if(sm>=4) uniform 0 float4 0.0 0.0 0.0 0.0
todo(sm<4) draw quad
probe all rgba (0.0, 0.0, 0.0, 0.0)
[vertex shader todo(sm<4)]
int a, b;
void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
{
out_pos = pos;
res.x = a == b;
res.y = a != b;
res.z = a > b;
res.w = b >= a;
}
[test]
if(sm<4) uniform 0 float 3
if(sm<4) uniform 4 float 4
if(sm>=4) uniform 0 int4 3 4 0 0
todo(sm<4) draw quad
probe all rgba (0.0, 1.0, 0.0, 1.0)
if(sm<4) uniform 0 float -2
if(sm<4) uniform 4 float -2
if(sm>=4) uniform 0 int4 -2 -2 0 0
todo(sm<4) draw quad
probe all rgba (1.0, 0.0, 0.0, 1.0)
[vertex shader todo(sm<4)]
int a, b;
void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
{
out_pos = pos;
res.x = a && b;
res.y = a || b;
res.z = b && a;
res.w = b || a;
}
[test]
if(sm<4) uniform 0 float 0
if(sm<4) uniform 4 float 2
if(sm>=4) uniform 0 int4 0 2 0 0
todo(sm<4) draw quad
probe all rgba (0.0, 1.0, 0.0, 1.0)
if(sm<4) uniform 0 float -2
if(sm<4) uniform 4 float 8
if(sm>=4) uniform 0 int4 -2 8 0 0
todo(sm<4) draw quad
probe all rgba (1.0, 1.0, 1.0, 1.0)
[require]
% The ternary operator works differently in sm6. See sm6-ternary.shader_test.
shader model < 6.0
[vertex shader todo(sm<4)]
int a, b, c;
void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
{
out_pos = pos;
res = a ? b/1000.0 : c/1000.0;
}
[test]
if(sm<4) uniform 0 float 0
if(sm<4) uniform 4 float 100
if(sm<4) uniform 8 float 200
if(sm>=4) uniform 0 int4 0 100 200 0
todo(sm<4) draw quad
probe all rgba (0.2, 0.2, 0.2, 0.2)
if(sm<4) uniform 0 float -4
if(sm<4) uniform 4 float 100
if(sm<4) uniform 8 float 200
if(sm>=4) uniform 0 int4 -4 100 200 0
todo(sm<4) draw quad
probe all rgba (0.1, 0.1, 0.1, 0.1)