vkd3d/tests/hlsl/discard.shader_test

79 lines
1.6 KiB
Plaintext

[pixel shader todo(sm<4)]
uniform float4 x;
float4 main() : sv_target
{
if (x.x == 9.0f)
discard;
return x;
}
[test]
uniform 0 float4 1 2 3 4
todo(sm<4 | glsl) draw quad
probe all rgba (1, 2, 3, 4)
uniform 0 float4 9 8 7 6
todo(sm<4 | glsl) draw quad
probe all rgba (1, 2, 3, 4)
[require]
shader model >= 3.0
% Check that derivatives are still computed after discarding
% other pixels in the same quad
[pixel shader todo(sm<4)]
float4 main(float4 pos : sv_position) : sv_target
{
if (frac((floor(pos.x) + floor(pos.y)) / 2) == 0.5)
discard;
return float4(ddx(pos.x), ddx(pos.y), ddy(pos.x), ddy(pos.y));
}
[test]
todo(sm<4 | glsl) draw quad
probe (0, 0) rgba (1, 0, 0, 1)
probe (1, 0) rgba (1, 2, 3, 4)
probe (0, 1) rgba (1, 2, 3, 4)
probe (1, 1) rgba (1, 0, 0, 1)
probe (2, 0) rgba (1, 0, 0, 1)
probe (3, 0) rgba (1, 2, 3, 4)
probe (2, 1) rgba (1, 2, 3, 4)
probe (3, 1) rgba (1, 0, 0, 1)
[require]
shader model >= 5.0
[uav 1]
format r32 float
size (2d, 2, 1)
0.0 0.0
% Check that side effects stop happening after discard
[pixel shader]
uniform float4 x;
RWTexture2D<float> y : register(u1);
float4 main(float4 pos : sv_position) : sv_target
{
if (pos.x == 0.5 && pos.y == 0.5)
y[uint2(0, 0)] += 1;
if (x.x == 9.0f)
discard;
if (pos.x == 0.5 && pos.y == 0.5)
y[uint2(1, 0)] += 1;
return x;
}
[test]
uniform 0 float4 1 2 3 4
todo(glsl) draw quad
probe all rgba (1, 2, 3, 4)
probe uav 1 (0, 0) r (1.0)
probe uav 1 (1, 0) r (1.0)
uniform 0 float4 9 8 7 6
todo(glsl) draw quad
probe all rgba (1, 2, 3, 4)
probe uav 1 (0, 0) r (2.0)
probe uav 1 (1, 0) r (1.0)