[require]
shader model >= 4.0

[dsv]
size (2d, 640, 480)

[pixel shader]
float depth;

float main() : SV_Depth
{
    return depth;
}

[test]
uniform 0 float 0.0
clear dsv 1.0
depth less
draw quad
probe dsv (0,0) f32(0.0)

uniform 0 float 0.75
clear dsv 1.0
draw quad
probe dsv (0,0) f32(0.75)

clear dsv 0.5
depth greater
draw quad
probe dsv (0,0) f32(0.75)

depth less
clear dsv 0.5
draw quad
probe dsv (0,0) f32(0.5)


[require]
shader model >= 5.0

[rtv 0]
format r32g32b32a32-float
size (2d, 640, 480)

[vertex shader]
float2 depth;

void main(float4 in_position : POSITION, out float4 out_position : SV_Position)
{
    out_position = in_position;
    out_position.z = depth.x;
}

[pixel shader todo]
float2 depth;

float4 main(out float out_depth : SV_DepthLessEqual) : SV_Target
{
    out_depth = depth.y;
    return float4(0.0f, 1.0f, 0.0f, 1.0f);
}

[test]
uniform 0 float4 0.75 0.75 0.0 0.0
clear rtv 0 1.0 1.0 1.0 1.0
clear dsv 0.5
depth greater equal
todo(sm<6 | msl) draw quad
probe (0, 0) f32(0.0, 1.0, 0.0, 1.0)
probe dsv (0,0) f32(0.75)

uniform 0 float4 0.75 0.375 0.0 0.0
clear rtv 0 1.0 1.0 1.0 1.0
clear dsv 0.5
todo(sm<6 | msl) draw quad
probe (0, 0) f32(1.0, 1.0, 1.0, 1.0)
probe dsv (0,0) f32(0.5)


[pixel shader todo]
float2 depth;

float4 main(out float out_depth : SV_DepthGreaterEqual) : SV_Target
{
    out_depth = depth.y;
    return float4(0.0f, 1.0f, 0.0f, 1.0f);
}

[test]
uniform 0 float4 0.75 0.75 0.0 0.0
clear rtv 0 1.0 1.0 1.0 1.0
clear dsv 0.5
depth greater equal
todo(sm<6 | msl) draw quad
probe (0, 0) f32(0.0, 1.0, 0.0, 1.0)
probe dsv (0,0) f32(0.75)

uniform 0 float4 0.375 0.625 0.0 0.0
clear rtv 0 1.0 1.0 1.0 1.0
clear dsv 0.5
todo(sm<6 | msl) draw quad
probe (0, 0) f32(0.0, 1.0, 0.0, 1.0)
probe dsv (0,0) f32(0.625)

uniform 0 float4 0.375 0.375 0.0 0.0
clear rtv 0 1.0 1.0 1.0 1.0
clear dsv 0.5
todo(sm<6 | msl) draw quad
probe (0, 0) f32(1.0, 1.0, 1.0, 1.0)
probe dsv (0,0) f32(0.5)
