[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 all 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 all 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; }