From d253335f3e03a634a4ae1561fb780c2c686ce57b Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 21 Oct 2015 13:26:42 +0200 Subject: [PATCH] Minor cleanup and gather all the global maps together, for refactoring --- renderdoc/driver/vulkan/vk_core.h | 31 +++++++++---------- .../driver/vulkan/wrappers/vk_queue_funcs.cpp | 12 +++---- .../driver/vulkan/wrappers/vk_wsi_funcs.cpp | 6 +++- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 227dc0341..0990d4e4f 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -142,6 +142,7 @@ private: // much easier to process (we will enforce/display ordering // by queue submit order anyway, so it's OK to lose the record // order). + Threading::CriticalSection m_CmdBufferRecordsLock; vector m_CmdBufferRecords; VulkanResourceManager *m_ResourceManager; @@ -150,8 +151,6 @@ private: uint32_t m_FrameCounter; - uint64_t m_CurFileSize; - PerformanceTimer m_FrameTimer; vector m_FrameTimes; double m_TotalTime, m_AvgFrametime, m_MinFrametime, m_MaxFrametime; @@ -214,15 +213,6 @@ private: ResourceId m_FakeBBImgId; - // VKTODO all these m_*Info things need to be locked and ensure we only access - // them in slow path functions like creation, or just moved elsewhere like inside - // the wrapped objects - // VKTODOHIGH all of these need to be locked - map m_MemoryInfo; - map m_ImageInfo; - map m_BufferMemBinds; - map m_ObjectNames; - struct CmdBufferInfo { VkDevice device; @@ -239,7 +229,6 @@ private: uint32_t curEventID; // current event ID while reading or executing uint32_t drawCount; // similar to above }; - map m_CmdBufferInfo; // on replay, the current command buffer for the last chunk we // handled. @@ -374,7 +363,6 @@ private: }; vector images; }; - map m_SwapChainInfo; // this info is stored in the record on capture, but we // need it on replay too @@ -383,7 +371,6 @@ private: ResourceId layout; vector currentBindings; }; - map m_DescriptorSetInfo; struct ShaderModuleInfo { @@ -391,7 +378,6 @@ private: ShaderReflection reflTemplate; ShaderBindpointMapping mapping; }; - map m_ShaderModuleInfo; struct ShaderInfo { @@ -399,11 +385,22 @@ private: ShaderReflection refl; ShaderBindpointMapping mapping; }; + + // VKTODO all these m_*Info things need to be locked and ensure we only access + // them in slow path functions like creation, or just moved elsewhere like inside + // the wrapped objects + // VKTODOHIGH all of these need to be locked + map m_MemoryInfo; + map m_ImageInfo; + map m_BufferMemBinds; + map m_ObjectNames; + map m_CmdBufferInfo; + map m_SwapChainInfo; + map m_DescriptorSetInfo; + map m_ShaderModuleInfo; map m_ShaderInfo; VulkanCreationInfo m_CreationInfo; - - set m_SubmittedFences; static const char *GetChunkName(uint32_t idx); diff --git a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp index 06fe80eb1..01910a1d5 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp @@ -159,8 +159,6 @@ bool WrappedVulkan::Serialise_vkQueueSubmit( if(m_State == READING) { - m_SubmittedFences.insert(fenceId); - ObjDisp(queue)->QueueSubmit(Unwrap(queue), numCmds, cmds, Unwrap(fence)); for(uint32_t i=0; i < numCmds; i++) @@ -272,8 +270,6 @@ bool WrappedVulkan::Serialise_vkQueueSubmit( RDCASSERT(trimmedCmds.size() > 0); - m_SubmittedFences.insert(fenceId); - ObjDisp(queue)->QueueSubmit(Unwrap(queue), (uint32_t)trimmedCmds.size(), &trimmedCmds[0], Unwrap(fence)); for(uint32_t i=0; i < numCmds; i++) @@ -284,8 +280,6 @@ bool WrappedVulkan::Serialise_vkQueueSubmit( } else { - m_SubmittedFences.insert(fenceId); - ObjDisp(queue)->QueueSubmit(Unwrap(queue), numCmds, cmds, Unwrap(fence)); for(uint32_t i=0; i < numCmds; i++) @@ -387,7 +381,11 @@ VkResult WrappedVulkan::vkQueueSubmit( if(fence != VK_NULL_HANDLE) GetResourceManager()->MarkResourceFrameReferenced(GetResID(fence), eFrameRef_Read); - m_CmdBufferRecords.push_back(record->bakedCommands); + { + SCOPED_LOCK(m_CmdBufferRecordsLock); + m_CmdBufferRecords.push_back(record->bakedCommands); + } + record->bakedCommands->AddRef(); } diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index fac27f11e..bc4229ac4 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -916,6 +916,10 @@ VkResult WrappedVulkan::vkQueuePresentKHR( m_pFileSerialiser->Insert(m_HeaderChunk); } + // don't need to lock access to m_CmdBufferRecords as we are no longer + // in capframe (the transition is thread-protected) so nothing will be + // pushed to the vector + { RDCDEBUG("Flushing %u command buffer records to file serialiser", (uint32_t)m_CmdBufferRecords.size()); @@ -940,7 +944,7 @@ VkResult WrappedVulkan::vkQueuePresentKHR( RDCDEBUG("Done"); } - m_CurFileSize += m_pFileSerialiser->FlushToDisk(); + m_pFileSerialiser->FlushToDisk(); RenderDoc::Inst().SuccessfullyWrittenLog();