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
7.5 KiB278 linesraw
1//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -shaderobj -output-using-type
2//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-slang -compute -dx12 -profile cs_6_0 -shaderobj -output-using-type -xslang -DDX12
3//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-vk -emit-spirv-directly -compute -shaderobj -output-using-type -render-feature hardware-device -xslang -DVK
4//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-vk -emit-spirv-via-glsl -compute -shaderobj -output-using-type -render-feature hardware-device -xslang -DVK -xslang -minimum-slang-optimization
5//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-vk -emit-spirv-via-glsl -compute -shaderobj -output-using-type -render-feature hardware-device -xslang -DVK
6//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-cuda -compute -shaderobj -output-using-type
7//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-metal -compute -shaderobj -output-using-type
8
9
10//TEST_INPUT:ubuffer(data=[0 1 2 3], stride=4):name=uintBuffer
11RWStructuredBuffer<uint> uintBuffer;
12//TEST_INPUT:ubuffer(data=[0 1 2 3], stride=4):name=intBuffer
13RWStructuredBuffer<int> intBuffer;
14
15groupshared uint shareMemUI[4];
16groupshared int shareMemI[4];
17
18//TEST_INPUT: ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer
19RWStructuredBuffer<float> outputBuffer;
20
21[numthreads(4, 1, 1)]
22void computeMain(uint groupIndex : SV_GroupIndex, int3 dispatchThreadID: SV_DispatchThreadID)
23{
24    shareMemUI = { 0, 0, 0, 0 };
25    shareMemI = { 0, 0, 0, 0 };
26    AllMemoryBarrierWithGroupSync();
27    int idx = dispatchThreadID.x;
28    float val = 0.0f;
29
30    // InterlockedAdd
31    InterlockedAdd(shareMemUI[idx], 1);
32    val += shareMemUI[idx];
33
34    InterlockedAdd(shareMemI[idx],  2);
35    val += shareMemI[idx];
36
37    InterlockedAdd(uintBuffer[idx], 1);
38    val += uintBuffer[idx];
39
40    InterlockedAdd(intBuffer[idx], 2);
41    val += intBuffer[idx];
42
43    InterlockedAdd(shareMemI[idx], -1);
44    val += shareMemI[idx];
45
46    InterlockedAdd(intBuffer[idx], -1);
47    val += intBuffer[idx];
48
49    // InterlockedAdd - original_value
50    uint origui = 0;
51    InterlockedAdd(shareMemUI[idx], 1, origui);
52    val += shareMemUI[idx];
53    val += origui;
54
55    int origi = 0;
56    InterlockedAdd(shareMemI[idx], 2, origi);
57    val += shareMemI[idx];
58    val += origi;
59
60    InterlockedAdd(uintBuffer[idx], 1, origui);
61    val += uintBuffer[idx];
62    val += origui;
63
64    InterlockedAdd(intBuffer[idx], 2, origi);
65    val += intBuffer[idx];
66    val += origi;
67
68    InterlockedAdd(shareMemI[idx], -1, origi);
69    val += shareMemI[idx];
70    val += origi;
71
72    InterlockedAdd(intBuffer[idx], -1, origi);
73    val += intBuffer[idx];
74    val += origi;
75
76    // InterlockedAnd
77    InterlockedAnd(shareMemUI[idx], 255);
78    val += shareMemUI[idx];
79
80    InterlockedAnd(shareMemI[idx], 255);
81    val += shareMemI[idx];
82
83    InterlockedAnd(uintBuffer[idx], 255);
84    val += uintBuffer[idx];
85
86    InterlockedAnd(intBuffer[idx], 255);
87    val += intBuffer[idx];
88
89    // InterlockedAnd - original_value
90    InterlockedAnd(shareMemUI[idx], 255, origui);
91    val += shareMemUI[idx];
92    val += origui;
93
94    InterlockedAnd(shareMemI[idx], 255, origi);
95    val += shareMemI[idx];
96    val += origi;
97
98    InterlockedAnd(uintBuffer[idx], 255, origui);
99    val += uintBuffer[idx];
100    val += origui;
101
102    InterlockedAnd(intBuffer[idx], 255, origi);
103    val += intBuffer[idx];
104    val += origi;
105
106    // InterlockedCompareExchange
107    InterlockedCompareExchange(shareMemUI[idx], 1, 0, origui);
108    val += shareMemUI[idx];
109    val += origui;
110
111    InterlockedCompareExchange(shareMemI[idx], 1, 0, origi);
112    val += shareMemI[idx];
113    val += origi;
114
115    InterlockedCompareExchange(uintBuffer[idx], 1, 0, origui);
116    val += uintBuffer[idx];
117    val += origui;
118
119    InterlockedCompareExchange(intBuffer[idx], 1, 0, origi);
120    val += intBuffer[idx];
121    val += origi;
122
123    // InterlockedCompareStore
124    InterlockedCompareStore(shareMemUI[idx], 255, 0);
125    val += shareMemUI[idx];
126
127    InterlockedCompareStore(shareMemI[idx], 255, 0);
128    val += shareMemI[idx];
129
130    InterlockedCompareStore(uintBuffer[idx], 255, 0);
131    val += uintBuffer[idx];
132
133    InterlockedCompareStore(intBuffer[idx], 255, 0);
134    val += intBuffer[idx];
135
136    // InterlockedExchange
137    InterlockedExchange(shareMemUI[idx], 1, origui);
138    val += shareMemUI[idx];
139    val += origui;
140
141    InterlockedExchange(shareMemI[idx], 1, origi);
142    val += shareMemI[idx];
143    val += origi;
144
145    InterlockedExchange(uintBuffer[idx], 1, origui);
146    val += uintBuffer[idx];
147    val += origui;
148
149    InterlockedExchange(intBuffer[idx], 1, origi);
150    val += intBuffer[idx];
151    val += origi;
152
153    // InterlockedMax
154    InterlockedMax(shareMemUI[idx], 0);
155    val += shareMemUI[idx];
156
157    InterlockedMax(shareMemI[idx], 0);
158    val += shareMemI[idx];
159
160    InterlockedMax(uintBuffer[idx], 0);
161    val += uintBuffer[idx];
162
163    InterlockedMax(intBuffer[idx], 0);
164    val += intBuffer[idx];
165
166    // InterlockedMax - original_value
167    InterlockedMax(shareMemUI[idx], 0, origui);
168    val += shareMemUI[idx];
169    val += origui;
170
171    InterlockedMax(shareMemI[idx], 0, origi);
172    val += shareMemI[idx];
173    val += origi;
174
175    InterlockedMax(uintBuffer[idx], 0, origui);
176    val += uintBuffer[idx];
177    val += origui;
178
179    InterlockedMax(intBuffer[idx], 0, origi);
180    val += intBuffer[idx];
181    val += origi;
182
183    // InterlockedMin
184    InterlockedMin(shareMemUI[idx], 0);
185    val += shareMemUI[idx];
186
187    InterlockedMin(shareMemI[idx], 0);
188    val += shareMemI[idx];
189
190    InterlockedMin(uintBuffer[idx], 0);
191    val += uintBuffer[idx];
192
193    InterlockedMin(intBuffer[idx], 0);
194    val += intBuffer[idx];
195
196    // InterlockedMin - original_value
197    InterlockedMin(shareMemUI[idx], 0, origui);
198    val += shareMemUI[idx];
199    val += origui;
200
201    InterlockedMin(shareMemI[idx], 0, origi);
202    val += shareMemI[idx];
203    val += origi;
204
205    InterlockedMin(uintBuffer[idx], 0, origui);
206    val += uintBuffer[idx];
207    val += origui;
208
209    InterlockedMin(intBuffer[idx], 0, origi);
210    val += intBuffer[idx];
211    val += origi;
212
213    // InterlockedOr
214    InterlockedOr(shareMemUI[idx], 2);
215    val += shareMemUI[idx];
216
217    InterlockedOr(shareMemI[idx], 4);
218    val += shareMemI[idx];
219
220    InterlockedOr(uintBuffer[idx], 6);
221    val += uintBuffer[idx];
222
223    InterlockedOr(intBuffer[idx], 8);
224    val += intBuffer[idx];
225
226    // InterlockedOr - original_value
227    InterlockedOr(shareMemUI[idx], 2, origui);
228    val += shareMemUI[idx];
229    val += origui;
230
231    InterlockedOr(shareMemI[idx], 4, origi);
232    val += shareMemI[idx];
233    val += origi;
234
235    InterlockedOr(uintBuffer[idx], 6, origui);
236    val += uintBuffer[idx];
237    val += origui;
238
239    InterlockedOr(intBuffer[idx], 8, origi);
240    val += intBuffer[idx];
241    val += origi;
242
243    // InterlockedXor
244    InterlockedXor(shareMemUI[idx], 2);
245    val += shareMemUI[idx];
246
247    InterlockedXor(shareMemI[idx], 4);
248    val += shareMemI[idx];
249
250    InterlockedXor(uintBuffer[idx], 6);
251    val += uintBuffer[idx];
252
253    InterlockedXor(intBuffer[idx], 8);
254    val += intBuffer[idx];
255
256    // InterlockedXor - original_value
257    InterlockedXor(shareMemUI[idx], 2, origui);
258    val += shareMemUI[idx];
259    val += origui;
260
261    InterlockedXor(shareMemI[idx], 4, origi);
262    val += shareMemI[idx];
263    val += origi;
264
265    InterlockedXor(uintBuffer[idx], 6, origui);
266    val += uintBuffer[idx];
267    val += origui;
268
269    InterlockedXor(intBuffer[idx], 8, origi);
270    val += intBuffer[idx];
271    val += origi;
272
273    // BUF:      184
274    // BUF-NEXT: 207
275    // BUF-NEXT: 230
276    // BUF-NEXT: 253
277    outputBuffer[idx] = val;
278}