glslang/Test/baseResults/spv.shaderBallot.comp.out
Jeremy Hayes 6d5b40f051 Generate separate stores for partially swizzled memory stores
Full vector and fully specified vector swizzle stores are not affected by this change, only partial swizzles ie swizzles with fewer components than the vector being stored to.

Previously the vector being stored to loaded and any components not specified in the swizzle were used to create a full store to the vector.

While this change generates more SPIR-V instructions, it is necessary for correctness.

Fixes #2518.
2021-07-28 14:55:45 -06:00

437 lines
23 KiB
Plaintext

spv.shaderBallot.comp
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 343
Capability Shader
Capability Int64
Capability SubgroupBallotKHR
Extension "SPV_KHR_shader_ballot"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 10 12 22 29 36 43 50
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
SourceExtension "GL_ARB_gpu_shader_int64"
SourceExtension "GL_ARB_shader_ballot"
Name 4 "main"
Name 8 "invocation"
Name 10 "gl_SubGroupInvocationARB"
Name 12 "gl_SubGroupSizeARB"
Name 19 "relMask"
Name 22 "gl_SubGroupEqMaskARB"
Name 29 "gl_SubGroupGeMaskARB"
Name 36 "gl_SubGroupGtMaskARB"
Name 43 "gl_SubGroupLeMaskARB"
Name 50 "gl_SubGroupLtMaskARB"
Name 72 "Buffers"
MemberName 72(Buffers) 0 "f4"
MemberName 72(Buffers) 1 "i4"
MemberName 72(Buffers) 2 "u4"
Name 75 "data"
Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId
Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize
Decorate 22(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
Decorate 29(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
Decorate 36(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
Decorate 43(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
Decorate 50(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
MemberDecorate 72(Buffers) 0 Offset 0
MemberDecorate 72(Buffers) 1 Offset 16
MemberDecorate 72(Buffers) 2 Offset 32
Decorate 72(Buffers) BufferBlock
Decorate 75(data) DescriptorSet 0
Decorate 75(data) Binding 0
Decorate 342 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypePointer Function 6(int)
9: TypePointer Input 6(int)
10(gl_SubGroupInvocationARB): 9(ptr) Variable Input
12(gl_SubGroupSizeARB): 9(ptr) Variable Input
15: 6(int) Constant 4
17: TypeInt 64 0
18: TypePointer Function 17(int64_t)
20: TypeVector 6(int) 4
21: TypePointer Input 20(ivec4)
22(gl_SubGroupEqMaskARB): 21(ptr) Variable Input
26: TypeVector 6(int) 2
29(gl_SubGroupGeMaskARB): 21(ptr) Variable Input
36(gl_SubGroupGtMaskARB): 21(ptr) Variable Input
43(gl_SubGroupLeMaskARB): 21(ptr) Variable Input
50(gl_SubGroupLtMaskARB): 21(ptr) Variable Input
58: TypeBool
59: 58(bool) ConstantTrue
68: TypeFloat 32
69: TypeVector 68(float) 4
70: TypeInt 32 1
71: TypeVector 70(int) 4
72(Buffers): TypeStruct 69(fvec4) 71(ivec4) 20(ivec4)
73: TypeArray 72(Buffers) 15
74: TypePointer Uniform 73
75(data): 74(ptr) Variable Uniform
77: 70(int) Constant 0
78: 6(int) Constant 0
79: TypePointer Uniform 68(float)
86: 70(int) Constant 1
87: TypeVector 68(float) 2
88: TypePointer Uniform 69(fvec4)
100: 6(int) Constant 1
104: 70(int) Constant 2
105: TypeVector 68(float) 3
121: 6(int) Constant 2
125: 70(int) Constant 3
140: TypePointer Uniform 70(int)
147: TypeVector 70(int) 2
148: TypePointer Uniform 71(ivec4)
163: TypeVector 70(int) 3
196: TypePointer Uniform 6(int)
203: TypePointer Uniform 20(ivec4)
218: TypeVector 6(int) 3
341: 6(int) Constant 8
342: 218(ivec3) ConstantComposite 341 341 100
4(main): 2 Function None 3
5: Label
8(invocation): 7(ptr) Variable Function
19(relMask): 18(ptr) Variable Function
11: 6(int) Load 10(gl_SubGroupInvocationARB)
13: 6(int) Load 12(gl_SubGroupSizeARB)
14: 6(int) IAdd 11 13
16: 6(int) UMod 14 15
Store 8(invocation) 16
23: 20(ivec4) Load 22(gl_SubGroupEqMaskARB)
24: 6(int) CompositeExtract 23 0
25: 6(int) CompositeExtract 23 1
27: 26(ivec2) CompositeConstruct 24 25
28: 17(int64_t) Bitcast 27
30: 20(ivec4) Load 29(gl_SubGroupGeMaskARB)
31: 6(int) CompositeExtract 30 0
32: 6(int) CompositeExtract 30 1
33: 26(ivec2) CompositeConstruct 31 32
34: 17(int64_t) Bitcast 33
35: 17(int64_t) IAdd 28 34
37: 20(ivec4) Load 36(gl_SubGroupGtMaskARB)
38: 6(int) CompositeExtract 37 0
39: 6(int) CompositeExtract 37 1
40: 26(ivec2) CompositeConstruct 38 39
41: 17(int64_t) Bitcast 40
42: 17(int64_t) IAdd 35 41
44: 20(ivec4) Load 43(gl_SubGroupLeMaskARB)
45: 6(int) CompositeExtract 44 0
46: 6(int) CompositeExtract 44 1
47: 26(ivec2) CompositeConstruct 45 46
48: 17(int64_t) Bitcast 47
49: 17(int64_t) IAdd 42 48
51: 20(ivec4) Load 50(gl_SubGroupLtMaskARB)
52: 6(int) CompositeExtract 51 0
53: 6(int) CompositeExtract 51 1
54: 26(ivec2) CompositeConstruct 52 53
55: 17(int64_t) Bitcast 54
56: 17(int64_t) IAdd 49 55
Store 19(relMask) 56
57: 17(int64_t) Load 19(relMask)
60: 20(ivec4) SubgroupBallotKHR 59
61: 6(int) CompositeExtract 60 0
62: 6(int) CompositeExtract 60 1
63: 26(ivec2) CompositeConstruct 61 62
64: 17(int64_t) Bitcast 63
65: 58(bool) IEqual 57 64
SelectionMerge 67 None
BranchConditional 65 66 250
66: Label
76: 6(int) Load 8(invocation)
80: 79(ptr) AccessChain 75(data) 77 77 78
81: 68(float) Load 80
82: 6(int) Load 8(invocation)
83: 68(float) SubgroupReadInvocationKHR 81 82
84: 79(ptr) AccessChain 75(data) 76 77 78
Store 84 83
85: 6(int) Load 8(invocation)
89: 88(ptr) AccessChain 75(data) 86 77
90: 69(fvec4) Load 89
91: 87(fvec2) VectorShuffle 90 90 0 1
92: 6(int) Load 8(invocation)
93: 68(float) CompositeExtract 91 0
94: 68(float) SubgroupReadInvocationKHR 93 92
95: 68(float) CompositeExtract 91 1
96: 68(float) SubgroupReadInvocationKHR 95 92
97: 87(fvec2) CompositeConstruct 94 96
98: 79(ptr) AccessChain 75(data) 85 77 78
99: 68(float) CompositeExtract 97 0
Store 98 99
101: 79(ptr) AccessChain 75(data) 85 77 100
102: 68(float) CompositeExtract 97 1
Store 101 102
103: 6(int) Load 8(invocation)
106: 88(ptr) AccessChain 75(data) 104 77
107: 69(fvec4) Load 106
108: 105(fvec3) VectorShuffle 107 107 0 1 2
109: 6(int) Load 8(invocation)
110: 68(float) CompositeExtract 108 0
111: 68(float) SubgroupReadInvocationKHR 110 109
112: 68(float) CompositeExtract 108 1
113: 68(float) SubgroupReadInvocationKHR 112 109
114: 68(float) CompositeExtract 108 2
115: 68(float) SubgroupReadInvocationKHR 114 109
116: 105(fvec3) CompositeConstruct 111 113 115
117: 79(ptr) AccessChain 75(data) 103 77 78
118: 68(float) CompositeExtract 116 0
Store 117 118
119: 79(ptr) AccessChain 75(data) 103 77 100
120: 68(float) CompositeExtract 116 1
Store 119 120
122: 79(ptr) AccessChain 75(data) 103 77 121
123: 68(float) CompositeExtract 116 2
Store 122 123
124: 6(int) Load 8(invocation)
126: 88(ptr) AccessChain 75(data) 125 77
127: 69(fvec4) Load 126
128: 6(int) Load 8(invocation)
129: 68(float) CompositeExtract 127 0
130: 68(float) SubgroupReadInvocationKHR 129 128
131: 68(float) CompositeExtract 127 1
132: 68(float) SubgroupReadInvocationKHR 131 128
133: 68(float) CompositeExtract 127 2
134: 68(float) SubgroupReadInvocationKHR 133 128
135: 68(float) CompositeExtract 127 3
136: 68(float) SubgroupReadInvocationKHR 135 128
137: 69(fvec4) CompositeConstruct 130 132 134 136
138: 88(ptr) AccessChain 75(data) 124 77
Store 138 137
139: 6(int) Load 8(invocation)
141: 140(ptr) AccessChain 75(data) 77 86 78
142: 70(int) Load 141
143: 6(int) Load 8(invocation)
144: 70(int) SubgroupReadInvocationKHR 142 143
145: 140(ptr) AccessChain 75(data) 139 86 78
Store 145 144
146: 6(int) Load 8(invocation)
149: 148(ptr) AccessChain 75(data) 86 86
150: 71(ivec4) Load 149
151: 147(ivec2) VectorShuffle 150 150 0 1
152: 6(int) Load 8(invocation)
153: 70(int) CompositeExtract 151 0
154: 70(int) SubgroupReadInvocationKHR 153 152
155: 70(int) CompositeExtract 151 1
156: 70(int) SubgroupReadInvocationKHR 155 152
157: 147(ivec2) CompositeConstruct 154 156
158: 140(ptr) AccessChain 75(data) 146 86 78
159: 70(int) CompositeExtract 157 0
Store 158 159
160: 140(ptr) AccessChain 75(data) 146 86 100
161: 70(int) CompositeExtract 157 1
Store 160 161
162: 6(int) Load 8(invocation)
164: 148(ptr) AccessChain 75(data) 104 86
165: 71(ivec4) Load 164
166: 163(ivec3) VectorShuffle 165 165 0 1 2
167: 6(int) Load 8(invocation)
168: 70(int) CompositeExtract 166 0
169: 70(int) SubgroupReadInvocationKHR 168 167
170: 70(int) CompositeExtract 166 1
171: 70(int) SubgroupReadInvocationKHR 170 167
172: 70(int) CompositeExtract 166 2
173: 70(int) SubgroupReadInvocationKHR 172 167
174: 163(ivec3) CompositeConstruct 169 171 173
175: 140(ptr) AccessChain 75(data) 162 86 78
176: 70(int) CompositeExtract 174 0
Store 175 176
177: 140(ptr) AccessChain 75(data) 162 86 100
178: 70(int) CompositeExtract 174 1
Store 177 178
179: 140(ptr) AccessChain 75(data) 162 86 121
180: 70(int) CompositeExtract 174 2
Store 179 180
181: 6(int) Load 8(invocation)
182: 148(ptr) AccessChain 75(data) 125 86
183: 71(ivec4) Load 182
184: 6(int) Load 8(invocation)
185: 70(int) CompositeExtract 183 0
186: 70(int) SubgroupReadInvocationKHR 185 184
187: 70(int) CompositeExtract 183 1
188: 70(int) SubgroupReadInvocationKHR 187 184
189: 70(int) CompositeExtract 183 2
190: 70(int) SubgroupReadInvocationKHR 189 184
191: 70(int) CompositeExtract 183 3
192: 70(int) SubgroupReadInvocationKHR 191 184
193: 71(ivec4) CompositeConstruct 186 188 190 192
194: 148(ptr) AccessChain 75(data) 181 86
Store 194 193
195: 6(int) Load 8(invocation)
197: 196(ptr) AccessChain 75(data) 77 104 78
198: 6(int) Load 197
199: 6(int) Load 8(invocation)
200: 6(int) SubgroupReadInvocationKHR 198 199
201: 196(ptr) AccessChain 75(data) 195 104 78
Store 201 200
202: 6(int) Load 8(invocation)
204: 203(ptr) AccessChain 75(data) 86 104
205: 20(ivec4) Load 204
206: 26(ivec2) VectorShuffle 205 205 0 1
207: 6(int) Load 8(invocation)
208: 6(int) CompositeExtract 206 0
209: 6(int) SubgroupReadInvocationKHR 208 207
210: 6(int) CompositeExtract 206 1
211: 6(int) SubgroupReadInvocationKHR 210 207
212: 26(ivec2) CompositeConstruct 209 211
213: 196(ptr) AccessChain 75(data) 202 104 78
214: 6(int) CompositeExtract 212 0
Store 213 214
215: 196(ptr) AccessChain 75(data) 202 104 100
216: 6(int) CompositeExtract 212 1
Store 215 216
217: 6(int) Load 8(invocation)
219: 203(ptr) AccessChain 75(data) 104 104
220: 20(ivec4) Load 219
221: 218(ivec3) VectorShuffle 220 220 0 1 2
222: 6(int) Load 8(invocation)
223: 6(int) CompositeExtract 221 0
224: 6(int) SubgroupReadInvocationKHR 223 222
225: 6(int) CompositeExtract 221 1
226: 6(int) SubgroupReadInvocationKHR 225 222
227: 6(int) CompositeExtract 221 2
228: 6(int) SubgroupReadInvocationKHR 227 222
229: 218(ivec3) CompositeConstruct 224 226 228
230: 196(ptr) AccessChain 75(data) 217 104 78
231: 6(int) CompositeExtract 229 0
Store 230 231
232: 196(ptr) AccessChain 75(data) 217 104 100
233: 6(int) CompositeExtract 229 1
Store 232 233
234: 196(ptr) AccessChain 75(data) 217 104 121
235: 6(int) CompositeExtract 229 2
Store 234 235
236: 6(int) Load 8(invocation)
237: 203(ptr) AccessChain 75(data) 125 104
238: 20(ivec4) Load 237
239: 6(int) Load 8(invocation)
240: 6(int) CompositeExtract 238 0
241: 6(int) SubgroupReadInvocationKHR 240 239
242: 6(int) CompositeExtract 238 1
243: 6(int) SubgroupReadInvocationKHR 242 239
244: 6(int) CompositeExtract 238 2
245: 6(int) SubgroupReadInvocationKHR 244 239
246: 6(int) CompositeExtract 238 3
247: 6(int) SubgroupReadInvocationKHR 246 239
248: 20(ivec4) CompositeConstruct 241 243 245 247
249: 203(ptr) AccessChain 75(data) 236 104
Store 249 248
Branch 67
250: Label
251: 6(int) Load 8(invocation)
252: 79(ptr) AccessChain 75(data) 77 77 78
253: 68(float) Load 252
254: 68(float) SubgroupFirstInvocationKHR 253
255: 79(ptr) AccessChain 75(data) 251 77 78
Store 255 254
256: 6(int) Load 8(invocation)
257: 88(ptr) AccessChain 75(data) 86 77
258: 69(fvec4) Load 257
259: 87(fvec2) VectorShuffle 258 258 0 1
260: 87(fvec2) SubgroupFirstInvocationKHR 259
261: 79(ptr) AccessChain 75(data) 256 77 78
262: 68(float) CompositeExtract 260 0
Store 261 262
263: 79(ptr) AccessChain 75(data) 256 77 100
264: 68(float) CompositeExtract 260 1
Store 263 264
265: 6(int) Load 8(invocation)
266: 88(ptr) AccessChain 75(data) 104 77
267: 69(fvec4) Load 266
268: 105(fvec3) VectorShuffle 267 267 0 1 2
269: 105(fvec3) SubgroupFirstInvocationKHR 268
270: 79(ptr) AccessChain 75(data) 265 77 78
271: 68(float) CompositeExtract 269 0
Store 270 271
272: 79(ptr) AccessChain 75(data) 265 77 100
273: 68(float) CompositeExtract 269 1
Store 272 273
274: 79(ptr) AccessChain 75(data) 265 77 121
275: 68(float) CompositeExtract 269 2
Store 274 275
276: 6(int) Load 8(invocation)
277: 88(ptr) AccessChain 75(data) 125 77
278: 69(fvec4) Load 277
279: 69(fvec4) SubgroupFirstInvocationKHR 278
280: 88(ptr) AccessChain 75(data) 276 77
Store 280 279
281: 6(int) Load 8(invocation)
282: 140(ptr) AccessChain 75(data) 77 86 78
283: 70(int) Load 282
284: 70(int) SubgroupFirstInvocationKHR 283
285: 140(ptr) AccessChain 75(data) 281 86 78
Store 285 284
286: 6(int) Load 8(invocation)
287: 148(ptr) AccessChain 75(data) 86 86
288: 71(ivec4) Load 287
289: 147(ivec2) VectorShuffle 288 288 0 1
290: 147(ivec2) SubgroupFirstInvocationKHR 289
291: 140(ptr) AccessChain 75(data) 286 86 78
292: 70(int) CompositeExtract 290 0
Store 291 292
293: 140(ptr) AccessChain 75(data) 286 86 100
294: 70(int) CompositeExtract 290 1
Store 293 294
295: 6(int) Load 8(invocation)
296: 148(ptr) AccessChain 75(data) 104 86
297: 71(ivec4) Load 296
298: 163(ivec3) VectorShuffle 297 297 0 1 2
299: 163(ivec3) SubgroupFirstInvocationKHR 298
300: 140(ptr) AccessChain 75(data) 295 86 78
301: 70(int) CompositeExtract 299 0
Store 300 301
302: 140(ptr) AccessChain 75(data) 295 86 100
303: 70(int) CompositeExtract 299 1
Store 302 303
304: 140(ptr) AccessChain 75(data) 295 86 121
305: 70(int) CompositeExtract 299 2
Store 304 305
306: 6(int) Load 8(invocation)
307: 148(ptr) AccessChain 75(data) 125 86
308: 71(ivec4) Load 307
309: 71(ivec4) SubgroupFirstInvocationKHR 308
310: 148(ptr) AccessChain 75(data) 306 86
Store 310 309
311: 6(int) Load 8(invocation)
312: 196(ptr) AccessChain 75(data) 77 104 78
313: 6(int) Load 312
314: 6(int) SubgroupFirstInvocationKHR 313
315: 196(ptr) AccessChain 75(data) 311 104 78
Store 315 314
316: 6(int) Load 8(invocation)
317: 203(ptr) AccessChain 75(data) 86 104
318: 20(ivec4) Load 317
319: 26(ivec2) VectorShuffle 318 318 0 1
320: 26(ivec2) SubgroupFirstInvocationKHR 319
321: 196(ptr) AccessChain 75(data) 316 104 78
322: 6(int) CompositeExtract 320 0
Store 321 322
323: 196(ptr) AccessChain 75(data) 316 104 100
324: 6(int) CompositeExtract 320 1
Store 323 324
325: 6(int) Load 8(invocation)
326: 203(ptr) AccessChain 75(data) 104 104
327: 20(ivec4) Load 326
328: 218(ivec3) VectorShuffle 327 327 0 1 2
329: 218(ivec3) SubgroupFirstInvocationKHR 328
330: 196(ptr) AccessChain 75(data) 325 104 78
331: 6(int) CompositeExtract 329 0
Store 330 331
332: 196(ptr) AccessChain 75(data) 325 104 100
333: 6(int) CompositeExtract 329 1
Store 332 333
334: 196(ptr) AccessChain 75(data) 325 104 121
335: 6(int) CompositeExtract 329 2
Store 334 335
336: 6(int) Load 8(invocation)
337: 203(ptr) AccessChain 75(data) 125 104
338: 20(ivec4) Load 337
339: 20(ivec4) SubgroupFirstInvocationKHR 338
340: 203(ptr) AccessChain 75(data) 336 104
Store 340 339
Branch 67
67: Label
Return
FunctionEnd