glslang/Test/baseResults/spv.460.subgroupEXT.mesh.out
Arseny Kapoulkine 34d4f78f03
Fix interaction between GL_EXT_mesh_shader and GL_EXT_fragment_shading_rate
Before this change, using gl_MeshPrimitivesEXT in mesh shader would
unconditionally create gl_MeshPrimitivesEXT.gl_PrimitiveShadingRateEXT
field and add PrimitiveShadingRateKHR capability to the output SPIRV
file, which would subsequently trigger validation errors when creating
the shader module unless the application requested primitive shading
rate feature.

What should happen instead is that unless GL_EXT_fragment_shading_rate
extension is enabled, we should not allow using
gl_PrimitiveShadingRateEXT and should not emit the associated fields
into the output.

This change fixes this by using existing filterMember mechanism that is
already used in a few other cases like this, and adjusting the required
extension on the field member which will generate an error when
gl_PrimitiveShadingRateEXT is used without enabling the extension.
2023-08-07 11:38:17 -06:00

443 lines
24 KiB
Plaintext

spv.460.subgroupEXT.mesh
// Module Version 10400
// Generated by (magic number): 8000b
// Id's are bound by 279
Capability ClipDistance
Capability CullDistance
Capability GroupNonUniform
Capability GroupNonUniformVote
Capability GroupNonUniformArithmetic
Capability GroupNonUniformBallot
Capability GroupNonUniformShuffle
Capability GroupNonUniformShuffleRelative
Capability GroupNonUniformClustered
Capability GroupNonUniformQuad
Capability MeshShadingEXT
Extension "SPV_EXT_mesh_shader"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
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 OutputVertices 81
ExecutionMode 4 OutputPrimitivesNV 32
ExecutionMode 4 OutputTrianglesNV
Source GLSL 460
SourceExtension "GL_EXT_mesh_shader"
SourceExtension "GL_KHR_shader_subgroup_arithmetic"
SourceExtension "GL_KHR_shader_subgroup_ballot"
SourceExtension "GL_KHR_shader_subgroup_basic"
SourceExtension "GL_KHR_shader_subgroup_clustered"
SourceExtension "GL_KHR_shader_subgroup_quad"
SourceExtension "GL_KHR_shader_subgroup_shuffle"
SourceExtension "GL_KHR_shader_subgroup_shuffle_relative"
SourceExtension "GL_KHR_shader_subgroup_vote"
Name 4 "main"
Name 6 "basic_works("
Name 13 "ballot_works(vf4;"
Name 12 "f4"
Name 16 "vote_works(vf4;"
Name 15 "f4"
Name 19 "shuffle_works(vf4;"
Name 18 "f4"
Name 22 "arith_works(vf4;"
Name 21 "f4"
Name 25 "clustered_works(vf4;"
Name 24 "f4"
Name 28 "quad_works(vf4;"
Name 27 "f4"
Name 32 "iid"
Name 35 "gl_LocalInvocationID"
Name 40 "gid"
Name 41 "gl_WorkGroupID"
Name 44 "vertexCount"
Name 46 "primitiveCount"
Name 54 "gl_MeshPerVertexEXT"
MemberName 54(gl_MeshPerVertexEXT) 0 "gl_Position"
MemberName 54(gl_MeshPerVertexEXT) 1 "gl_PointSize"
MemberName 54(gl_MeshPerVertexEXT) 2 "gl_ClipDistance"
MemberName 54(gl_MeshPerVertexEXT) 3 "gl_CullDistance"
Name 57 "gl_MeshVerticesEXT"
Name 106 "gl_MeshPerPrimitiveEXT"
MemberName 106(gl_MeshPerPrimitiveEXT) 0 "gl_PrimitiveID"
MemberName 106(gl_MeshPerPrimitiveEXT) 1 "gl_Layer"
MemberName 106(gl_MeshPerPrimitiveEXT) 2 "gl_ViewportIndex"
MemberName 106(gl_MeshPerPrimitiveEXT) 3 "gl_CullPrimitiveEXT"
Name 109 "gl_MeshPrimitivesEXT"
Name 147 "gl_PrimitiveTriangleIndicesEXT"
Name 161 "gl_SubgroupSize"
Name 162 "gl_SubgroupInvocationID"
Name 167 "gl_NumSubgroups"
Name 168 "gl_SubgroupID"
Name 171 "gl_SubgroupEqMask"
Name 172 "gl_SubgroupGeMask"
Name 173 "gl_SubgroupGtMask"
Name 174 "gl_SubgroupLeMask"
Name 175 "gl_SubgroupLtMask"
Name 181 "ballot"
Name 218 "ballot"
Name 253 "ballot"
Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId
Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId
MemberDecorate 54(gl_MeshPerVertexEXT) 0 BuiltIn Position
MemberDecorate 54(gl_MeshPerVertexEXT) 1 BuiltIn PointSize
MemberDecorate 54(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance
MemberDecorate 54(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance
Decorate 54(gl_MeshPerVertexEXT) Block
MemberDecorate 106(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
MemberDecorate 106(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
MemberDecorate 106(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
MemberDecorate 106(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
MemberDecorate 106(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
MemberDecorate 106(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
MemberDecorate 106(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
MemberDecorate 106(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
Decorate 106(gl_MeshPerPrimitiveEXT) Block
Decorate 147(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
Decorate 161(gl_SubgroupSize) RelaxedPrecision
Decorate 161(gl_SubgroupSize) BuiltIn SubgroupSize
Decorate 162(gl_SubgroupInvocationID) RelaxedPrecision
Decorate 162(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 167(gl_NumSubgroups) BuiltIn NumSubgroups
Decorate 168(gl_SubgroupID) BuiltIn SubgroupId
Decorate 171(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
Decorate 172(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR
Decorate 173(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
Decorate 174(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
Decorate 175(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
Decorate 278 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
8: TypeFloat 32
9: TypeVector 8(float) 4
10: TypePointer Function 9(fvec4)
11: TypeFunction 2 10(ptr)
30: TypeInt 32 0
31: TypePointer Function 30(int)
33: TypeVector 30(int) 3
34: TypePointer Input 33(ivec3)
35(gl_LocalInvocationID): 34(ptr) Variable Input
36: 30(int) Constant 0
37: TypePointer Input 30(int)
41(gl_WorkGroupID): 34(ptr) Variable Input
45: 30(int) Constant 81
47: 30(int) Constant 32
50: 30(int) Constant 4
51: TypeArray 8(float) 50
52: 30(int) Constant 3
53: TypeArray 8(float) 52
54(gl_MeshPerVertexEXT): TypeStruct 9(fvec4) 8(float) 51 53
55: TypeArray 54(gl_MeshPerVertexEXT) 45
56: TypePointer Output 55
57(gl_MeshVerticesEXT): 56(ptr) Variable Output
59: TypeInt 32 1
60: 59(int) Constant 0
61: 8(float) Constant 1065353216
62: 9(fvec4) ConstantComposite 61 61 61 61
63: TypePointer Output 9(fvec4)
66: 59(int) Constant 1
67: 8(float) Constant 1073741824
68: TypePointer Output 8(float)
71: 59(int) Constant 2
72: 59(int) Constant 3
73: 8(float) Constant 1077936128
76: 8(float) Constant 1082130432
78: 30(int) Constant 1
79: 30(int) Constant 264
80: 30(int) Constant 2
105: TypeBool
106(gl_MeshPerPrimitiveEXT): TypeStruct 59(int) 59(int) 59(int) 105(bool)
107: TypeArray 106(gl_MeshPerPrimitiveEXT) 47
108: TypePointer Output 107
109(gl_MeshPrimitivesEXT): 108(ptr) Variable Output
111: 59(int) Constant 6
112: TypePointer Output 59(int)
115: 59(int) Constant 7
118: 59(int) Constant 8
121: 105(bool) ConstantFalse
122: TypePointer Output 105(bool)
145: TypeArray 33(ivec3) 47
146: TypePointer Output 145
147(gl_PrimitiveTriangleIndicesEXT): 146(ptr) Variable Output
148: 33(ivec3) ConstantComposite 78 78 78
149: TypePointer Output 33(ivec3)
153: 33(ivec3) ConstantComposite 80 80 80
161(gl_SubgroupSize): 37(ptr) Variable Input
162(gl_SubgroupInvocationID): 37(ptr) Variable Input
163: 30(int) Constant 3400
164: 30(int) Constant 72
165: 30(int) Constant 2056
167(gl_NumSubgroups): 37(ptr) Variable Input
168(gl_SubgroupID): 37(ptr) Variable Input
169: TypeVector 30(int) 4
170: TypePointer Input 169(ivec4)
171(gl_SubgroupEqMask): 170(ptr) Variable Input
172(gl_SubgroupGeMask): 170(ptr) Variable Input
173(gl_SubgroupGtMask): 170(ptr) Variable Input
174(gl_SubgroupLeMask): 170(ptr) Variable Input
175(gl_SubgroupLtMask): 170(ptr) Variable Input
180: TypePointer Function 169(ivec4)
183: 169(ivec4) ConstantComposite 78 78 78 78
197: 105(bool) ConstantTrue
254: 30(int) Constant 85
255: 169(ivec4) ConstantComposite 254 36 36 36
278: 33(ivec3) ConstantComposite 47 78 78
4(main): 2 Function None 3
5: Label
32(iid): 31(ptr) Variable Function
40(gid): 31(ptr) Variable Function
44(vertexCount): 31(ptr) Variable Function
46(primitiveCount): 31(ptr) Variable Function
38: 37(ptr) AccessChain 35(gl_LocalInvocationID) 36
39: 30(int) Load 38
Store 32(iid) 39
42: 37(ptr) AccessChain 41(gl_WorkGroupID) 36
43: 30(int) Load 42
Store 40(gid) 43
Store 44(vertexCount) 45
Store 46(primitiveCount) 47
48: 30(int) Load 44(vertexCount)
49: 30(int) Load 46(primitiveCount)
SetMeshOutputsEXT 48 49
58: 30(int) Load 32(iid)
64: 63(ptr) AccessChain 57(gl_MeshVerticesEXT) 58 60
Store 64 62
65: 30(int) Load 32(iid)
69: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 65 66
Store 69 67
70: 30(int) Load 32(iid)
74: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 70 71 72
Store 74 73
75: 30(int) Load 32(iid)
77: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 75 72 71
Store 77 76
MemoryBarrier 78 79
ControlBarrier 80 80 79
81: 30(int) Load 32(iid)
82: 30(int) IAdd 81 78
83: 30(int) Load 32(iid)
84: 63(ptr) AccessChain 57(gl_MeshVerticesEXT) 83 60
85: 9(fvec4) Load 84
86: 63(ptr) AccessChain 57(gl_MeshVerticesEXT) 82 60
Store 86 85
87: 30(int) Load 32(iid)
88: 30(int) IAdd 87 78
89: 30(int) Load 32(iid)
90: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 89 66
91: 8(float) Load 90
92: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 88 66
Store 92 91
93: 30(int) Load 32(iid)
94: 30(int) IAdd 93 78
95: 30(int) Load 32(iid)
96: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 95 71 72
97: 8(float) Load 96
98: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 94 71 72
Store 98 97
99: 30(int) Load 32(iid)
100: 30(int) IAdd 99 78
101: 30(int) Load 32(iid)
102: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 101 72 71
103: 8(float) Load 102
104: 68(ptr) AccessChain 57(gl_MeshVerticesEXT) 100 72 71
Store 104 103
MemoryBarrier 78 79
ControlBarrier 80 80 79
110: 30(int) Load 32(iid)
113: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 110 60
Store 113 111
114: 30(int) Load 32(iid)
116: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 114 66
Store 116 115
117: 30(int) Load 32(iid)
119: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 117 71
Store 119 118
120: 30(int) Load 32(iid)
123: 122(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 120 72
Store 123 121
MemoryBarrier 78 79
ControlBarrier 80 80 79
124: 30(int) Load 32(iid)
125: 30(int) IAdd 124 78
126: 30(int) Load 32(iid)
127: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 126 60
128: 59(int) Load 127
129: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 125 60
Store 129 128
130: 30(int) Load 32(iid)
131: 30(int) IAdd 130 78
132: 30(int) Load 32(iid)
133: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 132 66
134: 59(int) Load 133
135: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 131 66
Store 135 134
136: 30(int) Load 32(iid)
137: 30(int) IAdd 136 78
138: 30(int) Load 32(iid)
139: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 138 71
140: 59(int) Load 139
141: 112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 137 71
Store 141 140
142: 30(int) Load 32(iid)
143: 30(int) IAdd 142 78
144: 122(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 143 72
Store 144 121
MemoryBarrier 78 79
ControlBarrier 80 80 79
150: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 60
Store 150 148
151: 30(int) Load 46(primitiveCount)
152: 30(int) ISub 151 78
154: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 152
Store 154 153
155: 30(int) Load 40(gid)
156: 30(int) Load 40(gid)
157: 30(int) ISub 156 78
158: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 157
159: 33(ivec3) Load 158
160: 149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 155
Store 160 159
MemoryBarrier 78 79
ControlBarrier 80 80 79
Return
FunctionEnd
6(basic_works(): 2 Function None 3
7: Label
ControlBarrier 52 52 163
MemoryBarrier 52 163
MemoryBarrier 52 164
MemoryBarrier 52 165
166: 105(bool) GroupNonUniformElect 52
MemoryBarrier 52 79
Return
FunctionEnd
13(ballot_works(vf4;): 2 Function None 11
12(f4): 10(ptr) FunctionParameter
14: Label
181(ballot): 180(ptr) Variable Function
176: 9(fvec4) Load 12(f4)
177: 9(fvec4) GroupNonUniformBroadcast 52 176 36
178: 9(fvec4) Load 12(f4)
179: 9(fvec4) GroupNonUniformBroadcastFirst 52 178
182: 169(ivec4) GroupNonUniformBallot 52 121
Store 181(ballot) 182
184: 105(bool) GroupNonUniformInverseBallot 52 183
185: 169(ivec4) Load 181(ballot)
186: 105(bool) GroupNonUniformBallotBitExtract 52 185 36
187: 169(ivec4) Load 181(ballot)
188: 30(int) GroupNonUniformBallotBitCount 52 Reduce 187
189: 169(ivec4) Load 181(ballot)
190: 30(int) GroupNonUniformBallotBitCount 52 InclusiveScan 189
191: 169(ivec4) Load 181(ballot)
192: 30(int) GroupNonUniformBallotBitCount 52 ExclusiveScan 191
193: 169(ivec4) Load 181(ballot)
194: 30(int) GroupNonUniformBallotFindLSB 52 193
195: 169(ivec4) Load 181(ballot)
196: 30(int) GroupNonUniformBallotFindMSB 52 195
Return
FunctionEnd
16(vote_works(vf4;): 2 Function None 11
15(f4): 10(ptr) FunctionParameter
17: Label
198: 105(bool) GroupNonUniformAll 52 197
199: 105(bool) GroupNonUniformAny 52 121
200: 9(fvec4) Load 15(f4)
201: 105(bool) GroupNonUniformAllEqual 52 200
Return
FunctionEnd
19(shuffle_works(vf4;): 2 Function None 11
18(f4): 10(ptr) FunctionParameter
20: Label
202: 9(fvec4) Load 18(f4)
203: 9(fvec4) GroupNonUniformShuffle 52 202 36
204: 9(fvec4) Load 18(f4)
205: 9(fvec4) GroupNonUniformShuffleXor 52 204 78
206: 9(fvec4) Load 18(f4)
207: 9(fvec4) GroupNonUniformShuffleUp 52 206 78
208: 9(fvec4) Load 18(f4)
209: 9(fvec4) GroupNonUniformShuffleDown 52 208 78
Return
FunctionEnd
22(arith_works(vf4;): 2 Function None 11
21(f4): 10(ptr) FunctionParameter
23: Label
218(ballot): 180(ptr) Variable Function
210: 9(fvec4) Load 21(f4)
211: 9(fvec4) GroupNonUniformFAdd 52 Reduce 210
212: 9(fvec4) Load 21(f4)
213: 9(fvec4) GroupNonUniformFMul 52 Reduce 212
214: 9(fvec4) Load 21(f4)
215: 9(fvec4) GroupNonUniformFMin 52 Reduce 214
216: 9(fvec4) Load 21(f4)
217: 9(fvec4) GroupNonUniformFMax 52 Reduce 216
219: 169(ivec4) Load 218(ballot)
220: 169(ivec4) GroupNonUniformBitwiseAnd 52 Reduce 219
221: 169(ivec4) Load 218(ballot)
222: 169(ivec4) GroupNonUniformBitwiseOr 52 Reduce 221
223: 169(ivec4) Load 218(ballot)
224: 169(ivec4) GroupNonUniformBitwiseXor 52 Reduce 223
225: 9(fvec4) Load 21(f4)
226: 9(fvec4) GroupNonUniformFAdd 52 InclusiveScan 225
227: 9(fvec4) Load 21(f4)
228: 9(fvec4) GroupNonUniformFMul 52 InclusiveScan 227
229: 9(fvec4) Load 21(f4)
230: 9(fvec4) GroupNonUniformFMin 52 InclusiveScan 229
231: 9(fvec4) Load 21(f4)
232: 9(fvec4) GroupNonUniformFMax 52 InclusiveScan 231
233: 169(ivec4) Load 218(ballot)
234: 169(ivec4) GroupNonUniformBitwiseAnd 52 InclusiveScan 233
235: 169(ivec4) Load 218(ballot)
236: 169(ivec4) GroupNonUniformBitwiseOr 52 InclusiveScan 235
237: 169(ivec4) Load 218(ballot)
238: 169(ivec4) GroupNonUniformBitwiseXor 52 InclusiveScan 237
239: 9(fvec4) Load 21(f4)
240: 9(fvec4) GroupNonUniformFAdd 52 ExclusiveScan 239
241: 9(fvec4) Load 21(f4)
242: 9(fvec4) GroupNonUniformFMul 52 ExclusiveScan 241
243: 9(fvec4) Load 21(f4)
244: 9(fvec4) GroupNonUniformFMin 52 ExclusiveScan 243
245: 9(fvec4) Load 21(f4)
246: 9(fvec4) GroupNonUniformFMax 52 ExclusiveScan 245
247: 169(ivec4) Load 218(ballot)
248: 169(ivec4) GroupNonUniformBitwiseAnd 52 ExclusiveScan 247
249: 169(ivec4) Load 218(ballot)
250: 169(ivec4) GroupNonUniformBitwiseOr 52 ExclusiveScan 249
251: 169(ivec4) Load 218(ballot)
252: 169(ivec4) GroupNonUniformBitwiseXor 52 ExclusiveScan 251
Return
FunctionEnd
25(clustered_works(vf4;): 2 Function None 11
24(f4): 10(ptr) FunctionParameter
26: Label
253(ballot): 180(ptr) Variable Function
Store 253(ballot) 255
256: 9(fvec4) Load 24(f4)
257: 9(fvec4) GroupNonUniformFAdd 52 ClusteredReduce 256 80
258: 9(fvec4) Load 24(f4)
259: 9(fvec4) GroupNonUniformFMul 52 ClusteredReduce 258 80
260: 9(fvec4) Load 24(f4)
261: 9(fvec4) GroupNonUniformFMin 52 ClusteredReduce 260 80
262: 9(fvec4) Load 24(f4)
263: 9(fvec4) GroupNonUniformFMax 52 ClusteredReduce 262 80
264: 169(ivec4) Load 253(ballot)
265: 169(ivec4) GroupNonUniformBitwiseAnd 52 ClusteredReduce 264 80
266: 169(ivec4) Load 253(ballot)
267: 169(ivec4) GroupNonUniformBitwiseOr 52 ClusteredReduce 266 80
268: 169(ivec4) Load 253(ballot)
269: 169(ivec4) GroupNonUniformBitwiseXor 52 ClusteredReduce 268 80
Return
FunctionEnd
28(quad_works(vf4;): 2 Function None 11
27(f4): 10(ptr) FunctionParameter
29: Label
270: 9(fvec4) Load 27(f4)
271: 9(fvec4) GroupNonUniformQuadBroadcast 52 270 36
272: 9(fvec4) Load 27(f4)
273: 9(fvec4) GroupNonUniformQuadSwap 52 272 36
274: 9(fvec4) Load 27(f4)
275: 9(fvec4) GroupNonUniformQuadSwap 52 274 78
276: 9(fvec4) Load 27(f4)
277: 9(fvec4) GroupNonUniformQuadSwap 52 276 80
Return
FunctionEnd