yum-mirror/slang

Making it easier to work with shaders

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

Harsh Aggarwal (NVIDIA)Enable CUDA support for additional HLSL intrinsic tests (#8293)5ec41675d

master
2.6 KiB64 linesraw
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}