blob: 7b38001d8d4454433be996d015c7ac91d478470b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
; SPIR-V
; Version: 1.4
; Generator: Unknown(30017); 21022
; Bound: 89
; Schema: 0
OpCapability Shader
OpCapability Geometry
OpCapability ShaderViewportIndexLayerEXT
OpCapability MeshShadingEXT
OpExtension "SPV_EXT_mesh_shader"
OpExtension "SPV_EXT_shader_viewport_index_layer"
OpMemoryModel Logical GLSL450
OpEntryPoint MeshEXT %main "main" %SV_Position %B %SV_CullPrimitive %SV_RenderTargetArrayIndex %SV_PrimitiveID %C %indices %32 %gl_LocalInvocationIndex %38
OpExecutionMode %main OutputVertices 24
OpExecutionMode %main OutputPrimitivesNV 8
OpExecutionMode %main OutputTrianglesNV
OpExecutionMode %main LocalSize 2 3 4
OpName %main "main"
OpName %SV_Position "SV_Position"
OpName %B "B"
OpName %SV_CullPrimitive "SV_CullPrimitive"
OpName %SV_RenderTargetArrayIndex "SV_RenderTargetArrayIndex"
OpName %SV_PrimitiveID "SV_PrimitiveID"
OpName %C "C"
OpName %indices "indices"
OpName %_ ""
OpDecorate %SV_Position BuiltIn Position
OpDecorate %B Location 1
OpDecorate %SV_CullPrimitive BuiltIn CullPrimitiveEXT
OpDecorate %SV_CullPrimitive PerPrimitiveNV
OpDecorate %SV_RenderTargetArrayIndex BuiltIn Layer
OpDecorate %SV_RenderTargetArrayIndex PerPrimitiveNV
OpDecorate %SV_PrimitiveID BuiltIn PrimitiveId
OpDecorate %SV_PrimitiveID PerPrimitiveNV
OpDecorate %C Location 3
OpDecorate %C PerPrimitiveNV
OpDecorate %indices BuiltIn PrimitiveTriangleIndicesEXT
OpDecorate %gl_LocalInvocationIndex BuiltIn LocalInvocationIndex
%void = OpTypeVoid
%2 = OpTypeFunction %void
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%uint = OpTypeInt 32 0
%uint_24 = OpConstant %uint 24
%_arr_v4float_uint_24 = OpTypeArray %v4float %uint_24
%_ptr_Output__arr_v4float_uint_24 = OpTypePointer Output %_arr_v4float_uint_24
%SV_Position = OpVariable %_ptr_Output__arr_v4float_uint_24 Output
%B = OpVariable %_ptr_Output__arr_v4float_uint_24 Output
%bool = OpTypeBool
%uint_8 = OpConstant %uint 8
%_arr_bool_uint_8 = OpTypeArray %bool %uint_8
%_ptr_Output__arr_bool_uint_8 = OpTypePointer Output %_arr_bool_uint_8
%SV_CullPrimitive = OpVariable %_ptr_Output__arr_bool_uint_8 Output
%_arr_uint_uint_8 = OpTypeArray %uint %uint_8
%_ptr_Output__arr_uint_uint_8 = OpTypePointer Output %_arr_uint_uint_8
%SV_RenderTargetArrayIndex = OpVariable %_ptr_Output__arr_uint_uint_8 Output
%SV_PrimitiveID = OpVariable %_ptr_Output__arr_uint_uint_8 Output
%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
%_ptr_Output__arr_v4float_uint_8 = OpTypePointer Output %_arr_v4float_uint_8
%C = OpVariable %_ptr_Output__arr_v4float_uint_8 Output
%v3uint = OpTypeVector %uint 3
%_arr_v3uint_uint_8 = OpTypeArray %v3uint %uint_8
%_ptr_Output__arr_v3uint_uint_8 = OpTypePointer Output %_arr_v3uint_uint_8
%indices = OpVariable %_ptr_Output__arr_v3uint_uint_8 Output
%uint_64 = OpConstant %uint 64
%_arr_float_uint_64 = OpTypeArray %float %uint_64
%_ptr_Workgroup__arr_float_uint_64 = OpTypePointer Workgroup %_arr_float_uint_64
%32 = OpVariable %_ptr_Workgroup__arr_float_uint_64 Workgroup
%_ptr_Input_uint = OpTypePointer Input %uint
%gl_LocalInvocationIndex = OpVariable %_ptr_Input_uint Input
%_ = OpTypeStruct %float
%_ptr_TaskPayloadWorkgroupEXT__ = OpTypePointer TaskPayloadWorkgroupEXT %_
%38 = OpVariable %_ptr_TaskPayloadWorkgroupEXT__ TaskPayloadWorkgroupEXT
%_ptr_Workgroup_float = OpTypePointer Workgroup %float
%uint_2 = OpConstant %uint 2
%uint_264 = OpConstant %uint 264
%_ptr_Output_float = OpTypePointer Output %float
%uint_0 = OpConstant %uint 0
%uint_1 = OpConstant %uint 1
%uint_3 = OpConstant %uint 3
%_ptr_TaskPayloadWorkgroupEXT_float = OpTypePointer TaskPayloadWorkgroupEXT %float
%_ptr_Output_v3uint = OpTypePointer Output %v3uint
%_ptr_Output_bool = OpTypePointer Output %bool
%_ptr_Output_uint = OpTypePointer Output %uint
%main = OpFunction %void None %2
%4 = OpLabel
OpBranch %85
%85 = OpLabel
%35 = OpLoad %uint %gl_LocalInvocationIndex
%39 = OpConvertUToF %float %35
%41 = OpAccessChain %_ptr_Workgroup_float %32 %35
OpStore %41 %39
OpControlBarrier %uint_2 %uint_2 %uint_264
OpSetMeshOutputsEXT %uint_24 %uint_8
%44 = OpLoad %float %41
%46 = OpAccessChain %_ptr_Output_float %SV_Position %35 %uint_0
OpStore %46 %44
%48 = OpAccessChain %_ptr_Output_float %SV_Position %35 %uint_1
OpStore %48 %44
%50 = OpAccessChain %_ptr_Output_float %SV_Position %35 %uint_2
OpStore %50 %44
%51 = OpAccessChain %_ptr_Output_float %SV_Position %35 %uint_3
OpStore %51 %44
%53 = OpBitwiseXor %uint %35 %uint_1
%54 = OpAccessChain %_ptr_Workgroup_float %32 %53
%55 = OpLoad %float %54
%57 = OpInBoundsAccessChain %_ptr_TaskPayloadWorkgroupEXT_float %38 %uint_0
%58 = OpLoad %float %57
%59 = OpFAdd %float %58 %55
%60 = OpAccessChain %_ptr_Output_float %B %35 %uint_0
OpStore %60 %59
%61 = OpAccessChain %_ptr_Output_float %B %35 %uint_1
OpStore %61 %59
%62 = OpAccessChain %_ptr_Output_float %B %35 %uint_2
OpStore %62 %59
%63 = OpAccessChain %_ptr_Output_float %B %35 %uint_3
OpStore %63 %59
%64 = OpULessThan %bool %35 %uint_8
OpSelectionMerge %87 None
OpBranchConditional %64 %86 %87
%86 = OpLabel
%65 = OpIMul %uint %35 %uint_3
%66 = OpIAdd %uint %65 %uint_1
%67 = OpIAdd %uint %65 %uint_2
%68 = OpCompositeConstruct %v3uint %65 %66 %67
%70 = OpAccessChain %_ptr_Output_v3uint %indices %35
OpStore %70 %68
%71 = OpBitwiseAnd %uint %35 %uint_1
%72 = OpINotEqual %bool %71 %uint_0
%74 = OpAccessChain %_ptr_Output_bool %SV_CullPrimitive %35
OpStore %74 %72
%76 = OpAccessChain %_ptr_Output_uint %SV_PrimitiveID %35
OpStore %76 %35
%77 = OpAccessChain %_ptr_Output_uint %SV_RenderTargetArrayIndex %35
OpStore %77 %35
%78 = OpBitwiseXor %uint %35 %uint_2
%79 = OpAccessChain %_ptr_Workgroup_float %32 %78
%80 = OpLoad %float %79
%81 = OpAccessChain %_ptr_Output_float %C %35 %uint_0
OpStore %81 %80
%82 = OpAccessChain %_ptr_Output_float %C %35 %uint_1
OpStore %82 %80
%83 = OpAccessChain %_ptr_Output_float %C %35 %uint_2
OpStore %83 %80
%84 = OpAccessChain %_ptr_Output_float %C %35 %uint_3
OpStore %84 %80
OpBranch %87
%87 = OpLabel
OpReturn
OpFunctionEnd
|