From 7410f53912ccceb15c047b4ed2704e749a8dc637 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Wed, 11 May 2022 11:44:11 +0200 Subject: [PATCH] vkd3d: Add debug ring support to raytracing shaders. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/raytracing_pipeline.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libs/vkd3d/raytracing_pipeline.c b/libs/vkd3d/raytracing_pipeline.c index deabd802..692c7f09 100644 --- a/libs/vkd3d/raytracing_pipeline.c +++ b/libs/vkd3d/raytracing_pipeline.c @@ -420,6 +420,8 @@ struct d3d12_state_object_pipeline_data VkPipeline *vk_libraries; size_t vk_libraries_size; size_t vk_libraries_count; + + struct vkd3d_shader_debug_ring_spec_info *spec_info_buffer; }; static void d3d12_state_object_pipeline_data_cleanup(struct d3d12_state_object_pipeline_data *data, @@ -452,6 +454,7 @@ static void d3d12_state_object_pipeline_data_cleanup(struct d3d12_state_object_p vkd3d_free(data->associations); vkd3d_free(data->collections); vkd3d_free(data->vk_libraries); + vkd3d_free(data->spec_info_buffer); } #define VKD3D_ASSOCIATION_PRIORITY_INHERITED_COLLECTION 0 @@ -1644,6 +1647,9 @@ static HRESULT d3d12_state_object_compile_pipeline(struct d3d12_state_object *ob local_static_sampler_bindings_size = 0; object->local_static_sampler.set_index = global_signature ? global_signature->num_set_layouts : 0; + if (object->device->debug_ring.active) + data->spec_info_buffer = vkd3d_calloc(data->entry_points_count, sizeof(*data->spec_info_buffer)); + for (i = 0; i < data->entry_points_count; i++) { entry = &data->entry_points[i]; @@ -1755,6 +1761,12 @@ static HRESULT d3d12_state_object_compile_pipeline(struct d3d12_state_object *ob return E_OUTOFMEMORY; } + if ((spirv.meta.flags & VKD3D_SHADER_META_FLAG_REPLACED) && data->spec_info_buffer) + { + vkd3d_shader_debug_ring_init_spec_constant(object->device, &data->spec_info_buffer[i], spirv.meta.hash); + stage->pSpecializationInfo = &data->spec_info_buffer[i].spec_info; + } + RT_TRACE(" DXIL hash: %016"PRIx64".\n", spirv.meta.hash); #ifdef VKD3D_ENABLE_BREADCRUMBS