17ec681f3Smrg<?xml version="1.0" ?>
27ec681f3Smrg<genxml name="RT" gen="">
37ec681f3Smrg  <struct name="BINDLESS_SHADER_RECORD" length="2">
47ec681f3Smrg    <field name="Offset To Local Arguments" start="0" end="2" type="uint"/>
57ec681f3Smrg    <field name="Bindless Shader Dispatch Mode" start="4" end="4" type="uint">
67ec681f3Smrg      <value name="RT_SIMD16" value="0"/>
77ec681f3Smrg      <value name="RT_SIMD8" value="1"/>
87ec681f3Smrg    </field>
97ec681f3Smrg    <field name="Kernel Start Pointer" start="6" end="31" type="offset"/>
107ec681f3Smrg  </struct>
117ec681f3Smrg
127ec681f3Smrg  <struct name="RT_GENERAL_SBT_HANDLE" length="8">
137ec681f3Smrg    <field name="General" start="0" end="63" type="BINDLESS_SHADER_RECORD"/>
147ec681f3Smrg  </struct>
157ec681f3Smrg
167ec681f3Smrg  <struct name="RT_TRIANGLES_SBT_HANDLE" length="8">
177ec681f3Smrg    <field name="Closest Hit" start="0" end="63" type="BINDLESS_SHADER_RECORD"/>
187ec681f3Smrg    <field name="Any Hit" start="64" end="127" type="BINDLESS_SHADER_RECORD"/>
197ec681f3Smrg  </struct>
207ec681f3Smrg
217ec681f3Smrg  <struct name="RT_PROCEDURAL_SBT_HANDLE" length="8">
227ec681f3Smrg    <field name="Closest Hit" start="0" end="63" type="BINDLESS_SHADER_RECORD"/>
237ec681f3Smrg    <field name="Intersection" start="64" end="127" type="BINDLESS_SHADER_RECORD"/>
247ec681f3Smrg  </struct>
257ec681f3Smrg
267ec681f3Smrg  <struct name="RT_SHADER_TABLE" length="2">
277ec681f3Smrg    <field name="Base Address" start="0" end="47" type="address"/>
287ec681f3Smrg    <field name="Stride" start="48" end="63" type="uint"/>
297ec681f3Smrg  </struct>
307ec681f3Smrg
317ec681f3Smrg  <struct name="RT_DISPATCH_GLOBALS" length="20">
327ec681f3Smrg    <!-- These are dictated by hardware -->
337ec681f3Smrg    <field name="Mem Base Address" start="0" end="63" type="address"/>
347ec681f3Smrg    <field name="Call Stack Handler" start="64" end="127" type="BINDLESS_SHADER_RECORD"/>
357ec681f3Smrg    <field name="Async RT Stack Size" start="128" end="159" type="uint"/>
367ec681f3Smrg    <field name="Num DSS RT Stacks" start="160" end="175" type="uint"/>
377ec681f3Smrg    <field name="Max BVH Levels" start="192" end="194" type="uint"/>
387ec681f3Smrg    <field name="Flags" start="224" end="224" type="uint">
397ec681f3Smrg      <value name="RT_DEPTH_TEST_LESS_EQUAL" value="1"/>
407ec681f3Smrg    </field>
417ec681f3Smrg
427ec681f3Smrg    <!-- These are simply a software interface -->
437ec681f3Smrg    <field name="Hit Group Table" start="256" end="319" type="RT_SHADER_TABLE"/>
447ec681f3Smrg    <field name="Miss Group Table" start="320" end="383" type="RT_SHADER_TABLE"/>
457ec681f3Smrg    <field name="SW Stack Size" start="384" end="415" type="uint"/>
467ec681f3Smrg    <field name="Launch Width" start="416" end="447" type="uint"/>
477ec681f3Smrg    <field name="Launch Height" start="448" end="479" type="uint"/>
487ec681f3Smrg    <field name="Launch Depth" start="480" end="511" type="uint"/>
497ec681f3Smrg    <field name="Callable Group Table" start="512" end="575" type="RT_SHADER_TABLE"/>
507ec681f3Smrg    <field name="Resume Shader Table" start="576" end="639" type="address"/>
517ec681f3Smrg  </struct>
527ec681f3Smrg
537ec681f3Smrg  <struct name="RT_BVH_VEC3" length="3">
547ec681f3Smrg    <field name="X" start="0" end="31" type="float"/>
557ec681f3Smrg    <field name="Y" start="32" end="63" type="float"/>
567ec681f3Smrg    <field name="Z" start="64" end="95" type="float"/>
577ec681f3Smrg  </struct>
587ec681f3Smrg
597ec681f3Smrg  <struct name="RT_BVH" length="16">
607ec681f3Smrg    <field name="Root Node Offset" start="0" end="63" type="offset"/>
617ec681f3Smrg    <field name="Bounds Min" start="64" end="159" type="RT_BVH_VEC3"/>
627ec681f3Smrg    <field name="Bounds Max" start="160" end="255" type="RT_BVH_VEC3"/>
637ec681f3Smrg  </struct>
647ec681f3Smrg
657ec681f3Smrg  <struct name="RT_BVH_INTERNAL_NODE" length="16">
667ec681f3Smrg    <field name="Origin" start="0" end="95" type="RT_BVH_VEC3"/>
677ec681f3Smrg    <field name="Child Offset" start="96" end="127" type="int"/>
687ec681f3Smrg    <field name="Node Type" start="128" end="135" type="uint" prefix="NODE_TYPE">
697ec681f3Smrg      <value name="INTERNAL" value="0"/>
707ec681f3Smrg      <value name="INSTANCE" value="1"/>
717ec681f3Smrg      <value name="PROCEDURAL" value="3"/>
727ec681f3Smrg      <value name="QUAD" value="4"/>
737ec681f3Smrg      <value name="INVALID" value="7"/>
747ec681f3Smrg    </field>
757ec681f3Smrg    <field name="Child Bounds Exponent X" start="144" end="151" type="int"/>
767ec681f3Smrg    <field name="Child Bounds Exponent Y" start="152" end="159" type="int"/>
777ec681f3Smrg    <field name="Child Bounds Exponent Z" start="160" end="168" type="int"/>
787ec681f3Smrg    <field name="Node Ray Mask" start="168" end="175" type="uint"/>
797ec681f3Smrg    <group count="6" start="176" size="8">
807ec681f3Smrg      <field name="Child Size" start="0" end="1" type="uint"/>
817ec681f3Smrg      <field name="Child Type" start="2" end="5" type="uint"/>
827ec681f3Smrg      <field name="Start Primitive" start="2" end="5" type="uint"/>
837ec681f3Smrg    </group>
847ec681f3Smrg    <group count="6" start="224" size="8">
857ec681f3Smrg      <field name="Child Lower X Bound" start="0" end="7" type="uint"/>
867ec681f3Smrg    </group>
877ec681f3Smrg    <group count="6" start="272" size="8">
887ec681f3Smrg      <field name="Child Upper X Bound" start="0" end="7" type="uint"/>
897ec681f3Smrg    </group>
907ec681f3Smrg    <group count="6" start="320" size="8">
917ec681f3Smrg      <field name="Child Lower Y Bound" start="0" end="7" type="uint"/>
927ec681f3Smrg    </group>
937ec681f3Smrg    <group count="6" start="368" size="8">
947ec681f3Smrg      <field name="Child Upper Y Bound" start="0" end="7" type="uint"/>
957ec681f3Smrg    </group>
967ec681f3Smrg    <group count="6" start="416" size="8">
977ec681f3Smrg      <field name="Child Lower Z Bound" start="0" end="7" type="uint"/>
987ec681f3Smrg    </group>
997ec681f3Smrg    <group count="6" start="464" size="8">
1007ec681f3Smrg      <field name="Child Upper Z Bound" start="0" end="7" type="uint"/>
1017ec681f3Smrg    </group>
1027ec681f3Smrg  </struct>
1037ec681f3Smrg
1047ec681f3Smrg  <struct name="RT_BVH_PRIMITIVE_LEAF_DESCRIPTOR" length="2">
1057ec681f3Smrg    <field name="Shader Index" start="0" end="23" type="uint"/>
1067ec681f3Smrg    <field name="Geometry Ray Mask" start="24" end="31" type="uint"/>
1077ec681f3Smrg    <field name="Geometry Index" start="32" end="60" type="uint"/>
1087ec681f3Smrg    <field name="Leaf Type" start="61" end="61" type="uint">
1097ec681f3Smrg      <value name="TYPE_QUAD" value="0"/>
1107ec681f3Smrg      <value name="TYPE_OPAQUE_CULLING_ENABLED" value="0"/>
1117ec681f3Smrg      <value name="TYPE_OPAQUE_CULLING_DISABLED" value="1"/>
1127ec681f3Smrg    </field>
1137ec681f3Smrg    <field name="Geometry Flags" start="62" end="63" type="uint">
1147ec681f3Smrg      <value name="GEOMETRY_OPAQUE" value="1"/>
1157ec681f3Smrg    </field>
1167ec681f3Smrg  </struct>
1177ec681f3Smrg
1187ec681f3Smrg  <struct name="RT_BVH_QUAD_LEAF" length="16">
1197ec681f3Smrg    <field name="Leaf Descriptor" start="0" end="63" type="RT_BVH_PRIMITIVE_LEAF_DESCRIPTOR"/>
1207ec681f3Smrg    <field name="Primitive Index 0" start="64" end="95" type="uint"/>
1217ec681f3Smrg    <field name="Primitive Index 1 Delta" start="96" end="112" type="uint"/>
1227ec681f3Smrg    <field name="j0" start="112" end="113" type="uint"/>
1237ec681f3Smrg    <field name="j1" start="114" end="115" type="uint"/>
1247ec681f3Smrg    <field name="j2" start="116" end="117" type="uint"/>
1257ec681f3Smrg    <field name="Last Quad" start="118" end="118" type="bool"/>
1267ec681f3Smrg    <group count="4" start="128" size="96">
1277ec681f3Smrg      <field name="Quad Vertex" start="0" end="95" type="RT_BVH_VEC3"/>
1287ec681f3Smrg    </group>
1297ec681f3Smrg  </struct>
1307ec681f3Smrg
1317ec681f3Smrg  <struct name="RT_BVH_INSTANCE_LEAF" length="32">
1327ec681f3Smrg    <field name="Shader Index" start="0" end="23" type="uint"/>
1337ec681f3Smrg    <field name="Geometry Ray Mask" start="24" end="31" type="uint"/>
1347ec681f3Smrg    <field name="Instance Contribution To Hit Group Index" start="32" end="55" type="uint"/>
1357ec681f3Smrg    <field name="Leaf Type" start="61" end="61" type="uint">
1367ec681f3Smrg      <value name="TYPE_OPAQUE_CULLING_ENABLED" value="0"/>
1377ec681f3Smrg      <value name="TYPE_OPAQUE_CULLING_DISABLED" value="1"/>
1387ec681f3Smrg    </field>
1397ec681f3Smrg    <field name="Geometry Flags" start="62" end="63" type="uint">
1407ec681f3Smrg      <value name="GEOMETRY_OPAQUE" value="1"/>
1417ec681f3Smrg    </field>
1427ec681f3Smrg    <field name="Start Node Address" start="64" end="111" type="address"/>
1437ec681f3Smrg    <field name="Instance Flags" start="112" end="119" type="uint">
1447ec681f3Smrg      <value name="TRIANGLE_CULL_DISABLE" value="1"/>
1457ec681f3Smrg      <value name="TRIANGLE_FRONT_COUNTERCLOCKWISE" value="2"/>
1467ec681f3Smrg      <value name="FORCE_OPAQUE" value="4"/>
1477ec681f3Smrg      <value name="FORCE_NON_OPAQUE" value="8"/>
1487ec681f3Smrg    </field>
1497ec681f3Smrg    <field name="World To Object m00" start="128" end="159" type="float"/>
1507ec681f3Smrg    <field name="World To Object m01" start="160" end="191" type="float"/>
1517ec681f3Smrg    <field name="World To Object m02" start="192" end="223" type="float"/>
1527ec681f3Smrg    <field name="World To Object m10" start="224" end="255" type="float"/>
1537ec681f3Smrg    <field name="World To Object m11" start="256" end="287" type="float"/>
1547ec681f3Smrg    <field name="World To Object m12" start="288" end="319" type="float"/>
1557ec681f3Smrg    <field name="World To Object m20" start="320" end="351" type="float"/>
1567ec681f3Smrg    <field name="World To Object m21" start="352" end="383" type="float"/>
1577ec681f3Smrg    <field name="World To Object m22" start="384" end="415" type="float"/>
1587ec681f3Smrg    <field name="Object To World m30" start="416" end="447" type="float"/>
1597ec681f3Smrg    <field name="Object To World m31" start="448" end="479" type="float"/>
1607ec681f3Smrg    <field name="Object To World m32" start="480" end="511" type="float"/>
1617ec681f3Smrg    <field name="BVH Address" start="512" end="559" type="address"/>
1627ec681f3Smrg    <field name="Instance ID" start="576" end="607" type="uint"/>
1637ec681f3Smrg    <field name="Instance Index" start="608" end="639" type="uint"/>
1647ec681f3Smrg    <field name="Object To World m00" start="640" end="671" type="float"/>
1657ec681f3Smrg    <field name="Object To World m01" start="672" end="703" type="float"/>
1667ec681f3Smrg    <field name="Object To World m02" start="704" end="735" type="float"/>
1677ec681f3Smrg    <field name="Object To World m10" start="736" end="767" type="float"/>
1687ec681f3Smrg    <field name="Object To World m11" start="768" end="799" type="float"/>
1697ec681f3Smrg    <field name="Object To World m12" start="800" end="831" type="float"/>
1707ec681f3Smrg    <field name="Object To World m20" start="832" end="863" type="float"/>
1717ec681f3Smrg    <field name="Object To World m21" start="864" end="895" type="float"/>
1727ec681f3Smrg    <field name="Object To World m22" start="896" end="927" type="float"/>
1737ec681f3Smrg    <field name="World To Object m30" start="928" end="959" type="float"/>
1747ec681f3Smrg    <field name="World To Object m31" start="960" end="991" type="float"/>
1757ec681f3Smrg    <field name="World To Object m32" start="992" end="1023" type="float"/>
1767ec681f3Smrg  </struct>
1777ec681f3Smrg
1787ec681f3Smrg  <struct name="RT_BVH_PROCEDURAL_LEAF" length="16">
1797ec681f3Smrg    <field name="Leaf Descriptor" start="0" end="63" type="RT_BVH_PRIMITIVE_LEAF_DESCRIPTOR"/>
1807ec681f3Smrg
1817ec681f3Smrg    <!-- Software defined -->
1827ec681f3Smrg    <field name="Num Primitives" start="64" end="67" type="uint"/>
1837ec681f3Smrg    <field name="Last Primitive" start="83" end="95" type="uint"/>
1847ec681f3Smrg    <group count="13" start="96" size="32">
1857ec681f3Smrg      <field name="Primitive Index" start="0" end="31" type="uint"/>
1867ec681f3Smrg    </group>
1877ec681f3Smrg  </struct>
1887ec681f3Smrg</genxml>
189