Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/asahi/lib/cmdbuf.xml
4560 views
1
<agxml>
2
<enum name="Channel">
3
<value name="R" value="0"/>
4
<value name="G" value="1"/>
5
<value name="B" value="2"/>
6
<value name="A" value="3"/>
7
<value name="1" value="4"/>
8
<value name="0" value="5"/>
9
</enum>
10
11
<enum name="ZS Func">
12
<value name="Never" value="0"/>
13
<value name="Less" value="1"/>
14
<value name="Equal" value="2"/>
15
<value name="Lequal" value="3"/>
16
<value name="Greater" value="4"/>
17
<value name="Not Equal" value="5"/>
18
<value name="Gequal" value="6"/>
19
<value name="Always" value="7"/>
20
</enum>
21
22
<enum name="Compare func">
23
<value name="Lequal" value="0"/>
24
<value name="Gequal" value="1"/>
25
<value name="Less" value="2"/>
26
<value name="Greater" value="3"/>
27
<value name="Equal" value="4"/>
28
<value name="Not Equal" value="5"/>
29
<value name="Always" value="6"/>
30
<value name="Never" value="7"/>
31
</enum>
32
33
<enum name="Stencil Op">
34
<value name="Keep" value="0"/>
35
<value name="Zero" value="1"/>
36
<value name="Replace" value="2"/>
37
<value name="Incr Sat" value="3"/>
38
<value name="Decr Sat" value="4"/>
39
<value name="Invert" value="5"/>
40
<value name="Incr Wrap" value="6"/>
41
<value name="Decr Wrap" value="7"/>
42
</enum>
43
44
<enum name="Polygon Mode">
45
<value name="Fill" value="0"/>
46
<value name="Line" value="1"/>
47
<value name="Point" value="2"/>
48
</enum>
49
50
<enum name="Primitive">
51
<value name="Points" value="0"/>
52
<value name="Lines" value="1"/>
53
<value name="Line strip" value="3"/>
54
<value name="Line loop" value="5"/>
55
<value name="Triangles" value="6"/>
56
<value name="Triangle strip" value="9"/>
57
<value name="Triangle fan" value="10"/>
58
<value name="Quads" value="14"/> <!-- guess, confirm with piglit later XXX -->
59
<value name="Quad strip" value="15"/> <!-- guess, confirm with piglit later XXX -->
60
</enum>
61
62
<enum name="Layout">
63
<value name="Linear" value="0"/>
64
<!-- Morton order with 64x64 tiles -->
65
<value name="Tiled 64x64" value="2"/>
66
</enum>
67
68
<enum name="Channels">
69
<value name="R8" value="0x00"/>
70
<value name="R16" value="0x09"/>
71
<value name="R8G8" value="0x0A"/>
72
<value name="R5G6B5" value="0x0B"/>
73
<value name="R4G4B4A4" value="0x0C"/>
74
<value name="A1R5G5B5" value="0x0D"/>
75
<value name="R5G5B5A1" value="0x0E"/>
76
<value name="R32" value="0x21"/>
77
<value name="R16G16" value="0x23"/>
78
<value name="R11G11B10" value="0x25"/>
79
<value name="R10G10B10A2" value="0x26"/>
80
<value name="R9G9B9E5" value="0x27"/>
81
<value name="R8G8B8A8" value="0x28"/>
82
<value name="R32G32" value="0x31"/>
83
<value name="R16G16B16A16" value="0x32"/>
84
<value name="R32G32B32A32" value="0x38"/>
85
<value name="GBGR 422" value="0x40"/> <!-- Subsampled, swizzle BRG1 -->
86
<value name="BGRG 422" value="0x41"/> <!-- Subsampled, swizzle BRG1 -->
87
88
<!-- Compressed -->
89
<value name="PVRTC 2bpp" value="0x50"/>
90
<value name="PVRTC 4bpp" value="0x51"/>
91
92
<value name="ETC2 RGB8" value="0x58"/>
93
<value name="ETC2 RGBA8" value="0x59"/>
94
<value name="ETC2 RGB8A1" value="0x5A"/>
95
<value name="EAC R11" value="0x5B"/>
96
<value name="EAC RG11" value="0x5C"/>
97
98
<value name="ASTC 4x4 LDR" value="0x60"/>
99
<value name="ASTC 5x4 LDR" value="0x61"/>
100
<value name="ASTC 5x5 LDR" value="0x62"/>
101
<value name="ASTC 6x5 LDR" value="0x63"/>
102
<value name="ASTC 6x6 LDR" value="0x64"/>
103
<value name="ASTC 8x5 LDR" value="0x65"/>
104
<value name="ASTC 8x6 LDR" value="0x66"/>
105
<value name="ASTC 8x8 LDR" value="0x67"/>
106
<value name="ASTC 10x5 LDR" value="0x68"/>
107
<value name="ASTC 10x6 LDR" value="0x69"/>
108
<value name="ASTC 10x8 LDR" value="0x6A"/>
109
<value name="ASTC 10x10 LDR" value="0x6B"/>
110
<value name="ASTC 12x10 LDR" value="0x6C"/>
111
<value name="ASTC 12x12 LDR" value="0x6D"/>
112
113
<value name="BC1" value="0x74"/>
114
<value name="BC2" value="0x75"/>
115
<value name="BC3" value="0x76"/>
116
<value name="BC4" value="0x77"/>
117
<value name="BC5" value="0x78"/>
118
<value name="BC6H" value="0x79"/>
119
<value name="BC6H Ufloat" value="0x7A"/>
120
<value name="BC7" value="0x7B"/>
121
</enum>
122
123
<enum name="Texture Type">
124
<value name="Unorm" value="0"/>
125
<value name="Snorm" value="1"/>
126
<value name="Uint" value="2"/>
127
<value name="Sint" value="3"/>
128
<value name="Float" value="4"/>
129
<value name="XR" value="5"/>
130
</enum>
131
132
<struct name="Varying header" size="4">
133
<field name="Triangle slots" size="8" start="0:0" type="uint"/>
134
<field name="Point slots" size="8" start="0:8" type="uint"/>
135
</struct>
136
137
<enum name="Varying Type">
138
<value name="Flat (first)" value="0"/>
139
<value name="Flat (last)" value="2"/>
140
<value name="Fragcoord W" value="3"/>
141
<value name="Smooth" value="7"/>
142
<value name="Fragcoord Z" value="11"/>
143
<value name="Point coordinates" value="19"/>
144
</enum>
145
146
<struct name="Varying" size="4">
147
<field name="Components" size="2" start="0" type="uint" modifier="minus(1)"/>
148
<field name="Type" size="6" start="2" type="Varying Type" default="Smooth"/>
149
<field name="Triangle slot" size="8" start="8" type="uint"/>
150
<field name="Point slot" size="8" start="16" type="uint"/>
151
</struct>
152
153
<struct name="Format" size="2">
154
<field name="Channels" size="7" start="0" type="Channels"/>
155
<field name="Type" size="3" start="7" type="Texture Type"/>
156
</struct>
157
158
<struct name="Render Target" size="16">
159
<field name="Unknown" size="4" start="0" type="hex" default="0x2"/>
160
<field name="Layout" size="2" start="4" type="Layout"/>
161
<field name="Format" size="10" start="6" type="Pixel Format"/>
162
<field name="Swizzle R" size="2" start="16" type="Channel"/>
163
<field name="Swizzle G" size="2" start="18" type="Channel"/>
164
<field name="Swizzle B" size="2" start="20" type="Channel"/>
165
<field name="Swizzle A" size="2" start="22" type="Channel"/>
166
<field name="Width" size="14" start="24" type="uint" modifier="minus(1)"/>
167
<field name="Height" size="14" start="38" type="uint" modifier="minus(1)"/>
168
<field name="Unk 52" size="1" start="52" type="bool"/>
169
<field name="Rotate 90" size="1" start="53" type="bool" default="false"/>
170
<field name="Flip vertical" size="1" start="54" type="bool" default="false"/>
171
<field name="Unk 55" size="9" start="55" type="hex"/>
172
<field name="Buffer" size="36" start="64" type="address" modifier="shr(4)"/>
173
<!-- N.b. sRGB is not specified here -->
174
<!-- Off by 4? -->
175
<field name="Stride" size="24" start="104" type="hex" prefix="AGX_RT_STRIDE">
176
<value name="Tiled" value="0x100000"/>
177
</field>
178
</struct>
179
180
<!-- Payloads follow, right-shifted by 4 because of course -->
181
<struct name="Texture" size="16">
182
<field name="Unknown" size="4" start="0" type="hex" default="0x2"/>
183
<field name="Layout" size="2" start="4" type="Layout"/>
184
<field name="Format" size="10" start="6" type="Pixel Format"/>
185
<field name="Swizzle R" size="3" start="16" type="Channel" default="R"/>
186
<field name="Swizzle G" size="3" start="19" type="Channel" default="G"/>
187
<field name="Swizzle B" size="3" start="22" type="Channel" default="B"/>
188
<field name="Swizzle A" size="3" start="25" type="Channel" default="A"/>
189
<field name="Width" size="14" start="28" type="uint" modifier="minus(1)"/>
190
<field name="Height" size="14" start="42" type="uint" modifier="minus(1)"/>
191
<field name="Levels" size="6" start="60" type="uint" modifier="minus(1)"/>
192
<field name="Unk 1" size="36" start="66" type="hex" modifier="shr(4)"/>
193
<!-- Unknown bit set by Metal when mipmapping. Might relate to a mechanism
194
to switch tile size (or disable tiling altogether?) at small mip levels to
195
reduce wasted memory due to padding. Causing test flakiness when set. -->
196
<field name="Unk mipmapped" size="1" start="102" type="bool"/>
197
<field name="Compression" size="2" start="106" type="hex"/> <!-- 0 for 64x64 tiling -->
198
<field name="sRGB" size="1" start="108" type="bool"/>
199
<field name="Unk 2" size="1" start="109" type="bool"/>
200
<field name="Stride" size="18" start="110" type="hex" modifier="shr(4)"/>
201
</struct>
202
203
<enum name="Wrap">
204
<value name="Clamp to edge" value="0"/>
205
<value name="Repeat" value="1"/>
206
<value name="Mirrored repeat" value="2"/>
207
<value name="Clamp to border" value="3"/>
208
</enum>
209
210
<enum name="Mip filter">
211
<value name="None" value="0"/>
212
<value name="Nearest" value="1"/>
213
<value name="Linear" value="2"/>
214
</enum>
215
216
<enum name="Border colour">
217
<value name="Transparent black" value="0"/>
218
<value name="Opaque black" value="1"/>
219
<value name="Opaque white" value="2"/>
220
</enum>
221
222
<struct name="Sampler" size="8">
223
<field name="Unk 1" size="2" start="17" type="hex" default="3"/>
224
<field name="Unk 2" size="1" start="19" type="bool" default="true"/>
225
<field name="Magnify linear" size="1" start="23" type="bool"/>
226
<field name="Minify linear" size="1" start="25" type="bool"/>
227
<field name="Mip filter" size="2" start="27" type="Mip filter"/>
228
<field name="Wrap S" size="3" start="29" type="Wrap"/>
229
<field name="Wrap T" size="3" start="32" type="Wrap"/>
230
<field name="Wrap R" size="3" start="35" type="Wrap"/>
231
<field name="Pixel coordinates" size="1" start="38" type="bool"/>
232
<field name="Compare func" size="3" start="39" type="Compare func"/>
233
<field name="Unk 3" size="1" start="42" type="hex" default="1"/>
234
<field name="Border colour" size="2" start="55" type="Border colour"/>
235
</struct>
236
237
<!--- Identified by tag? -->
238
<struct name="Viewport" size="40">
239
<field name="Tag" size="32" start="0:0" type="hex" default="0xc00"/>
240
241
<!-- Acts like a scissor at 32x32 tile boundaries, ignored unless clip tile is set -->
242
<field name="Max tile X" size="9" start="1:0" type="uint" modifier="minus(1)"/>
243
<field name="Min tile X" size="9" start="1:16" type="uint"/>
244
<field name="Clip tile" size="1" start="1:31" type="bool"/>
245
<field name="Max tile Y" size="9" start="2:0" type="uint" modifier="minus(1)"/>
246
<field name="Min tile Y" size="9" start="2:16" type="uint"/>
247
248
<!-- Used to convert clip space coordinates to NDC, does not clip -->
249
<field name="Translate X" size="32" start="4:0" type="float"/>
250
<field name="Scale X" size="32" start="5:0" type="float"/>
251
<field name="Translate Y" size="32" start="6:0" type="float"/>
252
<field name="Scale Y" size="32" start="7:0" type="float"/>
253
254
<!-- Specifies an affine transformation from clip coordinates to viewport
255
depth coordinates. For APIs with clip coordinates [0, 1], this cooresponds
256
to near z and (far z - near z) respectively. In general, given clip
257
coordinate z_in, the viewport depth is given as (z_in * scale_z) +
258
translate_z. For example, the default [0, 1] depth buffer in OpenGL with
259
[-1, +1] clip coordinates is specified as scale = 1/2, bias = 1/2 -->
260
<field name="Translate Z" size="32" start="8:0" type="float"/>
261
<field name="Scale Z" size="32" start="9:0" type="float"/>
262
</struct>
263
264
<!--- Pointed to from the command buffer -->
265
<struct name="Scissor" size="16">
266
<field name="Max X" size="16" start="0:0" type="uint"/>
267
<field name="Min X" size="16" start="0:16" type="uint"/>
268
<field name="Max Y" size="16" start="1:0" type="uint"/>
269
<field name="Min Y" size="16" start="1:16" type="uint"/>
270
<field name="Min Z" size="32" start="2:0" type="float"/>
271
<field name="Max Z" size="32" start="3:0" type="float"/>
272
</struct>
273
274
<struct name="Rasterizer face" size="8">
275
<field name="Stencil reference" size="8" start="0:0" type="hex"/>
276
<!-- line width is 4:4 fixed point with off-by-one applied -->
277
<field name="Line width" size="8" start="0:8" type="hex"/>
278
<field name="Polygon mode" size="2" start="0:18" type="Polygon Mode"/>
279
<field name="Disable depth write" size="1" start="0:21" type="bool"/>
280
<field name="Depth function" size="3" start="0:24" type="ZS Func"/>
281
<field name="Stencil write mask" size="8" start="1:0" type="hex"/>
282
<field name="Stencil read mask" size="8" start="1:8" type="hex"/>
283
<field name="Depth pass" size="3" start="1:16" type="Stencil Op"/>
284
<field name="Depth fail" size="3" start="1:19" type="Stencil Op"/>
285
<field name="Stencil fail" size="3" start="1:22" type="Stencil Op"/>
286
<field name="Stencil compare" size="3" start="1:25" type="ZS Func"/>
287
</struct>
288
289
<struct name="Rasterizer" size="28">
290
<field name="Tag" size="32" start="0:0" type="hex" default="0x10000b5"/>
291
<field name="Unk 1" size="1" start="1:9" type="hex" default="0x1"/>
292
<field name="Scissor enable" size="1" start="1:16" type="bool"/>
293
<field name="Unk ZS" size="1" start="1:18" type="hex" default="0x1"/>
294
<field name="Unk 2" size="2" start="1:19" type="hex" default="0x0"/>
295
<field name="Unk fill lines" size="1" start="1:26" type="hex" default="0x0"/> <!-- set when drawing LINES -->
296
<field name="Front" size="64" start="2:0" type="Rasterizer face"/>
297
<field name="Back" size="64" start="4:0" type="Rasterizer face"/>
298
</struct>
299
300
<struct name="Cull" size="8">
301
<field name="Tag" size="32" start="0:0" type="hex" default="0x200000"/>
302
<field name="Cull front" size="1" start="1:0" type="bool"/>
303
<field name="Cull back" size="1" start="1:1" type="bool"/>
304
<field name="Unk GL 1" size="1" start="1:7" type="bool"/>
305
<field name="Unk GL 2" size="1" start="1:8" type="bool"/>
306
<field name="Depth clip" size="1" start="1:10" type="bool"/>
307
<field name="Depth clamp" size="1" start="1:11" type="bool"/>
308
<field name="Front face CCW" size="1" start="1:16" type="bool"/>
309
</struct>
310
311
<struct name="Interpolation" size="20">
312
<field name="Tag" size="32" start="0:0" type="hex" default="0x100C0000"/>
313
<field name="Varying count" size="32" start="1:0" type="uint"/>
314
</struct>
315
316
<struct name="Linkage" size="16">
317
<field name="Tag" size="32" start="0:0" type="hex" default="0xC020000"/>
318
<field name="Unk 1" size="32" start="1:0" type="hex" default="0x100"/>
319
<field name="Unk 2" size="32" start="2:0" type="hex" default="0x0"/>
320
<field name="Varying count" size="32" start="3:0" type="uint"/>
321
</struct>
322
323
<!-- Indexes into the array of scissor descriptors -->
324
<struct name="Set scissor" size="8">
325
<field name="Tag" size="32" start="0:0" type="hex" default="0x100"/>
326
<field name="Index" size="32" start="1:0" type="uint"/>
327
</struct>
328
329
<!--- Commands valid within a pipeline -->
330
<struct name="Bind uniform" size="8">
331
<field name="Tag" size="8" start="0:0" type="hex" default="0x1d"/>
332
<field name="Start (halfs)" size="8" start="0:8" type="uint"/>
333
<field name="Unk" size="4" start="0:16" type="hex" default="0x0"/>
334
<field name="Size (halfs)" size="4" start="0:20" type="uint"/>
335
<field name="Buffer" size="40" start="0:24" type="address"/>
336
</struct>
337
338
<struct name="Bind texture" size="8">
339
<field name="Tag" size="8" start="0:0" type="hex" default="0xdd"/>
340
<field name="Start" size="8" start="0:8" type="uint"/>
341
<field name="Count" size="4" start="0:20" type="uint"/>
342
<field name="Buffer" size="40" start="0:24" type="address"/>
343
</struct>
344
345
<struct name="Bind sampler" size="8">
346
<field name="Tag" size="8" start="0:0" type="hex" default="0x9d"/>
347
<field name="Start" size="8" start="0:8" type="uint"/>
348
<field name="Count" size="4" start="0:20" type="uint"/>
349
<field name="Buffer" size="40" start="0:24" type="address"/>
350
</struct>
351
352
<enum name="Preshader mode">
353
<value name="Preshader" value="3"/>
354
<value name="No preshader" value="8"/>
355
</enum>
356
357
<struct name="Set shader" size="24">
358
<field name="Tag" size="8" start="0:0" type="hex" default="0x4d"/>
359
<field name="Unk 1" size="24" start="0:8" type="hex" default="0x90"/>
360
<field name="Unk 2" size="8" start="1:0" type="hex" default="0x0d"/> <!-- TODO differs with stage -->
361
<field name="Unk 2b" size="8" start="1:8" type="uint" default="4"/>
362
<field name="Code" size="32" start="1:16" type="address"/>
363
<field name="Unk 3" size="8" start="2:16" type="hex" default="0x8d"/>
364
<field name="Register quadwords" size="5" start="2:24" type="uint"/> <!-- 0 for max -->
365
<field name="Unk 3b" size="3" start="2:29" type="hex" default="0x0"/>
366
<field name="Spill size" size="8" start="3:0" type="hex" default="0"/> <!-- TODO: determine relation, see docs/table.py -->
367
<field name="Unk 4" size="12" start="3:8" type="hex" default="0x801"/>
368
<field name="Preshader mode" size="4" start="3:20" type="Preshader mode" default="No preshader"/>
369
<field name="Unk 6" size="8" start="3:24" type="hex" default="0x0"/>
370
<field name="Preshader unk" size="16" start="4:0" type="hex" default="0x0"/>
371
<field name="Preshader code" size="32" start="4:16" type="address"/>
372
<field name="Unk 7" size="16" start="5:16" type="hex" default="0x0"/> <!-- blob is inconsistent -->
373
</struct>
374
375
<struct name="Set shader extended" size="32">
376
<field name="Tag" size="8" start="0:0" type="hex" default="0x4d"/>
377
<field name="Unk 1" size="24" start="0:8" type="hex" default="0x2010bd"/>
378
<field name="Unk 2" size="8" start="1:0" type="hex" default="0x0d"/> <!-- 90d if ld_tile or discard is used (to disable opts), 50d for other frag, 80d for vert..? 40d for compute..? -->
379
<field name="Unk 2b" size="8" start="1:8" type="uint" default="5"/>
380
<field name="Code" size="32" start="1:16" type="address"/>
381
<field name="Unk 3" size="8" start="2:16" type="hex" default="0x28d"/>
382
<field name="Register quadwords" size="5" start="2:24" type="uint"/> <!-- 0 for max -->
383
<field name="Unk 3b" size="3" start="2:29" type="hex" default="0x0"/>
384
<field name="Frag unk" size="32" start="3:0" type="hex" default="0xf3580100"/>
385
<field name="Spill size" size="8" start="4:0" type="hex" default="0"/> <!-- TODO: determine relation, see docs/table.py -->
386
<field name="Unk 4" size="12" start="4:8" type="hex" default="0x801"/>
387
<field name="Preshader mode" size="4" start="4:20" type="Preshader mode" default="No preshader"/>
388
<field name="Unk 6" size="8" start="4:24" type="hex" default="0x0"/>
389
<field name="Preshader unk" size="16" start="5:0" type="hex" default="0x0"/>
390
<field name="Preshader code" size="32" start="5:16" type="address"/>
391
<field name="Unk 7" size="16" start="6:16" type="hex" default="0x0"/> <!-- blob is inconsistent -->
392
<field name="Unk 8" size="32" start="7:0" type="hex" default="0x0"/> <!-- may not exist -->
393
</struct>
394
395
<!--- Command to bind a vertex pipeline, followed by subcommands. Counts are
396
specified in 32-bit word units. Intepretation per-shader stage.
397
Probably actually 17 bytes. -->
398
<struct name="Bind pipeline" size="16">
399
<field name="Tag" size="32" start="0:0" type="hex" default="0x4000002e">
400
<value name="AGX_BIND_PIPELINE_VERTEX" value="0x4000002e"/>
401
<value name="AGX_BIND_PIPELINE_FRAGMENT" value="0x800000"/>
402
</field>
403
<field name="Unk 1" size="4" start="1:0" type="hex" default="0x2"/>
404
<field name="Sampler count" start="1:4" size="5" type="uint"/>
405
<field name="Texture count" start="1:9" size="3" type="uint"/>
406
<field name="Unk 2" size="4" start="1:12" type="hex" default="0x1"/>
407
<field name="Input count" size="8" start="1:16" type="uint" default="0"/>
408
<field name="Padding 1" size="8" start="1:24" type="hex" default="0x0"/>
409
<field name="Pipeline" size="32" start="2:0" type="address"/>
410
411
<!-- Overlaps -->
412
<field name="FS Varyings" size="32" start="3:0" type="address"/>
413
<field name="VS Output count 1" size="8" start="3:0" type="uint" default="0"/>
414
<field name="VS Output count 2" size="8" start="3:8" type="uint" default="0"/>
415
<field name="Padding 2" size="16" start="3:16" type="hex" default="0x0"/>
416
</struct>
417
418
<!-- Subcommands are packed inside sized records -->
419
<struct name="Record" size="8">
420
<field name="Size (words)" size="8" start="0:0" type="uint"/>
421
<field name="Tag" size="16" start="0:8" type="hex" default="0x0000"/>
422
<field name="Data" size="40" start="0:24" type="address"/>
423
</struct>
424
425
<!--- Command to issue a direct non-indexed draw -->
426
<struct name="Draw" size="16">
427
<field name="Unk" size="8" start="0:0" type="hex" default="0x0"/>
428
<field name="Primitive" size="8" start="0:8" type="Primitive"/>
429
<field name="Command" size="16" start="0:16" type="hex" default="0x61c0"/>
430
<field name="Vertex count" size="32" start="1:0" type="uint"/>
431
<field name="Instance count" size="32" start="2:0" type="uint"/> <!-- must be nonzero -->
432
<field name="Vertex start" size="32" start="3:0" type="uint"/>
433
</struct>
434
435
<enum name="Index size">
436
<value name="U8" value="0"/>
437
<value name="U16" value="1"/>
438
<value name="U32" value="2"/>
439
</enum>
440
441
<struct name="Indexed draw" size="32">
442
<field name="Unk 1" size="8" start="0:0" type="hex" default="0x1"/>
443
<field name="Command" size="24" start="0:8" type="hex" default="0x400000"/>
444
<field name="Restart index" size="32" start="1:0" type="hex"/>
445
<field name="Unk 2a" size="8" start="2:0" type="hex" default="0x15"/>
446
<field name="Primitive" size="8" start="2:8" type="Primitive"/>
447
<field name="Restart enable" size="1" start="2:16" type="bool"/> <!-- Metal sets this bit for strips -->
448
<field name="Index size" size="3" start="2:17" type="Index size"/>
449
<field name="Unk 2c" size="4" start="2:20" type="hex" default="0xF"/>
450
<field name="Unk 2d" size="8" start="2:24" type="hex" default="0x61"/>
451
<field name="Index buffer offset" size="32" start="3:0" type="hex"/>
452
<field name="Index count" size="32" start="4:0" type="uint"/>
453
<field name="Instance count" size="32" start="5:0" type="uint"/>
454
<field name="Base vertex" size="32" start="6:0" type="uint"/>
455
<field name="Index buffer size" size="32" start="7:0" type="uint" modifier="shr(2)"/>
456
</struct>
457
458
<!--- Command to launch a direct compute kernel -->
459
<struct name="Launch" size="36">
460
<field name="Command" size="32" start="0:0" type="hex" default="0x1002"/>
461
<field name="Pipeline" size="32" start="1:0" type="address"/>
462
<field name="Group count X" size="32" start="2:0" type="uint"/>
463
<field name="Group count Y" size="32" start="3:0" type="uint"/>
464
<field name="Group count Z" size="32" start="4:0" type="uint"/>
465
<field name="Local size X" size="32" start="5:0" type="uint"/>
466
<field name="Local size Y" size="32" start="6:0" type="uint"/>
467
<field name="Local size Z" size="32" start="7:0" type="uint"/>
468
<field name="Unk" size="32" start="8:0" type="hex" default="0x60000160"/>
469
</struct>
470
471
<!--- The rest of this file is likely software defined by macOS kernel -->
472
<enum name="IOGPU Attachment Type">
473
<value name="Colour" value="0xA"/>
474
<value name="Depth" value="0xC"/>
475
</enum>
476
477
<struct name="IOGPU Header" size="64">
478
<field name="Unk 0" start="0:0" size="32" default="0x10000" type="hex"/>
479
<field name="Total size" start="1:0" size="32" type="uint"/>
480
<field name="Unk 2" start="2:0" size="32" default="0x7" type="hex"/>
481
<field name="Attachment offset 1" start="8:0" size="32" type="uint"/>
482
<field name="Attachment length" start="9:0" size="32" type="uint"/>
483
<field name="Attachment offset 2" start="10:0" size="32" type="uint"/>
484
<field name="Unknown offset" start="11:0" size="32" type="uint"/>
485
<field name="Unk 4" start="12:0" size="32" default="0x30" type="hex"/>
486
<field name="Unk 5" start="13:0" size="32" default="0x01" type="hex"/>
487
<field name="Encoder" start="14:0" size="64" type="address"/>
488
</struct>
489
490
<struct name="IOGPU Attachment" size="24">
491
<field name="Unk 0" start="0:0" size="16" default="0x100" type="hex"/>
492
<field name="Address" start="0:16" size="48" type="address"/>
493
<field name="Type" start="2:16" size="16" type="IOGPU Attachment Type"/>
494
<field name="Unk 1" start="3:0" size="32" type="hex"/>
495
<field name="Unk 2" start="4:0" size="3" type="hex"/>
496
<field name="Bytes per pixel" start="4:3" size="5" type="uint"/>
497
<field name="Unk 3" start="4:16" size="4" type="hex" default="0xC"/>
498
<!-- Percent of total attachment space used for this attachment, expressed
499
in a decimal percentage [0, 100] <field name="Percent" start="5:16" -->
500
<field name="Percent" start="5:16" size="16" type="uint"/>
501
</struct>
502
</agxml>
503
504