yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
5ec41675d
master
1//TEST:SIMPLE(filecheck=SPIRV): -entry main -stage compute -target spirv 2//TEST:SIMPLE(filecheck=SPIRV): -entry main -stage compute -target spirv -emit-spirv-directly 3//TEST:SIMPLE(filecheck=HLSL): -entry main -stage compute -target hlsl 4//TEST:SIMPLE(filecheck=METAL): -entry main -stage compute -target metal 5//TEST:SIMPLE(filecheck=CUDA): -entry main -stage compute -target cuda 6 7RWStructuredBuffer<float> output; 8 9[numthreads(1,1,1)] 10void main() 11{ 12 float x = output[0]; 13 float3 vx = float3(x, x, x); 14 15 float v1 = QuadReadLaneAt(x, 1); 16 float v11 = QuadReadLaneAt(vx, 1).x; 17 float v2 = QuadReadAcrossX(x); 18 float v21 = QuadReadAcrossX(vx).x; 19 float v3 = QuadReadAcrossY(x); 20 float v31 = QuadReadAcrossY(vx).x; 21 float v4 = QuadReadAcrossDiagonal(x); 22 float v41 = QuadReadAcrossDiagonal(vx).x; 23 24 output[0] = v1 + v2 + v3 + v4 + v11 + v21 + v31 + v41; 25 26 // HLSL: QuadReadLaneAt 27 // HLSL: QuadReadLaneAt 28 // HLSL: QuadReadAcrossX 29 // HLSL: QuadReadAcrossX 30 // HLSL: QuadReadAcrossY 31 // HLSL: QuadReadAcrossY 32 // HLSL: QuadReadAcrossDiagonal 33 // HLSL: QuadReadAcrossDiagonal 34 35 // SPIRV: OpGroupNonUniformQuadBroadcast {{.*}} %{{u?int_3}} {{.*}} %{{u?int_1}} 36 // SPIRV: OpGroupNonUniformQuadBroadcast {{.*}} %{{u?int_3}} {{.*}} %{{u?int_1}} 37 // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_0}} 38 // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_0}} 39 // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_1}} 40 // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_1}} 41 // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_2}} 42 // SPIRV: OpGroupNonUniformQuadSwap {{.*}} %{{u?int_3}} {{.*}} %{{u?int_2}} 43 44 // METAL: quad_shuffle 45 // METAL: quad_shuffle 46 // METAL: ^ 1 47 // METAL: quad_shuffle 48 // METAL: quad_shuffle 49 // METAL: ^ 2 50 // METAL: quad_shuffle 51 // METAL: quad_shuffle 52 // METAL: ^ 3 53 // METAL: quad_shuffle 54 // METAL: quad_shuffle 55 56 // CUDA: _waveShuffleMultiple({{.*}}, {{.*}}, (_getLaneId() & 0xFFFFFFFC) | ((1U) & 3)) 57 // CUDA: _waveShuffleMultiple({{.*}}, {{.*}}, (_getLaneId() & 0xFFFFFFFC) | ((1U) & 3)) 58 // CUDA: _waveShuffleMultiple({{.*}}, {{.*}}, _getLaneId() ^ 1) 59 // CUDA: _waveShuffleMultiple({{.*}}, {{.*}}, _getLaneId() ^ 1) 60 // CUDA: _waveShuffleMultiple({{.*}}, {{.*}}, _getLaneId() ^ 2) 61 // CUDA: _waveShuffleMultiple({{.*}}, {{.*}}, _getLaneId() ^ 2) 62 // CUDA: _waveShuffleMultiple({{.*}}, {{.*}}, _getLaneId() ^ 3) 63 // CUDA: _waveShuffleMultiple({{.*}}, {{.*}}, _getLaneId() ^ 3) 64}