17ec681f3Smrg<agxml> 27ec681f3Smrg <enum name="Channel"> 37ec681f3Smrg <value name="R" value="0"/> 47ec681f3Smrg <value name="G" value="1"/> 57ec681f3Smrg <value name="B" value="2"/> 67ec681f3Smrg <value name="A" value="3"/> 77ec681f3Smrg <value name="1" value="4"/> 87ec681f3Smrg <value name="0" value="5"/> 97ec681f3Smrg </enum> 107ec681f3Smrg 117ec681f3Smrg <enum name="ZS Func"> 127ec681f3Smrg <value name="Never" value="0"/> 137ec681f3Smrg <value name="Less" value="1"/> 147ec681f3Smrg <value name="Equal" value="2"/> 157ec681f3Smrg <value name="Lequal" value="3"/> 167ec681f3Smrg <value name="Greater" value="4"/> 177ec681f3Smrg <value name="Not Equal" value="5"/> 187ec681f3Smrg <value name="Gequal" value="6"/> 197ec681f3Smrg <value name="Always" value="7"/> 207ec681f3Smrg </enum> 217ec681f3Smrg 227ec681f3Smrg <enum name="Compare func"> 237ec681f3Smrg <value name="Lequal" value="0"/> 247ec681f3Smrg <value name="Gequal" value="1"/> 257ec681f3Smrg <value name="Less" value="2"/> 267ec681f3Smrg <value name="Greater" value="3"/> 277ec681f3Smrg <value name="Equal" value="4"/> 287ec681f3Smrg <value name="Not Equal" value="5"/> 297ec681f3Smrg <value name="Always" value="6"/> 307ec681f3Smrg <value name="Never" value="7"/> 317ec681f3Smrg </enum> 327ec681f3Smrg 337ec681f3Smrg <enum name="Stencil Op"> 347ec681f3Smrg <value name="Keep" value="0"/> 357ec681f3Smrg <value name="Zero" value="1"/> 367ec681f3Smrg <value name="Replace" value="2"/> 377ec681f3Smrg <value name="Incr Sat" value="3"/> 387ec681f3Smrg <value name="Decr Sat" value="4"/> 397ec681f3Smrg <value name="Invert" value="5"/> 407ec681f3Smrg <value name="Incr Wrap" value="6"/> 417ec681f3Smrg <value name="Decr Wrap" value="7"/> 427ec681f3Smrg </enum> 437ec681f3Smrg 447ec681f3Smrg <enum name="Polygon Mode"> 457ec681f3Smrg <value name="Fill" value="0"/> 467ec681f3Smrg <value name="Line" value="1"/> 477ec681f3Smrg <value name="Point" value="2"/> 487ec681f3Smrg </enum> 497ec681f3Smrg 507ec681f3Smrg <enum name="Primitive"> 517ec681f3Smrg <value name="Points" value="0"/> 527ec681f3Smrg <value name="Lines" value="1"/> 537ec681f3Smrg <value name="Line strip" value="3"/> 547ec681f3Smrg <value name="Line loop" value="5"/> 557ec681f3Smrg <value name="Triangles" value="6"/> 567ec681f3Smrg <value name="Triangle strip" value="9"/> 577ec681f3Smrg <value name="Triangle fan" value="10"/> 587ec681f3Smrg <value name="Quads" value="14"/> <!-- guess, confirm with piglit later XXX --> 597ec681f3Smrg <value name="Quad strip" value="15"/> <!-- guess, confirm with piglit later XXX --> 607ec681f3Smrg </enum> 617ec681f3Smrg 627ec681f3Smrg <enum name="Layout"> 637ec681f3Smrg <value name="Linear" value="0"/> 647ec681f3Smrg <!-- Morton order with 64x64 tiles --> 657ec681f3Smrg <value name="Tiled 64x64" value="2"/> 667ec681f3Smrg </enum> 677ec681f3Smrg 687ec681f3Smrg <enum name="Channels"> 697ec681f3Smrg <value name="R8" value="0x00"/> 707ec681f3Smrg <value name="R16" value="0x09"/> 717ec681f3Smrg <value name="R8G8" value="0x0A"/> 727ec681f3Smrg <value name="R5G6B5" value="0x0B"/> 737ec681f3Smrg <value name="R4G4B4A4" value="0x0C"/> 747ec681f3Smrg <value name="A1R5G5B5" value="0x0D"/> 757ec681f3Smrg <value name="R5G5B5A1" value="0x0E"/> 767ec681f3Smrg <value name="R32" value="0x21"/> 777ec681f3Smrg <value name="R16G16" value="0x23"/> 787ec681f3Smrg <value name="R11G11B10" value="0x25"/> 797ec681f3Smrg <value name="R10G10B10A2" value="0x26"/> 807ec681f3Smrg <value name="R9G9B9E5" value="0x27"/> 817ec681f3Smrg <value name="R8G8B8A8" value="0x28"/> 827ec681f3Smrg <value name="R32G32" value="0x31"/> 837ec681f3Smrg <value name="R16G16B16A16" value="0x32"/> 847ec681f3Smrg <value name="R32G32B32A32" value="0x38"/> 857ec681f3Smrg <value name="GBGR 422" value="0x40"/> <!-- Subsampled, swizzle BRG1 --> 867ec681f3Smrg <value name="BGRG 422" value="0x41"/> <!-- Subsampled, swizzle BRG1 --> 877ec681f3Smrg 887ec681f3Smrg <!-- Compressed --> 897ec681f3Smrg <value name="PVRTC 2bpp" value="0x50"/> 907ec681f3Smrg <value name="PVRTC 4bpp" value="0x51"/> 917ec681f3Smrg 927ec681f3Smrg <value name="ETC2 RGB8" value="0x58"/> 937ec681f3Smrg <value name="ETC2 RGBA8" value="0x59"/> 947ec681f3Smrg <value name="ETC2 RGB8A1" value="0x5A"/> 957ec681f3Smrg <value name="EAC R11" value="0x5B"/> 967ec681f3Smrg <value name="EAC RG11" value="0x5C"/> 977ec681f3Smrg 987ec681f3Smrg <value name="ASTC 4x4 LDR" value="0x60"/> 997ec681f3Smrg <value name="ASTC 5x4 LDR" value="0x61"/> 1007ec681f3Smrg <value name="ASTC 5x5 LDR" value="0x62"/> 1017ec681f3Smrg <value name="ASTC 6x5 LDR" value="0x63"/> 1027ec681f3Smrg <value name="ASTC 6x6 LDR" value="0x64"/> 1037ec681f3Smrg <value name="ASTC 8x5 LDR" value="0x65"/> 1047ec681f3Smrg <value name="ASTC 8x6 LDR" value="0x66"/> 1057ec681f3Smrg <value name="ASTC 8x8 LDR" value="0x67"/> 1067ec681f3Smrg <value name="ASTC 10x5 LDR" value="0x68"/> 1077ec681f3Smrg <value name="ASTC 10x6 LDR" value="0x69"/> 1087ec681f3Smrg <value name="ASTC 10x8 LDR" value="0x6A"/> 1097ec681f3Smrg <value name="ASTC 10x10 LDR" value="0x6B"/> 1107ec681f3Smrg <value name="ASTC 12x10 LDR" value="0x6C"/> 1117ec681f3Smrg <value name="ASTC 12x12 LDR" value="0x6D"/> 1127ec681f3Smrg 1137ec681f3Smrg <value name="BC1" value="0x74"/> 1147ec681f3Smrg <value name="BC2" value="0x75"/> 1157ec681f3Smrg <value name="BC3" value="0x76"/> 1167ec681f3Smrg <value name="BC4" value="0x77"/> 1177ec681f3Smrg <value name="BC5" value="0x78"/> 1187ec681f3Smrg <value name="BC6H" value="0x79"/> 1197ec681f3Smrg <value name="BC6H Ufloat" value="0x7A"/> 1207ec681f3Smrg <value name="BC7" value="0x7B"/> 1217ec681f3Smrg </enum> 1227ec681f3Smrg 1237ec681f3Smrg <enum name="Texture Type"> 1247ec681f3Smrg <value name="Unorm" value="0"/> 1257ec681f3Smrg <value name="Snorm" value="1"/> 1267ec681f3Smrg <value name="Uint" value="2"/> 1277ec681f3Smrg <value name="Sint" value="3"/> 1287ec681f3Smrg <value name="Float" value="4"/> 1297ec681f3Smrg <value name="XR" value="5"/> 1307ec681f3Smrg </enum> 1317ec681f3Smrg 1327ec681f3Smrg <struct name="Varying header" size="4"> 1337ec681f3Smrg <field name="Triangle slots" size="8" start="0:0" type="uint"/> 1347ec681f3Smrg <field name="Point slots" size="8" start="0:8" type="uint"/> 1357ec681f3Smrg </struct> 1367ec681f3Smrg 1377ec681f3Smrg <enum name="Varying Type"> 1387ec681f3Smrg <value name="Flat (first)" value="0"/> 1397ec681f3Smrg <value name="Flat (last)" value="2"/> 1407ec681f3Smrg <value name="Fragcoord W" value="3"/> 1417ec681f3Smrg <value name="Smooth" value="7"/> 1427ec681f3Smrg <value name="Fragcoord Z" value="11"/> 1437ec681f3Smrg <value name="Point coordinates" value="19"/> 1447ec681f3Smrg </enum> 1457ec681f3Smrg 1467ec681f3Smrg <struct name="Varying" size="4"> 1477ec681f3Smrg <field name="Components" size="2" start="0" type="uint" modifier="minus(1)"/> 1487ec681f3Smrg <field name="Type" size="6" start="2" type="Varying Type" default="Smooth"/> 1497ec681f3Smrg <field name="Triangle slot" size="8" start="8" type="uint"/> 1507ec681f3Smrg <field name="Point slot" size="8" start="16" type="uint"/> 1517ec681f3Smrg </struct> 1527ec681f3Smrg 1537ec681f3Smrg <struct name="Format" size="2"> 1547ec681f3Smrg <field name="Channels" size="7" start="0" type="Channels"/> 1557ec681f3Smrg <field name="Type" size="3" start="7" type="Texture Type"/> 1567ec681f3Smrg </struct> 1577ec681f3Smrg 1587ec681f3Smrg <struct name="Render Target" size="16"> 1597ec681f3Smrg <field name="Unknown" size="4" start="0" type="hex" default="0x2"/> 1607ec681f3Smrg <field name="Layout" size="2" start="4" type="Layout"/> 1617ec681f3Smrg <field name="Format" size="10" start="6" type="Pixel Format"/> 1627ec681f3Smrg <field name="Swizzle R" size="2" start="16" type="Channel"/> 1637ec681f3Smrg <field name="Swizzle G" size="2" start="18" type="Channel"/> 1647ec681f3Smrg <field name="Swizzle B" size="2" start="20" type="Channel"/> 1657ec681f3Smrg <field name="Swizzle A" size="2" start="22" type="Channel"/> 1667ec681f3Smrg <field name="Width" size="14" start="24" type="uint" modifier="minus(1)"/> 1677ec681f3Smrg <field name="Height" size="14" start="38" type="uint" modifier="minus(1)"/> 1687ec681f3Smrg <field name="Unk 52" size="1" start="52" type="bool"/> 1697ec681f3Smrg <field name="Rotate 90" size="1" start="53" type="bool" default="false"/> 1707ec681f3Smrg <field name="Flip vertical" size="1" start="54" type="bool" default="false"/> 1717ec681f3Smrg <field name="Unk 55" size="9" start="55" type="hex"/> 1727ec681f3Smrg <field name="Buffer" size="36" start="64" type="address" modifier="shr(4)"/> 1737ec681f3Smrg <!-- N.b. sRGB is not specified here --> 1747ec681f3Smrg <!-- Off by 4? --> 1757ec681f3Smrg <field name="Stride" size="24" start="104" type="hex" prefix="AGX_RT_STRIDE"> 1767ec681f3Smrg <value name="Tiled" value="0x100000"/> 1777ec681f3Smrg </field> 1787ec681f3Smrg </struct> 1797ec681f3Smrg 1807ec681f3Smrg <enum name="Texture dimension"> 1817ec681f3Smrg <value name="2D" value="2"/> 1827ec681f3Smrg <value name="Cube" value="6"/> 1837ec681f3Smrg </enum> 1847ec681f3Smrg 1857ec681f3Smrg <!-- Payloads follow, right-shifted by 4 because of course --> 1867ec681f3Smrg <struct name="Texture" size="16"> 1877ec681f3Smrg <field name="Dimension" size="4" start="0" type="Texture dimension" default="2D"/> 1887ec681f3Smrg <field name="Layout" size="2" start="4" type="Layout"/> 1897ec681f3Smrg <field name="Format" size="10" start="6" type="Pixel Format"/> 1907ec681f3Smrg <field name="Swizzle R" size="3" start="16" type="Channel" default="R"/> 1917ec681f3Smrg <field name="Swizzle G" size="3" start="19" type="Channel" default="G"/> 1927ec681f3Smrg <field name="Swizzle B" size="3" start="22" type="Channel" default="B"/> 1937ec681f3Smrg <field name="Swizzle A" size="3" start="25" type="Channel" default="A"/> 1947ec681f3Smrg <field name="Width" size="14" start="28" type="uint" modifier="minus(1)"/> 1957ec681f3Smrg <field name="Height" size="14" start="42" type="uint" modifier="minus(1)"/> 1967ec681f3Smrg <field name="Levels" size="6" start="60" type="uint" modifier="minus(1)"/> 1977ec681f3Smrg <field name="Address" size="36" start="66" type="hex" modifier="shr(4)"/> 1987ec681f3Smrg <!-- Unknown bit set by Metal when mipmapping. Might relate to a mechanism 1997ec681f3Smrg to switch tile size (or disable tiling altogether?) at small mip levels to 2007ec681f3Smrg reduce wasted memory due to padding. Causing test flakiness when set. --> 2017ec681f3Smrg <field name="Unk mipmapped" size="1" start="102" type="bool"/> 2027ec681f3Smrg <field name="Compression" size="2" start="106" type="hex"/> <!-- 0 for 64x64 tiling --> 2037ec681f3Smrg <field name="sRGB" size="1" start="108" type="bool"/> 2047ec681f3Smrg <field name="Unk 2" size="1" start="109" type="bool"/> 2057ec681f3Smrg <field name="Stride" size="18" start="110" type="hex" modifier="shr(4)"/> 2067ec681f3Smrg </struct> 2077ec681f3Smrg 2087ec681f3Smrg <enum name="Wrap"> 2097ec681f3Smrg <value name="Clamp to edge" value="0"/> 2107ec681f3Smrg <value name="Repeat" value="1"/> 2117ec681f3Smrg <value name="Mirrored repeat" value="2"/> 2127ec681f3Smrg <value name="Clamp to border" value="3"/> 2137ec681f3Smrg </enum> 2147ec681f3Smrg 2157ec681f3Smrg <enum name="Mip filter"> 2167ec681f3Smrg <value name="None" value="0"/> 2177ec681f3Smrg <value name="Nearest" value="1"/> 2187ec681f3Smrg <value name="Linear" value="2"/> 2197ec681f3Smrg </enum> 2207ec681f3Smrg 2217ec681f3Smrg <enum name="Border colour"> 2227ec681f3Smrg <value name="Transparent black" value="0"/> 2237ec681f3Smrg <value name="Opaque black" value="1"/> 2247ec681f3Smrg <value name="Opaque white" value="2"/> 2257ec681f3Smrg </enum> 2267ec681f3Smrg 2277ec681f3Smrg <struct name="Sampler" size="8"> 2287ec681f3Smrg <field name="Unk 1" size="2" start="17" type="hex" default="3"/> 2297ec681f3Smrg <field name="Unk 2" size="1" start="19" type="bool" default="true"/> 2307ec681f3Smrg <field name="Magnify linear" size="1" start="23" type="bool"/> 2317ec681f3Smrg <field name="Minify linear" size="1" start="25" type="bool"/> 2327ec681f3Smrg <field name="Mip filter" size="2" start="27" type="Mip filter"/> 2337ec681f3Smrg <field name="Wrap S" size="3" start="29" type="Wrap"/> 2347ec681f3Smrg <field name="Wrap T" size="3" start="32" type="Wrap"/> 2357ec681f3Smrg <field name="Wrap R" size="3" start="35" type="Wrap"/> 2367ec681f3Smrg <field name="Pixel coordinates" size="1" start="38" type="bool"/> 2377ec681f3Smrg <field name="Compare func" size="3" start="39" type="Compare func"/> 2387ec681f3Smrg <field name="Unk 3" size="1" start="42" type="hex" default="1"/> 2397ec681f3Smrg <field name="Border colour" size="2" start="55" type="Border colour"/> 2407ec681f3Smrg </struct> 2417ec681f3Smrg 2427ec681f3Smrg <!--- Identified by tag? --> 2437ec681f3Smrg <struct name="Viewport" size="40"> 2447ec681f3Smrg <field name="Tag" size="32" start="0:0" type="hex" default="0xc00"/> 2457ec681f3Smrg 2467ec681f3Smrg <!-- Acts like a scissor at 32x32 tile boundaries, ignored unless clip tile is set --> 2477ec681f3Smrg <field name="Max tile X" size="9" start="1:0" type="uint" modifier="minus(1)"/> 2487ec681f3Smrg <field name="Min tile X" size="9" start="1:16" type="uint"/> 2497ec681f3Smrg <field name="Clip tile" size="1" start="1:31" type="bool"/> 2507ec681f3Smrg <field name="Max tile Y" size="9" start="2:0" type="uint" modifier="minus(1)"/> 2517ec681f3Smrg <field name="Min tile Y" size="9" start="2:16" type="uint"/> 2527ec681f3Smrg 2537ec681f3Smrg <!-- Used to convert clip space coordinates to NDC, does not clip --> 2547ec681f3Smrg <field name="Translate X" size="32" start="4:0" type="float"/> 2557ec681f3Smrg <field name="Scale X" size="32" start="5:0" type="float"/> 2567ec681f3Smrg <field name="Translate Y" size="32" start="6:0" type="float"/> 2577ec681f3Smrg <field name="Scale Y" size="32" start="7:0" type="float"/> 2587ec681f3Smrg 2597ec681f3Smrg <!-- Specifies an affine transformation from clip coordinates to viewport 2607ec681f3Smrg depth coordinates. For APIs with clip coordinates [0, 1], this cooresponds 2617ec681f3Smrg to near z and (far z - near z) respectively. In general, given clip 2627ec681f3Smrg coordinate z_in, the viewport depth is given as (z_in * scale_z) + 2637ec681f3Smrg translate_z. For example, the default [0, 1] depth buffer in OpenGL with 2647ec681f3Smrg [-1, +1] clip coordinates is specified as scale = 1/2, bias = 1/2 --> 2657ec681f3Smrg <field name="Translate Z" size="32" start="8:0" type="float"/> 2667ec681f3Smrg <field name="Scale Z" size="32" start="9:0" type="float"/> 2677ec681f3Smrg </struct> 2687ec681f3Smrg 2697ec681f3Smrg <!--- Pointed to from the command buffer --> 2707ec681f3Smrg <struct name="Scissor" size="16"> 2717ec681f3Smrg <field name="Max X" size="16" start="0:0" type="uint"/> 2727ec681f3Smrg <field name="Min X" size="16" start="0:16" type="uint"/> 2737ec681f3Smrg <field name="Max Y" size="16" start="1:0" type="uint"/> 2747ec681f3Smrg <field name="Min Y" size="16" start="1:16" type="uint"/> 2757ec681f3Smrg <field name="Min Z" size="32" start="2:0" type="float"/> 2767ec681f3Smrg <field name="Max Z" size="32" start="3:0" type="float"/> 2777ec681f3Smrg </struct> 2787ec681f3Smrg 2797ec681f3Smrg <struct name="Rasterizer face" size="8"> 2807ec681f3Smrg <field name="Stencil reference" size="8" start="0:0" type="hex"/> 2817ec681f3Smrg <!-- line width is 4:4 fixed point with off-by-one applied --> 2827ec681f3Smrg <field name="Line width" size="8" start="0:8" type="hex"/> 2837ec681f3Smrg <field name="Polygon mode" size="2" start="0:18" type="Polygon Mode"/> 2847ec681f3Smrg <field name="Disable depth write" size="1" start="0:21" type="bool"/> 2857ec681f3Smrg <field name="Depth function" size="3" start="0:24" type="ZS Func"/> 2867ec681f3Smrg <field name="Stencil write mask" size="8" start="1:0" type="hex"/> 2877ec681f3Smrg <field name="Stencil read mask" size="8" start="1:8" type="hex"/> 2887ec681f3Smrg <field name="Depth pass" size="3" start="1:16" type="Stencil Op"/> 2897ec681f3Smrg <field name="Depth fail" size="3" start="1:19" type="Stencil Op"/> 2907ec681f3Smrg <field name="Stencil fail" size="3" start="1:22" type="Stencil Op"/> 2917ec681f3Smrg <field name="Stencil compare" size="3" start="1:25" type="ZS Func"/> 2927ec681f3Smrg </struct> 2937ec681f3Smrg 2947ec681f3Smrg <struct name="Rasterizer" size="28"> 2957ec681f3Smrg <field name="Tag" size="32" start="0:0" type="hex" default="0x10000b5"/> 2967ec681f3Smrg <field name="Unk 1" size="1" start="1:9" type="hex" default="0x1"/> 2977ec681f3Smrg <field name="Scissor enable" size="1" start="1:16" type="bool"/> 2987ec681f3Smrg <field name="Unk ZS" size="1" start="1:18" type="hex" default="0x1"/> 2997ec681f3Smrg <field name="Unk 2" size="2" start="1:19" type="hex" default="0x0"/> 3007ec681f3Smrg <field name="Unk fill lines" size="1" start="1:26" type="hex" default="0x0"/> <!-- set when drawing LINES --> 3017ec681f3Smrg <field name="Front" size="64" start="2:0" type="Rasterizer face"/> 3027ec681f3Smrg <field name="Back" size="64" start="4:0" type="Rasterizer face"/> 3037ec681f3Smrg </struct> 3047ec681f3Smrg 3057ec681f3Smrg <struct name="Cull" size="8"> 3067ec681f3Smrg <field name="Tag" size="32" start="0:0" type="hex" default="0x200000"/> 3077ec681f3Smrg <field name="Cull front" size="1" start="1:0" type="bool"/> 3087ec681f3Smrg <field name="Cull back" size="1" start="1:1" type="bool"/> 3097ec681f3Smrg <field name="Unk GL 1" size="1" start="1:7" type="bool"/> 3107ec681f3Smrg <field name="Unk GL 2" size="1" start="1:8" type="bool"/> 3117ec681f3Smrg <field name="Depth clip" size="1" start="1:10" type="bool"/> 3127ec681f3Smrg <field name="Depth clamp" size="1" start="1:11" type="bool"/> 3137ec681f3Smrg <field name="Front face CCW" size="1" start="1:16" type="bool"/> 3147ec681f3Smrg </struct> 3157ec681f3Smrg 3167ec681f3Smrg <struct name="Interpolation" size="20"> 3177ec681f3Smrg <field name="Tag" size="32" start="0:0" type="hex" default="0x100C0000"/> 3187ec681f3Smrg <field name="Varying count" size="32" start="1:0" type="uint"/> 3197ec681f3Smrg </struct> 3207ec681f3Smrg 3217ec681f3Smrg <struct name="Linkage" size="16"> 3227ec681f3Smrg <field name="Tag" size="32" start="0:0" type="hex" default="0xC020000"/> 3237ec681f3Smrg <field name="Unk 1" size="32" start="1:0" type="hex" default="0x100"/> 3247ec681f3Smrg <field name="Unk 2" size="32" start="2:0" type="hex" default="0x0"/> 3257ec681f3Smrg <field name="Varying count" size="32" start="3:0" type="uint"/> 3267ec681f3Smrg </struct> 3277ec681f3Smrg 3287ec681f3Smrg <!-- Indexes into the array of scissor descriptors --> 3297ec681f3Smrg <struct name="Set scissor" size="8"> 3307ec681f3Smrg <field name="Tag" size="32" start="0:0" type="hex" default="0x100"/> 3317ec681f3Smrg <field name="Index" size="32" start="1:0" type="uint"/> 3327ec681f3Smrg </struct> 3337ec681f3Smrg 3347ec681f3Smrg <!--- Commands valid within a pipeline --> 3357ec681f3Smrg <struct name="Bind uniform" size="8"> 3367ec681f3Smrg <field name="Tag" size="8" start="0:0" type="hex" default="0x1d"/> 3377ec681f3Smrg <field name="Start (halfs)" size="8" start="0:8" type="uint"/> 3387ec681f3Smrg <field name="Unk" size="4" start="0:16" type="hex" default="0x0"/> 3397ec681f3Smrg <field name="Size (halfs)" size="4" start="0:20" type="uint"/> 3407ec681f3Smrg <field name="Buffer" size="40" start="0:24" type="address"/> 3417ec681f3Smrg </struct> 3427ec681f3Smrg 3437ec681f3Smrg <struct name="Bind texture" size="8"> 3447ec681f3Smrg <field name="Tag" size="8" start="0:0" type="hex" default="0xdd"/> 3457ec681f3Smrg <field name="Start" size="8" start="0:8" type="uint"/> 3467ec681f3Smrg <field name="Count" size="4" start="0:20" type="uint"/> 3477ec681f3Smrg <field name="Buffer" size="40" start="0:24" type="address"/> 3487ec681f3Smrg </struct> 3497ec681f3Smrg 3507ec681f3Smrg <struct name="Bind sampler" size="8"> 3517ec681f3Smrg <field name="Tag" size="8" start="0:0" type="hex" default="0x9d"/> 3527ec681f3Smrg <field name="Start" size="8" start="0:8" type="uint"/> 3537ec681f3Smrg <field name="Count" size="4" start="0:20" type="uint"/> 3547ec681f3Smrg <field name="Buffer" size="40" start="0:24" type="address"/> 3557ec681f3Smrg </struct> 3567ec681f3Smrg 3577ec681f3Smrg <enum name="Preshader mode"> 3587ec681f3Smrg <value name="Preshader" value="3"/> 3597ec681f3Smrg <value name="No preshader" value="8"/> 3607ec681f3Smrg </enum> 3617ec681f3Smrg 3627ec681f3Smrg <struct name="Set shader" size="24"> 3637ec681f3Smrg <field name="Tag" size="8" start="0:0" type="hex" default="0x4d"/> 3647ec681f3Smrg <field name="Unk 1" size="24" start="0:8" type="hex" default="0x90"/> 3657ec681f3Smrg <field name="Unk 2" size="8" start="1:0" type="hex" default="0x0d"/> <!-- TODO differs with stage --> 3667ec681f3Smrg <field name="Unk 2b" size="8" start="1:8" type="uint" default="4"/> 3677ec681f3Smrg <field name="Code" size="32" start="1:16" type="address"/> 3687ec681f3Smrg <field name="Unk 3" size="8" start="2:16" type="hex" default="0x8d"/> 3697ec681f3Smrg <field name="Register quadwords" size="5" start="2:24" type="uint"/> <!-- 0 for max --> 3707ec681f3Smrg <field name="Unk 3b" size="3" start="2:29" type="hex" default="0x0"/> 3717ec681f3Smrg <field name="Spill size" size="8" start="3:0" type="hex" default="0"/> <!-- TODO: determine relation, see docs/table.py --> 3727ec681f3Smrg <field name="Unk 4" size="12" start="3:8" type="hex" default="0x801"/> 3737ec681f3Smrg <field name="Preshader mode" size="4" start="3:20" type="Preshader mode" default="No preshader"/> 3747ec681f3Smrg <field name="Unk 6" size="8" start="3:24" type="hex" default="0x0"/> 3757ec681f3Smrg <field name="Preshader unk" size="16" start="4:0" type="hex" default="0x0"/> 3767ec681f3Smrg <field name="Preshader code" size="32" start="4:16" type="address"/> 3777ec681f3Smrg <field name="Unk 7" size="16" start="5:16" type="hex" default="0x0"/> <!-- blob is inconsistent --> 3787ec681f3Smrg </struct> 3797ec681f3Smrg 3807ec681f3Smrg <struct name="Set shader extended" size="32"> 3817ec681f3Smrg <field name="Tag" size="8" start="0:0" type="hex" default="0x4d"/> 3827ec681f3Smrg <field name="Unk 1" size="24" start="0:8" type="hex" default="0x2010bd"/> 3837ec681f3Smrg <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..? --> 3847ec681f3Smrg <field name="Unk 2b" size="8" start="1:8" type="uint" default="5"/> 3857ec681f3Smrg <field name="Code" size="32" start="1:16" type="address"/> 3867ec681f3Smrg <field name="Unk 3" size="8" start="2:16" type="hex" default="0x28d"/> 3877ec681f3Smrg <field name="Register quadwords" size="5" start="2:24" type="uint"/> <!-- 0 for max --> 3887ec681f3Smrg <field name="Unk 3b" size="3" start="2:29" type="hex" default="0x0"/> 3897ec681f3Smrg <field name="Frag unk" size="32" start="3:0" type="hex" default="0xf3580100"/> 3907ec681f3Smrg <field name="Spill size" size="8" start="4:0" type="hex" default="0"/> <!-- TODO: determine relation, see docs/table.py --> 3917ec681f3Smrg <field name="Unk 4" size="12" start="4:8" type="hex" default="0x801"/> 3927ec681f3Smrg <field name="Preshader mode" size="4" start="4:20" type="Preshader mode" default="No preshader"/> 3937ec681f3Smrg <field name="Unk 6" size="8" start="4:24" type="hex" default="0x0"/> 3947ec681f3Smrg <field name="Preshader unk" size="16" start="5:0" type="hex" default="0x0"/> 3957ec681f3Smrg <field name="Preshader code" size="32" start="5:16" type="address"/> 3967ec681f3Smrg <field name="Unk 7" size="16" start="6:16" type="hex" default="0x0"/> <!-- blob is inconsistent --> 3977ec681f3Smrg <field name="Unk 8" size="32" start="7:0" type="hex" default="0x0"/> <!-- may not exist --> 3987ec681f3Smrg </struct> 3997ec681f3Smrg 4007ec681f3Smrg <!--- Command to bind a vertex pipeline, followed by subcommands. Counts are 4017ec681f3Smrg specified in 32-bit word units. Intepretation per-shader stage. 4027ec681f3Smrg Probably actually 17 bytes. --> 4037ec681f3Smrg <struct name="Bind pipeline" size="16"> 4047ec681f3Smrg <field name="Tag" size="32" start="0:0" type="hex" default="0x4000002e"> 4057ec681f3Smrg <value name="AGX_BIND_PIPELINE_VERTEX" value="0x4000002e"/> 4067ec681f3Smrg <value name="AGX_BIND_PIPELINE_FRAGMENT" value="0x800000"/> 4077ec681f3Smrg </field> 4087ec681f3Smrg <field name="Unk 1" size="4" start="1:0" type="hex" default="0x2"/> 4097ec681f3Smrg <field name="Sampler count" start="1:4" size="5" type="uint"/> 4107ec681f3Smrg <field name="Texture count" start="1:9" size="3" type="uint"/> 4117ec681f3Smrg <field name="Unk 2" size="4" start="1:12" type="hex" default="0x1"/> 4127ec681f3Smrg <field name="Input count" size="8" start="1:16" type="uint" default="0"/> 4137ec681f3Smrg <field name="Padding 1" size="8" start="1:24" type="hex" default="0x0"/> 4147ec681f3Smrg <field name="Pipeline" size="32" start="2:0" type="address"/> 4157ec681f3Smrg 4167ec681f3Smrg <!-- Overlaps --> 4177ec681f3Smrg <field name="FS Varyings" size="32" start="3:0" type="address"/> 4187ec681f3Smrg <field name="VS Output count 1" size="8" start="3:0" type="uint" default="0"/> 4197ec681f3Smrg <field name="VS Output count 2" size="8" start="3:8" type="uint" default="0"/> 4207ec681f3Smrg <field name="Padding 2" size="16" start="3:16" type="hex" default="0x0"/> 4217ec681f3Smrg </struct> 4227ec681f3Smrg 4237ec681f3Smrg <!-- Subcommands are packed inside sized records --> 4247ec681f3Smrg <struct name="Record" size="8"> 4257ec681f3Smrg <field name="Size (words)" size="8" start="0:0" type="uint"/> 4267ec681f3Smrg <field name="Tag" size="16" start="0:8" type="hex" default="0x0000"/> 4277ec681f3Smrg <field name="Data" size="40" start="0:24" type="address"/> 4287ec681f3Smrg </struct> 4297ec681f3Smrg 4307ec681f3Smrg <!--- Command to issue a direct non-indexed draw --> 4317ec681f3Smrg <struct name="Draw" size="16"> 4327ec681f3Smrg <field name="Unk" size="8" start="0:0" type="hex" default="0x0"/> 4337ec681f3Smrg <field name="Primitive" size="8" start="0:8" type="Primitive"/> 4347ec681f3Smrg <field name="Command" size="16" start="0:16" type="hex" default="0x61c0"/> 4357ec681f3Smrg <field name="Vertex count" size="32" start="1:0" type="uint"/> 4367ec681f3Smrg <field name="Instance count" size="32" start="2:0" type="uint"/> <!-- must be nonzero --> 4377ec681f3Smrg <field name="Vertex start" size="32" start="3:0" type="uint"/> 4387ec681f3Smrg </struct> 4397ec681f3Smrg 4407ec681f3Smrg <enum name="Index size"> 4417ec681f3Smrg <value name="U8" value="0"/> 4427ec681f3Smrg <value name="U16" value="1"/> 4437ec681f3Smrg <value name="U32" value="2"/> 4447ec681f3Smrg </enum> 4457ec681f3Smrg 4467ec681f3Smrg <struct name="Indexed draw" size="32"> 4477ec681f3Smrg <field name="Unk 1" size="8" start="0:0" type="hex" default="0x1"/> 4487ec681f3Smrg <field name="Command" size="24" start="0:8" type="hex" default="0x400000"/> 4497ec681f3Smrg <field name="Restart index" size="32" start="1:0" type="hex"/> 4507ec681f3Smrg <field name="Unk 2a" size="8" start="2:0" type="hex" default="0x15"/> 4517ec681f3Smrg <field name="Primitive" size="8" start="2:8" type="Primitive"/> 4527ec681f3Smrg <field name="Restart enable" size="1" start="2:16" type="bool"/> <!-- Metal sets this bit for strips --> 4537ec681f3Smrg <field name="Index size" size="3" start="2:17" type="Index size"/> 4547ec681f3Smrg <field name="Unk 2c" size="4" start="2:20" type="hex" default="0xF"/> 4557ec681f3Smrg <field name="Unk 2d" size="8" start="2:24" type="hex" default="0x61"/> 4567ec681f3Smrg <field name="Index buffer offset" size="32" start="3:0" type="hex"/> 4577ec681f3Smrg <field name="Index count" size="32" start="4:0" type="uint"/> 4587ec681f3Smrg <field name="Instance count" size="32" start="5:0" type="uint"/> 4597ec681f3Smrg <field name="Base vertex" size="32" start="6:0" type="uint"/> 4607ec681f3Smrg <field name="Index buffer size" size="32" start="7:0" type="uint" modifier="shr(2)"/> 4617ec681f3Smrg </struct> 4627ec681f3Smrg 4637ec681f3Smrg <!--- Command to launch a direct compute kernel --> 4647ec681f3Smrg <struct name="Launch" size="36"> 4657ec681f3Smrg <field name="Command" size="32" start="0:0" type="hex" default="0x1002"/> 4667ec681f3Smrg <field name="Pipeline" size="32" start="1:0" type="address"/> 4677ec681f3Smrg <field name="Group count X" size="32" start="2:0" type="uint"/> 4687ec681f3Smrg <field name="Group count Y" size="32" start="3:0" type="uint"/> 4697ec681f3Smrg <field name="Group count Z" size="32" start="4:0" type="uint"/> 4707ec681f3Smrg <field name="Local size X" size="32" start="5:0" type="uint"/> 4717ec681f3Smrg <field name="Local size Y" size="32" start="6:0" type="uint"/> 4727ec681f3Smrg <field name="Local size Z" size="32" start="7:0" type="uint"/> 4737ec681f3Smrg <field name="Unk" size="32" start="8:0" type="hex" default="0x60000160"/> 4747ec681f3Smrg </struct> 4757ec681f3Smrg 4767ec681f3Smrg <!--- The rest of this file is likely software defined by macOS kernel --> 4777ec681f3Smrg <enum name="IOGPU Attachment Type"> 4787ec681f3Smrg <value name="Colour" value="0xA"/> 4797ec681f3Smrg <value name="Depth" value="0xC"/> 4807ec681f3Smrg </enum> 4817ec681f3Smrg 4827ec681f3Smrg <struct name="IOGPU Header" size="64"> 4837ec681f3Smrg <field name="Unk 0" start="0:0" size="32" default="0x10000" type="hex"/> 4847ec681f3Smrg <field name="Total size" start="1:0" size="32" type="uint"/> 4857ec681f3Smrg <field name="Unk 2" start="2:0" size="32" default="0x7" type="hex"/> 4867ec681f3Smrg <field name="Attachment offset 1" start="8:0" size="32" type="uint"/> 4877ec681f3Smrg <field name="Attachment length" start="9:0" size="32" type="uint"/> 4887ec681f3Smrg <field name="Attachment offset 2" start="10:0" size="32" type="uint"/> 4897ec681f3Smrg <field name="Unknown offset" start="11:0" size="32" type="uint"/> 4907ec681f3Smrg <field name="Unk 4" start="12:0" size="32" default="0x30" type="hex"/> 4917ec681f3Smrg <field name="Unk 5" start="13:0" size="32" default="0x01" type="hex"/> 4927ec681f3Smrg <field name="Encoder" start="14:0" size="64" type="address"/> 4937ec681f3Smrg </struct> 4947ec681f3Smrg 4957ec681f3Smrg <struct name="IOGPU Attachment" size="24"> 4967ec681f3Smrg <field name="Unk 0" start="0:0" size="16" default="0x100" type="hex"/> 4977ec681f3Smrg <field name="Address" start="0:16" size="48" type="address"/> 4987ec681f3Smrg <field name="Type" start="2:16" size="16" type="IOGPU Attachment Type"/> 4997ec681f3Smrg <field name="Unk 1" start="3:0" size="32" type="hex"/> 5007ec681f3Smrg <field name="Unk 2" start="4:0" size="3" type="hex"/> 5017ec681f3Smrg <field name="Bytes per pixel" start="4:3" size="5" type="uint"/> 5027ec681f3Smrg <field name="Unk 3" start="4:16" size="4" type="hex" default="0xC"/> 5037ec681f3Smrg <!-- Percent of total attachment space used for this attachment, expressed 5047ec681f3Smrg in a decimal percentage [0, 100] <field name="Percent" start="5:16" --> 5057ec681f3Smrg <field name="Percent" start="5:16" size="16" type="uint"/> 5067ec681f3Smrg </struct> 5077ec681f3Smrg</agxml> 508