Merge pull request #3050 from Try/mesh-shader-ibo-fixup

mesh shader: fix implicit index-array size calculation for lines and triangles
This commit is contained in:
Jeremy Hayes 2022-10-31 15:38:24 -06:00 committed by GitHub
commit 1a8869e4d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 215 additions and 213 deletions

View File

@ -1,7 +1,7 @@
spv.460.subgroupEXT.mesh spv.460.subgroupEXT.mesh
// Module Version 10400 // Module Version 10400
// Generated by (magic number): 8000b // Generated by (magic number): 8000b
// Id's are bound by 280 // Id's are bound by 279
Capability ClipDistance Capability ClipDistance
Capability CullDistance Capability CullDistance
@ -19,7 +19,7 @@ spv.460.subgroupEXT.mesh
Extension "SPV_KHR_fragment_shading_rate" Extension "SPV_KHR_fragment_shading_rate"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint MeshEXT 4 "main" 35 41 57 109 148 162 163 168 169 172 173 174 175 176 EntryPoint MeshEXT 4 "main" 35 41 57 109 147 161 162 167 168 171 172 173 174 175
ExecutionMode 4 LocalSize 32 1 1 ExecutionMode 4 LocalSize 32 1 1
ExecutionMode 4 OutputVertices 81 ExecutionMode 4 OutputVertices 81
ExecutionMode 4 OutputPrimitivesNV 32 ExecutionMode 4 OutputPrimitivesNV 32
@ -67,19 +67,19 @@ spv.460.subgroupEXT.mesh
MemberName 106(gl_MeshPerPrimitiveEXT) 3 "gl_CullPrimitiveEXT" MemberName 106(gl_MeshPerPrimitiveEXT) 3 "gl_CullPrimitiveEXT"
MemberName 106(gl_MeshPerPrimitiveEXT) 4 "gl_PrimitiveShadingRateEXT" MemberName 106(gl_MeshPerPrimitiveEXT) 4 "gl_PrimitiveShadingRateEXT"
Name 109 "gl_MeshPrimitivesEXT" Name 109 "gl_MeshPrimitivesEXT"
Name 148 "gl_PrimitiveTriangleIndicesEXT" Name 147 "gl_PrimitiveTriangleIndicesEXT"
Name 162 "gl_SubgroupSize" Name 161 "gl_SubgroupSize"
Name 163 "gl_SubgroupInvocationID" Name 162 "gl_SubgroupInvocationID"
Name 168 "gl_NumSubgroups" Name 167 "gl_NumSubgroups"
Name 169 "gl_SubgroupID" Name 168 "gl_SubgroupID"
Name 172 "gl_SubgroupEqMask" Name 171 "gl_SubgroupEqMask"
Name 173 "gl_SubgroupGeMask" Name 172 "gl_SubgroupGeMask"
Name 174 "gl_SubgroupGtMask" Name 173 "gl_SubgroupGtMask"
Name 175 "gl_SubgroupLeMask" Name 174 "gl_SubgroupLeMask"
Name 176 "gl_SubgroupLtMask" Name 175 "gl_SubgroupLtMask"
Name 182 "ballot" Name 181 "ballot"
Name 219 "ballot" Name 218 "ballot"
Name 254 "ballot" Name 253 "ballot"
Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId
MemberDecorate 54(gl_MeshPerVertexEXT) 0 BuiltIn Position MemberDecorate 54(gl_MeshPerVertexEXT) 0 BuiltIn Position
@ -98,19 +98,19 @@ spv.460.subgroupEXT.mesh
MemberDecorate 106(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV MemberDecorate 106(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV
MemberDecorate 106(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR MemberDecorate 106(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR
Decorate 106(gl_MeshPerPrimitiveEXT) Block Decorate 106(gl_MeshPerPrimitiveEXT) Block
Decorate 148(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT Decorate 147(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
Decorate 162(gl_SubgroupSize) RelaxedPrecision Decorate 161(gl_SubgroupSize) RelaxedPrecision
Decorate 162(gl_SubgroupSize) BuiltIn SubgroupSize Decorate 161(gl_SubgroupSize) BuiltIn SubgroupSize
Decorate 163(gl_SubgroupInvocationID) RelaxedPrecision Decorate 162(gl_SubgroupInvocationID) RelaxedPrecision
Decorate 163(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 162(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 168(gl_NumSubgroups) BuiltIn NumSubgroups Decorate 167(gl_NumSubgroups) BuiltIn NumSubgroups
Decorate 169(gl_SubgroupID) BuiltIn SubgroupId Decorate 168(gl_SubgroupID) BuiltIn SubgroupId
Decorate 172(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR Decorate 171(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
Decorate 173(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR Decorate 172(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR
Decorate 174(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR Decorate 173(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
Decorate 175(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR Decorate 174(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
Decorate 176(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR Decorate 175(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
Decorate 279 BuiltIn WorkgroupSize Decorate 278 BuiltIn WorkgroupSize
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
8: TypeFloat 32 8: TypeFloat 32
@ -161,33 +161,32 @@ spv.460.subgroupEXT.mesh
118: 59(int) Constant 8 118: 59(int) Constant 8
121: 105(bool) ConstantFalse 121: 105(bool) ConstantFalse
122: TypePointer Output 105(bool) 122: TypePointer Output 105(bool)
145: 30(int) Constant 96 145: TypeArray 33(ivec3) 47
146: TypeArray 33(ivec3) 145 146: TypePointer Output 145
147: TypePointer Output 146 147(gl_PrimitiveTriangleIndicesEXT): 146(ptr) Variable Output
148(gl_PrimitiveTriangleIndicesEXT): 147(ptr) Variable Output 148: 33(ivec3) ConstantComposite 78 78 78
149: 33(ivec3) ConstantComposite 78 78 78 149: TypePointer Output 33(ivec3)
150: TypePointer Output 33(ivec3) 153: 33(ivec3) ConstantComposite 80 80 80
154: 33(ivec3) ConstantComposite 80 80 80 161(gl_SubgroupSize): 37(ptr) Variable Input
162(gl_SubgroupSize): 37(ptr) Variable Input 162(gl_SubgroupInvocationID): 37(ptr) Variable Input
163(gl_SubgroupInvocationID): 37(ptr) Variable Input 163: 30(int) Constant 3400
164: 30(int) Constant 3400 164: 30(int) Constant 72
165: 30(int) Constant 72 165: 30(int) Constant 2056
166: 30(int) Constant 2056 167(gl_NumSubgroups): 37(ptr) Variable Input
168(gl_NumSubgroups): 37(ptr) Variable Input 168(gl_SubgroupID): 37(ptr) Variable Input
169(gl_SubgroupID): 37(ptr) Variable Input 169: TypeVector 30(int) 4
170: TypeVector 30(int) 4 170: TypePointer Input 169(ivec4)
171: TypePointer Input 170(ivec4) 171(gl_SubgroupEqMask): 170(ptr) Variable Input
172(gl_SubgroupEqMask): 171(ptr) Variable Input 172(gl_SubgroupGeMask): 170(ptr) Variable Input
173(gl_SubgroupGeMask): 171(ptr) Variable Input 173(gl_SubgroupGtMask): 170(ptr) Variable Input
174(gl_SubgroupGtMask): 171(ptr) Variable Input 174(gl_SubgroupLeMask): 170(ptr) Variable Input
175(gl_SubgroupLeMask): 171(ptr) Variable Input 175(gl_SubgroupLtMask): 170(ptr) Variable Input
176(gl_SubgroupLtMask): 171(ptr) Variable Input 180: TypePointer Function 169(ivec4)
181: TypePointer Function 170(ivec4) 183: 169(ivec4) ConstantComposite 78 78 78 78
184: 170(ivec4) ConstantComposite 78 78 78 78 197: 105(bool) ConstantTrue
198: 105(bool) ConstantTrue 254: 30(int) Constant 85
255: 30(int) Constant 85 255: 169(ivec4) ConstantComposite 254 36 36 36
256: 170(ivec4) ConstantComposite 255 36 36 36 278: 33(ivec3) ConstantComposite 47 78 78
279: 33(ivec3) ConstantComposite 47 78 78
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
32(iid): 31(ptr) Variable Function 32(iid): 31(ptr) Variable Function
@ -290,159 +289,159 @@ spv.460.subgroupEXT.mesh
Store 144 121 Store 144 121
MemoryBarrier 78 79 MemoryBarrier 78 79
ControlBarrier 80 80 79 ControlBarrier 80 80 79
151: 150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 60 150: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 60
Store 151 149 Store 150 148
152: 30(int) Load 46(primitiveCount) 151: 30(int) Load 46(primitiveCount)
153: 30(int) ISub 152 78 152: 30(int) ISub 151 78
155: 150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 153 154: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 152
Store 155 154 Store 154 153
155: 30(int) Load 40(gid)
156: 30(int) Load 40(gid) 156: 30(int) Load 40(gid)
157: 30(int) Load 40(gid) 157: 30(int) ISub 156 78
158: 30(int) ISub 157 78 158: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 157
159: 150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 158 159: 33(ivec3) Load 158
160: 33(ivec3) Load 159 160: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 155
161: 150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 156 Store 160 159
Store 161 160
MemoryBarrier 78 79 MemoryBarrier 78 79
ControlBarrier 80 80 79 ControlBarrier 80 80 79
Return Return
FunctionEnd FunctionEnd
6(basic_works(): 2 Function None 3 6(basic_works(): 2 Function None 3
7: Label 7: Label
ControlBarrier 52 52 164 ControlBarrier 52 52 163
MemoryBarrier 52 163
MemoryBarrier 52 164 MemoryBarrier 52 164
MemoryBarrier 52 165 MemoryBarrier 52 165
MemoryBarrier 52 166 166: 105(bool) GroupNonUniformElect 52
167: 105(bool) GroupNonUniformElect 52
MemoryBarrier 52 79 MemoryBarrier 52 79
Return Return
FunctionEnd FunctionEnd
13(ballot_works(vf4;): 2 Function None 11 13(ballot_works(vf4;): 2 Function None 11
12(f4): 10(ptr) FunctionParameter 12(f4): 10(ptr) FunctionParameter
14: Label 14: Label
182(ballot): 181(ptr) Variable Function 181(ballot): 180(ptr) Variable Function
177: 9(fvec4) Load 12(f4) 176: 9(fvec4) Load 12(f4)
178: 9(fvec4) GroupNonUniformBroadcast 52 177 36 177: 9(fvec4) GroupNonUniformBroadcast 52 176 36
179: 9(fvec4) Load 12(f4) 178: 9(fvec4) Load 12(f4)
180: 9(fvec4) GroupNonUniformBroadcastFirst 52 179 179: 9(fvec4) GroupNonUniformBroadcastFirst 52 178
183: 170(ivec4) GroupNonUniformBallot 52 121 182: 169(ivec4) GroupNonUniformBallot 52 121
Store 182(ballot) 183 Store 181(ballot) 182
185: 105(bool) GroupNonUniformInverseBallot 52 184 184: 105(bool) GroupNonUniformInverseBallot 52 183
186: 170(ivec4) Load 182(ballot) 185: 169(ivec4) Load 181(ballot)
187: 105(bool) GroupNonUniformBallotBitExtract 52 186 36 186: 105(bool) GroupNonUniformBallotBitExtract 52 185 36
188: 170(ivec4) Load 182(ballot) 187: 169(ivec4) Load 181(ballot)
189: 30(int) GroupNonUniformBallotBitCount 52 Reduce 188 188: 30(int) GroupNonUniformBallotBitCount 52 Reduce 187
190: 170(ivec4) Load 182(ballot) 189: 169(ivec4) Load 181(ballot)
191: 30(int) GroupNonUniformBallotBitCount 52 InclusiveScan 190 190: 30(int) GroupNonUniformBallotBitCount 52 InclusiveScan 189
192: 170(ivec4) Load 182(ballot) 191: 169(ivec4) Load 181(ballot)
193: 30(int) GroupNonUniformBallotBitCount 52 ExclusiveScan 192 192: 30(int) GroupNonUniformBallotBitCount 52 ExclusiveScan 191
194: 170(ivec4) Load 182(ballot) 193: 169(ivec4) Load 181(ballot)
195: 30(int) GroupNonUniformBallotFindLSB 52 194 194: 30(int) GroupNonUniformBallotFindLSB 52 193
196: 170(ivec4) Load 182(ballot) 195: 169(ivec4) Load 181(ballot)
197: 30(int) GroupNonUniformBallotFindMSB 52 196 196: 30(int) GroupNonUniformBallotFindMSB 52 195
Return Return
FunctionEnd FunctionEnd
16(vote_works(vf4;): 2 Function None 11 16(vote_works(vf4;): 2 Function None 11
15(f4): 10(ptr) FunctionParameter 15(f4): 10(ptr) FunctionParameter
17: Label 17: Label
199: 105(bool) GroupNonUniformAll 52 198 198: 105(bool) GroupNonUniformAll 52 197
200: 105(bool) GroupNonUniformAny 52 121 199: 105(bool) GroupNonUniformAny 52 121
201: 9(fvec4) Load 15(f4) 200: 9(fvec4) Load 15(f4)
202: 105(bool) GroupNonUniformAllEqual 52 201 201: 105(bool) GroupNonUniformAllEqual 52 200
Return Return
FunctionEnd FunctionEnd
19(shuffle_works(vf4;): 2 Function None 11 19(shuffle_works(vf4;): 2 Function None 11
18(f4): 10(ptr) FunctionParameter 18(f4): 10(ptr) FunctionParameter
20: Label 20: Label
203: 9(fvec4) Load 18(f4) 202: 9(fvec4) Load 18(f4)
204: 9(fvec4) GroupNonUniformShuffle 52 203 36 203: 9(fvec4) GroupNonUniformShuffle 52 202 36
205: 9(fvec4) Load 18(f4) 204: 9(fvec4) Load 18(f4)
206: 9(fvec4) GroupNonUniformShuffleXor 52 205 78 205: 9(fvec4) GroupNonUniformShuffleXor 52 204 78
207: 9(fvec4) Load 18(f4) 206: 9(fvec4) Load 18(f4)
208: 9(fvec4) GroupNonUniformShuffleUp 52 207 78 207: 9(fvec4) GroupNonUniformShuffleUp 52 206 78
209: 9(fvec4) Load 18(f4) 208: 9(fvec4) Load 18(f4)
210: 9(fvec4) GroupNonUniformShuffleDown 52 209 78 209: 9(fvec4) GroupNonUniformShuffleDown 52 208 78
Return Return
FunctionEnd FunctionEnd
22(arith_works(vf4;): 2 Function None 11 22(arith_works(vf4;): 2 Function None 11
21(f4): 10(ptr) FunctionParameter 21(f4): 10(ptr) FunctionParameter
23: Label 23: Label
219(ballot): 181(ptr) Variable Function 218(ballot): 180(ptr) Variable Function
211: 9(fvec4) Load 21(f4) 210: 9(fvec4) Load 21(f4)
212: 9(fvec4) GroupNonUniformFAdd 52 Reduce 211 211: 9(fvec4) GroupNonUniformFAdd 52 Reduce 210
213: 9(fvec4) Load 21(f4) 212: 9(fvec4) Load 21(f4)
214: 9(fvec4) GroupNonUniformFMul 52 Reduce 213 213: 9(fvec4) GroupNonUniformFMul 52 Reduce 212
215: 9(fvec4) Load 21(f4) 214: 9(fvec4) Load 21(f4)
216: 9(fvec4) GroupNonUniformFMin 52 Reduce 215 215: 9(fvec4) GroupNonUniformFMin 52 Reduce 214
217: 9(fvec4) Load 21(f4) 216: 9(fvec4) Load 21(f4)
218: 9(fvec4) GroupNonUniformFMax 52 Reduce 217 217: 9(fvec4) GroupNonUniformFMax 52 Reduce 216
220: 170(ivec4) Load 219(ballot) 219: 169(ivec4) Load 218(ballot)
221: 170(ivec4) GroupNonUniformBitwiseAnd 52 Reduce 220 220: 169(ivec4) GroupNonUniformBitwiseAnd 52 Reduce 219
222: 170(ivec4) Load 219(ballot) 221: 169(ivec4) Load 218(ballot)
223: 170(ivec4) GroupNonUniformBitwiseOr 52 Reduce 222 222: 169(ivec4) GroupNonUniformBitwiseOr 52 Reduce 221
224: 170(ivec4) Load 219(ballot) 223: 169(ivec4) Load 218(ballot)
225: 170(ivec4) GroupNonUniformBitwiseXor 52 Reduce 224 224: 169(ivec4) GroupNonUniformBitwiseXor 52 Reduce 223
226: 9(fvec4) Load 21(f4) 225: 9(fvec4) Load 21(f4)
227: 9(fvec4) GroupNonUniformFAdd 52 InclusiveScan 226 226: 9(fvec4) GroupNonUniformFAdd 52 InclusiveScan 225
228: 9(fvec4) Load 21(f4) 227: 9(fvec4) Load 21(f4)
229: 9(fvec4) GroupNonUniformFMul 52 InclusiveScan 228 228: 9(fvec4) GroupNonUniformFMul 52 InclusiveScan 227
230: 9(fvec4) Load 21(f4) 229: 9(fvec4) Load 21(f4)
231: 9(fvec4) GroupNonUniformFMin 52 InclusiveScan 230 230: 9(fvec4) GroupNonUniformFMin 52 InclusiveScan 229
232: 9(fvec4) Load 21(f4) 231: 9(fvec4) Load 21(f4)
233: 9(fvec4) GroupNonUniformFMax 52 InclusiveScan 232 232: 9(fvec4) GroupNonUniformFMax 52 InclusiveScan 231
234: 170(ivec4) Load 219(ballot) 233: 169(ivec4) Load 218(ballot)
235: 170(ivec4) GroupNonUniformBitwiseAnd 52 InclusiveScan 234 234: 169(ivec4) GroupNonUniformBitwiseAnd 52 InclusiveScan 233
236: 170(ivec4) Load 219(ballot) 235: 169(ivec4) Load 218(ballot)
237: 170(ivec4) GroupNonUniformBitwiseOr 52 InclusiveScan 236 236: 169(ivec4) GroupNonUniformBitwiseOr 52 InclusiveScan 235
238: 170(ivec4) Load 219(ballot) 237: 169(ivec4) Load 218(ballot)
239: 170(ivec4) GroupNonUniformBitwiseXor 52 InclusiveScan 238 238: 169(ivec4) GroupNonUniformBitwiseXor 52 InclusiveScan 237
240: 9(fvec4) Load 21(f4) 239: 9(fvec4) Load 21(f4)
241: 9(fvec4) GroupNonUniformFAdd 52 ExclusiveScan 240 240: 9(fvec4) GroupNonUniformFAdd 52 ExclusiveScan 239
242: 9(fvec4) Load 21(f4) 241: 9(fvec4) Load 21(f4)
243: 9(fvec4) GroupNonUniformFMul 52 ExclusiveScan 242 242: 9(fvec4) GroupNonUniformFMul 52 ExclusiveScan 241
244: 9(fvec4) Load 21(f4) 243: 9(fvec4) Load 21(f4)
245: 9(fvec4) GroupNonUniformFMin 52 ExclusiveScan 244 244: 9(fvec4) GroupNonUniformFMin 52 ExclusiveScan 243
246: 9(fvec4) Load 21(f4) 245: 9(fvec4) Load 21(f4)
247: 9(fvec4) GroupNonUniformFMax 52 ExclusiveScan 246 246: 9(fvec4) GroupNonUniformFMax 52 ExclusiveScan 245
248: 170(ivec4) Load 219(ballot) 247: 169(ivec4) Load 218(ballot)
249: 170(ivec4) GroupNonUniformBitwiseAnd 52 ExclusiveScan 248 248: 169(ivec4) GroupNonUniformBitwiseAnd 52 ExclusiveScan 247
250: 170(ivec4) Load 219(ballot) 249: 169(ivec4) Load 218(ballot)
251: 170(ivec4) GroupNonUniformBitwiseOr 52 ExclusiveScan 250 250: 169(ivec4) GroupNonUniformBitwiseOr 52 ExclusiveScan 249
252: 170(ivec4) Load 219(ballot) 251: 169(ivec4) Load 218(ballot)
253: 170(ivec4) GroupNonUniformBitwiseXor 52 ExclusiveScan 252 252: 169(ivec4) GroupNonUniformBitwiseXor 52 ExclusiveScan 251
Return Return
FunctionEnd FunctionEnd
25(clustered_works(vf4;): 2 Function None 11 25(clustered_works(vf4;): 2 Function None 11
24(f4): 10(ptr) FunctionParameter 24(f4): 10(ptr) FunctionParameter
26: Label 26: Label
254(ballot): 181(ptr) Variable Function 253(ballot): 180(ptr) Variable Function
Store 254(ballot) 256 Store 253(ballot) 255
257: 9(fvec4) Load 24(f4) 256: 9(fvec4) Load 24(f4)
258: 9(fvec4) GroupNonUniformFAdd 52 ClusteredReduce 257 80 257: 9(fvec4) GroupNonUniformFAdd 52 ClusteredReduce 256 80
259: 9(fvec4) Load 24(f4) 258: 9(fvec4) Load 24(f4)
260: 9(fvec4) GroupNonUniformFMul 52 ClusteredReduce 259 80 259: 9(fvec4) GroupNonUniformFMul 52 ClusteredReduce 258 80
261: 9(fvec4) Load 24(f4) 260: 9(fvec4) Load 24(f4)
262: 9(fvec4) GroupNonUniformFMin 52 ClusteredReduce 261 80 261: 9(fvec4) GroupNonUniformFMin 52 ClusteredReduce 260 80
263: 9(fvec4) Load 24(f4) 262: 9(fvec4) Load 24(f4)
264: 9(fvec4) GroupNonUniformFMax 52 ClusteredReduce 263 80 263: 9(fvec4) GroupNonUniformFMax 52 ClusteredReduce 262 80
265: 170(ivec4) Load 254(ballot) 264: 169(ivec4) Load 253(ballot)
266: 170(ivec4) GroupNonUniformBitwiseAnd 52 ClusteredReduce 265 80 265: 169(ivec4) GroupNonUniformBitwiseAnd 52 ClusteredReduce 264 80
267: 170(ivec4) Load 254(ballot) 266: 169(ivec4) Load 253(ballot)
268: 170(ivec4) GroupNonUniformBitwiseOr 52 ClusteredReduce 267 80 267: 169(ivec4) GroupNonUniformBitwiseOr 52 ClusteredReduce 266 80
269: 170(ivec4) Load 254(ballot) 268: 169(ivec4) Load 253(ballot)
270: 170(ivec4) GroupNonUniformBitwiseXor 52 ClusteredReduce 269 80 269: 169(ivec4) GroupNonUniformBitwiseXor 52 ClusteredReduce 268 80
Return Return
FunctionEnd FunctionEnd
28(quad_works(vf4;): 2 Function None 11 28(quad_works(vf4;): 2 Function None 11
27(f4): 10(ptr) FunctionParameter 27(f4): 10(ptr) FunctionParameter
29: Label 29: Label
271: 9(fvec4) Load 27(f4) 270: 9(fvec4) Load 27(f4)
272: 9(fvec4) GroupNonUniformQuadBroadcast 52 271 36 271: 9(fvec4) GroupNonUniformQuadBroadcast 52 270 36
273: 9(fvec4) Load 27(f4) 272: 9(fvec4) Load 27(f4)
274: 9(fvec4) GroupNonUniformQuadSwap 52 273 36 273: 9(fvec4) GroupNonUniformQuadSwap 52 272 36
275: 9(fvec4) Load 27(f4) 274: 9(fvec4) Load 27(f4)
276: 9(fvec4) GroupNonUniformQuadSwap 52 275 78 275: 9(fvec4) GroupNonUniformQuadSwap 52 274 78
277: 9(fvec4) Load 27(f4) 276: 9(fvec4) Load 27(f4)
278: 9(fvec4) GroupNonUniformQuadSwap 52 277 80 277: 9(fvec4) GroupNonUniformQuadSwap 52 276 80
Return Return
FunctionEnd FunctionEnd

View File

@ -1,7 +1,7 @@
spv.ext.meshShaderBuiltins.mesh spv.ext.meshShaderBuiltins.mesh
// Module Version 10400 // Module Version 10400
// Generated by (magic number): 8000b // Generated by (magic number): 8000b
// Id's are bound by 159 // Id's are bound by 158
Capability ClipDistance Capability ClipDistance
Capability CullDistance Capability CullDistance
@ -13,7 +13,7 @@ spv.ext.meshShaderBuiltins.mesh
Extension "SPV_KHR_fragment_shading_rate" Extension "SPV_KHR_fragment_shading_rate"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint MeshEXT 4 "main" 13 19 24 41 93 135 153 156 EntryPoint MeshEXT 4 "main" 13 19 24 41 93 134 152 155
ExecutionMode 4 LocalSize 32 1 1 ExecutionMode 4 LocalSize 32 1 1
ExecutionMode 4 OutputVertices 81 ExecutionMode 4 OutputVertices 81
ExecutionMode 4 OutputPrimitivesNV 32 ExecutionMode 4 OutputPrimitivesNV 32
@ -45,11 +45,11 @@ spv.ext.meshShaderBuiltins.mesh
MemberName 90(gl_MeshPerPrimitiveEXT) 3 "gl_CullPrimitiveEXT" MemberName 90(gl_MeshPerPrimitiveEXT) 3 "gl_CullPrimitiveEXT"
MemberName 90(gl_MeshPerPrimitiveEXT) 4 "gl_PrimitiveShadingRateEXT" MemberName 90(gl_MeshPerPrimitiveEXT) 4 "gl_PrimitiveShadingRateEXT"
Name 93 "gl_MeshPrimitivesEXT" Name 93 "gl_MeshPrimitivesEXT"
Name 135 "gl_PrimitiveTriangleIndicesEXT" Name 134 "gl_PrimitiveTriangleIndicesEXT"
Name 151 "id" Name 150 "id"
Name 153 "gl_DrawIDARB" Name 152 "gl_DrawIDARB"
Name 155 "viewIdx" Name 154 "viewIdx"
Name 156 "gl_ViewIndex" Name 155 "gl_ViewIndex"
Decorate 13(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 13(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId
Decorate 24(gl_NumWorkGroups) BuiltIn NumWorkgroups Decorate 24(gl_NumWorkGroups) BuiltIn NumWorkgroups
@ -69,10 +69,10 @@ spv.ext.meshShaderBuiltins.mesh
MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV
MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR
Decorate 90(gl_MeshPerPrimitiveEXT) Block Decorate 90(gl_MeshPerPrimitiveEXT) Block
Decorate 135(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT Decorate 134(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
Decorate 153(gl_DrawIDARB) BuiltIn DrawIndex Decorate 152(gl_DrawIDARB) BuiltIn DrawIndex
Decorate 156(gl_ViewIndex) BuiltIn ViewIndex Decorate 155(gl_ViewIndex) BuiltIn ViewIndex
Decorate 158 BuiltIn WorkgroupSize Decorate 157 BuiltIn WorkgroupSize
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
8: TypeInt 32 0 8: TypeInt 32 0
@ -123,19 +123,18 @@ spv.ext.meshShaderBuiltins.mesh
102: 43(int) Constant 8 102: 43(int) Constant 8
105: 89(bool) ConstantFalse 105: 89(bool) ConstantFalse
106: TypePointer Output 89(bool) 106: TypePointer Output 89(bool)
132: 8(int) Constant 96 132: TypeArray 11(ivec3) 29
133: TypeArray 11(ivec3) 132 133: TypePointer Output 132
134: TypePointer Output 133 134(gl_PrimitiveTriangleIndicesEXT): 133(ptr) Variable Output
135(gl_PrimitiveTriangleIndicesEXT): 134(ptr) Variable Output 135: 8(int) Constant 257
136: 8(int) Constant 257 136: 11(ivec3) ConstantComposite 135 135 135
137: 11(ivec3) ConstantComposite 136 136 136 137: TypePointer Output 11(ivec3)
138: TypePointer Output 11(ivec3) 141: 11(ivec3) ConstantComposite 64 64 64
142: 11(ivec3) ConstantComposite 64 64 64 149: TypePointer Function 43(int)
150: TypePointer Function 43(int) 151: TypePointer Input 43(int)
152: TypePointer Input 43(int) 152(gl_DrawIDARB): 151(ptr) Variable Input
153(gl_DrawIDARB): 152(ptr) Variable Input 155(gl_ViewIndex): 151(ptr) Variable Input
156(gl_ViewIndex): 152(ptr) Variable Input 157: 11(ivec3) ConstantComposite 29 62 62
158: 11(ivec3) ConstantComposite 29 62 62
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
10(iid): 9(ptr) Variable Function 10(iid): 9(ptr) Variable Function
@ -244,30 +243,30 @@ spv.ext.meshShaderBuiltins.mesh
Store 131 130 Store 131 130
MemoryBarrier 62 63 MemoryBarrier 62 63
ControlBarrier 64 64 63 ControlBarrier 64 64 63
139: 138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 44 138: 137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 44
Store 139 137 Store 138 136
140: 8(int) Load 28(primitiveCount) 139: 8(int) Load 28(primitiveCount)
141: 8(int) ISub 140 62 140: 8(int) ISub 139 62
143: 138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 141 142: 137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 140
Store 143 142 Store 142 141
143: 8(int) Load 18(gid)
144: 8(int) Load 18(gid) 144: 8(int) Load 18(gid)
145: 8(int) Load 18(gid) 145: 8(int) ISub 144 62
146: 8(int) ISub 145 62 146: 137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 145
147: 138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 146 147: 11(ivec3) Load 146
148: 11(ivec3) Load 147 148: 137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 143
149: 138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 144 Store 148 147
Store 149 148
MemoryBarrier 62 63 MemoryBarrier 62 63
ControlBarrier 64 64 63 ControlBarrier 64 64 63
Return Return
FunctionEnd FunctionEnd
6(testAdditionalBuiltins(): 2 Function None 3 6(testAdditionalBuiltins(): 2 Function None 3
7: Label 7: Label
151(id): 150(ptr) Variable Function 150(id): 149(ptr) Variable Function
155(viewIdx): 150(ptr) Variable Function 154(viewIdx): 149(ptr) Variable Function
154: 43(int) Load 153(gl_DrawIDARB) 153: 43(int) Load 152(gl_DrawIDARB)
Store 151(id) 154 Store 150(id) 153
157: 43(int) Load 156(gl_ViewIndex) 156: 43(int) Load 155(gl_ViewIndex)
Store 155(viewIdx) 157 Store 154(viewIdx) 156
Return Return
FunctionEnd FunctionEnd

View File

@ -836,12 +836,16 @@ int TParseContext::getIoArrayImplicitSize(const TQualifier &qualifier, TString *
} else if (language == EShLangMesh) { } else if (language == EShLangMesh) {
unsigned int maxPrimitives = unsigned int maxPrimitives =
intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0; intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;
if (qualifier.builtIn == EbvPrimitiveIndicesNV || qualifier.builtIn == EbvPrimitiveTriangleIndicesEXT || if (qualifier.builtIn == EbvPrimitiveIndicesNV) {
qualifier.builtIn == EbvPrimitiveLineIndicesEXT || qualifier.builtIn == EbvPrimitivePointIndicesEXT) {
expectedSize = maxPrimitives * TQualifier::mapGeometryToSize(intermediate.getOutputPrimitive()); expectedSize = maxPrimitives * TQualifier::mapGeometryToSize(intermediate.getOutputPrimitive());
str = "max_primitives*"; str = "max_primitives*";
str += TQualifier::getGeometryString(intermediate.getOutputPrimitive()); str += TQualifier::getGeometryString(intermediate.getOutputPrimitive());
} }
else if (qualifier.builtIn == EbvPrimitiveTriangleIndicesEXT || qualifier.builtIn == EbvPrimitiveLineIndicesEXT ||
qualifier.builtIn == EbvPrimitivePointIndicesEXT) {
expectedSize = maxPrimitives;
str = "max_primitives";
}
else if (qualifier.isPerPrimitive()) { else if (qualifier.isPerPrimitive()) {
expectedSize = maxPrimitives; expectedSize = maxPrimitives;
str = "max_primitives"; str = "max_primitives";