yum-mirror/slang

Making it easier to work with shaders

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

Simon Kallweitupdate slang-rhi (#6587)ae1a5e408

master
16.0 KiB411 linesraw
1//TEST:SIMPLE(filecheck=CHECK_GLSL):  -allow-glsl -stage compute -entry computeMain -target glsl
2//TEST:SIMPLE(filecheck=CHECK_SPV):  -allow-glsl -stage compute -entry computeMain -target spirv -emit-spirv-directly
3//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl
4//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl -emit-spirv-directly
5
6//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer
7buffer MyBlockName2
8{
9    uint data[1];
10} outputBuffer;
11
12layout(local_size_x = 1) in;
13
14//TEST_INPUT: set image_1d = RWTexture1D(format=R32Sint, size=4, content=one, mipMaps = 1)
15uniform layout(binding=0,r32i) iimage1D image_1d;
16//TEST_INPUT: set image_buffer = RWTextureBuffer(format=R32Sint, stride=8, data=[1 1 1 1])
17uniform layout(binding=1,r32i) iimageBuffer image_buffer;
18//TEST_INPUT: set image_1dArray = RWTexture1D(format=R32Sint, size=4, content=one, mipMaps = 1, arrayLength=2)
19uniform layout(binding=2,r32i) iimage1DArray image_1dArray;
20//TEST_INPUT: set image_2d = RWTexture2D(format=R32Sint, size=4, content=one, mipMaps = 1)
21uniform layout(binding=3,r32i) iimage2D image_2d;
22//TEST_INPUT: set image_2dRect = RWTexture2D(format=R32Sint, size=4, content=one, mipMaps = 1)
23uniform layout(binding=4,r32i) iimage2DRect image_2dRect;
24//TEST_INPUT: set image_2dMultiSample = RWTexture2D(format=R32Sint, size=4, content=one, mipMaps = 1, sampleCount = two)
25uniform layout(binding=5,r32i) iimage2DMS image_2dMultiSample;
26//TEST_INPUT: set image_2dArray = RWTexture2D(format=R32Sint, size=4, content=one, mipMaps = 1, arrayLength=2)
27uniform layout(binding=6,r32i) iimage2DArray image_2dArray;
28//TEST_INPUT: set image_3d = RWTexture3D(format=R32Sint, size=4, content=one, mipMaps = 1)
29uniform layout(binding=7,r32i) iimage3D image_3d;
30//TEST_INPUT: set image_cube = RWTextureCube(format=R32Sint, size=4, content=one, mipMaps = 1)
31uniform layout(binding=8,r32i) iimageCube image_cube;
32//TEST_INPUT: set image_cubeArray = RWTextureCube(format=R32Sint, size=4, content=one, mipMaps = 1, arrayLength=2)
33uniform layout(binding=9,r32i) iimageCubeArray image_cubeArray;
34//TEST_INPUT: set image_2dMultiSampleArray = RWTexture2D(format=R32Sint, size=4, content=one, mipMaps = 1, arrayLength=2, sampleCount = two)
35uniform layout(binding=10,r32i) iimage2DMSArray image_2dMultiSampleArray;
36
37bool checkAllImageSize()
38{
39    return true
40        && imageSize(image_1d) == int(4)
41        && imageSize(image_buffer) == int(4)
42        && imageSize(image_1dArray) == ivec2(4, 2)
43        && imageSize(image_2d) == ivec2(4)
44        && imageSize(image_2dArray) == ivec3(4, 4, 2)
45        && imageSize(image_2dRect) == ivec2(4)
46        && imageSize(image_2dMultiSample) == ivec2(4)
47        && imageSize(image_3d) == ivec3(4)
48        && imageSize(image_cube) == ivec2(4)
49        && imageSize(image_cubeArray) == ivec3(4, 4, 2)
50        && imageSize(image_2dMultiSampleArray) == ivec3(4, 4, 2)
51        ;
52}
53bool checkAllImageLoad()
54{
55    return true
56        && imageLoad(image_1d, 0).x == 1
57        && imageLoad(image_buffer, 0).x == 1
58        && imageLoad(image_1dArray, ivec2(0)).x == 1
59        && imageLoad(image_2d, ivec2(0)).x == 1
60        && imageLoad(image_2dRect, ivec2(0)).x == 1
61        && imageLoad(image_2dMultiSample, ivec2(0), 1).x == 1
62        && imageLoad(image_2dArray, ivec3(0)).x == 1
63        && imageLoad(image_3d, ivec3(0)).x == 1
64        && imageLoad(image_cube, ivec3(0)).x == 1
65        && imageLoad(image_cubeArray, ivec3(0)).x == 1
66        && imageLoad(image_cubeArray, ivec3(0)).x == 1
67        && imageLoad(image_2dMultiSampleArray, ivec3(0), 1).x == 1
68        ;
69}
70bool resetAllImageValues()
71{
72    imageStore(image_1d, 0, ivec4(1));
73    imageStore(image_buffer, 0, ivec4(1));
74    imageStore(image_1dArray, ivec2(0), ivec4(1));
75    imageStore(image_2d, ivec2(0), ivec4(1));
76    imageStore(image_2dRect, ivec2(0), ivec4(1));
77    imageStore(image_2dMultiSample, ivec2(0), 1, ivec4(1));
78    imageStore(image_2dArray, ivec3(0), ivec4(1));
79    imageStore(image_3d, ivec3(0), ivec4(1));
80    imageStore(image_cube, ivec3(0), ivec4(1));
81    imageStore(image_cubeArray, ivec3(0), ivec4(1));
82    imageStore(image_2dMultiSampleArray, ivec3(0), 1, ivec4(1));
83    return true;
84}
85int load_image_1d()
86{
87    return imageLoad(image_1d, 0).x;
88}
89int load_image_buffer()
90{
91    return imageLoad(image_buffer, 0).x;
92}
93int load_image_1dArray()
94{
95    return imageLoad(image_1dArray, ivec2(0)).x;
96}
97int load_image_2d()
98{
99    return imageLoad(image_2d, ivec2(0)).x;
100}
101int load_image_2dRect()
102{
103    return imageLoad(image_2dRect, ivec2(0)).x;
104}
105int load_image_2dMultiSample()
106{
107    return imageLoad(image_2dMultiSample, ivec2(0), 1).x;
108}
109int load_image_2dArray()
110{
111    return imageLoad(image_2dArray, ivec3(0)).x;
112}
113int load_image_3d()
114{
115    return imageLoad(image_3d, ivec3(0)).x;
116}
117int load_image_cube()
118{
119    return imageLoad(image_cube, ivec3(0)).x;
120}
121int load_image_cubeArray()
122{
123    return imageLoad(image_cubeArray, ivec3(0)).x;
124}
125int load_image_2dMultiSampleArray()
126{
127    return imageLoad(image_2dMultiSampleArray, ivec3(0), 1).x;
128}
129// requires ImageLoad test to pass
130bool checkAllImageStore()
131{
132    bool loadCheck = true;
133
134    imageStore(image_1d, 0, ivec4(0));
135    loadCheck = loadCheck && load_image_1d() == 0;
136    imageStore(image_buffer, 0, ivec4(0));
137    loadCheck = loadCheck && load_image_buffer() == 0;
138    imageStore(image_1dArray, ivec2(0), ivec4(0));
139    loadCheck = loadCheck && load_image_1dArray() == 0;
140    imageStore(image_2d, ivec2(0), ivec4(0));
141    loadCheck = loadCheck && load_image_2d() == 0;
142    imageStore(image_2dRect, ivec2(0), ivec4(0));
143    loadCheck = loadCheck && load_image_2dRect() == 0;
144    imageStore(image_2dMultiSample, ivec2(0), 1, ivec4(0));
145    loadCheck = loadCheck && load_image_2dMultiSample() == 0;
146    imageStore(image_2dArray, ivec3(0), ivec4(0));
147    loadCheck = loadCheck && load_image_2dArray() == 0;
148    imageStore(image_3d, ivec3(0), ivec4(0));
149    loadCheck = loadCheck && load_image_3d() == 0;
150    imageStore(image_cube, ivec3(0), ivec4(0));
151    loadCheck = loadCheck && load_image_cube() == 0;
152    imageStore(image_cubeArray, ivec3(0), ivec4(0));
153    loadCheck = loadCheck && load_image_cubeArray() == 0;
154    imageStore(image_2dMultiSampleArray, ivec3(0), 1, ivec4(0));
155    loadCheck = loadCheck && load_image_2dMultiSampleArray() == 0;
156    resetAllImageValues();
157    return loadCheck;
158}
159bool checkAllImageSamples()
160{
161    resetAllImageValues();
162    return true
163        && imageSamples(image_2dMultiSample) == 2
164        && imageSamples(image_2dMultiSampleArray) == 2
165        ;
166}
167bool checkAllImageAtomicAdd()
168{
169    resetAllImageValues();
170    return true
171        && imageAtomicAdd(image_1d, 0, 0) == 1
172        && load_image_1d() == 1
173        && imageAtomicAdd(image_buffer, 0, 2) == 1
174        && load_image_buffer() == 3
175        && imageAtomicAdd(image_1dArray, ivec2(0), 0) == 1
176        && load_image_1dArray() == 1
177        && imageAtomicAdd(image_2d, ivec2(0), 2) == 1
178        && load_image_2d() == 3
179        && imageAtomicAdd(image_2dRect, ivec2(0), 2) == 1
180        && load_image_2dRect() == 3
181        && imageAtomicAdd(image_2dMultiSample, ivec2(0), 1, 2) == 1
182        && load_image_2dMultiSample() == 3
183        && imageAtomicAdd(image_2dArray, ivec3(0), 0) == 1
184        && load_image_2dArray() == 1
185        && imageAtomicAdd(image_3d, ivec3(0), 2) == 1
186        && load_image_3d() == 3
187        && imageAtomicAdd(image_cube, ivec3(0), 2) == 1
188        && load_image_cube() == 3
189        && imageAtomicAdd(image_cubeArray, ivec3(0), 2) == 1
190        && load_image_cubeArray() == 3
191        && imageAtomicAdd(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1
192        && load_image_2dMultiSampleArray() == 3
193        ;
194}
195bool checkAllImageAtomicExchange()
196{
197    resetAllImageValues();
198    return true
199        && imageAtomicExchange(image_1d, 0, 0) == 1
200        && load_image_1d() == 0
201        && imageAtomicExchange(image_buffer, 0, 2) == 1
202        && load_image_buffer() == 2
203        && imageAtomicExchange(image_1dArray, ivec2(0), 0) == 1
204        && load_image_1dArray() == 0
205        && imageAtomicExchange(image_2d, ivec2(0), 2) == 1
206        && load_image_2d() == 2
207        && imageAtomicExchange(image_2dRect, ivec2(0), 2) == 1
208        && load_image_2dRect() == 2
209        && imageAtomicExchange(image_2dMultiSample, ivec2(0), 1, 2) == 1
210        && load_image_2dMultiSample() == 2
211        && imageAtomicExchange(image_2dArray, ivec3(0), 0) == 1
212        && load_image_2dArray() == 0
213        && imageAtomicExchange(image_3d, ivec3(0), 2) == 1
214        && load_image_3d() == 2
215        && imageAtomicExchange(image_cube, ivec3(0), 2) == 1
216        && load_image_cube() == 2
217        && imageAtomicExchange(image_cubeArray, ivec3(0), 2) == 1
218        && load_image_cubeArray() == 2
219        && imageAtomicExchange(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1
220        && load_image_2dMultiSampleArray() == 2
221        ;
222}
223bool checkAllImageAtomicMin()
224{
225    resetAllImageValues();
226    return true
227        && imageAtomicMin(image_1d, 0, 0) == 1
228        && load_image_1d() == 0
229        && imageAtomicMin(image_buffer, 0, 2) == 1
230        && load_image_buffer() == 1
231        && imageAtomicMin(image_1dArray, ivec2(0), 0) == 1
232        && load_image_1dArray() == 0
233        && imageAtomicMin(image_2d, ivec2(0), 2) == 1
234        && load_image_2d() == 1
235        && imageAtomicMin(image_2dRect, ivec2(0), 2) == 1
236        && load_image_2dRect() == 1
237        && imageAtomicMin(image_2dMultiSample, ivec2(0), 1, 2) == 1
238        && load_image_2dMultiSample() == 1
239        && imageAtomicMin(image_2dArray, ivec3(0), 0) == 1
240        && load_image_2dArray() == 0
241        && imageAtomicMin(image_3d, ivec3(0), 2) == 1
242        && load_image_3d() == 1
243        && imageAtomicMin(image_cube, ivec3(0), 2) == 1
244        && load_image_cube() == 1
245        && imageAtomicMin(image_cubeArray, ivec3(0), 2) == 1
246        && load_image_cubeArray() == 1
247        && imageAtomicMin(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1
248        && load_image_2dMultiSampleArray() == 1
249        ;
250}
251bool checkAllImageAtomicMax()
252{
253    resetAllImageValues();
254    return true
255        && imageAtomicMax(image_1d, 0, 0) == 1
256        && load_image_1d() == 1
257        && imageAtomicMax(image_buffer, 0, 2) == 1
258        && load_image_buffer() == 2
259        && imageAtomicMax(image_1dArray, ivec2(0), 0) == 1
260        && load_image_1dArray() == 1
261        && imageAtomicMax(image_2d, ivec2(0), 2) == 1
262        && load_image_2d() == 2
263        && imageAtomicMax(image_2dRect, ivec2(0), 2) == 1
264        && load_image_2dRect() == 2
265        && imageAtomicMax(image_2dMultiSample, ivec2(0), 1, 2) == 1
266        && load_image_2dMultiSample() == 2
267        && imageAtomicMax(image_2dArray, ivec3(0), 0) == 1
268        && load_image_2dArray() == 1
269        && imageAtomicMax(image_3d, ivec3(0), 2) == 1
270        && load_image_3d() == 2
271        && imageAtomicMax(image_cube, ivec3(0), 2) == 1
272        && load_image_cube() == 2
273        && imageAtomicMax(image_cubeArray, ivec3(0), 2) == 1
274        && load_image_cubeArray() == 2
275        && imageAtomicMax(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1
276        && load_image_2dMultiSampleArray() == 2
277        ;
278}
279bool checkAllImageAtomicAnd()
280{
281    resetAllImageValues();
282    return true
283        && imageAtomicAnd(image_1d, 0, 1) == 1
284        && load_image_1d() == 1
285        && imageAtomicAnd(image_buffer, 0, 2) == 1
286        && load_image_buffer() == 0
287        && imageAtomicAnd(image_1dArray, ivec2(0), 1) == 1
288        && load_image_1dArray() == 1
289        && imageAtomicAnd(image_2d, ivec2(0), 2) == 1
290        && load_image_2d() == 0
291        && imageAtomicAnd(image_2dRect, ivec2(0), 2) == 1
292        && load_image_2dRect() == 0
293        && imageAtomicAnd(image_2dMultiSample, ivec2(0), 1, 2) == 1
294        && load_image_2dMultiSample() == 0
295        && imageAtomicAnd(image_2dArray, ivec3(0), 1) == 1
296        && load_image_2dArray() == 1
297        && imageAtomicAnd(image_3d, ivec3(0), 2) == 1
298        && load_image_3d() == 0
299        && imageAtomicAnd(image_cube, ivec3(0), 2) == 1
300        && load_image_cube() == 0
301        && imageAtomicAnd(image_cubeArray, ivec3(0), 2) == 1
302        && load_image_cubeArray() == 0
303        && imageAtomicAnd(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1
304        && load_image_2dMultiSampleArray() == 0
305        ;
306}
307bool checkAllImageAtomicOr()
308{
309    resetAllImageValues();
310    return true
311        && imageAtomicOr(image_1d, 0, 1) == 1
312        && load_image_1d() == 1
313        && imageAtomicOr(image_buffer, 0, 2) == 1
314        && load_image_buffer() == 3
315        && imageAtomicOr(image_1dArray, ivec2(0), 1) == 1
316        && load_image_1dArray() == 1
317        && imageAtomicOr(image_2d, ivec2(0), 2) == 1
318        && load_image_2d() == 3
319        && imageAtomicOr(image_2dRect, ivec2(0), 2) == 1
320        && load_image_2dRect() == 3
321        && imageAtomicOr(image_2dMultiSample, ivec2(0), 1, 2) == 1
322        && load_image_2dMultiSample() == 3
323        && imageAtomicOr(image_2dArray, ivec3(0), 1) == 1
324        && load_image_2dArray() == 1
325        && imageAtomicOr(image_3d, ivec3(0), 2) == 1
326        && load_image_3d() == 3
327        && imageAtomicOr(image_cube, ivec3(0), 2) == 1
328        && load_image_cube() == 3
329        && imageAtomicOr(image_cubeArray, ivec3(0), 2) == 1
330        && load_image_cubeArray() == 3
331        && imageAtomicOr(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1
332        && load_image_2dMultiSampleArray() == 3
333        ;
334}
335bool checkAllImageAtomicXor()
336{
337    resetAllImageValues();
338    return true
339        && imageAtomicXor(image_1d, 0, 1) == 1
340        && load_image_1d() == 0
341        && imageAtomicXor(image_buffer, 0, 2) == 1
342        && load_image_buffer() == 3
343        && imageAtomicXor(image_1dArray, ivec2(0), 1) == 1
344        && load_image_1dArray() == 0
345        && imageAtomicXor(image_2d, ivec2(0), 2) == 1
346        && load_image_2d() == 3
347        && imageAtomicXor(image_2dRect, ivec2(0), 2) == 1
348        && load_image_2dRect() == 3
349        && imageAtomicXor(image_2dMultiSample, ivec2(0), 1, 2) == 1
350        && load_image_2dMultiSample() == 3
351        && imageAtomicXor(image_2dArray, ivec3(0), 1) == 1
352        && load_image_2dArray() == 0
353        && imageAtomicXor(image_3d, ivec3(0), 2) == 1
354        && load_image_3d() == 3
355        && imageAtomicXor(image_cube, ivec3(0), 2) == 1
356        && load_image_cube() == 3
357        && imageAtomicXor(image_cubeArray, ivec3(0), 2) == 1
358        && load_image_cubeArray() == 3
359        && imageAtomicXor(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1
360        && load_image_2dMultiSampleArray() == 3
361        ;
362}
363bool checkAllImageAtomicCompSwap()
364{
365    resetAllImageValues();
366    return true
367        && imageAtomicCompSwap(image_1d, 0, 0, 2) == 1
368        && load_image_1d() == 1
369        && imageAtomicCompSwap(image_buffer, 0, 1, 2) == 1
370        && load_image_buffer() == 2
371        && imageAtomicCompSwap(image_1dArray, ivec2(0), 0, 2) == 1
372        && load_image_1dArray() == 1
373        && imageAtomicCompSwap(image_2d, ivec2(0), 1, 2) == 1
374        && load_image_2d() == 2
375        && imageAtomicCompSwap(image_2dRect, ivec2(0), 1, 2) == 1
376        && load_image_2dRect() == 2
377        && imageAtomicCompSwap(image_2dMultiSample, ivec2(0), 1, 1, 2) == 1
378        && load_image_2dMultiSample() == 2
379        && imageAtomicCompSwap(image_2dArray, ivec3(0), 0, 2) == 1
380        && load_image_2dArray() == 1
381        && imageAtomicCompSwap(image_3d, ivec3(0), 1, 2) == 1
382        && load_image_3d() == 2
383        && imageAtomicCompSwap(image_cube, ivec3(0), 1, 2) == 1
384        && load_image_cube() == 2
385        && imageAtomicCompSwap(image_cubeArray, ivec3(0), 1, 2) == 1
386        && load_image_cubeArray() == 2
387        && imageAtomicCompSwap(image_2dMultiSampleArray, ivec3(0), 1, 1, 2) == 1
388        && load_image_2dMultiSampleArray() == 2
389        ;
390}
391
392// CHECK_GLSL: void main(
393// CHECK_SPV: OpEntryPoint
394void computeMain()
395{
396    outputBuffer.data[0] = true
397        && checkAllImageSize()
398        && checkAllImageLoad()
399        && checkAllImageStore()
400        && checkAllImageSamples()
401        && checkAllImageAtomicAdd()
402        && checkAllImageAtomicExchange()
403        && checkAllImageAtomicMin()
404        && checkAllImageAtomicMax()
405        && checkAllImageAtomicAnd()
406        && checkAllImageAtomicOr()
407        && checkAllImageAtomicXor()
408        && checkAllImageAtomicCompSwap()
409        ;
410    // BUF: 1
411}