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=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}