diff --git a/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp index 8de830533..838fa538e 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp @@ -626,17 +626,14 @@ bool WrappedVulkan::Serialise_vkCmdSetEvent(SerialiserType &ser, VkCommandBuffer m_LastCmdBufferID = GetResID(commandBuffer); // see top of this file for current event/fence handling - - if(IsActiveReplaying(m_State)) + if(InRerecordRange(m_LastCmdBufferID)) { - if(InRerecordRange(m_LastCmdBufferID)) + bool loading = IsLoading(m_State); + if(!loading) commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - else - commandBuffer = VK_NULL_HANDLE; - } - // if(commandBuffer != VK_NULL_HANDLE) - // ObjDisp(commandBuffer)->CmdSetEvent(Unwrap(commandBuffer), Unwrap(event), stageMask); + // ObjDisp(commandBuffer)->CmdSetEvent(Unwrap(commandBuffer), Unwrap(event), stageMask); + } } return true; @@ -681,17 +678,12 @@ bool WrappedVulkan::Serialise_vkCmdResetEvent(SerialiserType &ser, VkCommandBuff m_LastCmdBufferID = GetResID(commandBuffer); // see top of this file for current event/fence handling - - if(IsActiveReplaying(m_State)) + if(InRerecordRange(m_LastCmdBufferID)) { - if(InRerecordRange(m_LastCmdBufferID)) + bool loading = IsLoading(m_State); + if(!loading) commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - else - commandBuffer = VK_NULL_HANDLE; - } - if(commandBuffer != VK_NULL_HANDLE) - { // ObjDisp(commandBuffer)->CmdResetEvent(Unwrap(commandBuffer), Unwrap(event), mask); } } @@ -767,57 +759,53 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents( { m_LastCmdBufferID = GetResID(commandBuffer); - for(uint32_t i = 0; i < bufferMemoryBarrierCount; i++) + bool loading = IsLoading(m_State); + if(InRerecordRange(m_LastCmdBufferID)) { - if(pBufferMemoryBarriers[i].buffer != VK_NULL_HANDLE) - { - bufBarriers.push_back(pBufferMemoryBarriers[i]); - bufBarriers.back().buffer = Unwrap(bufBarriers.back().buffer); - - RemapQueueFamilyIndices(bufBarriers.back().srcQueueFamilyIndex, - bufBarriers.back().dstQueueFamilyIndex); - } - } - - for(uint32_t i = 0; i < imageMemoryBarrierCount; i++) - { - if(pImageMemoryBarriers[i].image != VK_NULL_HANDLE) - { - imgBarriers.push_back(pImageMemoryBarriers[i]); - imgBarriers.back().image = Unwrap(imgBarriers.back().image); - - RemapQueueFamilyIndices(imgBarriers.back().srcQueueFamilyIndex, - imgBarriers.back().dstQueueFamilyIndex); - } - } - - // see top of this file for current event/fence handling - - VkEventCreateInfo evInfo = { - VK_STRUCTURE_TYPE_EVENT_CREATE_INFO, - NULL, - 0, - }; - - if(IsActiveReplaying(m_State)) - { - if(InRerecordRange(m_LastCmdBufferID)) + if(!loading) commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - else - commandBuffer = VK_NULL_HANDLE; - } - else - { + + for(uint32_t i = 0; i < bufferMemoryBarrierCount; i++) + { + if(pBufferMemoryBarriers[i].buffer != VK_NULL_HANDLE) + { + bufBarriers.push_back(pBufferMemoryBarriers[i]); + bufBarriers.back().buffer = Unwrap(bufBarriers.back().buffer); + + RemapQueueFamilyIndices(bufBarriers.back().srcQueueFamilyIndex, + bufBarriers.back().dstQueueFamilyIndex); + } + } + for(uint32_t i = 0; i < imageMemoryBarrierCount; i++) { - const VkImageMemoryBarrier &b = pImageMemoryBarriers[i]; - if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED) - AddEventResourceUsage(GetResID(b.image), ResourceUsage::Discard); + if(pImageMemoryBarriers[i].image != VK_NULL_HANDLE) + { + imgBarriers.push_back(pImageMemoryBarriers[i]); + imgBarriers.back().image = Unwrap(imgBarriers.back().image); + + RemapQueueFamilyIndices(imgBarriers.back().srcQueueFamilyIndex, + imgBarriers.back().dstQueueFamilyIndex); + } } - } + + // see top of this file for current event/fence handling + VkEventCreateInfo evInfo = { + VK_STRUCTURE_TYPE_EVENT_CREATE_INFO, + NULL, + 0, + }; + + if(loading) + { + for(uint32_t i = 0; i < imageMemoryBarrierCount; i++) + { + const VkImageMemoryBarrier &b = pImageMemoryBarriers[i]; + if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED) + AddEventResourceUsage(GetResID(b.image), ResourceUsage::Discard); + } + } - if(commandBuffer != VK_NULL_HANDLE) - { // don't wrap this event VkEvent ev = VK_NULL_HANDLE; ObjDisp(commandBuffer)->CreateEvent(Unwrap(GetDev()), &evInfo, NULL, &ev); @@ -843,7 +831,7 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents( memoryBarrierCount, pMemoryBarriers, (uint32_t)bufBarriers.size(), bufBarriers.data(), (uint32_t)imgBarriers.size(), imgBarriers.data()); - if(m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest) + if(!loading && m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest) { for(uint32_t i = 0; i < imageMemoryBarrierCount; i++) { @@ -1136,17 +1124,14 @@ bool WrappedVulkan::Serialise_vkCmdSetEvent2(SerialiserType &ser, VkCommandBuffe m_LastCmdBufferID = GetResID(commandBuffer); // see top of this file for current event/fence handling - - if(IsActiveReplaying(m_State)) + if(InRerecordRange(m_LastCmdBufferID)) { - if(InRerecordRange(m_LastCmdBufferID)) + bool loading = IsLoading(m_State); + if(!loading) commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - else - commandBuffer = VK_NULL_HANDLE; - } - // if(commandBuffer != VK_NULL_HANDLE) - // ObjDisp(commandBuffer)->CmdSetEvent2(Unwrap(commandBuffer), Unwrap(event), &DependencyInfo); + // ObjDisp(commandBuffer)->CmdSetEvent2(Unwrap(commandBuffer), Unwrap(event), &DependencyInfo); + } } return true; @@ -1198,20 +1183,14 @@ bool WrappedVulkan::Serialise_vkCmdResetEvent2(SerialiserType &ser, VkCommandBuf if(IsReplayingAndReading()) { - m_LastCmdBufferID = GetResID(commandBuffer); - // see top of this file for current event/fence handling - if(IsActiveReplaying(m_State)) + if(InRerecordRange(m_LastCmdBufferID)) { - if(InRerecordRange(m_LastCmdBufferID)) + bool loading = IsLoading(m_State); + if(!loading) commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - else - commandBuffer = VK_NULL_HANDLE; - } - if(commandBuffer != VK_NULL_HANDLE) - { // ObjDisp(commandBuffer)->CmdResetEvent2(Unwrap(commandBuffer), Unwrap(event), stageMask); } } @@ -1264,70 +1243,67 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents2(SerialiserType &ser, VkCommandBuf { m_LastCmdBufferID = GetResID(commandBuffer); - rdcarray imgBarriers; - rdcarray bufBarriers; - - for(uint32_t evIdx = 0; evIdx < eventCount; evIdx++) + bool loading = IsLoading(m_State); + if(InRerecordRange(m_LastCmdBufferID)) { - imgBarriers.clear(); - bufBarriers.clear(); + if(!loading) + commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - const VkDependencyInfo &depInfo = pDependencyInfos[evIdx]; + rdcarray imgBarriers; + rdcarray bufBarriers; - for(uint32_t i = 0; i < depInfo.bufferMemoryBarrierCount; i++) + for(uint32_t evIdx = 0; evIdx < eventCount; evIdx++) { - if(depInfo.pBufferMemoryBarriers[i].buffer != VK_NULL_HANDLE) + imgBarriers.clear(); + bufBarriers.clear(); + + const VkDependencyInfo &depInfo = pDependencyInfos[evIdx]; + + for(uint32_t i = 0; i < depInfo.bufferMemoryBarrierCount; i++) { - bufBarriers.push_back(depInfo.pBufferMemoryBarriers[i]); - bufBarriers.back().buffer = Unwrap(bufBarriers.back().buffer); + if(depInfo.pBufferMemoryBarriers[i].buffer != VK_NULL_HANDLE) + { + bufBarriers.push_back(depInfo.pBufferMemoryBarriers[i]); + bufBarriers.back().buffer = Unwrap(bufBarriers.back().buffer); - RemapQueueFamilyIndices(bufBarriers.back().srcQueueFamilyIndex, - bufBarriers.back().dstQueueFamilyIndex); + RemapQueueFamilyIndices(bufBarriers.back().srcQueueFamilyIndex, + bufBarriers.back().dstQueueFamilyIndex); + } } - } - for(uint32_t i = 0; i < depInfo.imageMemoryBarrierCount; i++) - { - if(depInfo.pImageMemoryBarriers[i].image != VK_NULL_HANDLE) - { - imgBarriers.push_back(depInfo.pImageMemoryBarriers[i]); - imgBarriers.back().image = Unwrap(imgBarriers.back().image); - - RemapQueueFamilyIndices(imgBarriers.back().srcQueueFamilyIndex, - imgBarriers.back().dstQueueFamilyIndex); - } - } - - // see top of this file for current event/fence handling - - VkDependencyInfo UnwrappedDependencyInfo = depInfo; - - UnwrappedDependencyInfo.pBufferMemoryBarriers = bufBarriers.data(); - UnwrappedDependencyInfo.bufferMemoryBarrierCount = (uint32_t)bufBarriers.size(); - UnwrappedDependencyInfo.pImageMemoryBarriers = imgBarriers.data(); - UnwrappedDependencyInfo.imageMemoryBarrierCount = (uint32_t)imgBarriers.size(); - - if(IsActiveReplaying(m_State)) - { - if(InRerecordRange(m_LastCmdBufferID)) - commandBuffer = RerecordCmdBuf(m_LastCmdBufferID); - else - commandBuffer = VK_NULL_HANDLE; - } - else - { for(uint32_t i = 0; i < depInfo.imageMemoryBarrierCount; i++) { - const VkImageMemoryBarrier2 &b = depInfo.pImageMemoryBarriers[i]; - if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED && - b.newLayout != VK_IMAGE_LAYOUT_UNDEFINED) - AddEventResourceUsage(GetResID(b.image), ResourceUsage::Discard); - } - } + if(depInfo.pImageMemoryBarriers[i].image != VK_NULL_HANDLE) + { + imgBarriers.push_back(depInfo.pImageMemoryBarriers[i]); + imgBarriers.back().image = Unwrap(imgBarriers.back().image); - if(commandBuffer != VK_NULL_HANDLE) - { - if(IsLoading(m_State) && evIdx == 0) + RemapQueueFamilyIndices(imgBarriers.back().srcQueueFamilyIndex, + imgBarriers.back().dstQueueFamilyIndex); + } + } + + // see top of this file for current event/fence handling + + VkDependencyInfo UnwrappedDependencyInfo = depInfo; + + UnwrappedDependencyInfo.pBufferMemoryBarriers = bufBarriers.data(); + UnwrappedDependencyInfo.bufferMemoryBarrierCount = (uint32_t)bufBarriers.size(); + UnwrappedDependencyInfo.pImageMemoryBarriers = imgBarriers.data(); + UnwrappedDependencyInfo.imageMemoryBarrierCount = (uint32_t)imgBarriers.size(); + + if(loading) + { + for(uint32_t i = 0; i < depInfo.imageMemoryBarrierCount; i++) + { + const VkImageMemoryBarrier2 &b = depInfo.pImageMemoryBarriers[i]; + if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED && + b.newLayout != VK_IMAGE_LAYOUT_UNDEFINED) + AddEventResourceUsage(GetResID(b.image), ResourceUsage::Discard); + } + } + + if(loading && evIdx == 0) { bool descBarrier = false; @@ -1375,8 +1351,8 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents2(SerialiserType &ser, VkCommandBuf continue; } - if(!IsLoading(m_State) && (barrier.oldLayout == VK_IMAGE_LAYOUT_PREINITIALIZED || - barrier.oldLayout == VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT)) + if(!loading && (barrier.oldLayout == VK_IMAGE_LAYOUT_PREINITIALIZED || + barrier.oldLayout == VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT)) { // This is a transition from PRENITIALIZED, but we've already done this barrier once // (when loading); Since we couldn't transition back to PREINITIALIZED, we instead left @@ -1393,7 +1369,7 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents2(SerialiserType &ser, VkCommandBuf ObjDisp(commandBuffer)->CmdSetEvent2(Unwrap(commandBuffer), ev, &UnwrappedDependencyInfo); ObjDisp(commandBuffer)->CmdWaitEvents2(Unwrap(commandBuffer), 1, &ev, &UnwrappedDependencyInfo); - if(m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest) + if(!loading && m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest) { for(uint32_t i = 0; i < depInfo.imageMemoryBarrierCount; i++) {