yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

skallweitNVenable more metal tests (#4326)712ce653d

master
1007 B50 linesraw
1//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
2//TEST(compute,vulkan):COMPARE_COMPUTE_EX:-vk -slang -compute -shaderobj
3
4// Confirm that a generic method marked `[mutating]`
5// produces an `inout` parameter for `this`.
6
7interface IGenerator
8{
9    [mutating] int generate();
10}
11
12struct SimpleGenerator : IGenerator
13{
14    int state = 0;
15
16    [mutating] int generate() { return state++; }
17}
18
19
20struct Reducer
21{
22    int state = 0;
23    [mutating] void update<S : IGenerator>(inout S g)
24    {
25        state = (state << 8) | state;
26        state = state + g.generate();
27    }
28}
29
30int test(int val)
31{
32    SimpleGenerator g = { 0 };
33    Reducer r = { val+1 };
34
35    r.update(g);
36    r.update(g);
37
38    return r.state;
39}
40
41//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out, name outputBuffer
42RWStructuredBuffer<int> outputBuffer;
43
44[numthreads(4, 1, 1)]
45void computeMain(int3 dispatchThreadID : SV_DispatchThreadID)
46{
47    int tid = dispatchThreadID.x;
48    int val = test(tid);
49    outputBuffer[tid] = val;
50}