From c53eb2f3d4be7d1c4e2cff45c73669aefbfb280e Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Wed, 11 Jan 2023 21:36:31 +0100 Subject: [PATCH] radv: Add a shader variant for PLOC with extended SAH Reviewed-by: Friedrich Vock Part-of: --- src/amd/vulkan/bvh/meson.build | 5 +++++ src/amd/vulkan/radv_acceleration_structure.c | 13 +++++++++++++ src/amd/vulkan/radv_private.h | 1 + 3 files changed, 19 insertions(+) diff --git a/src/amd/vulkan/bvh/meson.build b/src/amd/vulkan/bvh/meson.build index 6ef8f91..1d3674b 100644 --- a/src/amd/vulkan/bvh/meson.build +++ b/src/amd/vulkan/bvh/meson.build @@ -51,6 +51,11 @@ bvh_shaders = [ ['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 13972eb..966d1e5 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" }; @@ -332,6 +336,8 @@ radv_device_finish_accel_struct_build_state(struct radv_device *device) 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, &state->alloc); @@ -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 c35a6d2..5595828 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; -- 2.7.4