yum-mirror/slang

Making it easier to work with shaders

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

James Helferty (NVIDIA)Enable metal tests (#8446)8086adc90

master
3.4 KiB105 linesraw
1//TEST:SIMPLE(filecheck=METAL): -target metal -stage compute -entry computeMain
2//TEST:SIMPLE(filecheck=METAL_FLOAT): -target metal -stage compute -entry computeMain -DFLOAT
3//TEST:SIMPLE(filecheck=METALLIB): -target metallib -stage compute -entry computeMain
4
5// Test framework does not support RWBuffer
6// TODO: github issue #8456
7
8
9// METAL_FLOAT: floating point atomic operation
10
11//METALLIB: @computeMain
12
13RWBuffer<uint> uintBuffer;
14RWBuffer<int> intBuffer;
15RWBuffer<float> floatBuffer;
16
17void test()
18{
19    int valInt = 1;
20    int originalValueInt;
21    int compareValueInt = 1;
22
23    uint valUInt = 1;
24    uint originalValueUInt;
25    int compareValueUInt = 1;
26
27    float valFloat = 1.0f;
28    float originalValueFloat;
29
30#ifdef FLOAT
31    //float
32	InterlockedExchange(floatBuffer[0], valFloat);
33	InterlockedExchange(floatBuffer[0], valFloat, originalValueFloat);
34#endif //FLOAT
35 
36    // buffer
37// METAL: ->atomic_fetch_add
38// METAL: ->atomic_fetch_and
39// METAL: ->atomic_fetch_max
40// METAL: ->atomic_fetch_min
41// METAL: ->atomic_fetch_or
42// METAL: ->atomic_fetch_xor
43// METAL: ->atomic_fetch_add
44// METAL: ->atomic_fetch_and
45// METAL: ->atomic_fetch_max
46// METAL: ->atomic_fetch_min
47// METAL: ->atomic_fetch_or
48// METAL: ->atomic_fetch_xor
49// METAL: ->atomic_exchange
50// METAL: ->atomic_compare_exchange_weak
51// METAL: ->atomic_compare_exchange_weak
52
53// METAL: ->atomic_fetch_add
54// METAL: ->atomic_fetch_and
55// METAL: ->atomic_fetch_max
56// METAL: ->atomic_fetch_min
57// METAL: ->atomic_fetch_or
58// METAL: ->atomic_fetch_xor
59// METAL: ->atomic_fetch_add
60// METAL: ->atomic_fetch_and
61// METAL: ->atomic_fetch_max
62// METAL: ->atomic_fetch_min
63// METAL: ->atomic_fetch_or
64// METAL: ->atomic_fetch_xor
65// METAL: ->atomic_exchange
66// METAL: ->atomic_compare_exchange_weak
67// METAL: ->atomic_compare_exchange_weak
68	InterlockedAdd(intBuffer[0], valInt);
69	InterlockedAnd(intBuffer[0], valInt);
70	InterlockedMax(intBuffer[0], valInt);
71	InterlockedMin(intBuffer[0], valInt);
72	InterlockedOr(intBuffer[0], valInt);
73	InterlockedXor(intBuffer[0], valInt);
74	InterlockedAdd(intBuffer[0], valInt, originalValueInt);
75	InterlockedAnd(intBuffer[0], valInt, originalValueInt);
76	InterlockedMax(intBuffer[0], valInt, originalValueInt);
77	InterlockedMin(intBuffer[0], valInt, originalValueInt);
78	InterlockedOr(intBuffer[0], valInt, originalValueInt);
79	InterlockedXor(intBuffer[0], valInt, originalValueInt);
80	InterlockedExchange(intBuffer[0], valInt, originalValueInt);
81	InterlockedCompareExchange(intBuffer[0], valInt, compareValueInt, originalValueInt);
82	InterlockedCompareStore(intBuffer[0], valInt, compareValueUInt);
83
84	InterlockedAdd(uintBuffer[0], valUInt);
85	InterlockedAnd(uintBuffer[0], valUInt);
86	InterlockedMax(uintBuffer[0], valUInt);
87	InterlockedMin(uintBuffer[0], valUInt);
88	InterlockedOr(uintBuffer[0], valUInt);
89	InterlockedXor(uintBuffer[0], valUInt);
90	InterlockedAdd(uintBuffer[0], valUInt, originalValueUInt);
91	InterlockedAnd(uintBuffer[0], valUInt, originalValueUInt);
92	InterlockedMax(uintBuffer[0], valUInt, originalValueUInt);
93	InterlockedMin(uintBuffer[0], valUInt, originalValueUInt);
94	InterlockedOr(uintBuffer[0], valUInt, originalValueUInt);
95	InterlockedXor(uintBuffer[0], valUInt, originalValueUInt);
96	InterlockedExchange(uintBuffer[0], valUInt, originalValueUInt);
97	InterlockedCompareExchange(uintBuffer[0], valUInt, compareValueUInt, originalValueUInt);
98	InterlockedCompareStore(uintBuffer[0], valUInt, compareValueUInt);
99}
100
101[numthreads(1, 1, 1)]
102void computeMain()
103{
104    test();
105}