forked from shader-slang/slang
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoverload-ambiguous-2.slang
67 lines (55 loc) · 1.77 KB
/
overload-ambiguous-2.slang
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// https://github.com/shader-slang/slang/issues/4476
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-cuda -compute -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-cpu -compute -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-slang -compute -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-slang -compute -dx12 -shaderobj
//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-vk -compute -shaderobj
//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer
RWStructuredBuffer<uint> outputBuffer;
namespace A
{
struct Struct1<let SIZE : uint>
{
uint data;
};
Struct1<Z1> myFunc<let Z0 : uint, let Z1 : uint>(Struct1<Z0> inputS1)
{
Struct1<Z1> s1;
s1.data = inputS1.data + 2U;
return s1;
}
};
A::Struct1<Z1> myFunc<let Z0 : uint, let Z1 : uint>(A::Struct1<Z0> inputS1)
{
A::Struct1<Z1> s1;
s1.data = inputS1.data + 5U;
return s1;
}
namespace A
{
struct Struct2<let SIZE : uint>
{
Struct1<SIZE> s1;
}
Struct2<Z1> myFunc<let Z0 : uint, let Z1 : uint>(Struct2<Z0> inputS2)
{
Struct2<Z1> s2;
// We want to cover a corner case in our compiler where:
// when looking up "myFunc", the compiler should find
// Struct1<Z1> A::myFunc<let Z0 : uint, let Z1 : uint>(Struct1<Z0> inputS1)
// and it won't be ambiguous with the global "myFunc".
s2.s1 = myFunc<Z0, Z1>(inputS2.s1);
return s2;
}
};
[numthreads(1, 1, 1)]
[shader("compute")]
void computeMain(uint3 threadID: SV_DispatchThreadID)
{
using namespace A;
Struct2<10> input = {{threadID.x}};
Struct2<20> output;
output = myFunc<10, 20>(input);
outputBuffer[0] = output.s1.data;
// BUF: 2
}