Module: Mesa
Branch: main
Commit: 7d7c32de4c18c25aef1945ea29f122112dc0a2e6
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7d7c32de4c18c25aef1945ea29f122112dc0a2e6

Author: Lionel Landwerlin <[email protected]>
Date:   Fri Nov 25 12:29:09 2022 +0200

anv/genxml: make gen_rt more like other genxml files

The main goal is to be able to generate genX_bits.h for those
structures so we can get generated field offsets.

Signed-off-by: Lionel Landwerlin <[email protected]>
Reviewed-by: Ivan Briano <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20011>

---

 src/intel/genxml/gen125.xml                    | 131 -------------------------
 src/intel/genxml/gen_pack_header.py            |   2 +-
 src/intel/genxml/gen_rt.xml                    |   2 +-
 src/intel/genxml/meson.build                   |   2 +-
 src/intel/vulkan/anv_genX.h                    |  14 +++
 src/intel/vulkan/anv_private.h                 |  14 ---
 src/intel/vulkan/genX_acceleration_structure.c |   1 +
 src/intel/vulkan/genX_cmd_buffer.c             |  14 +--
 src/intel/vulkan/genX_pipeline.c               |  12 +--
 9 files changed, 31 insertions(+), 161 deletions(-)

diff --git a/src/intel/genxml/gen125.xml b/src/intel/genxml/gen125.xml
index 4af72bf249e..1c6631f4297 100644
--- a/src/intel/genxml/gen125.xml
+++ b/src/intel/genxml/gen125.xml
@@ -842,137 +842,6 @@
       <value name="+8/16" value="7" />
     </field>
   </struct>
-  <struct name="RT_BVH_VEC3" length="3">
-    <field name="X" start="0" end="31" type="float" />
-    <field name="Y" start="32" end="63" type="float" />
-    <field name="Z" start="64" end="95" type="float" />
-  </struct>
-  <struct name="RT_BVH_METADATA" length="16">
-    <field name="Bounds Min" start="0" end="95" type="RT_BVH_VEC3" />
-    <field name="Bounds Max" start="96" end="191" type="RT_BVH_VEC3" />
-  </struct>
-  <struct name="RT_BVH" length="32">
-    <field name="Root Node Offset" start="0" end="63" type="offset" />
-    <field name="Meta" start="512" end="1023" type="RT_BVH_METADATA" />
-  </struct>
-  <struct name="RT_BVH_INSTANCE_LEAF" length="32">
-    <field name="Shader Index" start="0" end="23" type="uint" />
-    <field name="Geometry Ray Mask" start="24" end="31" type="uint" />
-    <field name="Instance Contribution To Hit Group Index" start="32" end="55" 
type="uint" />
-    <field name="Leaf Type" start="61" end="61" type="uint">
-      <value name="TYPE_OPAQUE_CULLING_ENABLED" value="0" />
-      <value name="TYPE_OPAQUE_CULLING_DISABLED" value="1" />
-    </field>
-    <field name="Geometry Flags" start="62" end="63" type="uint">
-      <value name="GEOMETRY_OPAQUE" value="1" />
-    </field>
-    <field name="Start Node Address" start="64" end="111" type="address" />
-    <field name="Instance Flags" start="112" end="119" type="uint">
-      <value name="TRIANGLE_CULL_DISABLE" value="1" />
-      <value name="TRIANGLE_FRONT_COUNTERCLOCKWISE" value="2" />
-      <value name="FORCE_OPAQUE" value="4" />
-      <value name="FORCE_NON_OPAQUE" value="8" />
-    </field>
-    <field name="World To Object m00" start="128" end="159" type="float" />
-    <field name="World To Object m01" start="160" end="191" type="float" />
-    <field name="World To Object m02" start="192" end="223" type="float" />
-    <field name="World To Object m10" start="224" end="255" type="float" />
-    <field name="World To Object m11" start="256" end="287" type="float" />
-    <field name="World To Object m12" start="288" end="319" type="float" />
-    <field name="World To Object m20" start="320" end="351" type="float" />
-    <field name="World To Object m21" start="352" end="383" type="float" />
-    <field name="World To Object m22" start="384" end="415" type="float" />
-    <field name="Object To World m30" start="416" end="447" type="float" />
-    <field name="Object To World m31" start="448" end="479" type="float" />
-    <field name="Object To World m32" start="480" end="511" type="float" />
-    <field name="BVH Address" start="512" end="559" type="address" />
-    <field name="Instance ID" start="576" end="607" type="uint" />
-    <field name="Instance Index" start="608" end="639" type="uint" />
-    <field name="Object To World m00" start="640" end="671" type="float" />
-    <field name="Object To World m01" start="672" end="703" type="float" />
-    <field name="Object To World m02" start="704" end="735" type="float" />
-    <field name="Object To World m10" start="736" end="767" type="float" />
-    <field name="Object To World m11" start="768" end="799" type="float" />
-    <field name="Object To World m12" start="800" end="831" type="float" />
-    <field name="Object To World m20" start="832" end="863" type="float" />
-    <field name="Object To World m21" start="864" end="895" type="float" />
-    <field name="Object To World m22" start="896" end="927" type="float" />
-    <field name="World To Object m30" start="928" end="959" type="float" />
-    <field name="World To Object m31" start="960" end="991" type="float" />
-    <field name="World To Object m32" start="992" end="1023" type="float" />
-  </struct>
-  <struct name="RT_BVH_INTERNAL_NODE" length="16">
-    <field name="Origin" start="0" end="95" type="RT_BVH_VEC3" />
-    <field name="Child Offset" start="96" end="127" type="int" />
-    <field name="Node Type" start="128" end="135" type="uint" 
prefix="NODE_TYPE">
-      <value name="INTERNAL" value="0" />
-      <value name="INSTANCE" value="1" />
-      <value name="PROCEDURAL" value="3" />
-      <value name="QUAD" value="4" />
-      <value name="INVALID" value="7" />
-    </field>
-    <field name="Child Bounds Exponent X" start="144" end="151" type="int" />
-    <field name="Child Bounds Exponent Y" start="152" end="159" type="int" />
-    <field name="Child Bounds Exponent Z" start="160" end="168" type="int" />
-    <field name="Node Ray Mask" start="168" end="175" type="uint" />
-    <group count="6" start="176" size="8">
-      <field name="Child Size" start="0" end="1" type="uint" />
-      <field name="Child Type" start="2" end="5" type="uint" />
-      <field name="Start Primitive" start="2" end="5" type="uint" />
-    </group>
-    <group count="6" start="224" size="8">
-      <field name="Child Lower X Bound" start="0" end="7" type="uint" />
-    </group>
-    <group count="6" start="272" size="8">
-      <field name="Child Upper X Bound" start="0" end="7" type="uint" />
-    </group>
-    <group count="6" start="320" size="8">
-      <field name="Child Lower Y Bound" start="0" end="7" type="uint" />
-    </group>
-    <group count="6" start="368" size="8">
-      <field name="Child Upper Y Bound" start="0" end="7" type="uint" />
-    </group>
-    <group count="6" start="416" size="8">
-      <field name="Child Lower Z Bound" start="0" end="7" type="uint" />
-    </group>
-    <group count="6" start="464" size="8">
-      <field name="Child Upper Z Bound" start="0" end="7" type="uint" />
-    </group>
-  </struct>
-  <struct name="RT_BVH_PRIMITIVE_LEAF_DESCRIPTOR" length="2">
-    <field name="Shader Index" start="0" end="23" type="uint" />
-    <field name="Geometry Ray Mask" start="24" end="31" type="uint" />
-    <field name="Geometry Index" start="32" end="60" type="uint" />
-    <field name="Leaf Type" start="61" end="61" type="uint">
-      <value name="TYPE_QUAD" value="0" />
-      <value name="TYPE_OPAQUE_CULLING_ENABLED" value="0" />
-      <value name="TYPE_OPAQUE_CULLING_DISABLED" value="1" />
-    </field>
-    <field name="Geometry Flags" start="62" end="63" type="uint">
-      <value name="GEOMETRY_OPAQUE" value="1" />
-      <value name="GEOMETRY_NO_DUPLICATE_ANYHIT_INVOCATION" value="2" />
-    </field>
-  </struct>
-  <struct name="RT_BVH_PROCEDURAL_LEAF" length="16">
-    <field name="Leaf Descriptor" start="0" end="63" 
type="RT_BVH_PRIMITIVE_LEAF_DESCRIPTOR" />
-    <field name="Num Primitives" start="64" end="67" type="uint" />
-    <field name="Last Primitive" start="83" end="95" type="uint" />
-    <group count="13" start="96" size="32">
-      <field name="Primitive Index" start="0" end="31" type="uint" />
-    </group>
-  </struct>
-  <struct name="RT_BVH_QUAD_LEAF" length="16">
-    <field name="Leaf Descriptor" start="0" end="63" 
type="RT_BVH_PRIMITIVE_LEAF_DESCRIPTOR" />
-    <field name="Primitive Index 0" start="64" end="95" type="uint" />
-    <field name="Primitive Index 1 Delta" start="96" end="112" type="uint" />
-    <field name="j0" start="112" end="113" type="uint" />
-    <field name="j1" start="114" end="115" type="uint" />
-    <field name="j2" start="116" end="117" type="uint" />
-    <field name="Last Quad" start="118" end="118" type="bool" />
-    <group count="4" start="128" size="96">
-      <field name="Quad Vertex" start="0" end="95" type="RT_BVH_VEC3" />
-    </group>
-  </struct>
   <struct name="SAMPLER_BORDER_COLOR_STATE" length="4">
     <field name="Border Color Float Red" start="0" end="31" type="float" />
     <field name="Border Color 32bit Red" start="0" end="31" type="uint" />
diff --git a/src/intel/genxml/gen_pack_header.py 
b/src/intel/genxml/gen_pack_header.py
index ec512453dc0..743b3b5fd74 100644
--- a/src/intel/genxml/gen_pack_header.py
+++ b/src/intel/genxml/gen_pack_header.py
@@ -446,7 +446,7 @@ class Parser(object):
         return 'GFX%s_%s' % (self.gen, name)
 
     def gen_guard(self):
-        return self.gen_prefix("PACK_H")
+        return self.gen_prefix("{0}_PACK_H".format(self.platform))
 
     def start_element(self, name, attrs):
         if name == "genxml":
diff --git a/src/intel/genxml/gen_rt.xml b/src/intel/genxml/gen_rt.xml
index ddb23a932ac..44a2b7db4ae 100644
--- a/src/intel/genxml/gen_rt.xml
+++ b/src/intel/genxml/gen_rt.xml
@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding='utf-8'?>
-<genxml name="RT" gen="">
+<genxml name="RT" gen="12.5">
   <struct name="BINDLESS_SHADER_RECORD" length="2">
     <field name="Offset To Local Arguments" start="0" end="2" type="uint" />
     <field name="Bindless Shader Dispatch Mode" start="4" end="4" type="uint">
diff --git a/src/intel/genxml/meson.build b/src/intel/genxml/meson.build
index c4e7b4c762c..2f2d6c4c570 100644
--- a/src/intel/genxml/meson.build
+++ b/src/intel/genxml/meson.build
@@ -77,7 +77,7 @@ genX_bits_included_symbols = [
 
 genX_bits_h = custom_target(
   'genX_bits.h',
-  input : ['gen_bits_header.py', gen_xml_files],
+  input : ['gen_bits_header.py', gen_xml_files, 'gen_rt.xml'],
   output : 'genX_bits.h',
   command : [prog_python, '@INPUT@', '-o', '@OUTPUT@',
              '--include-symbols', ','.join(genX_bits_included_symbols)],
diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h
index b556813897c..084671ae263 100644
--- a/src/intel/vulkan/anv_genX.h
+++ b/src/intel/vulkan/anv_genX.h
@@ -178,3 +178,17 @@ genX(compute_pipeline_emit)(struct anv_compute_pipeline 
*pipeline);
 
 void
 genX(ray_tracing_pipeline_emit)(struct anv_ray_tracing_pipeline *pipeline);
+
+#define anv_shader_bin_get_bsr(bin, local_arg_offset) ({             \
+   assert((local_arg_offset) % 8 == 0);                              \
+   const struct brw_bs_prog_data *prog_data =                        \
+      brw_bs_prog_data_const(bin->prog_data);                        \
+   assert(prog_data->simd_size == 8 || prog_data->simd_size == 16);  \
+                                                                     \
+   (struct GENX(BINDLESS_SHADER_RECORD)) {                           \
+      .OffsetToLocalArguments = (local_arg_offset) / 8,              \
+      .BindlessShaderDispatchMode =                                  \
+         prog_data->simd_size == 16 ? RT_SIMD16 : RT_SIMD8,          \
+      .KernelStartPointer = bin->kernel.offset,                      \
+   };                                                                \
+})
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index f1d9dd1b95d..9ff2d0b56da 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -2946,20 +2946,6 @@ anv_shader_bin_unref(struct anv_device *device, struct 
anv_shader_bin *shader)
    vk_pipeline_cache_object_unref(&shader->base);
 }
 
-#define anv_shader_bin_get_bsr(bin, local_arg_offset) ({             \
-   assert((local_arg_offset) % 8 == 0);                              \
-   const struct brw_bs_prog_data *prog_data =                        \
-      brw_bs_prog_data_const(bin->prog_data);                        \
-   assert(prog_data->simd_size == 8 || prog_data->simd_size == 16);  \
-                                                                     \
-   (struct GFX_BINDLESS_SHADER_RECORD) {                             \
-      .OffsetToLocalArguments = (local_arg_offset) / 8,              \
-      .BindlessShaderDispatchMode =                                  \
-         prog_data->simd_size == 16 ? RT_SIMD16 : RT_SIMD8,          \
-      .KernelStartPointer = bin->kernel.offset,                      \
-   };                                                                \
-})
-
 struct anv_pipeline_executable {
    gl_shader_stage stage;
 
diff --git a/src/intel/vulkan/genX_acceleration_structure.c 
b/src/intel/vulkan/genX_acceleration_structure.c
index 15f4fdbcefa..4fe565666f4 100644
--- a/src/intel/vulkan/genX_acceleration_structure.c
+++ b/src/intel/vulkan/genX_acceleration_structure.c
@@ -31,6 +31,7 @@
 
 #include "genxml/gen_macros.h"
 #include "genxml/genX_pack.h"
+#include "genxml/gen_rt_pack.h"
 
 #if GFX_VERx10 >= 125
 
diff --git a/src/intel/vulkan/genX_cmd_buffer.c 
b/src/intel/vulkan/genX_cmd_buffer.c
index ff3e478d3ec..28c78298b67 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -5432,7 +5432,7 @@ genX(cmd_buffer_ray_query_globals)(struct anv_cmd_buffer 
*cmd_buffer)
    brw_rt_compute_scratch_layout(&layout, device->info,
                                  stack_ids_per_dss, 1 << 10);
 
-   struct GFX_RT_DISPATCH_GLOBALS rtdg = {
+   struct GENX(RT_DISPATCH_GLOBALS) rtdg = {
       .MemBaseAddress = (struct anv_address) {
          /* The ray query HW computes offsets from the top of the buffer, so
           * let the address at the end of the buffer.
@@ -5448,7 +5448,7 @@ genX(cmd_buffer_ray_query_globals)(struct anv_cmd_buffer 
*cmd_buffer)
          .bo = cmd_buffer->state.ray_query_shadow_bo,
       },
    };
-   GFX_RT_DISPATCH_GLOBALS_pack(NULL, state.map, &rtdg);
+   GENX(RT_DISPATCH_GLOBALS_pack)(NULL, state.map, &rtdg);
 
    return state;
 #else
@@ -5608,10 +5608,10 @@ calc_local_trace_size(uint8_t local_shift[3], const 
uint32_t global[3])
    local_shift[0] += 3 - total_shift;
 }
 
-static struct GFX_RT_SHADER_TABLE
+static struct GENX(RT_SHADER_TABLE)
 vk_sdar_to_shader_table(const VkStridedDeviceAddressRegionKHR *region)
 {
-   return (struct GFX_RT_SHADER_TABLE) {
+   return (struct GENX(RT_SHADER_TABLE)) {
       .BaseAddress = anv_address_from_u64(region->deviceAddress),
       .Stride = region->stride,
    };
@@ -5667,7 +5667,7 @@ cmd_buffer_trace_rays(struct anv_cmd_buffer *cmd_buffer,
                                          sizeof(struct anv_push_constants),
                                          64);
 
-   struct GFX_RT_DISPATCH_GLOBALS rtdg = {
+   struct GENX(RT_DISPATCH_GLOBALS) rtdg = {
       .MemBaseAddress = (struct anv_address) {
          .bo = rt->scratch.bo,
          .offset = rt->scratch.layout.ray_stack_start,
@@ -5686,10 +5686,10 @@ cmd_buffer_trace_rays(struct anv_cmd_buffer *cmd_buffer,
       .LaunchDepth = launch_depth,
       .CallableGroupTable = vk_sdar_to_shader_table(callable_sbt),
    };
-   GFX_RT_DISPATCH_GLOBALS_pack(NULL, rtdg_state.map, &rtdg);
+   GENX(RT_DISPATCH_GLOBALS_pack)(NULL, rtdg_state.map, &rtdg);
 
    /* Push constants go after the RT_DISPATCH_GLOBALS */
-   assert(GFX_RT_DISPATCH_GLOBALS_length * 4 <= BRW_RT_PUSH_CONST_OFFSET);
+   assert(GENX(RT_DISPATCH_GLOBALS_length) * 4 <= BRW_RT_PUSH_CONST_OFFSET);
    memcpy(rtdg_state.map + BRW_RT_PUSH_CONST_OFFSET,
           &cmd_buffer->state.rt.base.push_constants,
           sizeof(struct anv_push_constants));
diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c
index 32a5dd1d6b0..bc061ed5916 100644
--- a/src/intel/vulkan/genX_pipeline.c
+++ b/src/intel/vulkan/genX_pipeline.c
@@ -1990,28 +1990,28 @@ genX(ray_tracing_pipeline_emit)(struct 
anv_ray_tracing_pipeline *pipeline)
 
       switch (group->type) {
       case VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR: {
-         struct GFX_RT_GENERAL_SBT_HANDLE sh = {};
+         struct GENX(RT_GENERAL_SBT_HANDLE) sh = {};
          sh.General = anv_shader_bin_get_bsr(group->general, 32);
-         GFX_RT_GENERAL_SBT_HANDLE_pack(NULL, group->handle, &sh);
+         GENX(RT_GENERAL_SBT_HANDLE_pack)(NULL, group->handle, &sh);
          break;
       }
 
       case VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR: {
-         struct GFX_RT_TRIANGLES_SBT_HANDLE sh = {};
+         struct GENX(RT_TRIANGLES_SBT_HANDLE) sh = {};
          if (group->closest_hit)
             sh.ClosestHit = anv_shader_bin_get_bsr(group->closest_hit, 32);
          if (group->any_hit)
             sh.AnyHit = anv_shader_bin_get_bsr(group->any_hit, 24);
-         GFX_RT_TRIANGLES_SBT_HANDLE_pack(NULL, group->handle, &sh);
+         GENX(RT_TRIANGLES_SBT_HANDLE_pack)(NULL, group->handle, &sh);
          break;
       }
 
       case VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR: {
-         struct GFX_RT_PROCEDURAL_SBT_HANDLE sh = {};
+         struct GENX(RT_PROCEDURAL_SBT_HANDLE) sh = {};
          if (group->closest_hit)
             sh.ClosestHit = anv_shader_bin_get_bsr(group->closest_hit, 32);
          sh.Intersection = anv_shader_bin_get_bsr(group->intersection, 24);
-         GFX_RT_PROCEDURAL_SBT_HANDLE_pack(NULL, group->handle, &sh);
+         GENX(RT_PROCEDURAL_SBT_HANDLE_pack)(NULL, group->handle, &sh);
          break;
       }
 

Reply via email to