| <?xml version="1.0" ?> |
| <genxml> |
| |
| <enum name="Channel"> |
| <value name="R" value="0"/> |
| <value name="G" value="1"/> |
| <value name="B" value="2"/> |
| <value name="A" value="3"/> |
| <value name="1" value="4"/> |
| <value name="0" value="5"/> |
| </enum> |
| |
| <enum name="ZS Func"> |
| <value name="Never" value="0"/> |
| <value name="Less" value="1"/> |
| <value name="Equal" value="2"/> |
| <value name="Lequal" value="3"/> |
| <value name="Greater" value="4"/> |
| <value name="Not Equal" value="5"/> |
| <value name="Gequal" value="6"/> |
| <value name="Always" value="7"/> |
| </enum> |
| |
| <enum name="Compare func"> |
| <value name="Lequal" value="0"/> |
| <value name="Gequal" value="1"/> |
| <value name="Less" value="2"/> |
| <value name="Greater" value="3"/> |
| <value name="Equal" value="4"/> |
| <value name="Not Equal" value="5"/> |
| <value name="Always" value="6"/> |
| <value name="Never" value="7"/> |
| </enum> |
| |
| <enum name="Stencil Op"> |
| <value name="Keep" value="0"/> |
| <value name="Zero" value="1"/> |
| <value name="Replace" value="2"/> |
| <value name="Incr Sat" value="3"/> |
| <value name="Decr Sat" value="4"/> |
| <value name="Invert" value="5"/> |
| <value name="Incr Wrap" value="6"/> |
| <value name="Decr Wrap" value="7"/> |
| </enum> |
| |
| <enum name="Visibility Mode"> |
| <value name="None" value="0"/> |
| <value name="Counting" value="2"/> |
| <value name="Boolean" value="3"/> |
| </enum> |
| |
| <enum name="Polygon Mode"> |
| <value name="Fill" value="0"/> |
| <value name="Line" value="1"/> |
| <value name="Point" value="2"/> |
| </enum> |
| |
| <enum name="Primitive"> |
| <value name="Points" value="0"/> |
| <value name="Lines" value="1"/> |
| <value name="Line strip" value="3"/> |
| <value name="Line loop" value="5"/> |
| <value name="Triangles" value="6"/> |
| <value name="Triangle strip" value="9"/> |
| <value name="Triangle fan" value="11"/> |
| <value name="Quads" value="14"/> |
| <value name="Quad strip" value="15"/> |
| </enum> |
| |
| <enum name="Object Type"> |
| <value name="Triangle" value="0"/> |
| <value name="Line" value="1"/> |
| <value name="Point sprite UV=10" value="2"/> |
| <value name="Point sprite UV=01" value="4"/> |
| <!-- Line-filled tri. Point-filled tri. UV. Rect. Match RGX. --> |
| </enum> |
| |
| <enum name="Layout"> |
| <value name="Linear" value="0"/> |
| <value name="Twiddled" value="1"/> |
| <value name="GPU" value="2"/> |
| <value name="Interchange" value="3"/> |
| </enum> |
| |
| <enum name="Channels"> |
| <value name="R8" value="0x00"/> |
| <value name="R16" value="0x09"/> |
| <value name="R8G8" value="0x0A"/> |
| <value name="R5G6B5" value="0x0B"/> |
| <value name="R4G4B4A4" value="0x0C"/> |
| <value name="A1R5G5B5" value="0x0D"/> |
| <value name="R5G5B5A1" value="0x0E"/> |
| <value name="R32" value="0x21"/> |
| <value name="R16G16" value="0x23"/> |
| <value name="R11G11B10" value="0x25"/> |
| <value name="R10G10B10A2" value="0x26"/> |
| <value name="R9G9B9E5" value="0x27"/> |
| <value name="R8G8B8A8" value="0x28"/> |
| <value name="R32G32" value="0x31"/> |
| <value name="R16G16B16A16" value="0x32"/> |
| |
| <!-- Software-defined value selected not to clash with the hardware values. |
| Texture buffer reads from this format are lowered. It is invalid to |
| use this format for anything else. --> |
| <value name="R32G32B32 (Emulated)" value="0x36"/> |
| |
| <value name="R32G32B32A32" value="0x38"/> |
| <value name="GBGR 422" value="0x40"/> <!-- Subsampled, swizzle BRG1 --> |
| <value name="BGRG 422" value="0x41"/> <!-- Subsampled, swizzle BRG1 --> |
| |
| <!-- Compressed --> |
| <value name="PVRTC 2bpp" value="0x50"/> |
| <value name="PVRTC 4bpp" value="0x51"/> |
| |
| <value name="ETC2 RGB8" value="0x58"/> |
| <value name="ETC2 RGBA8" value="0x59"/> |
| <value name="ETC2 RGB8A1" value="0x5A"/> |
| <value name="EAC R11" value="0x5B"/> |
| <value name="EAC RG11" value="0x5C"/> |
| |
| <!-- For LDR use with UNORM/no-sRGB, for sRGB use with UNORM/sRGB, for HDR |
| use with FLOAT/no-sRGB --> |
| <value name="ASTC 4x4" value="0x60"/> |
| <value name="ASTC 5x4" value="0x61"/> |
| <value name="ASTC 5x5" value="0x62"/> |
| <value name="ASTC 6x5" value="0x63"/> |
| <value name="ASTC 6x6" value="0x64"/> |
| <value name="ASTC 8x5" value="0x65"/> |
| <value name="ASTC 8x6" value="0x66"/> |
| <value name="ASTC 8x8" value="0x67"/> |
| <value name="ASTC 10x5" value="0x68"/> |
| <value name="ASTC 10x6" value="0x69"/> |
| <value name="ASTC 10x8" value="0x6A"/> |
| <value name="ASTC 10x10" value="0x6B"/> |
| <value name="ASTC 12x10" value="0x6C"/> |
| <value name="ASTC 12x12" value="0x6D"/> |
| |
| <value name="BC1" value="0x74"/> |
| <value name="BC2" value="0x75"/> |
| <value name="BC3" value="0x76"/> |
| <value name="BC4" value="0x77"/> |
| <value name="BC5" value="0x78"/> |
| <value name="BC6H" value="0x79"/> |
| <value name="BC6H Ufloat" value="0x7A"/> |
| <value name="BC7" value="0x7B"/> |
| </enum> |
| |
| <enum name="Texture Type"> |
| <value name="Unorm" value="0"/> |
| <value name="Snorm" value="1"/> |
| <value name="Uint" value="2"/> |
| <value name="Sint" value="3"/> |
| <value name="Float" value="4"/> |
| <value name="XR" value="5"/> |
| </enum> |
| |
| <struct name="CF binding header" size="4"> |
| <field name="Number of 32-bit slots" size="8" start="0:0" type="uint"/> |
| <field name="Number of coefficient registers" size="8" start="0:8" type="uint"/> |
| </struct> |
| |
| <enum name="Shade model"> |
| <value name="Flat vertex 0" value="0"/> |
| <value name="Flat vertex 2" value="2"/> |
| <value name="Linear" value="3"/> |
| <value name="Flat vertex 1" value="6"/> |
| <value name="Perspective" value="7"/> |
| </enum> |
| |
| <enum name="Coefficient source"> |
| <value name="Varying" value="0"/> |
| <value name="Fragcoord Z" value="1"/> |
| <value name="Point coord" value="2"/> |
| <value name="Primitive ID" value="3"/> |
| <!-- Vec2 only --> |
| <value name="Barycentric coord" value="5"/> |
| </enum> |
| |
| <struct name="CF binding" size="4"> |
| <field name="Components" size="2" start="0" type="uint" modifier="minus(1)"/> |
| <field name="Shade model" size="3" start="2" type="Shade model"/> |
| <field name="Source" size="3" start="5" type="Coefficient source"/> |
| <field name="Base slot" size="8" start="8" type="uint"/> |
| <field name="Base coefficient register" size="8" start="16" type="uint"/> |
| </struct> |
| |
| <enum name="Texture dimension"> |
| <value name="1D" value="0"/> |
| <value name="1D Array" value="1"/> |
| <value name="2D" value="2"/> |
| <value name="2D Array" value="3"/> |
| <value name="2D Multisampled" value="4"/> |
| <value name="3D" value="5"/> |
| <value name="Cube" value="6"/> |
| <value name="Cube Array" value="7"/> |
| <value name="2D Array Multisampled" value="8"/> |
| </enum> |
| |
| <enum name="Sample Count"> |
| <value name="2" value="0"/> |
| <value name="4" value="1"/> |
| </enum> |
| |
| <enum name="Image Mode"> |
| <value name="Normal" value="0"/> |
| <!-- This is r/e, I can name things however I'd like. --> |
| <value name="Not sparse but probably with counters" value="1"/> |
| <value name="Sparse but probably no counters" value="2"/> |
| <value name="Sparse" value="3"/> |
| </enum> |
| |
| <struct name="Sparse block" size="4"> |
| <field name="Address" size="26" start="0" type="address" modifier="shr(14)"/> |
| <!-- Bits 26...29 don't seem to do anything and I don't see macOS setting them. Bit 30 on the other hand macOS sets and I don't know why. --> |
| <field name="Unknown" size="1" start="30" type="bool"/> |
| <field name="Enabled" size="1" start="31" type="bool"/> |
| </struct> |
| |
| <struct name="PBE" size="24"> |
| <field name="Dimension" size="4" start="0" type="Texture dimension"/> |
| <field name="Layout" size="2" start="4" type="Layout"/> |
| <field name="Channels" size="7" start="6" type="Channels"/> |
| <field name="Type" size="3" start="13" type="Texture Type"/> |
| <field name="Swizzle R" size="2" start="16" type="Channel"/> |
| <field name="Swizzle G" size="2" start="18" type="Channel"/> |
| <field name="Swizzle B" size="2" start="20" type="Channel"/> |
| <field name="Swizzle A" size="2" start="22" type="Channel"/> |
| <field name="Width" size="14" start="24" type="uint" modifier="minus(1)"/> |
| <field name="Height" size="14" start="38" type="uint" modifier="minus(1)"/> |
| <field name="Unk 52" size="1" start="52" type="bool"/> |
| <field name="Rotate 90" size="1" start="53" type="bool"/> |
| <field name="Flip vertical" size="1" start="54" type="bool"/> |
| <field name="Samples" size="1" start="56" type="Sample Count"/> |
| <field name="Unk mipmapped" size="1" start="58" type="bool"/> |
| <field name="Compressed 1" size="1" start="59" type="bool"/> |
| <field name="Mode" size="2" start="60" type="Image Mode"/> |
| <field name="Buffer" size="36" start="64" type="address" modifier="shr(4)"/> |
| <field name="Level" size="4" start="100" type="uint"/> |
| |
| <!-- If layout is not linear. Layers must be zero unless rendering to an |
| array texture (with a layered framebuffer) --> |
| <field name="Levels" size="4" start="104" type="uint" modifier="minus(1)"/> |
| <field name="Layers" size="14" start="108" type="uint" modifier="minus(1)"/> |
| <field name="Page-aligned layers" size="1" start="124" type="bool"/> |
| |
| <!-- Should writes to this image convert to sRGB? |
| |
| Note that imageblock writes do not use this flag, instead doing the |
| conversion when writing into the tilebuffer. --> |
| <field name="sRGB" size="1" start="125" type="bool"/> |
| |
| <!-- Read the next word (set for compression or linear 2D arrays) --> |
| <field name="Extended" size="1" start="127" type="bool"/> |
| |
| <!-- If layout is linear. Off by 4? --> |
| <field name="Stride" size="21" start="104" type="hex"/> |
| |
| <!-- If layout is compressed --> |
| <field name="Acceleration buffer" size="64" start="128" type="address" modifier="shr(4)"/> |
| |
| <!-- If layout is linear, stride has the minus 1 encoded --> |
| <field name="Depth (linear)" size="11" start="128" type="uint" modifier="minus(1)"/> |
| <field name="Layer stride (linear)" size="27" start="139" type="uint" modifier="shr(7)"/> |
| |
| <!-- If neither, for software use to accelerate atomics and multisampled |
| writes. These are forbidden for compressed images and linear 2D arrays, |
| leaving this area free. |
| --> |
| <field name="Level offset (sw)" size="27" start="128" type="uint" modifier="shr(7)"/> |
| <field name="Aligned width MSAA (sw)" size="15" start="128" type="uint"/> |
| <field name="Sample count log2 (sw)" size="2" start="143" type="uint"/> |
| <field name="Tile width (sw)" size="4" start="155" type="uint" modifier="log2"/> |
| <field name="Tile height (sw)" size="4" start="159" type="uint" modifier="log2"/> |
| <field name="Layer stride (sw)" size="27" start="163" type="uint" modifier="shr(7)"/> |
| <field name="Buffer offset (sw)" size="32" start="128" type="uint"/> |
| </struct> |
| |
| <struct name="Texture" size="24"> |
| <field name="Dimension" size="4" start="0" type="Texture dimension"/> |
| <field name="Layout" size="2" start="4" type="Layout"/> |
| <field name="Channels" size="7" start="6" type="Channels"/> |
| <field name="Type" size="3" start="13" type="Texture Type"/> |
| <field name="Swizzle R" size="3" start="16" type="Channel"/> |
| <field name="Swizzle G" size="3" start="19" type="Channel"/> |
| <field name="Swizzle B" size="3" start="22" type="Channel"/> |
| <field name="Swizzle A" size="3" start="25" type="Channel"/> |
| <field name="Width" size="14" start="28" type="uint" modifier="minus(1)"/> |
| <field name="Height" size="14" start="42" type="uint" modifier="minus(1)"/> |
| <field name="First level" size="4" start="56" type="uint"/> |
| <field name="Last level" size="4" start="60" type="uint"/> |
| <field name="Samples" size="1" start="64" type="Sample Count"/> |
| <field name="Address" size="36" start="66" type="hex" modifier="shr(4)"/> |
| <!-- Unknown bit set by Metal when mipmapping. Might relate to a mechanism |
| to switch tile size (or disable tiling altogether?) at small mip levels to |
| reduce wasted memory due to padding. Causing test flakiness when set. --> |
| <field name="Unk mipmapped" size="1" start="102" type="bool"/> |
| <field name="Compressed 1" size="1" start="103" type="bool"/> |
| <field name="Mode" size="2" start="104" type="Image Mode"/> |
| <field name="Compression" size="2" start="106" type="hex"/> <!-- 0 for uncompressed --> |
| <field name="sRGB" size="1" start="108" type="bool"/> |
| <field name="sRGB 2-channel" size="1" start="109" type="bool"/> |
| <field name="Stride" size="18" start="110" type="hex" modifier="shr(4)"/> |
| <!-- Note that 3D/arrays cannot be linear. --> |
| <field name="Depth" size="14" start="110" type="uint" modifier="minus(1)"/> |
| <field name="Page-aligned layers" size="1" start="126" type="bool"/> |
| |
| <!-- Read the next word (set for compression or linear 2D arrays) --> |
| <field name="Extended" size="1" start="127" type="bool"/> |
| |
| <!-- If layout is compressed --> |
| <field name="Acceleration buffer" size="64" start="128" type="address" modifier="shr(4)"/> |
| |
| <!-- If layout is linear, stride has the minus 1 encoded --> |
| <field name="Depth (linear)" size="11" start="128" type="uint" modifier="minus(1)"/> |
| <field name="Layer stride (linear)" size="27" start="139" type="uint" modifier="shr(7)"/> |
| |
| <!-- Buffer texture metadata --> |
| <field name="Buffer size (sw)" size="32" start="128" type="uint"/> |
| <field name="Buffer offset (sw)" size="32" start="160" type="uint"/> |
| </struct> |
| |
| <enum name="Wrap"> |
| <value name="Clamp to edge" value="0"/> |
| <value name="Repeat" value="1"/> |
| <value name="Mirrored repeat" value="2"/> |
| <value name="Clamp to border" value="3"/> |
| <value name="Clamp (GL)" value="4"/> |
| <value name="Mirrored clamp to edge" value="5"/> |
| </enum> |
| |
| <enum name="Mip filter"> |
| <value name="None" value="0"/> |
| <value name="Nearest" value="1"/> |
| <value name="Linear" value="2"/> |
| </enum> |
| |
| <enum name="Border colour"> |
| <value name="Transparent black" value="0"/> |
| <value name="Opaque black" value="1"/> |
| <value name="Opaque white" value="2"/> |
| <value name="Custom" value="3"/> |
| </enum> |
| |
| <enum name="Filter"> |
| <value name="Nearest" value="0"/> |
| <value name="Linear" value="1"/> |
| <value name="Bicubic" value="2"/> |
| </enum> |
| |
| <struct name="Sampler" size="8"> |
| <field name="Minimum LOD" size="10" start="0" type="lod"/> |
| <field name="Maximum LOD" size="10" start="10" type="lod"/> |
| <field name="Maximum anisotropy" size="3" start="20" type="uint" modifier="log2"/> |
| <field name="Magnify" size="2" start="23" type="Filter"/> |
| <field name="Minify" size="2" start="25" type="Filter"/> |
| <field name="Mip filter" size="2" start="27" type="Mip filter"/> |
| <field name="Wrap S" size="3" start="29" type="Wrap"/> |
| <field name="Wrap T" size="3" start="32" type="Wrap"/> |
| <field name="Wrap R" size="3" start="35" type="Wrap"/> |
| <field name="Pixel coordinates" size="1" start="38" type="bool"/> |
| <field name="Compare func" size="3" start="39" type="Compare func"/> |
| <field name="Compare enable" size="1" start="42" type="bool"/> |
| <field name="Border colour" size="2" start="55" type="Border colour"/> |
| <field name="Seamful cube maps" size="1" start="57" type="bool"/> |
| </struct> |
| |
| <struct name="Border" size="16"> |
| <field name="Channel 0" size="32" start="0:0" type="hex"/> |
| <field name="Channel 1" size="32" start="1:0" type="hex"/> |
| <field name="Channel 2" size="32" start="2:0" type="hex"/> |
| <field name="Channel 3" size="32" start="3:0" type="hex"/> |
| </struct> |
| |
| <!--- Pointed to from the command buffer --> |
| <struct name="Scissor" size="16"> |
| <field name="Max X" size="16" start="0:0" type="uint"/> |
| <field name="Min X" size="16" start="0:16" type="uint"/> |
| <field name="Max Y" size="16" start="1:0" type="uint"/> |
| <field name="Min Y" size="16" start="1:16" type="uint"/> |
| <field name="Min Z" size="32" start="2:0" type="float"/> |
| <field name="Max Z" size="32" start="3:0" type="float"/> |
| </struct> |
| |
| <!-- Note: this structure is not padded. It really is 12 bytes --> |
| <struct name="Depth bias" size="12"> |
| <field name="Depth bias" size="32" start="0:0" type="float"/> |
| <field name="Slope scale" size="32" start="1:0" type="float"/> |
| <field name="Clamp" size="32" start="2:0" type="float"/> |
| </struct> |
| |
| <enum name="Sampler states"> |
| <value name="0" value="0"/> |
| <value name="4 compact" value="1"/> |
| <value name="8 compact" value="2"/> |
| <value name="12 compact" value="3"/> |
| <value name="16 compact" value="4"/> |
| <value name="8 extended" value="6"/> |
| <value name="16 extended" value="7"/> |
| </enum> |
| |
| <struct name="Counts" size="4"> |
| <field name="Unknown 0" size="1" start="0" type="hex"/> |
| <field name="Uniform register count" size="3" start="1" type="uint" modifier="groups(64)"/> |
| <field name="Texture state register count" size="5" start="4" type="uint" modifier="groups(8)"/> |
| <field name="Sampler state register count" size="3" start="9" type="Sampler states"/> |
| <field name="Preshader register count" size="4" start="12" type="uint" modifier="groups(16)"/> |
| <field name="CF binding count" size="7" start="16" type="uint"/> |
| |
| <!-- Only for fragment shaders --> |
| <field name="Unknown" size="16" start="16" type="hex"/> |
| </struct> |
| |
| <!-- PPP state starts --> |
| <struct name="PPP Header" size="4"> |
| <field name="Fragment control" size="1" start="0" type="bool"/> |
| <field name="Fragment control 2" size="1" start="1" type="bool"/> |
| <field name="Fragment front face" size="1" start="2" type="bool"/> |
| <field name="Fragment front face 2" size="1" start="3" type="bool"/> |
| <field name="Fragment front stencil" size="1" start="4" type="bool"/> |
| <field name="Fragment back face" size="1" start="5" type="bool"/> |
| <field name="Fragment back face 2" size="1" start="6" type="bool"/> |
| <field name="Fragment back stencil" size="1" start="7" type="bool"/> |
| <field name="Depth bias/scissor" size="1" start="8" type="bool"/> |
| <field name="Region clip" size="1" start="10" type="bool"/> |
| <field name="Viewport" size="1" start="11" type="bool"/> |
| <field name="Viewport count" size="4" start="12" type="uint" modifier="minus(1)"/> |
| <field name="W clamp" size="1" start="16" type="bool"/> |
| <field name="Output select" size="1" start="17" type="bool"/> |
| <field name="Varying counts 32" size="1" start="18" type="bool"/> |
| <field name="Varying counts 16" size="1" start="19" type="bool"/> |
| <field name="Cull" size="1" start="21" type="bool"/> |
| <field name="Cull 2" size="1" start="22" type="bool"/> |
| <field name="Fragment shader" size="1" start="23" type="bool"/> |
| <field name="Occlusion query" size="1" start="24" type="bool"/> |
| <field name="Occlusion query 2" size="1" start="25" type="bool"/> |
| <field name="Output unknown" size="1" start="26" type="bool"/> |
| <field name="Output size" size="1" start="27" type="bool"/> |
| <field name="Varying word 2" size="1" start="28" type="bool"/> |
| </struct> |
| |
| <!-- Acts like a scissor at 32x32 tile boundaries, ignored unless clip tile is set --> |
| <struct name="Region clip" size="8"> |
| <field name="Max X" size="9" start="0" type="uint" modifier="minus(1)"/> |
| <field name="Min X" size="9" start="16" type="uint"/> |
| <field name="Enable" size="1" start="31" type="bool"/> |
| <field name="Max Y" size="9" start="32" type="uint" modifier="minus(1)"/> |
| <field name="Min Y" size="9" start="48" type="uint"/> |
| </struct> |
| |
| <struct name="Viewport control" size="4"> |
| <!-- so far only seen zeroes, but it stands to reason this is meant as a |
| control word for the viewports --> |
| </struct> |
| |
| <!-- Used to convert clip space coordinates to NDC, does not clip --> |
| <struct name="Viewport" size="24"> |
| <field name="Translate X" size="32" start="0:0" type="float"/> |
| <field name="Scale X" size="32" start="1:0" type="float"/> |
| <field name="Translate Y" size="32" start="2:0" type="float"/> |
| <field name="Scale Y" size="32" start="3:0" type="float"/> |
| <field name="Translate Z" size="32" start="4:0" type="float"/> |
| <field name="Scale Z" size="32" start="5:0" type="float"/> |
| </struct> |
| |
| <struct name="Fragment face" size="4"> |
| <field name="Stencil reference" size="8" start="0" type="hex"/> |
| <!-- line width is 4:4 fixed point with off-by-one applied --> |
| <field name="Line width" size="8" start="8" type="hex"/> |
| <field name="Polygon mode" size="2" start="18" type="Polygon Mode"/> |
| <field name="Disable depth write" size="1" start="21" type="bool"/> |
| <field name="Unk - visibility test internal" size="2" start="22" type="hex"/> |
| <field name="Depth function" size="3" start="24" type="ZS Func"/> |
| </struct> |
| |
| <enum name="Conservative depth"> |
| <value name="Any" value="0"/> |
| <value name="Greater" value="1"/> |
| <value name="Less" value="2"/> |
| <value name="Unchanged" value="3"/> |
| </enum> |
| |
| <struct name="Fragment face 2" size="4"> |
| <!-- If either disable is zeroed, depth is written --> |
| <field name="Disable depth write" size="1" start="21" type="bool"/> |
| <!-- If depth written from FS --> |
| <field name="Conservative depth" size="2" start="22" type="Conservative depth"/> |
| <!-- Both depth functions must pass --> |
| <field name="Depth function" size="3" start="24" type="ZS Func"/> |
| <field name="Object type" size="4" start="28" type="Object Type"/> |
| </struct> |
| |
| <struct name="Fragment stencil" size="4"> |
| <field name="Write mask" size="8" start="0" type="hex"/> |
| <field name="Read mask" size="8" start="8" type="hex"/> |
| <field name="Depth pass" size="3" start="16" type="Stencil Op"/> |
| <field name="Depth fail" size="3" start="19" type="Stencil Op"/> |
| <field name="Stencil fail" size="3" start="22" type="Stencil Op"/> |
| <field name="Compare" size="3" start="25" type="ZS Func"/> |
| </struct> |
| |
| <enum name="Pass type"> |
| <value name="Opaque" value="0"/> |
| <value name="Translucent" value="1"/> |
| <value name="Punch through" value="2"/> |
| <value name="Translucent punch through" value="3"/> |
| </enum> |
| |
| <struct name="Fragment control" size="4"> |
| <field name="Unk 1" size="1" start="9" type="bool" exact="true"/> |
| <field name="Visibility mode" size="2" start="14" type="Visibility Mode"/> |
| <field name="Scissor enable" size="1" start="16" type="bool"/> |
| <field name="Depth bias enable" size="1" start="17" type="bool"/> |
| <field name="Stencil test enable" size="1" start="18" type="bool"/> |
| <field name="Two-sided stencil" size="1" start="19" type="bool"/> |
| <field name="Tag write disable" size="1" start="21" type="bool"/> |
| <field name="Sample mask after depth/stencil" size="1" start="25" type="bool"/> |
| <field name="Disable tri merging" size="1" start="26" type="bool"/> |
| <field name="Pass type" size="3" start="29" type="Pass type"/> |
| </struct> |
| |
| <struct name="Fragment occlusion query" size="4"> |
| <!-- 64-bit index into occlusion result buffer --> |
| <field name="Index" size="15" start="17" type="uint"/> |
| </struct> |
| |
| <struct name="Fragment occlusion query 2" size="4"> |
| <field name="Unknown" size="17" start="0" type="hex"/> |
| </struct> |
| |
| <struct name="W Clamp" size="4"> |
| <field name="W Clamp" size="32" start="0" type="float"/> |
| </struct> |
| |
| <enum name="PPP Vertex"> |
| <value name="0" value="1"/> |
| <value name="1" value="2"/> |
| <value name="2" value="3"/> |
| </enum> |
| |
| <struct name="Cull" size="4"> |
| <field name="Cull front" size="1" start="0" type="bool"/> |
| <field name="Cull back" size="1" start="1" type="bool"/> |
| <field name="Flat shading vertex" size="2" start="7" type="PPP Vertex"/> |
| <field name="Depth clip" size="1" start="10" type="bool"/> |
| <field name="Depth clamp" size="1" start="11" type="bool"/> |
| <field name="Primitive MSAA" size="1" start="15" type="bool"/> |
| <field name="Front face CCW" size="1" start="16" type="bool"/> |
| <field name="Rasterizer discard" size="1" start="17" type="bool"/> |
| </struct> |
| |
| <struct name="Cull 2" size="4"> |
| <field name="Clamp W" size="1" start="5" type="bool"/> |
| <field name="Draw clipped edges" size="1" start="9" type="bool"/> |
| <field name="Needs Primitive ID" size="1" start="12" type="bool"/> |
| <field name="Rasterizer discard" size="1" start="17" type="bool"/> |
| </struct> |
| |
| <struct name="Varying Counts" size="4"> |
| <field name="Smooth" size="8" start="0" type="uint"/> |
| <field name="Flat" size="8" start="8" type="uint"/> |
| <field name="Linear" size="8" start="16" type="uint"/> |
| </struct> |
| |
| <struct name="Varying 2" size="8"> |
| <!-- TODO --> |
| </struct> |
| |
| <struct name="Output Select" size="4"> |
| <field name="Clip distance plane 0" size="1" start="0" type="bool"/> |
| <field name="Clip distance plane 1" size="1" start="1" type="bool"/> |
| <field name="Clip distance plane 2" size="1" start="2" type="bool"/> |
| <field name="Clip distance plane 3" size="1" start="3" type="bool"/> |
| <field name="Clip distance plane 4" size="1" start="4" type="bool"/> |
| <field name="Clip distance plane 5" size="1" start="5" type="bool"/> |
| <field name="Clip distance plane 6" size="1" start="6" type="bool"/> |
| <field name="Clip distance plane 7" size="1" start="7" type="bool"/> |
| <field name="Clip distance plane 8" size="1" start="8" type="bool"/> |
| <field name="Clip distance plane 9" size="1" start="9" type="bool"/> |
| <field name="Clip distance plane 10" size="1" start="10" type="bool"/> |
| <field name="Clip distance plane 11" size="1" start="11" type="bool"/> |
| <field name="Clip distance plane 12" size="1" start="12" type="bool"/> |
| <field name="Clip distance plane 13" size="1" start="13" type="bool"/> |
| <field name="Clip distance plane 14" size="1" start="14" type="bool"/> |
| <field name="Clip distance plane 15" size="1" start="15" type="bool"/> |
| <field name="Varyings" size="1" start="16" type="bool"/> |
| <field name="Point size" size="1" start="18" type="bool"/> |
| <!-- For layered rendering, enable both and write the 2x16-bit tuple from |
| the vertex shader (layer, viewport). --> |
| <field name="Viewport target" size="1" start="19" type="bool"/> |
| <field name="Render target" size="1" start="20" type="bool"/> |
| <field name="Frag coord Z" size="1" start="21" type="bool"/> |
| <field name="Barycentric coordinates" size="1" start="22" type="bool"/> |
| </struct> |
| |
| <struct name="Output Unknown" size="4"> |
| <!-- So far always zero --> |
| </struct> |
| |
| <struct name="Output Size" size="4"> |
| <field name="Count" size="32" start="0" type="uint"/> |
| </struct> |
| |
| <!-- Indexes into the scissor and depth bias arrays --> |
| <struct name="Depth bias/Scissor" size="4"> |
| <field name="Scissor" size="16" start="0" type="uint"/> |
| <field name="Depth bias" size="16" start="16" type="uint"/> |
| </struct> |
| |
| <struct name="Fragment Shader Word 0" size="4"> |
| <field name="Unknown 0" size="1" start="0" type="hex"/> |
| <field name="Uniform register count" size="3" start="1" type="uint" modifier="groups(64)"/> |
| <field name="Texture state register count" size="5" start="4" type="uint" modifier="groups(8)"/> |
| <field name="Sampler state register count" size="3" start="9" type="Sampler states"/> |
| <field name="Preshader register count" size="4" start="12" type="uint" modifier="groups(16)"/> |
| <field name="CF binding count" size="7" start="16" type="uint"/> |
| </struct> |
| |
| <struct name="Fragment Shader Word 1" size="4"> |
| <field name="Unknown 1:0" size="2" start="0" type="hex"/> |
| <field name="Pipeline" size="26" start="6" type="address" modifier="shr(6)"/> |
| </struct> |
| |
| <struct name="Fragment Shader Word 2" size="4"> |
| <field name="CF bindings" size="30" start="2" type="address" modifier="shr(2)"/> |
| </struct> |
| |
| <struct name="Fragment Shader Word 3" size="4"> |
| <!-- Seems to be set to small values depending on textures? and pushed |
| uniforms? Needs investigation --> |
| <field name="Unknown" start="0" size="4" type="hex"/> |
| </struct> |
| <!-- PPP state ends --> |
| |
| <!-- USC state starts --> |
| <enum name="USC Control"> |
| <value name="Preshader" value="0x38"/> |
| <value name="Fragment properties" value="0x58"/> |
| <value name="No preshader" value="0x88"/> |
| <value name="Shader" value="0x0d"/> |
| <value name="Uniform" value="0x1d"/> |
| <value name="Uniform high" value="0x3d"/> |
| <value name="Shared" value="0x4d"/> |
| <value name="Registers" value="0x8d"/> |
| <value name="Sampler" value="0x9d"/> |
| <value name="Texture" value="0xdd"/> |
| </enum> |
| |
| <struct name="USC Uniform" size="8"> |
| <field name="Tag" size="8" start="0:0" type="USC Control" exact="Uniform"/> |
| <field name="Start (halfs)" size="8" start="0:8" type="uint"/> |
| <field name="Size (halfs)" size="6" start="0:20" type="uint" modifier="groups(1)"/> |
| <field name="Buffer" size="38" start="0:26" type="address" modifier="shr(2)"/> |
| </struct> |
| |
| <struct name="USC Uniform High" size="8"> |
| <field name="Tag" size="8" start="0:0" type="USC Control" exact="Uniform High"/> |
| <field name="Start (halfs)" size="8" start="0:8" type="uint"/> |
| <field name="Size (halfs)" size="6" start="0:20" type="uint" modifier="groups(1)"/> |
| <field name="Buffer" size="38" start="0:26" type="address" modifier="shr(2)"/> |
| </struct> |
| |
| <struct name="USC Texture" size="8"> |
| <field name="Tag" size="8" start="0:0" type="USC Control" exact="Texture"/> |
| <field name="Start" size="8" start="0:8" type="uint"/> |
| <!-- Exact split is unknown. Count is at least 5 bits. Less than 8 bits. --> |
| <field name="Count" size="7" start="0:20" type="uint"/> |
| <field name="Buffer" size="36" start="0:27" type="address" modifier="shr(3)"/> |
| </struct> |
| |
| <struct name="USC Sampler" size="8"> |
| <field name="Tag" size="8" start="0:0" type="USC Control" exact="Sampler"/> |
| <field name="Start" size="8" start="0:8" type="uint"/> |
| <field name="Count" size="7" start="0:20" type="uint"/> |
| <!-- Exact split is unknown. --> |
| <field name="Buffer" size="36" start="0:27" type="address" modifier="shr(3)"/> |
| </struct> |
| |
| <enum name="Shared layout"> |
| <value name="Vertex/compute" value="0x24"/> |
| <value name="32x32" value="0x2f"/> |
| <value name="32x16" value="0x3f"/> |
| <value name="16x16" value="0x36"/> |
| </enum> |
| |
| <struct name="USC Shared" size="4"> |
| <field name="Tag" size="8" start="0" type="USC Control" exact="Shared"/> |
| <field name="Uses shared memory" size="1" start="8" type="bool"/> |
| <field name="Layout" size="6" start="10" type="Shared layout"/> |
| <field name="Sample count" size="2" start="16" type="uint" modifier="log2"/> |
| <field name="Sample stride in 8 bytes" size="4" start="20" type="uint"/> |
| <field name="Bytes per threadgroup" size="8" start="24" type="uint" modifier="groups(256)"/> |
| </struct> |
| |
| <struct name="USC Shader" size="6"> |
| <field name="Tag" size="8" start="0" type="USC Control" exact="Shader"/> |
| <field name="Loads varyings" size="1" start="8" type="bool"/> |
| <!-- Seen set for pixel rate fragment shaders? --> |
| <field name="Unk 1" size="1" start="9" type="bool"/> |
| <field name="Unk 2" size="6" start="10" type="uint"/> |
| <field name="Code" size="32" start="16" type="address"/> |
| </struct> |
| |
| <struct name="USC Registers" size="4"> |
| <field name="Tag" size="8" start="0" type="USC Control" exact="Registers"/> |
| <field name="Register count" size="5" start="8" type="uint" modifier="groups(8)"/> |
| <field name="Unk 1" size="1" start="13" type="bool"/> |
| <field name="Spill size" size="4" start="18" type="hex"/> |
| <field name="Unk 4" size="8" start="24" type="hex"/> |
| </struct> |
| |
| <struct name="USC No Preshader" size="2"> |
| <field name="Tag" size="8" start="0" type="USC Control" exact="No preshader"/> |
| </struct> |
| |
| <struct name="USC Preshader" size="8"> |
| <field name="Tag" size="8" start="0" type="USC Control" exact="Preshader"/> |
| <field name="Unk" size="24" start="8" type="hex" exact="0xc08000"/> |
| <field name="Code" size="32" start="32" type="address"/> |
| </struct> |
| |
| <struct name="USC Fragment Properties" size="4"> |
| <field name="Tag" size="8" start="0" type="USC Control" exact="Fragment properties"/> |
| <field name="Early-z testing" size="1" start="8" type="bool"/> |
| <field name="Unk 2" size="1" start="9" type="bool"/> |
| <field name="Unconditional discard 1" size="1" start="10" type="bool"/> |
| <field name="Unconditional discard 2" size="1" start="11" type="bool"/> |
| <field name="Unk 3" size="4" start="12" type="hex"/> |
| <field name="Unk 4" size="8" start="16" type="hex"/> <!-- TODO: determine relation, see docs/table.py --> |
| <field name="Unk 5" size="8" start="24" type="hex"/> |
| </struct> |
| <!-- USC commands end --> |
| |
| <!-- VDM commands start. VDM commands are padded out to 8b alignment. --> |
| <enum name="VDM Block Type"> |
| <value name="PPP State Update" value="0"/> |
| <value name="Barrier" value="1"/> |
| <value name="VDM State Update" value="2"/> |
| <value name="Index List" value="3"/> |
| <value name="Stream Link" value="4"/> |
| <value name="Tessellate" value="5"/> |
| <value name="Stream terminate" value="6"/> |
| </enum> |
| |
| <struct name="PPP State" size="8"> |
| <field name="Pointer (hi)" size="8" start="0" type="hex"/> |
| <field name="Size (words)" size="8" start="8" type="uint"/> |
| <field name="Block Type" size="3" start="29" type="VDM Block Type" exact="PPP State Update"/> |
| <field name="Pointer (lo)" size="32" start="32" type="address"/> |
| </struct> |
| |
| <struct name="VDM Barrier"> |
| <field name="USC cache inval" size="1" start="3" type="bool"/> |
| <field name="Unk 4" size="1" start="4" type="bool"/> |
| <field name="Unk 5" size="1" start="5" type="bool"/> |
| <field name="Unk 6" size="1" start="6" type="bool"/> |
| <field name="Unk 8" size="1" start="8" type="bool"/> |
| <field name="Unk 11" size="1" start="11" type="bool"/> |
| <field name="Unk 20" size="1" start="20" type="bool"/> |
| <field name="Unk 24" size="1" start="24" type="bool"/> |
| <field name="Unk 26" size="1" start="26" type="bool"/> |
| <field name="Returns" size="1" start="27" type="bool"/> |
| <field name="Block Type" size="3" start="29" type="VDM Block Type" exact="Barrier"/> |
| </struct> |
| |
| <enum name="Index size"> |
| <value name="U8" value="0"/> |
| <value name="U16" value="1"/> |
| <value name="U32" value="2"/> |
| </enum> |
| |
| <struct name="VDM State" size="4"> |
| <field name="Restart index present" size="1" start="0" type="bool"/> |
| <field name="Vertex shader word 0 present" size="1" start="1" type="bool"/> |
| <field name="Vertex shader word 1 present" size="1" start="2" type="bool"/> |
| <field name="Vertex outputs present" size="1" start="3" type="bool"/> |
| <field name="Tessellation present" size="1" start="4" type="bool"/> |
| <field name="Vertex unknown present" size="1" start="5" type="bool"/> |
| <field name="Tessellation scale present" size="1" start="7" type="bool"/> |
| <field name="Block Type" size="3" start="29" type="VDM Block Type" exact="VDM State Update"/> |
| </struct> |
| |
| <struct name="VDM State Restart Index" size="4"> |
| <field name="Value" size="32" start="0" type="hex"/> |
| </struct> |
| |
| <struct name="VDM State Vertex Shader Word 0" size="4"> |
| <field name="Unknown 0" size="1" start="0" type="hex"/> |
| <field name="Uniform register count" size="3" start="1" type="uint" modifier="groups(64)"/> |
| <field name="Texture state register count" size="5" start="4" type="uint" modifier="groups(8)"/> |
| <field name="Sampler state register count" size="3" start="9" type="Sampler states"/> |
| <field name="Preshader register count" size="4" start="12" type="uint" modifier="groups(16)"/> |
| </struct> |
| |
| <struct name="VDM State Vertex Shader Word 1" size="4"> |
| <field name="Unknown 1:0" size="2" start="0" type="hex"/> |
| <field name="Pipeline" size="26" start="6" type="address" modifier="shr(6)"/> |
| </struct> |
| |
| <struct name="VDM State Vertex Outputs" size="4"> |
| <field name="Output count 1" size="8" start="0" type="uint"/> |
| <field name="Output count 2" size="8" start="8" type="uint"/> |
| </struct> |
| |
| <enum name="VDM Vertex"> |
| <value name="0" value="0"/> |
| <value name="1" value="1"/> |
| <value name="2" value="2"/> |
| </enum> |
| |
| <enum name="Partition mode"> |
| <value name="Pow 2" value="0"/> |
| <value name="Integer" value="1"/> |
| <value name="Fractional odd" value="2"/> |
| <value name="Fractional even" value="3"/> |
| </enum> |
| |
| <enum name="Step function"> |
| <value name="Constant" value="0"/> |
| <value name="Per patch" value="1"/> |
| <value name="Per instance" value="2"/> |
| <value name="Per patch and per instance" value="3"/> |
| </enum> |
| |
| <enum name="Patch type"> |
| <value name="Triangles" value="0"/> |
| <value name="Quads" value="1"/> |
| </enum> |
| |
| <enum name="Factor type"> |
| <value name="FP16" value="0"/> |
| <value name="FP32" value="1"/> |
| </enum> |
| |
| <struct name="VDM State Tessellation" size="4"> |
| <field name="Unknown" size="17" start="0" type="hex"/> |
| <field name="Step function" size="2" start="17" type="Step function"/> |
| <field name="Factor type" size="1" start="19" type="Factor type"/> |
| <field name="Patch type" size="1" start="20" type="Patch type"/> |
| <field name="Unknown 3" size="2" start="21" type="hex"/> <!-- 1 --> |
| |
| <!-- Subtract 1 for fractional odd --> |
| <field name="Max tess factor" size="6" start="23" type="uint" modifier="minus(1)"/> |
| <field name="Counterclockwise winding" size="1" start="29" type="bool"/> |
| <field name="Partition mode" size="2" start="30" type="Partition mode"/> |
| </struct> |
| |
| <struct name="VDM State Tessellation Scale" size="4"> |
| <!-- Always applied. Set to 1.0 to "disable" --> |
| <field name="Scale" size="16" start="0" type="half"/> |
| </struct> |
| |
| <struct name="VDM State Vertex Unknown" size="4"> |
| <field name="Flat shading control" start="0" size="2" type="VDM Vertex"/> |
| <field name="Unknown 4" size="1" start="4" type="bool"/> |
| <field name="Unknown 5" size="1" start="5" type="bool"/> |
| <field name="Generate primitive ID" size="1" start="6" type="bool"/> |
| </struct> |
| |
| <!--- Command to issue a direct non-indexed draw --> |
| <struct name="Index List" size="4"> |
| <field name="Index buffer hi" size="8" start="0" type="hex"/> |
| <field name="Primitive" size="8" start="8" type="Primitive"/> |
| <field name="Restart enable" size="1" start="16" type="bool"/> |
| <field name="Index size" size="3" start="17" type="Index size"/> |
| |
| <field name="Index buffer size present" size="1" start="20" type="bool"/> |
| <field name="Index buffer present" size="1" start="21" type="bool"/> |
| |
| <!-- Order in the cmdstream is the same as bit order for these --> |
| <field name="Index count present" size="1" start="22" type="bool"/> |
| <field name="Instance count present" size="1" start="23" type="bool"/> |
| <field name="Start present" size="1" start="24" type="bool"/> |
| <!-- 2 words, 1st word is some kind of extra vertex offset? --> |
| <field name="Unk 1 present" size="1" start="25" type="bool"/> |
| <field name="Indirect buffer present" size="1" start="26" type="bool"/> |
| <!-- 1 word, unknown purpose --> |
| <field name="Unk 2 present" size="1" start="27" type="bool"/> |
| |
| <field name="Block Type" size="3" start="29" type="VDM Block Type" exact="Index List"/> |
| </struct> |
| |
| <struct name="Index List: Buffer lo" size="4"> |
| <!-- Index buffer lsb --> |
| <field name="Buffer lo" size="32" start="0" type="hex"/> |
| </struct> |
| |
| <struct name="Index List: Count" size="4"> |
| <!-- Vertex count for non-indexed, index count for index count --> |
| <field name="Count" size="32" start="0" type="uint"/> |
| </struct> |
| |
| <struct name="Index List: Instances" size="4"> |
| <field name="Count" size="32" start="0" type="uint"/> <!-- must be nonzero --> |
| </struct> |
| |
| <struct name="Index List: Start" size="4"> |
| <!-- Base vertex for indexed draws --> |
| <field name="Start" size="32" start="0" type="uint"/> |
| </struct> |
| |
| <struct name="Index List: Buffer size" size="4"> |
| <field name="Size" size="32" start="0" type="uint" modifier="shr(2)"/> |
| </struct> |
| |
| <struct name="Index List: Indirect buffer" size="8"> |
| <field name="Address hi" size="8" start="0" type="hex"/> |
| <field name="Address lo" size="32" start="32" type="hex"/> |
| </struct> |
| |
| <!-- Conditional branching and function calls may be supported, see the |
| STREAM_LINK0 struct in mesa/src/imagination/csbgen/rogue_vdm.xml for a |
| probable definition --> |
| <struct name="VDM Stream Link" size="8"> |
| <field name="Target hi" size="8" start="0" type="hex"/> |
| <field name="With return" size="1" start="28" type="bool"/> |
| <field name="Block Type" size="3" start="29" type="VDM Block Type" exact="Stream Link"/> |
| <field name="Target lo" size="32" start="32" type="hex"/> |
| </struct> |
| |
| <struct name="VDM Tessellate" size="4"> |
| <field name="Factor buffer hi" size="8" start="0" type="hex"/> |
| <field name="Unknown 0" size="12" start="8" type="hex"/> <!-- 0xc --> |
| |
| <!-- Set for both indirect and direct --> |
| <field name="Unknown 2" size="1" start="20" type="bool"/> |
| |
| <!-- Present for both indirect and direct --> |
| <!-- XXX: Order is an (educated) guess --> |
| <field name="Factor buffer present" size="1" start="21" type="bool"/> |
| |
| <!-- XXX: out of bits???? not set for indirect??? --> |
| <field name="Patch count present" size="1" start="22" type="bool"/> |
| |
| <!-- These four are omitted for indirect draws --> |
| <!-- XXX: Order is an (educated) guess --> |
| <field name="Instance count present" size="1" start="22" type="bool"/> |
| <field name="Base patch present" size="1" start="23" type="bool"/> |
| <field name="Base instance present" size="1" start="25" type="bool"/> |
| <!-- XXX: Out of bits!!! --> |
| <field name="Instance stride present" size="1" start="25" type="bool"/> |
| |
| <field name="Indirect present" size="1" start="26" type="bool"/> |
| <field name="Factor buffer size present" size="1" start="28" type="bool"/> |
| |
| <field name="Unknown 1" size="1" start="28" type="hex"/> <!-- 1 --> |
| <field name="Block Type" size="3" start="29" type="VDM Block Type" exact="Tessellate"/> |
| </struct> |
| |
| <struct name="VDM Tessellate: Factor buffer" size="4"> |
| <field name="Factor buffer lo" size="32" start="0" type="hex"/> |
| </struct> |
| |
| <struct name="VDM Tessellate: Patch count" size="4"> |
| <field name="Patch count" size="32" start="0" type="uint"/> |
| </struct> |
| |
| <struct name="VDM Tessellate: Instance count" size="4"> |
| <field name="Instance count" size="32" start="0" type="uint"/> |
| </struct> |
| |
| <struct name="VDM Tessellate: Base patch" size="4"> |
| <field name="Base patch" size="32" start="0" type="uint"/> |
| </struct> |
| |
| <struct name="VDM Tessellate: Base instance" size="4"> |
| <field name="Base instance" size="32" start="0" type="uint"/> |
| </struct> |
| |
| <struct name="VDM Tessellate: Instance stride" size="4"> |
| <!-- Divided by 4 for QUADS --> |
| <field name="Instance stride" size="32" start="0" type="uint"/> |
| </struct> |
| |
| <struct name="VDM Tessellate: Indirect" size="12"> |
| <!-- Address of the indirect buffer, format presumably matches Metal --> |
| <field name="Address hi" size="8" start="0:0" type="hex"/> |
| <field name="Address lo" size="32" start="1:0" type="hex"/> |
| |
| <!-- # of bytes in the buffer, presumably for hw bounds checking --> |
| <field name="Size" size="32" start="2:0" type="uint"/> |
| </struct> |
| |
| <struct name="VDM Tessellate: Factor buffer size" size="4"> |
| <field name="Size (words)" size="32" start="0" type="uint" modifier="minus(1)"/> |
| </struct> |
| |
| <struct name="VDM Stream Terminate" size="32"> |
| <field name="Block Type" size="3" start="29" type="VDM Block Type" exact="Stream Terminate"/> |
| </struct> |
| |
| <!-- VDM commands end --> |
| |
| <!-- CDM commands start --> |
| <enum name="CDM Block Type"> |
| <value name="Launch" value="0"/> |
| <value name="Stream Link" value="1"/> |
| <value name="Stream Terminate" value="2"/> |
| <value name="Barrier" value="3"/> |
| <value name="Stream Return" value="4"/> |
| </enum> |
| |
| <enum name="CDM Mode"> |
| <!-- Global size + Local size --> |
| <value name="Direct" value="0"/> |
| |
| <!-- Indirect buffer + Local size. Indirect buffer contains 3x 32-bit global |
| size. Used for indirect dispatch when the local size must be |
| fixed (e.g. due to local memory being used) --> |
| <value name="Indirect global" value="1"/> |
| |
| <!-- Indirect buffer, containing 6x 32-bit size. Used for indirect dispatch |
| when the driver wants to optimize the local size with an auxiliary |
| compute kernel (requiring e.g. no local memory use) --> |
| <value name="Indirect local" value="2"/> |
| </enum> |
| |
| <struct name="CDM Launch Word 0" size="4"> |
| <field name="Uniform register count" size="3" start="1" type="uint" modifier="groups(64)"/> |
| <field name="Texture state register count" size="5" start="4" type="uint" modifier="groups(8)"/> |
| <field name="Sampler state register count" size="3" start="9" type="Sampler states"/> |
| <field name="Preshader register count" size="4" start="12" type="uint" modifier="groups(16)"/> |
| <field name="Mode" size="2" start="27" type="CDM Mode"/> |
| <field name="Block Type" size="3" start="29" type="CDM Block Type" exact="Launch"/> |
| </struct> |
| |
| <struct name="CDM Launch Word 1" size="4"> |
| <field name="Pipeline" size="26" start="6" type="address" modifier="shr(6)"/> |
| </struct> |
| |
| <struct name="CDM Unk G14X" size="8"> |
| <field name="Unknown 30" size="1" start="1:30" type="bool" exact="true"/> |
| </struct> |
| |
| <struct name="CDM Indirect" size="8"> |
| <field name="Address hi" size="8" start="0" type="hex"/> |
| <field name="Address lo" size="30" start="34" type="hex" modifier="shr(2)"/> |
| </struct> |
| |
| <struct name="CDM Global size" size="12"> |
| <field name="X" size="32" start="0:0" type="uint"/> |
| <field name="Y" size="32" start="1:0" type="uint"/> |
| <field name="Z" size="32" start="2:0" type="uint"/> |
| </struct> |
| |
| <struct name="CDM Local size" size="12"> |
| <field name="X" size="32" start="0:0" type="uint"/> |
| <field name="Y" size="32" start="1:0" type="uint"/> |
| <field name="Z" size="32" start="2:0" type="uint"/> |
| </struct> |
| |
| <struct name="CDM Barrier" size="4"> |
| <field name="Unk 0" size="1" start="0" type="bool"/> |
| <field name="Unk 1" size="1" start="1" type="bool"/> |
| <field name="Unk 2" size="1" start="2" type="bool"/> |
| <field name="USC cache inval" size="1" start="3" type="bool"/> |
| <field name="Unk 4" size="1" start="4" type="bool"/> |
| <field name="Unk 5" size="1" start="5" type="bool"/> |
| <field name="Unk 6" size="1" start="6" type="bool"/> |
| <field name="Unk 7" size="1" start="7" type="bool"/> |
| <field name="Unk 8" size="1" start="8" type="bool"/> |
| <field name="Unk 9" size="1" start="9" type="bool"/> |
| <field name="Unk 10" size="1" start="10" type="bool"/> |
| <field name="Unk 11" size="1" start="11" type="bool"/> |
| <field name="Unk 12" size="1" start="12" type="bool"/> |
| <field name="Unk 13" size="1" start="13" type="bool"/> |
| <field name="Unk 14" size="1" start="14" type="bool"/> |
| <field name="Unk 15" size="1" start="15" type="bool"/> |
| <field name="Unk 16" size="1" start="16" type="bool"/> |
| <field name="Unk 17" size="1" start="17" type="bool"/> |
| <field name="Unk 18" size="1" start="18" type="bool"/> |
| <field name="Unk 19" size="1" start="19" type="bool"/> |
| <field name="Unk 20" size="1" start="20" type="bool"/> |
| <field name="Unk 24" size="1" start="24" type="bool"/> |
| <field name="Unk 26" size="1" start="26" type="bool"/> |
| <field name="Returns" size="1" start="27" type="bool"/> |
| <field name="Block Type" size="3" start="29" type="CDM Block Type" exact="Barrier"/> |
| </struct> |
| |
| <struct name="CDM Stream Link" size="8"> |
| <field name="Target hi" size="8" start="0" type="hex"/> |
| <field name="With return" size="1" start="28" type="bool"/> |
| <field name="Block Type" size="3" start="29" type="CDM Block Type" exact="Stream Link"/> |
| <field name="Target lo" size="32" start="32" type="hex"/> |
| </struct> |
| |
| <struct name="CDM Stream Terminate" size="8"> |
| <field name="Block Type" size="3" start="29" type="CDM Block Type" exact="Stream Terminate"/> |
| </struct> |
| |
| <struct name="CDM Stream Return" size="8"> |
| <field name="Block Type" size="3" start="29" type="CDM Block Type" exact="Stream Return"/> |
| </struct> |
| <!-- CDM commands end --> |
| |
| <enum name="ZLS Format"> |
| <value name="32F" value="0"/> |
| <value name="16" value="2"/> |
| </enum> |
| |
| <enum name="ZLS Tiling"> |
| <value name="GPU" value="0"/> |
| <value name="Twiddled" value="1"/> |
| </enum> |
| |
| <struct name="ZLS Control" size="8"> |
| <field name="Unknown 0" start="0" size="1" type="bool"/> |
| <field name="Z Load Tiling" start="1" size="1" type="ZLS Tiling"/> |
| <field name="Z Load Compress" start="2" size="1" type="bool"/> |
| <field name="S Load Tiling" start="3" size="1" type="ZLS Tiling"/> |
| <field name="S Load Compress" start="4" size="1" type="bool"/> |
| <field name="Z Store Tiling" start="5" size="1" type="ZLS Tiling"/> |
| <field name="Z Store Compress" start="6" size="1" type="bool"/> |
| <field name="S Store Tiling" start="7" size="1" type="ZLS Tiling"/> |
| <field name="S Store Compress" start="8" size="1" type="bool"/> |
| <field name="S Load" start="14" size="1" type="bool"/> |
| <field name="Z Load" start="15" size="1" type="bool"/> |
| <field name="S Store" start="18" size="1" type="bool"/> |
| <field name="Z Store" start="19" size="1" type="bool"/> |
| <field name="Z Format" start="25" size="2" type="ZLS Format"/> |
| <field name="Z Resolve" start="56" size="1" type="bool"/> |
| <field name="S Resolve" start="58" size="1" type="bool"/> |
| </struct> |
| |
| <struct name="CR ISP ZLS Pixels" size="4"> |
| <field name="X" start="0" size="15" type="uint" modifier="minus(1)"/> |
| <field name="Y" start="15" size="15" type="uint" modifier="minus(1)"/> |
| </struct> |
| |
| <struct name="CR PPP Control" size="4"> |
| <field name="OpenGL" start="0" size="1" type="bool"/> |
| <field name="Enable W Clamp" start="1" size="1" type="bool"/> |
| <field name="Default point size" start="8" size="1" type="bool"/> |
| <field name="Fixed point format" start="9" size="1" type="uint"/> |
| </struct> |
| </genxml> |