diff --git a/src/intel/genxml/gen300_rt.xml b/src/intel/genxml/gen300_rt.xml index 9579d1b4ef5..73811e49ce8 100644 --- a/src/intel/genxml/gen300_rt.xml +++ b/src/intel/genxml/gen300_rt.xml @@ -9,4 +9,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h index 2aa9881bea6..2abdcc4c690 100644 --- a/src/intel/vulkan/anv_genX.h +++ b/src/intel/vulkan/anv_genX.h @@ -274,6 +274,22 @@ genX(compute_pipeline_emit)(struct anv_compute_pipeline *pipeline); void genX(ray_tracing_pipeline_emit)(struct anv_ray_tracing_pipeline *pipeline); +#if GFX_VERx10 >= 300 +#define anv_shader_bin_get_handler(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 == 16); \ + \ + (struct GENX(CALL_STACK_HANDLER)) { \ + .OffsetToLocalArguments = (local_arg_offset) / 8, \ + .BindlessShaderDispatchMode = RT_SIMD16, \ + .KernelStartPointer = bin->kernel.offset, \ + .RegistersPerThread = ptl_register_blocks(prog_data->base.grf_used), \ + }; \ +}) +#endif + #if GFX_VERx10 >= 300 #define anv_shader_bin_get_bsr(bin, local_arg_offset) ({ \ assert((local_arg_offset) % 8 == 0); \ diff --git a/src/intel/vulkan/genX_cmd_compute.c b/src/intel/vulkan/genX_cmd_compute.c index cc55f60acd5..d267658a146 100644 --- a/src/intel/vulkan/genX_cmd_compute.c +++ b/src/intel/vulkan/genX_cmd_compute.c @@ -1031,8 +1031,13 @@ cmd_buffer_emit_rt_dispatch_globals(struct anv_cmd_buffer *cmd_buffer, .bo = rt->scratch.bo, .offset = rt->scratch.layout.ray_stack_start, }, +#if GFX_VERx10 == 300 + .CallStackHandler = anv_shader_bin_get_handler( + cmd_buffer->device->rt_trivial_return, 0), +#else .CallStackHandler = anv_shader_bin_get_bsr( cmd_buffer->device->rt_trivial_return, 0), +#endif .AsyncRTStackSize = rt->scratch.layout.ray_stack_stride / 64, .NumDSSRTStacks = rt->scratch.layout.stack_ids_per_dss, .MaxBVHLevels = BRW_RT_MAX_BVH_LEVELS, @@ -1079,8 +1084,13 @@ cmd_buffer_emit_rt_dispatch_globals_indirect(struct anv_cmd_buffer *cmd_buffer, .bo = rt->scratch.bo, .offset = rt->scratch.layout.ray_stack_start, }, +#if GFX_VERx10 == 300 + .CallStackHandler = anv_shader_bin_get_handler( + cmd_buffer->device->rt_trivial_return, 0), +#else .CallStackHandler = anv_shader_bin_get_bsr( cmd_buffer->device->rt_trivial_return, 0), +#endif .AsyncRTStackSize = rt->scratch.layout.ray_stack_stride / 64, .NumDSSRTStacks = rt->scratch.layout.stack_ids_per_dss, .MaxBVHLevels = BRW_RT_MAX_BVH_LEVELS,