mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
19fd43214b
Also, properly casting it to float in lower_ternary() for SM1 avoids creating ABS and NEG on bool types.
114 lines
2.6 KiB
Plaintext
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]
|
|
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(glsl) draw quad
|
|
probe all rgba (0.0, 0.0, 0.0, 0.0)
|
|
|
|
|
|
[vertex shader]
|
|
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(glsl) 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(glsl) draw quad
|
|
probe all rgba (1.0, 0.0, 0.0, 1.0)
|
|
|
|
|
|
[vertex shader]
|
|
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(glsl) 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(glsl) 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]
|
|
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(glsl) 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(glsl) draw quad
|
|
probe all rgba (0.1, 0.1, 0.1, 0.1)
|