[pixel shader fail]
/* The same function signature cannot be defined twice. */

float func(int arg)
{
    return 0.1;
}

float func(int arg)
{
    return 0.1;
}

float4 main() : sv_target
{
    return 0;
}


[pixel shader todo]
/* Test a basic overload. */
float func(int arg)
{
    return 0.1;
}

float func(uint arg)
{
    return 0.2;
}

float4 main() : sv_target
{
    int i = 1;
    uint u = 1;
    return float4(func(i), func(u), func(int2(1, 1)), func(uint2(1, 1)));
}

[test]
todo(sm<6) draw quad
probe (0, 0) rgba (0.1, 0.2, 0.1, 0.2)


[pixel shader fail todo]
float func(int arg)
{
    return 1.0;
}

float func(uint arg)
{
    return 2.0;
}

float4 main() : sv_target
{
    return func(3); // whether 3 is signed or unsigned is unspecified.
}


[pixel shader todo]
float func(int arg)
{
    return 1.0;
}

float func(uint arg)
{
    return 2.0;
}

float4 main() : sv_target
{
    int a = 3;
    uint b = 3l;

    return float4(func(a), func(b), func(3u), func(3lu));
}

[test]
todo(sm<6) draw quad
todo(sm<6) probe (0,0) rgba (1.0, 2.0, 2.0, 2.0)


% float and float1 can be defined separately...

[pixel shader]
void func(float arg) {}
void func(float1 arg) {}

float4 main() : sv_target
{
    return 1.0;
}


% ...but invoking them is considered ambiguous and fails.

[pixel shader fail todo]

void func(float arg) {}
void func(float1 arg) {}

float4 main() : sv_target
{
    float x = 1.0;
    func(x);
    return 1.0;
}

[pixel shader fail todo]

void func(float arg) {}
void func(float1 arg) {}

float4 main() : sv_target
{
    float1 x = {1.0};
    func(x);
    return 1.0;
}


% This holds true even if one variant isn't actually defined.

[pixel shader fail todo]

void func(float arg);
void func(float1 arg) {}

float4 main() : sv_target
{
    float1 x = {1.0};
    func(x);
    return 1.0;
}