yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
ae1a5e408
master
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=R32Uint, size=4, content=one, mipMaps = 1) 15uniform layout(binding=0,r32ui) uimage1D image_1d; 16//TEST_INPUT: set image_buffer = RWTextureBuffer(format=R32Uint, stride=8, data=[1 1 1 1]) 17uniform layout(binding=1,r32ui) uimageBuffer image_buffer; 18//TEST_INPUT: set image_1dArray = RWTexture1D(format=R32Uint, size=4, content=one, mipMaps = 1, arrayLength=2) 19uniform layout(binding=2,r32ui) uimage1DArray image_1dArray; 20//TEST_INPUT: set image_2d = RWTexture2D(format=R32Uint, size=4, content=one, mipMaps = 1) 21uniform layout(binding=3,r32ui) uimage2D image_2d; 22//TEST_INPUT: set image_2dRect = RWTexture2D(format=R32Uint, size=4, content=one, mipMaps = 1) 23uniform layout(binding=4,r32ui) uimage2DRect image_2dRect; 24//TEST_INPUT: set image_2dMultiSample = RWTexture2D(format=R32Uint, size=4, content=one, mipMaps = 1, sampleCount = two) 25uniform layout(binding=5,r32ui) uimage2DMS image_2dMultiSample; 26//TEST_INPUT: set image_2dArray = RWTexture2D(format=R32Uint, size=4, content=one, mipMaps = 1, arrayLength=2) 27uniform layout(binding=6,r32ui) uimage2DArray image_2dArray; 28//TEST_INPUT: set image_3d = RWTexture3D(format=R32Uint, size=4, content=one, mipMaps = 1) 29uniform layout(binding=7,r32ui) uimage3D image_3d; 30//TEST_INPUT: set image_cube = RWTextureCube(format=R32Uint, size=4, content=one, mipMaps = 1) 31uniform layout(binding=8,r32ui) uimageCube image_cube; 32//TEST_INPUT: set image_cubeArray = RWTextureCube(format=R32Uint, size=4, content=one, mipMaps = 1, arrayLength=2) 33uniform layout(binding=9,r32ui) uimageCubeArray image_cubeArray; 34//TEST_INPUT: set image_2dMultiSampleArray = RWTexture2D(format=R32Uint, size=4, content=one, mipMaps = 1, arrayLength=2, sampleCount = two) 35uniform layout(binding=10,r32ui) uimage2DMSArray 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, uvec4(1)); 73 imageStore(image_buffer, 0, uvec4(1)); 74 imageStore(image_1dArray, ivec2(0), uvec4(1)); 75 imageStore(image_2d, ivec2(0), uvec4(1)); 76 imageStore(image_2dRect, ivec2(0), uvec4(1)); 77 imageStore(image_2dMultiSample, ivec2(0), 1, uvec4(1)); 78 imageStore(image_2dArray, ivec3(0), uvec4(1)); 79 imageStore(image_3d, ivec3(0), uvec4(1)); 80 imageStore(image_cube, ivec3(0), uvec4(1)); 81 imageStore(image_cubeArray, ivec3(0), uvec4(1)); 82 imageStore(image_2dMultiSampleArray, ivec3(0), 1, uvec4(1)); 83 return true; 84} 85uint load_image_1d() 86{ 87 return imageLoad(image_1d, 0).x; 88} 89uint load_image_buffer() 90{ 91 return imageLoad(image_buffer, 0).x; 92} 93uint load_image_1dArray() 94{ 95 return imageLoad(image_1dArray, ivec2(0)).x; 96} 97uint load_image_2d() 98{ 99 return imageLoad(image_2d, ivec2(0)).x; 100} 101uint load_image_2dRect() 102{ 103 return imageLoad(image_2dRect, ivec2(0)).x; 104} 105uint load_image_2dMultiSample() 106{ 107 return imageLoad(image_2dMultiSample, ivec2(0), 1).x; 108} 109uint load_image_2dArray() 110{ 111 return imageLoad(image_2dArray, ivec3(0)).x; 112} 113uint load_image_3d() 114{ 115 return imageLoad(image_3d, ivec3(0)).x; 116} 117uint load_image_cube() 118{ 119 return imageLoad(image_cube, ivec3(0)).x; 120} 121uint load_image_cubeArray() 122{ 123 return imageLoad(image_cubeArray, ivec3(0)).x; 124} 125uint 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 imageStore(image_1d, 0, uvec4(0)); 134 loadCheck = loadCheck && load_image_1d() == 0; 135 imageStore(image_buffer, 0, uvec4(0)); 136 loadCheck = loadCheck && load_image_buffer() == 0; 137 imageStore(image_1dArray, ivec2(0), uvec4(0)); 138 loadCheck = loadCheck && load_image_1dArray() == 0; 139 imageStore(image_2d, ivec2(0), uvec4(0)); 140 loadCheck = loadCheck && load_image_2d() == 0; 141 imageStore(image_2dRect, ivec2(0), uvec4(0)); 142 loadCheck = loadCheck && load_image_2dRect() == 0; 143 imageStore(image_2dMultiSample, ivec2(0), 1, uvec4(0)); 144 loadCheck = loadCheck && load_image_2dMultiSample() == 0; 145 imageStore(image_2dArray, ivec3(0), uvec4(0)); 146 loadCheck = loadCheck && load_image_2dArray() == 0; 147 imageStore(image_3d, ivec3(0), uvec4(0)); 148 loadCheck = loadCheck && load_image_3d() == 0; 149 imageStore(image_cube, ivec3(0), uvec4(0)); 150 loadCheck = loadCheck && load_image_cube() == 0; 151 imageStore(image_cubeArray, ivec3(0), uvec4(0)); 152 loadCheck = loadCheck && load_image_cubeArray() == 0; 153 imageStore(image_2dMultiSampleArray, ivec3(0), 1, uvec4(0)); 154 loadCheck = loadCheck && load_image_2dMultiSampleArray() == 0; 155 resetAllImageValues(); 156 return loadCheck; 157} 158bool checkAllImageSamples() 159{ 160 resetAllImageValues(); 161 return true 162 && imageSamples(image_2dMultiSample) == 2 163 && imageSamples(image_2dMultiSampleArray) == 2 164 ; 165} 166bool checkAllImageAtomicAdd() 167{ 168 resetAllImageValues(); 169 return true 170 && imageAtomicAdd(image_1d, 0, 0) == 1 171 && load_image_1d() == 1 172 && imageAtomicAdd(image_buffer, 0, 2) == 1 173 && load_image_buffer() == 3 174 && imageAtomicAdd(image_1dArray, ivec2(0), 0) == 1 175 && load_image_1dArray() == 1 176 && imageAtomicAdd(image_2d, ivec2(0), 2) == 1 177 && load_image_2d() == 3 178 && imageAtomicAdd(image_2dRect, ivec2(0), 2) == 1 179 && load_image_2dRect() == 3 180 && imageAtomicAdd(image_2dMultiSample, ivec2(0), 1, 2) == 1 181 && load_image_2dMultiSample() == 3 182 && imageAtomicAdd(image_2dArray, ivec3(0), 0) == 1 183 && load_image_2dArray() == 1 184 && imageAtomicAdd(image_3d, ivec3(0), 2) == 1 185 && load_image_3d() == 3 186 && imageAtomicAdd(image_cube, ivec3(0), 2) == 1 187 && load_image_cube() == 3 188 && imageAtomicAdd(image_cubeArray, ivec3(0), 2) == 1 189 && load_image_cubeArray() == 3 190 && imageAtomicAdd(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1 191 && load_image_2dMultiSampleArray() == 3 192 ; 193} 194bool checkAllImageAtomicExchange() 195{ 196 resetAllImageValues(); 197 return true 198 && imageAtomicExchange(image_1d, 0, 0) == 1 199 && load_image_1d() == 0 200 && imageAtomicExchange(image_buffer, 0, 2) == 1 201 && load_image_buffer() == 2 202 && imageAtomicExchange(image_1dArray, ivec2(0), 0) == 1 203 && load_image_1dArray() == 0 204 && imageAtomicExchange(image_2d, ivec2(0), 2) == 1 205 && load_image_2d() == 2 206 && imageAtomicExchange(image_2dRect, ivec2(0), 2) == 1 207 && load_image_2dRect() == 2 208 && imageAtomicExchange(image_2dMultiSample, ivec2(0), 1, 2) == 1 209 && load_image_2dMultiSample() == 2 210 && imageAtomicExchange(image_2dArray, ivec3(0), 0) == 1 211 && load_image_2dArray() == 0 212 && imageAtomicExchange(image_3d, ivec3(0), 2) == 1 213 && load_image_3d() == 2 214 && imageAtomicExchange(image_cube, ivec3(0), 2) == 1 215 && load_image_cube() == 2 216 && imageAtomicExchange(image_cubeArray, ivec3(0), 2) == 1 217 && load_image_cubeArray() == 2 218 && imageAtomicExchange(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1 219 && load_image_2dMultiSampleArray() == 2 220 ; 221} 222bool checkAllImageAtomicMin() 223{ 224 resetAllImageValues(); 225 return true 226 && imageAtomicMin(image_1d, 0, 0) == 1 227 && load_image_1d() == 0 228 && imageAtomicMin(image_buffer, 0, 2) == 1 229 && load_image_buffer() == 1 230 && imageAtomicMin(image_1dArray, ivec2(0), 0) == 1 231 && load_image_1dArray() == 0 232 && imageAtomicMin(image_2d, ivec2(0), 2) == 1 233 && load_image_2d() == 1 234 && imageAtomicMin(image_2dRect, ivec2(0), 2) == 1 235 && load_image_2dRect() == 1 236 && imageAtomicMin(image_2dMultiSample, ivec2(0), 1, 2) == 1 237 && load_image_2dMultiSample() == 1 238 && imageAtomicMin(image_2dArray, ivec3(0), 0) == 1 239 && load_image_2dArray() == 0 240 && imageAtomicMin(image_3d, ivec3(0), 2) == 1 241 && load_image_3d() == 1 242 && imageAtomicMin(image_cube, ivec3(0), 2) == 1 243 && load_image_cube() == 1 244 && imageAtomicMin(image_cubeArray, ivec3(0), 2) == 1 245 && load_image_cubeArray() == 1 246 && imageAtomicMin(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1 247 && load_image_2dMultiSampleArray() == 1 248 ; 249} 250bool checkAllImageAtomicMax() 251{ 252 resetAllImageValues(); 253 return true 254 && imageAtomicMax(image_1d, 0, 0) == 1 255 && load_image_1d() == 1 256 && imageAtomicMax(image_buffer, 0, 2) == 1 257 && load_image_buffer() == 2 258 && imageAtomicMax(image_1dArray, ivec2(0), 0) == 1 259 && load_image_1dArray() == 1 260 && imageAtomicMax(image_2d, ivec2(0), 2) == 1 261 && load_image_2d() == 2 262 && imageAtomicMax(image_2dRect, ivec2(0), 2) == 1 263 && load_image_2dRect() == 2 264 && imageAtomicMax(image_2dMultiSample, ivec2(0), 1, 2) == 1 265 && load_image_2dMultiSample() == 2 266 && imageAtomicMax(image_2dArray, ivec3(0), 0) == 1 267 && load_image_2dArray() == 1 268 && imageAtomicMax(image_3d, ivec3(0), 2) == 1 269 && load_image_3d() == 2 270 && imageAtomicMax(image_cube, ivec3(0), 2) == 1 271 && load_image_cube() == 2 272 && imageAtomicMax(image_cubeArray, ivec3(0), 2) == 1 273 && load_image_cubeArray() == 2 274 && imageAtomicMax(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1 275 && load_image_2dMultiSampleArray() == 2 276 ; 277} 278bool checkAllImageAtomicAnd() 279{ 280 resetAllImageValues(); 281 return true 282 && imageAtomicAnd(image_1d, 0, 1) == 1 283 && load_image_1d() == 1 284 && imageAtomicAnd(image_buffer, 0, 2) == 1 285 && load_image_buffer() == 0 286 && imageAtomicAnd(image_1dArray, ivec2(0), 1) == 1 287 && load_image_1dArray() == 1 288 && imageAtomicAnd(image_2d, ivec2(0), 2) == 1 289 && load_image_2d() == 0 290 && imageAtomicAnd(image_2dRect, ivec2(0), 2) == 1 291 && load_image_2dRect() == 0 292 && imageAtomicAnd(image_2dMultiSample, ivec2(0), 1, 2) == 1 293 && load_image_2dMultiSample() == 0 294 && imageAtomicAnd(image_2dArray, ivec3(0), 1) == 1 295 && load_image_2dArray() == 1 296 && imageAtomicAnd(image_3d, ivec3(0), 2) == 1 297 && load_image_3d() == 0 298 && imageAtomicAnd(image_cube, ivec3(0), 2) == 1 299 && load_image_cube() == 0 300 && imageAtomicAnd(image_cubeArray, ivec3(0), 2) == 1 301 && load_image_cubeArray() == 0 302 && imageAtomicAnd(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1 303 && load_image_2dMultiSampleArray() == 0 304 ; 305} 306bool checkAllImageAtomicOr() 307{ 308 resetAllImageValues(); 309 return true 310 && imageAtomicOr(image_1d, 0, 1) == 1 311 && load_image_1d() == 1 312 && imageAtomicOr(image_buffer, 0, 2) == 1 313 && load_image_buffer() == 3 314 && imageAtomicOr(image_1dArray, ivec2(0), 1) == 1 315 && load_image_1dArray() == 1 316 && imageAtomicOr(image_2d, ivec2(0), 2) == 1 317 && load_image_2d() == 3 318 && imageAtomicOr(image_2dRect, ivec2(0), 2) == 1 319 && load_image_2dRect() == 3 320 && imageAtomicOr(image_2dMultiSample, ivec2(0), 1, 2) == 1 321 && load_image_2dMultiSample() == 3 322 && imageAtomicOr(image_2dArray, ivec3(0), 1) == 1 323 && load_image_2dArray() == 1 324 && imageAtomicOr(image_3d, ivec3(0), 2) == 1 325 && load_image_3d() == 3 326 && imageAtomicOr(image_cube, ivec3(0), 2) == 1 327 && load_image_cube() == 3 328 && imageAtomicOr(image_cubeArray, ivec3(0), 2) == 1 329 && load_image_cubeArray() == 3 330 && imageAtomicOr(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1 331 && load_image_2dMultiSampleArray() == 3 332 ; 333} 334bool checkAllImageAtomicXor() 335{ 336 resetAllImageValues(); 337 return true 338 && imageAtomicXor(image_1d, 0, 1) == 1 339 && load_image_1d() == 0 340 && imageAtomicXor(image_buffer, 0, 2) == 1 341 && load_image_buffer() == 3 342 && imageAtomicXor(image_1dArray, ivec2(0), 1) == 1 343 && load_image_1dArray() == 0 344 && imageAtomicXor(image_2d, ivec2(0), 2) == 1 345 && load_image_2d() == 3 346 && imageAtomicXor(image_2dRect, ivec2(0), 2) == 1 347 && load_image_2dRect() == 3 348 && imageAtomicXor(image_2dMultiSample, ivec2(0), 1, 2) == 1 349 && load_image_2dMultiSample() == 3 350 && imageAtomicXor(image_2dArray, ivec3(0), 1) == 1 351 && load_image_2dArray() == 0 352 && imageAtomicXor(image_3d, ivec3(0), 2) == 1 353 && load_image_3d() == 3 354 && imageAtomicXor(image_cube, ivec3(0), 2) == 1 355 && load_image_cube() == 3 356 && imageAtomicXor(image_cubeArray, ivec3(0), 2) == 1 357 && load_image_cubeArray() == 3 358 && imageAtomicXor(image_2dMultiSampleArray, ivec3(0), 1, 2) == 1 359 && load_image_2dMultiSampleArray() == 3 360 ; 361} 362bool checkAllImageAtomicCompSwap() 363{ 364 resetAllImageValues(); 365 return true 366 && imageAtomicCompSwap(image_1d, 0, 0, 2) == 1 367 && load_image_1d() == 1 368 && imageAtomicCompSwap(image_buffer, 0, 1, 2) == 1 369 && load_image_buffer() == 2 370 && imageAtomicCompSwap(image_1dArray, ivec2(0), 0, 2) == 1 371 && load_image_1dArray() == 1 372 && imageAtomicCompSwap(image_2d, ivec2(0), 1, 2) == 1 373 && load_image_2d() == 2 374 && imageAtomicCompSwap(image_2dRect, ivec2(0), 1, 2) == 1 375 && load_image_2dRect() == 2 376 && imageAtomicCompSwap(image_2dMultiSample, ivec2(0), 1, 1, 2) == 1 377 && load_image_2dMultiSample() == 2 378 && imageAtomicCompSwap(image_2dArray, ivec3(0), 0, 2) == 1 379 && load_image_2dArray() == 1 380 && imageAtomicCompSwap(image_3d, ivec3(0), 1, 2) == 1 381 && load_image_3d() == 2 382 && imageAtomicCompSwap(image_cube, ivec3(0), 1, 2) == 1 383 && load_image_cube() == 2 384 && imageAtomicCompSwap(image_cubeArray, ivec3(0), 1, 2) == 1 385 && load_image_cubeArray() == 2 386 && imageAtomicCompSwap(image_2dMultiSampleArray, ivec3(0), 1, 1, 2) == 1 387 && load_image_2dMultiSampleArray() == 2 388 ; 389} 390 391// CHECK_GLSL: void main( 392// CHECK_SPV: OpEntryPoint 393void computeMain() 394{ 395 outputBuffer.data[0] = true 396 && checkAllImageSize() 397 && checkAllImageLoad() 398 && checkAllImageStore() 399 && checkAllImageSamples() 400 && checkAllImageAtomicAdd() 401 && checkAllImageAtomicExchange() 402 && checkAllImageAtomicMin() 403 && checkAllImageAtomicMax() 404 && checkAllImageAtomicAnd() 405 && checkAllImageAtomicOr() 406 && checkAllImageAtomicXor() 407 && checkAllImageAtomicCompSwap() 408 ; 409 // BUF: 1 410}