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; }
