yum-mirror/slang

Making it easier to work with shaders

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

Jay KwakDisable a few WGSL testing using Wave functions in branches (#8386)ffd58977b

master
5.6 KiB198 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:SIMPLE(filecheck=CHECK_HLSL): -allow-glsl -stage compute -entry computeMain -target hlsl -DTARGET_HLSL
4
5// not testing cuda due to missing impl
6//DISABLE_TEST:SIMPLE(filecheck=CHECK_CUDA): -allow-glsl -stage compute -entry computeMain -target cuda -DTARGET_CUDA
7// not testing cpp due to missing impl
8//DISABLE_TEST:SIMPLE(filecheck=CHECK_CPP):  -allow-glsl -stage compute -entry computeMain -target cpp -DTARGET_CPP
9
10//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl
11//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl -emit-spirv-directly
12//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-wgpu -compute -entry computeMain -allow-glsl -xslang -DWGPU
13
14// Not testing because CI runners may not support Metal's intrinsics.
15//DISABLE_TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-metal -compute -entry computeMain -allow-glsl -xslang -DMETAL
16
17#version 430
18
19//TEST_INPUT:ubuffer(data=[9], stride=4):name=inputBuffer
20buffer MyBlockName
21{
22    uint data[];
23} inputBuffer;
24
25//TEST_INPUT:ubuffer(data=[0 0 0 0 0], stride=4):out,name=outputBuffer
26buffer MyBlockName2
27{
28    uint data[];
29} outputBuffer;
30
31layout(local_size_x = 32) in;
32
33__generic<T : __BuiltinLogicalType>
34bool test1AllEqual() {
35    return true
36        & subgroupAllEqual(T(1)) == true
37        & subgroupAllEqual(T(gl_GlobalInvocationID.x)) == false
38        ;
39}
40__generic<T : __BuiltinLogicalType, let N : int>
41bool testVAllEqual() {
42    typealias gvec = vector<T, N>;
43
44    return true
45        & subgroupAllEqual(gvec(T(1))) == true
46        & subgroupAllEqual(gvec(T(gl_GlobalInvocationID.x))) == false
47        ;
48}
49
50__generic<T : __BuiltinFloatingPointType>
51bool test1AllEqual() {
52    return true
53        & subgroupAllEqual(T(1)) == true
54        & subgroupAllEqual(T(gl_GlobalInvocationID.x)) == false
55        ;
56}
57__generic<T : __BuiltinFloatingPointType, let N : int>
58bool testVAllEqual() {
59    typealias gvec = vector<T, N>;
60
61    return true
62        & subgroupAllEqual(gvec(T(1))) == true
63        & subgroupAllEqual(gvec(T(gl_GlobalInvocationID.x))) == false
64        ;
65}
66bool testAllEqual() {
67    return true
68        & test1AllEqual<float>()
69        & testVAllEqual<float, 2>()
70        & testVAllEqual<float, 3>()
71        & testVAllEqual<float, 4>()
72        & test1AllEqual<double>() // WARNING: intel GPU's lack FP64 support
73        & testVAllEqual<double, 2>()
74        & testVAllEqual<double, 3>()
75        & testVAllEqual<double, 4>()
76        & test1AllEqual<half>()
77        & testVAllEqual<half, 2>()
78        & testVAllEqual<half, 3>()
79        & testVAllEqual<half, 4>()
80        & test1AllEqual<int>()
81        & testVAllEqual<int, 2>()
82        & testVAllEqual<int, 3>()
83        & testVAllEqual<int, 4>()
84        & test1AllEqual<int8_t>()
85        & testVAllEqual<int8_t, 2>()
86        & testVAllEqual<int8_t, 3>()
87        & testVAllEqual<int8_t, 4>()
88        & test1AllEqual<int16_t>()
89        & testVAllEqual<int16_t, 2>()
90        & testVAllEqual<int16_t, 3>()
91        & testVAllEqual<int16_t, 4>()
92        & test1AllEqual<int64_t>()
93        & testVAllEqual<int64_t, 2>()
94        & testVAllEqual<int64_t, 3>()
95        & testVAllEqual<int64_t, 4>()
96        & test1AllEqual<uint>()
97        & testVAllEqual<uint, 2>()
98        & testVAllEqual<uint, 3>()
99        & testVAllEqual<uint, 4>()
100        & test1AllEqual<uint8_t>()
101        & testVAllEqual<uint8_t, 2>()
102        & testVAllEqual<uint8_t, 3>()
103        & testVAllEqual<uint8_t, 4>()
104        & test1AllEqual<uint16_t>()
105        & testVAllEqual<uint16_t, 2>()
106        & testVAllEqual<uint16_t, 3>()
107        & testVAllEqual<uint16_t, 4>()
108        & test1AllEqual<uint64_t>()
109        & testVAllEqual<uint64_t, 2>()
110        & testVAllEqual<uint64_t, 3>()
111        & testVAllEqual<uint64_t, 4>()
112        & test1AllEqual<bool>()
113        & testVAllEqual<bool, 2>()
114        & testVAllEqual<bool, 3>()
115        & testVAllEqual<bool, 4>()
116        ;
117}
118
119[[ForceInline]]
120void MyBarrier()
121{
122#if defined(WGPU)
123    GroupMemoryBarrier();
124#else
125    subgroupBarrier();
126#endif
127}
128
129[shader("compute")]
130void computeMain()
131{
132    //seperate tests since testing concurrency
133
134    // one is true, rest false, positive
135    outputBuffer.data[0] = 1;
136
137#if defined(WGPU)
138    // There is no subgroup barrier for WGSL.
139    // And workgroup barrier requries non uniform control flow.
140    bool t1 = true;
141#else
142    bool t1 = inputBuffer.data[0] == gl_GlobalInvocationID.x;
143#endif
144
145    if (subgroupAny(t1))
146    {
147        outputBuffer.data[0] = 2;
148    }
149    MyBarrier();
150
151    // all false, negative
152    outputBuffer.data[1] = 1;
153    t1 = false;
154    if (!subgroupAny(t1))
155    {
156        outputBuffer.data[1] = 2;
157    }
158    MyBarrier();
159
160    // all true, positive
161    outputBuffer.data[2] = 1;
162    t1 = true;
163    if (subgroupAll(t1))
164    {
165        outputBuffer.data[2] = 2;
166    }
167    MyBarrier();
168
169    // all false, negative
170    outputBuffer.data[3] = 1;
171    t1 = false;
172    if (!subgroupAll(t1))
173    {
174        outputBuffer.data[3] = 2;
175    }
176    MyBarrier();
177
178    outputBuffer.data[4] = 1;
179    // All equal intrinsic is not supported on WGSL as of time of writing.
180#if !defined(WGPU) && !defined(METAL)
181    if (testAllEqual())
182#endif
183    {
184        outputBuffer.data[4] = 2;
185    }
186    MyBarrier();
187
188    // CHECK_GLSL: void main(
189    // CHECK_SPV: OpEntryPoint
190    // CHECK_HLSL: void computeMain(
191    // CHECK_CUDA: void computeMain(
192    // CHECK_CPP: void _computeMain(
193    // BUF: 2
194    // BUF-NEXT: 2
195    // BUF-NEXT: 2
196    // BUF-NEXT: 2
197    // BUF-NEXT: 2
198}