From 59cc12ff3f5ae082c1030e60187ce4d5dd3d20e6 Mon Sep 17 00:00:00 2001 From: Cam Mannett Date: Thu, 14 Nov 2024 09:57:34 +0000 Subject: [PATCH] Incorrect command buffer used on Vulkan AS copy replay --- .../driver/vulkan/wrappers/vk_cmd_funcs.cpp | 73 ++++++++++++++----- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 124f60bf0..107259d50 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -7878,19 +7878,24 @@ bool WrappedVulkan::Serialise_vkCmdBuildAccelerationStructuresKHR( if(IsActiveReplaying(m_State)) { if(InRerecordRange(m_LastCmdBufferID)) + { commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - else - return true; + ObjDisp(commandBuffer) + ->CmdBuildAccelerationStructuresKHR(Unwrap(commandBuffer), infoCount, unwrappedInfos, + tmpBuildRangeInfos.data()); + } } + else + { + ObjDisp(commandBuffer) + ->CmdBuildAccelerationStructuresKHR(Unwrap(commandBuffer), infoCount, unwrappedInfos, + tmpBuildRangeInfos.data()); - ObjDisp(commandBuffer) - ->CmdBuildAccelerationStructuresKHR(Unwrap(commandBuffer), infoCount, unwrappedInfos, - tmpBuildRangeInfos.data()); - - AddEvent(); - ActionDescription action; - action.flags = ActionFlags::BuildAccStruct; - AddAction(action); + AddEvent(); + ActionDescription action; + action.flags = ActionFlags::BuildAccStruct; + AddAction(action); + } } return true; @@ -7971,12 +7976,25 @@ bool WrappedVulkan::Serialise_vkCmdCopyAccelerationStructureKHR( unwrappedInfo.src = Unwrap(unwrappedInfo.src); unwrappedInfo.dst = Unwrap(unwrappedInfo.dst); - ObjDisp(commandBuffer)->CmdCopyAccelerationStructureKHR(Unwrap(commandBuffer), &unwrappedInfo); + m_LastCmdBufferID = GetResourceManager()->GetOriginalID(GetResID(commandBuffer)); - AddEvent(); - ActionDescription action; - action.flags = ActionFlags::BuildAccStruct; - AddAction(action); + if(IsActiveReplaying(m_State)) + { + if(InRerecordRange(m_LastCmdBufferID)) + { + commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); + ObjDisp(commandBuffer)->CmdCopyAccelerationStructureKHR(Unwrap(commandBuffer), &unwrappedInfo); + } + } + else + { + ObjDisp(commandBuffer)->CmdCopyAccelerationStructureKHR(Unwrap(commandBuffer), &unwrappedInfo); + + AddEvent(); + ActionDescription action; + action.flags = ActionFlags::BuildAccStruct; + AddAction(action); + } } return true; @@ -8054,12 +8072,27 @@ bool WrappedVulkan::Serialise_vkCmdCopyMemoryToAccelerationStructureKHR( VkCopyMemoryToAccelerationStructureInfoKHR unwrappedInfo = Info; unwrappedInfo.dst = Unwrap(unwrappedInfo.dst); - ObjDisp(commandBuffer)->CmdCopyMemoryToAccelerationStructureKHR(Unwrap(commandBuffer), &unwrappedInfo); + m_LastCmdBufferID = GetResourceManager()->GetOriginalID(GetResID(commandBuffer)); - AddEvent(); - ActionDescription action; - action.flags = ActionFlags::BuildAccStruct; - AddAction(action); + if(IsActiveReplaying(m_State)) + { + if(InRerecordRange(m_LastCmdBufferID)) + { + commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); + ObjDisp(commandBuffer) + ->CmdCopyMemoryToAccelerationStructureKHR(Unwrap(commandBuffer), &unwrappedInfo); + } + } + else + { + ObjDisp(commandBuffer) + ->CmdCopyMemoryToAccelerationStructureKHR(Unwrap(commandBuffer), &unwrappedInfo); + + AddEvent(); + ActionDescription action; + action.flags = ActionFlags::BuildAccStruct; + AddAction(action); + } } return true;