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