blob: a1bce28733cde9c583d67f1bba695d6a68158f82 [file] [log] [blame]
Daniel Kochc3e60ad2019-05-30 19:40:20 -04001#version 460
2#extension GL_NV_ray_tracing : enable
3
4vec4 undeclared_errors(vec4 f4)
5{
6 vec4 result;
7 gl_SubgroupSize; // ERROR, extension not enabled (basic)
8 gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
9 subgroupBarrier(); // ERROR, extension not enabled (basic)
10 subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
11 subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
12 subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
13 subgroupElect(); // ERROR, extension not enabled (basic)
14 gl_NumSubgroups; // ERROR, only defined in compute
15 gl_SubgroupID; // ERROR, only defined in compute
16 subgroupMemoryBarrierShared(); // ERROR, only defined in compute
17
18 subgroupAll(true); // ERROR extension not enabled (vote)
19 subgroupAny(false); // ERROR extension not enabled (vote)
20 subgroupAllEqual(f4); // ERROR extension not enabled (vote)
21
22 gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
23 gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
24 gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
25 gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
26 gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
27 subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
28 subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
29 uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
30 subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
31 subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
32 subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
33 subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
34 subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
35 subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
36 subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
37
38 subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
39 subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
40 subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
41 subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
42
43 result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
44 subgroupMul(f4); // ERROR, extension not enabled (arith)
45 subgroupMin(f4); // ERROR, extension not enabled (arith)
46 subgroupMax(f4); // ERROR, extension not enabled (arith)
47 subgroupAnd(ballot); // ERROR, extension not enabled (arith)
48 subgroupOr(ballot); // ERROR, extension not enabled (arith)
49 subgroupXor(ballot); // ERROR, extension not enabled (arith)
50 subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
51 subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
52 subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
53 subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
54 subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
55 subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
56 subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
57 subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
58 subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
59 subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
60 subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
61 subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
62 subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
63 subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
64
65 subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
66 subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
67 subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
68 subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
69 subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
70 subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
71 subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
72
73 subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
74 subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
75 subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
76 subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
77
78 uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
79 subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
80 subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
81 subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
82 subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
83 subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
84 subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
85 subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
86 subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
87 subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
88 subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
89 subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
90 subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
91 subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
92 subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
93 subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
94 subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
95 subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
96 subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
97 subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
98 subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
99 subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
100
101 return result;
102}
103
104
105layout(location = 1) rayPayloadInNV vec4 incomingPayload;
106void main()
107{
108 uvec3 v0 = gl_LaunchIDNV;
109 uvec3 v1 = gl_LaunchSizeNV;
110 int v2 = gl_PrimitiveID;
111 int v3 = gl_InstanceID;
112 int v4 = gl_InstanceCustomIndexNV;
113 vec3 v5 = gl_WorldRayOriginNV;
114 vec3 v6 = gl_WorldRayDirectionNV;
115 vec3 v7 = gl_ObjectRayOriginNV;
116 vec3 v8 = gl_ObjectRayDirectionNV;
117 float v9 = gl_RayTminNV;
118 float v10 = gl_RayTmaxNV;
119 float v11 = gl_HitTNV;
120 uint v12 = gl_HitKindNV;
121 mat4x3 v13 = gl_ObjectToWorldNV;
122 mat4x3 v14 = gl_WorldToObjectNV;
123 incomingPayload = vec4(0.5f);
124 if (v2 == 1)
125 ignoreIntersectionNV();
126 else
127 terminateRayNV();
128}
129
130#extension GL_KHR_shader_subgroup_basic: enable
131void basic_works (void)
132{
133 gl_SubgroupSize;
134 gl_SubgroupInvocationID;
135 subgroupBarrier();
136 subgroupMemoryBarrier();
137 subgroupMemoryBarrierBuffer();
138 subgroupMemoryBarrierImage();
139 subgroupElect();
140}
141
142#extension GL_KHR_shader_subgroup_ballot: enable
143void ballot_works(vec4 f4) {
144 gl_SubgroupEqMask;
145 gl_SubgroupGeMask;
146 gl_SubgroupGtMask;
147 gl_SubgroupLeMask;
148 gl_SubgroupLtMask;
149 subgroupBroadcast(f4, 0);
150 subgroupBroadcastFirst(f4);
151 uvec4 ballot = subgroupBallot(false);
152 subgroupInverseBallot(uvec4(0x1));
153 subgroupBallotBitExtract(ballot, 0);
154 subgroupBallotBitCount(ballot);
155 subgroupBallotInclusiveBitCount(ballot);
156 subgroupBallotExclusiveBitCount(ballot);
157 subgroupBallotFindLSB(ballot);
158 subgroupBallotFindMSB(ballot);
159}
160
161#extension GL_KHR_shader_subgroup_vote: enable
162void vote_works(vec4 f4)
163{
164 subgroupAll(true);
165 subgroupAny(false);
166 subgroupAllEqual(f4);
167}
168
169#extension GL_KHR_shader_subgroup_shuffle: enable
170#extension GL_KHR_shader_subgroup_shuffle_relative: enable
171void shuffle_works(vec4 f4)
172{
173 subgroupShuffle(f4, 0);
174 subgroupShuffleXor(f4, 0x1);
175 subgroupShuffleUp(f4, 1);
176 subgroupShuffleDown(f4, 1);
177}
178
179#extension GL_KHR_shader_subgroup_arithmetic: enable
180void arith_works(vec4 f4)
181{
182 uvec4 ballot;
183 subgroupAdd(f4);
184 subgroupMul(f4);
185 subgroupMin(f4);
186 subgroupMax(f4);
187 subgroupAnd(ballot);
188 subgroupOr(ballot);
189 subgroupXor(ballot);
190 subgroupInclusiveAdd(f4);
191 subgroupInclusiveMul(f4);
192 subgroupInclusiveMin(f4);
193 subgroupInclusiveMax(f4);
194 subgroupInclusiveAnd(ballot);
195 subgroupInclusiveOr(ballot);
196 subgroupInclusiveXor(ballot);
197 subgroupExclusiveAdd(f4);
198 subgroupExclusiveMul(f4);
199 subgroupExclusiveMin(f4);
200 subgroupExclusiveMax(f4);
201 subgroupExclusiveAnd(ballot);
202 subgroupExclusiveOr(ballot);
203 subgroupExclusiveXor(ballot);
204}
205
206#extension GL_KHR_shader_subgroup_clustered: enable
207void clustered_works(vec4 f4)
208{
209 uvec4 ballot = uvec4(0x55,0,0,0);
210 subgroupClusteredAdd(f4, 2);
211 subgroupClusteredMul(f4, 2);
212 subgroupClusteredMin(f4, 2);
213 subgroupClusteredMax(f4, 2);
214 subgroupClusteredAnd(ballot, 2);
215 subgroupClusteredOr(ballot, 2);
216 subgroupClusteredXor(ballot, 2);
217}
218
219#extension GL_KHR_shader_subgroup_quad: enable
220void quad_works(vec4 f4)
221{
222 subgroupQuadBroadcast(f4, 0);
223 subgroupQuadSwapHorizontal(f4);
224 subgroupQuadSwapVertical(f4);
225 subgroupQuadSwapDiagonal(f4);
226}
227
228#extension GL_NV_shader_subgroup_partitioned: enable
229void partitioned_works(vec4 f4)
230{
231 uvec4 parti = subgroupPartitionNV(f4);
232 uvec4 ballot = uvec4(0x55,0,0,0);
233 subgroupPartitionedAddNV(f4, parti);
234 subgroupPartitionedMulNV(f4, parti);
235 subgroupPartitionedMinNV(f4, parti);
236 subgroupPartitionedMaxNV(f4, parti);
237 subgroupPartitionedAndNV(ballot, parti);
238 subgroupPartitionedOrNV(ballot, parti);
239 subgroupPartitionedXorNV(ballot, parti);
240 subgroupPartitionedInclusiveAddNV(f4, parti);
241 subgroupPartitionedInclusiveMulNV(f4, parti);
242 subgroupPartitionedInclusiveMinNV(f4, parti);
243 subgroupPartitionedInclusiveMaxNV(f4, parti);
244 subgroupPartitionedInclusiveAndNV(ballot, parti);
245 subgroupPartitionedInclusiveOrNV(ballot, parti);
246 subgroupPartitionedInclusiveXorNV(ballot, parti);
247 subgroupPartitionedExclusiveAddNV(f4, parti);
248 subgroupPartitionedExclusiveMulNV(f4, parti);
249 subgroupPartitionedExclusiveMinNV(f4, parti);
250 subgroupPartitionedExclusiveMaxNV(f4, parti);
251 subgroupPartitionedExclusiveAndNV(ballot, parti);
252 subgroupPartitionedExclusiveOrNV(ballot, parti);
253 subgroupPartitionedExclusiveXorNV(ballot, parti);
254}
255
Daniel Koch2cb2f192019-06-04 08:43:32 -0400256// tests for NV_shader_sm_builtins
257void sm_builtins_err()
258{
259 gl_WarpsPerSMNV; // ERROR, no extension
260 gl_SMCountNV; // ERROR, no extension
261 gl_WarpIDNV; // ERROR, no extension
262 gl_SMIDNV; // ERROR, no extension
263}
264
265#ifdef GL_NV_shader_sm_builtins
266#extension GL_NV_shader_sm_builtins : enable
267#endif
268
269void sm_builtins()
270{
271 gl_WarpsPerSMNV;
272 gl_SMCountNV;
273 gl_WarpIDNV;
274 gl_SMIDNV;
275}