diff --git a/src/amd/vulkan/bvh/meson.build b/src/amd/vulkan/bvh/meson.build index 6ef8f91ea82..1d3674bf7fa 100644 --- a/src/amd/vulkan/bvh/meson.build +++ b/src/amd/vulkan/bvh/meson.build @@ -50,6 +50,11 @@ bvh_shaders = [ 'ploc_internal', ['EXTENDED_SAH=0'], ], + [ + 'ploc_internal.comp', + 'ploc_internal_extended', + ['EXTENDED_SAH=1'], + ], [ 'converter_internal.comp', 'converter_internal', diff --git a/src/amd/vulkan/radv_acceleration_structure.c b/src/amd/vulkan/radv_acceleration_structure.c index 13972eb2a6d..966d1e52b10 100644 --- a/src/amd/vulkan/radv_acceleration_structure.c +++ b/src/amd/vulkan/radv_acceleration_structure.c @@ -53,6 +53,10 @@ static const uint32_t ploc_spv[] = { #include "bvh/ploc_internal.spv.h" }; +static const uint32_t ploc_extended_spv[] = { +#include "bvh/ploc_internal_extended.spv.h" +}; + static const uint32_t copy_spv[] = { #include "bvh/copy.spv.h" }; @@ -331,6 +335,8 @@ radv_device_finish_accel_struct_build_state(struct radv_device *device) &state->alloc); radv_DestroyPipeline(radv_device_to_handle(device), state->accel_struct_build.ploc_pipeline, &state->alloc); + radv_DestroyPipeline(radv_device_to_handle(device), + state->accel_struct_build.ploc_extended_pipeline, &state->alloc); radv_DestroyPipeline(radv_device_to_handle(device), state->accel_struct_build.lbvh_generate_ir_pipeline, &state->alloc); radv_DestroyPipeline(radv_device_to_handle(device), state->accel_struct_build.lbvh_main_pipeline, @@ -592,6 +598,13 @@ radv_device_init_accel_struct_build_state(struct radv_device *device) if (result != VK_SUCCESS) return result; + result = create_build_pipeline_spv(device, ploc_extended_spv, sizeof(ploc_extended_spv), + sizeof(struct ploc_args), + &device->meta_state.accel_struct_build.ploc_extended_pipeline, + &device->meta_state.accel_struct_build.ploc_p_layout); + if (result != VK_SUCCESS) + return result; + result = create_build_pipeline_spv(device, convert_leaf_spv, sizeof(convert_leaf_spv), sizeof(struct convert_leaf_args), &device->meta_state.accel_struct_build.convert_leaf_pipeline, diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index c35a6d218ed..559582831e4 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -688,6 +688,7 @@ struct radv_meta_state { VkPipeline lbvh_generate_ir_pipeline; VkPipelineLayout ploc_p_layout; VkPipeline ploc_pipeline; + VkPipeline ploc_extended_pipeline; VkPipelineLayout convert_leaf_p_layout; VkPipeline convert_leaf_pipeline; VkPipelineLayout convert_internal_p_layout;