From 7fcf4bc4138c2b3295998fcb1307efb4d0d52797 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Fri, 6 Nov 2026 16:28:35 +0000 Subject: [PATCH] Unify Vulkan RenderState tracking in Loading & Replay: TraceRays APIs - Serialise_vkCmdTraceRaysKHR - Serialise_vkCmdTraceRaysIndirectKHR - Serialise_vkCmdTraceRaysIndirect2KHR --- .../driver/vulkan/wrappers/vk_draw_funcs.cpp | 105 ++++++++---------- 1 file changed, 45 insertions(+), 60 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp index 6f4d5a89d..2324969d2 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp @@ -4916,37 +4916,31 @@ bool WrappedVulkan::Serialise_vkCmdTraceRaysKHR( { m_LastCmdBufferID = GetResID(commandBuffer); - if(IsActiveReplaying(m_State)) + if(InRerecordRange(m_LastCmdBufferID)) { - if(InRerecordRange(m_LastCmdBufferID)) - { + bool loading = IsLoading(m_State); + if(!loading) commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - uint32_t eventId = HandlePreCallback(commandBuffer, ActionFlags::DispatchRay); + uint32_t eventId = + !loading ? HandlePreCallback(commandBuffer, ActionFlags(ActionFlags::DispatchRay)) : 0; - ObjDisp(commandBuffer) - ->CmdTraceRaysKHR(Unwrap(commandBuffer), &RaygenShaderBindingTable, - &MissShaderBindingTable, &HitShaderBindingTable, - &CallableShaderBindingTable, width, height, depth); - - if(eventId && m_ActionCallback->PostDispatch(eventId, ActionFlags::DispatchRay, commandBuffer)) - { - ObjDisp(commandBuffer) - ->CmdTraceRaysKHR(Unwrap(commandBuffer), &RaygenShaderBindingTable, - &MissShaderBindingTable, &HitShaderBindingTable, - &CallableShaderBindingTable, width, height, depth); - - m_ActionCallback->PostRemisc(eventId, ActionFlags::Clear, commandBuffer); - } - } - } - else - { ObjDisp(commandBuffer) ->CmdTraceRaysKHR(Unwrap(commandBuffer), &RaygenShaderBindingTable, &MissShaderBindingTable, &HitShaderBindingTable, &CallableShaderBindingTable, width, height, depth); + if(eventId && m_ActionCallback->PostDispatch(eventId, ActionFlags::DispatchRay, commandBuffer)) + { + ObjDisp(commandBuffer) + ->CmdTraceRaysKHR(Unwrap(commandBuffer), &RaygenShaderBindingTable, + &MissShaderBindingTable, &HitShaderBindingTable, + &CallableShaderBindingTable, width, height, depth); + + m_ActionCallback->PostRemisc(eventId, ActionFlags::Clear, commandBuffer); + } + + if(loading) { AddEvent(); @@ -5020,37 +5014,31 @@ bool WrappedVulkan::Serialise_vkCmdTraceRaysIndirectKHR( { m_LastCmdBufferID = GetResID(commandBuffer); - if(IsActiveReplaying(m_State)) + if(InRerecordRange(m_LastCmdBufferID)) { - if(InRerecordRange(m_LastCmdBufferID)) - { + bool loading = IsLoading(m_State); + if(!loading) commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - uint32_t eventId = HandlePreCallback(commandBuffer, ActionFlags::DispatchRay); + uint32_t eventId = + !loading ? HandlePreCallback(commandBuffer, ActionFlags(ActionFlags::DispatchRay)) : 0; - ObjDisp(commandBuffer) - ->CmdTraceRaysIndirectKHR(Unwrap(commandBuffer), &RaygenShaderBindingTable, - &MissShaderBindingTable, &HitShaderBindingTable, - &CallableShaderBindingTable, indirectDeviceAddress); - - if(eventId && m_ActionCallback->PostDispatch(eventId, ActionFlags::DispatchRay, commandBuffer)) - { - ObjDisp(commandBuffer) - ->CmdTraceRaysIndirectKHR(Unwrap(commandBuffer), &RaygenShaderBindingTable, - &MissShaderBindingTable, &HitShaderBindingTable, - &CallableShaderBindingTable, indirectDeviceAddress); - - m_ActionCallback->PostRemisc(eventId, ActionFlags::Clear, commandBuffer); - } - } - } - else - { ObjDisp(commandBuffer) ->CmdTraceRaysIndirectKHR(Unwrap(commandBuffer), &RaygenShaderBindingTable, &MissShaderBindingTable, &HitShaderBindingTable, &CallableShaderBindingTable, indirectDeviceAddress); + if(eventId && m_ActionCallback->PostDispatch(eventId, ActionFlags::DispatchRay, commandBuffer)) + { + ObjDisp(commandBuffer) + ->CmdTraceRaysIndirectKHR(Unwrap(commandBuffer), &RaygenShaderBindingTable, + &MissShaderBindingTable, &HitShaderBindingTable, + &CallableShaderBindingTable, indirectDeviceAddress); + + m_ActionCallback->PostRemisc(eventId, ActionFlags::Clear, commandBuffer); + } + + if(loading) { AddEvent(); @@ -5114,28 +5102,25 @@ bool WrappedVulkan::Serialise_vkCmdTraceRaysIndirect2KHR(SerialiserType &ser, { m_LastCmdBufferID = GetResID(commandBuffer); - if(IsActiveReplaying(m_State)) + if(InRerecordRange(m_LastCmdBufferID)) { - if(InRerecordRange(m_LastCmdBufferID)) - { + bool loading = IsLoading(m_State); + if(!loading) commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - uint32_t eventId = HandlePreCallback(commandBuffer, ActionFlags::DispatchRay); + uint32_t eventId = + !loading ? HandlePreCallback(commandBuffer, ActionFlags(ActionFlags::DispatchRay)) : 0; - ObjDisp(commandBuffer)->CmdTraceRaysIndirect2KHR(Unwrap(commandBuffer), indirectDeviceAddress); - - if(eventId && m_ActionCallback->PostDispatch(eventId, ActionFlags::DispatchRay, commandBuffer)) - { - ObjDisp(commandBuffer)->CmdTraceRaysIndirect2KHR(Unwrap(commandBuffer), indirectDeviceAddress); - - m_ActionCallback->PostRemisc(eventId, ActionFlags::Clear, commandBuffer); - } - } - } - else - { ObjDisp(commandBuffer)->CmdTraceRaysIndirect2KHR(Unwrap(commandBuffer), indirectDeviceAddress); + if(eventId && m_ActionCallback->PostDispatch(eventId, ActionFlags::DispatchRay, commandBuffer)) + { + ObjDisp(commandBuffer)->CmdTraceRaysIndirect2KHR(Unwrap(commandBuffer), indirectDeviceAddress); + + m_ActionCallback->PostRemisc(eventId, ActionFlags::Clear, commandBuffer); + } + + if(loading) { AddEvent();