+ <struct name="GL Shader State Record" min_ver="41">
+ <field name="Point size in shaded vertex data" size="1" start="0" type="bool"/>
+ <field name="Enable clipping" size="1" start="1" type="bool"/>
+
+ <field name="Vertex ID read by coordinate shader" size="1" start="2" type="bool"/>
+ <field name="Instance ID read by coordinate shader" size="1" start="3" type="bool"/>
+ <field name="Base Instance ID read by coordinate shader" size="1" start="4" type="bool"/>
+ <field name="Vertex ID read by vertex shader" size="1" start="5" type="bool"/>
+ <field name="Instance ID read by vertex shader" size="1" start="6" type="bool"/>
+ <field name="Base Instance ID read by vertex shader" size="1" start="7" type="bool"/>
+
+ <field name="Fragment shader does Z writes" size="1" start="8" type="bool"/>
+ <field name="Turn off early-z test" size="1" start="9" type="bool"/>
+ <field name="Coordinate shader has separate input and output VPM blocks" size="1" start="10" type="bool"/>
+ <field name="Vertex shader has separate input and output VPM blocks" size="1" start="11" type="bool"/>
+ <field name="Fragment shader uses real pixel centre W in addition to centroid W2" size="1" start="12" type="bool"/>
+ <field name="Enable Sample Rate Shading" size="1" start="13" type="bool"/>
+ <field name="Any shader reads hardware-written Primitive ID" size="1" start="14" type="bool"/>
+ <field name="Insert Primitive ID as first varying to fragment shader" size="1" start="15" type="bool"/>
+ <field name="Turn off scoreboard" size="1" start="16" type="bool"/>
+ <field name="Do scoreboard wait on first thread switch" size="1" start="17" type="bool"/>
+ <field name="Disable implicit point/line varyings" size="1" start="18" type="bool"/>
+ <field name="No prim pack" size="1" start="19" type="bool"/>
+
+ <field name="Number of varyings in Fragment Shader" size="8" start="3b" type="uint"/>
+
+ <field name="Coordinate Shader output VPM segment size" size="4" start="4b" type="uint"/>
+ <field name="Min Coord Shader output segments required in play in addition to VCM cache size" size="4" start="36" type="uint"/>
+
+ <field name="Coordinate Shader input VPM segment size" size="4" start="5b" type="uint"/>
+ <field name="Min Coord Shader input segments required in play" size="4" start="44" type="uint" minus_one="true"/>
+
+ <field name="Vertex Shader output VPM segment size" size="4" start="6b" type="uint"/>
+ <field name="Min Vertex Shader output segments required in play in addition to VCM cache size" size="4" start="52" type="uint"/>
+
+ <field name="Vertex Shader input VPM segment size" size="4" start="7b" type="uint"/>
+ <field name="Min Vertex Shader input segments required in play" size="4" start="60" type="uint" minus_one="true"/>
+
+ <field name="Address of default attribute values" size="32" start="8b" type="address"/>
+
+ <field name="Fragment Shader Code Address" size="29" start="99" type="address"/>
+ <field name="Fragment Shader 4-way threadable" size="1" start="96" type="bool"/>
+ <field name="Fragment Shader start in final thread section" size="1" start="97" type="bool"/>
+ <field name="Fragment Shader Propagate NaNs" size="1" start="98" type="bool"/>
+ <field name="Fragment Shader Uniforms Address" size="32" start="16b" type="address"/>
+
+ <field name="Vertex Shader Code Address" size="29" start="163" type="address"/>
+ <field name="Vertex Shader 4-way threadable" size="1" start="160" type="bool"/>
+ <field name="Vertex Shader start in final thread section" size="1" start="161" type="bool"/>
+ <field name="Vertex Shader Propagate NaNs" size="1" start="162" type="bool"/>
+ <field name="Vertex Shader Uniforms Address" size="32" start="24b" type="address"/>
+
+ <field name="Coordinate Shader Code Address" size="29" start="227" type="address"/>
+ <field name="Coordinate Shader 4-way threadable" size="1" start="224" type="bool"/>
+ <field name="Coordinate Shader start in final thread section" size="1" start="225" type="bool"/>
+ <field name="Coordinate Shader Propagate NaNs" size="1" start="226" type="bool"/>
+ <field name="Coordinate Shader Uniforms Address" size="32" start="32b" type="address"/>
+ </struct>
+
+ <struct name="Geometry Shader State Record" min_ver="41">
+ <field name="Geometry Bin Mode Shader Code Address" size="29" start="3" type="address"/>
+ <field name="Geometry Bin Mode Shader 4-way threadable" size="1" start="0" type="bool"/>
+ <field name="Geometry Bin Mode Shader Start in final thread section" size="1" start="1" type="bool"/>
+ <field name="Geometry Bin Mode Shader Propagate NaNs" size="1" start="2" type="bool"/>
+ <field name="Geometry Bin Mode Shader Uniforms Address" size="32" start="4b" type="address"/>
+ <field name="Geometry Render Mode Shader Code Address" size="29" start="67" type="address"/>
+ <field name="Geometry Render Mode Shader 4-way threadable" size="1" start="64" type="bool"/>
+ <field name="Geometry Render Mode Shader Start in final thread section" size="1" start="65" type="bool"/>
+ <field name="Geometry Render Mode Shader Propagate NaNs" size="1" start="66" type="bool"/>
+ <field name="Geometry Render Mode Shader Uniforms Address" size="32" start="12b" type="address"/>
+ </struct>
+
+ <struct name="Tessellation Shader State Record" min_ver="41">
+ <field name="Tessellation Bin Mode Control Shader Code Address" size="29" start="3" type="address"/>
+ <field name="Tessellation Bin Mode Control Shader 4-way threadable" size="1" start="0" type="bool"/>
+ <field name="Tessellation Bin Mode Control Shader Start in final thread section" size="1" start="1" type="bool"/>
+ <field name="Tessellation Bin Mode Control Shader Propagate NaNs" size="1" start="2" type="bool"/>
+ <field name="Tessellation Bin Mode Control Shader Uniforms Address" size="32" start="4b" type="address"/>
+ <field name="Tessellation Render Mode Control Shader Code Address" size="29" start="67" type="address"/>
+ <field name="Tessellation Render Mode Control Shader 4-way threadable" size="1" start="64" type="bool"/>
+ <field name="Tessellation Render Mode Control Shader Start in final thread section" size="1" start="65" type="bool"/>
+ <field name="Tessellation Render Mode Control Shader Propagate NaNs" size="1" start="66" type="bool"/>
+ <field name="Tessellation Render Mode Control Shader Uniforms Address" size="32" start="12b" type="address"/>
+
+ <field name="Tessellation Bin Mode Evaluation Shader Code Address" size="29" start="131" type="address"/>
+ <field name="Tessellation Bin Mode Evaluation Shader 4-way threadable" size="1" start="128" type="bool"/>
+ <field name="Tessellation Bin Mode Evaluation Shader Start in final thread section" size="1" start="129" type="bool"/>
+ <field name="Tessellation Bin Mode Evaluation Shader Propagate NaNs" size="1" start="130" type="bool"/>
+ <field name="Tessellation Bin Mode Evaluation Shader Uniforms Address" size="32" start="20b" type="address"/>
+ <field name="Tessellation Render Mode Evaluation Shader Code Address" size="29" start="195" type="address"/>
+ <field name="Tessellation Render Mode Evaluation Shader 4-way threadable" size="1" start="192" type="bool"/>
+ <field name="Tessellation Render Mode Evaluation Shader Start in final thread section" size="1" start="193" type="bool"/>
+ <field name="Tessellation Render Mode Evaluation Shader Propagate NaNs" size="1" start="194" type="bool"/>
+ <field name="Tessellation Render Mode Evaluation Shader Uniforms Address" size="32" start="28b" type="address"/>
+ </struct>
+
+ <struct name="Tessellation/Geometry Common Params" min_ver="41">
+ <field name="Tessellation Type" size="2" start="1" type="uint">
+ <value name="Tessellation Type Triangle" value="0"/>
+ <value name="Tessellation Type Quads" value="1"/>
+ <value name="Tessellation Type Isolines" value="2"/>
+ </field>
+
+ <field name="Tessellation point mode" size="1" start="3" type="bool"/>
+
+ <field name="Tessellation Edge Spacing" size="2" start="4" type="uint">
+ <value name="Tessellation Edge Spacing Even" value="0"/>
+ <value name="Tessellation Edge Spacing Fractional Even" value="1"/>
+ <value name="Tessellation Edge Spacing Fractional Odd" value="2"/>
+ </field>
+
+ <field name="Tessellation clockwise" size="1" start="6" type="bool"/>
+
+ <field name="Tessellation Invocations" size="5" start="12" type="uint"/> <!-- 0 == 32 -->
+
+ <field name="Geometry Shader output format" size="2" start="17" type="uint">
+ <value name="Geometry Shader Points" value="0"/>
+ <value name="Geometry Shader Line Strip" value="1"/>
+ <value name="Geometry Shader Tri Strip" value="2"/>
+ </field>
+
+ <field name="Geometry Shader Instances" size="5" start="19" type="uint"/> <!-- 0 == 32 -->
+
+ <!-- This field should not be filled, but we need it in the struct description so
+ we don't compute an incorrect packet size, since it uses an full byte.
+ -->
+ <field name="Reserved" size="8" start="24" type="uint"/>
+
+ <!-- followed by "Tessellation/Geometry Shader Params" for bin, then render -->
+ </struct>
+
+ <struct name="Tessellation/Geometry Shader Params">
+ <field name="TCS Batch Flush Mode" size="2" start="0" type="TCS flush mode"/>
+ <field name="Per-patch data column depth" size="4" start="2" type="uint"/> <!-- 8-dword units, 0==16 -->
+
+ <field name="TCS output segment size in sectors" size="6" start="8" type="uint"/>
+ <field name="TCS output segment pack mode" size="2" start="14" type="Pack Mode"/>
+
+ <field name="TES output segment size in sectors" size="6" start="16" type="uint"/>
+ <field name="TES output segment pack mode" size="2" start="22" type="Pack Mode"/>
+
+ <field name="GS output segment size in sectors" size="6" start="24" type="uint"/>
+ <field name="GS output segment pack mode" size="2" start="30" type="Pack Mode"/>
+
+ <field name="TBG max patches per TCS batch" size="4" start="32" type="uint" minus_one="true"/>
+ <field name="TBG max extra vertex segs for patches after first" size="2" start="36" type="uint"/>
+ <field name="TBG min TCS output segments required in play" size="2" start="38" type="uint" minus_one="true"/>
+ <field name="TBG min per-patch data segments required in play" size="3" start="40" type="uint" minus_one="true"/>
+ <field name="TPG max patches per TES batch" size="4" start="45" type="uint" minus_one="true"/>
+ <field name="TPG max vertex segments per TES batch" size="2" start="49" type="uint"/>
+ <field name="TPG max TCS output segments per TES batch" size="3" start="51" type="uint" minus_one="true"/>
+ <field name="TPG min TES output segments required in play" size="3" start="54" type="uint" minus_one="true"/>
+ <field name="GBG max TES output/vertex segments per GS batch" size="2" start="57" type="uint"/>
+ <field name="GBG min GS output segments required in play" size="3" start="59" type="uint" minus_one="true"/>
+ </struct>
+
+ <struct name="GL Shader State Attribute Record" max_ver="33">
+ <field name="Address" size="32" start="0" type="address"/>
+
+ <field name="Vec size" size="2" start="32" type="uint"/>
+ <field name="Type" size="3" start="34" type="uint">
+ <value name="Attribute half-float" value="1"/>
+ <value name="Attribute float" value="2"/>
+ <value name="Attribute fixed" value="3"/>
+ <value name="Attribute byte" value="4"/>
+ <value name="Attribute short" value="5"/>
+ <value name="Attribute int" value="6"/>
+ <value name="Attribute int2_10_10_10" value="7"/>
+ </field>
+ <field name="Signed int type" size="1" start="37" type="bool"/>
+ <field name="Normalized int type" size="1" start="38" type="bool"/>
+ <field name="Read as int/uint" size="1" start="39" type="bool"/>
+
+ <field name="Number of values read by Coordinate shader" size="4" start="40" type="uint"/>
+ <field name="Number of values read by Vertex shader" size="4" start="44" type="uint"/>
+
+ <field name="Instance Divisor" size="16" start="6b" type="uint"/>
+ <field name="Stride" size="32" start="8b" type="uint"/>
+ </struct>
+
+ <struct name="GL Shader State Attribute Record" min_ver="41">