From 51e62a447a5764ea81e1e9b361e60237f475517b Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 5 Oct 2017 12:50:56 +0100 Subject: [PATCH] Update VulkanResourceManager to newest code --- renderdoc/driver/vulkan/vk_manager.cpp | 37 +++++++++++++++----------- renderdoc/driver/vulkan/vk_manager.h | 16 ++++++----- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_manager.cpp b/renderdoc/driver/vulkan/vk_manager.cpp index 2a41c78ce..d6335824f 100644 --- a/renderdoc/driver/vulkan/vk_manager.cpp +++ b/renderdoc/driver/vulkan/vk_manager.cpp @@ -248,31 +248,29 @@ void VulkanResourceManager::MergeBarriers(vector &states, - vector &barriers) +template +void VulkanResourceManager::SerialiseImageStates(SerialiserType &ser, + std::map &states, + std::vector &barriers) { - Serialiser *localSerialiser = m_pSerialiser; - - SERIALISE_ELEMENT(uint32_t, NumMems, (uint32_t)states.size()); + SERIALISE_ELEMENT_LOCAL(NumImages, (uint32_t)states.size()); auto srcit = states.begin(); - vector > vec; + std::vector > vec; - for(uint32_t i = 0; i < NumMems; i++) + for(uint32_t i = 0; i < NumImages; i++) { - SERIALISE_ELEMENT(ResourceId, id, srcit->first); - SERIALISE_ELEMENT(uint32_t, NumStates, (uint32_t)srcit->second.subresourceStates.size()); + SERIALISE_ELEMENT_LOCAL(Image, (ResourceId)(srcit->first)); + SERIALISE_ELEMENT_LOCAL(ImageState, (ImageLayouts)(srcit->second)); ResourceId liveid; - if(m_State < WRITING && HasLiveResource(id)) - liveid = GetLiveID(id); + if(IsReplayingAndReading() && HasLiveResource(Image)) + liveid = GetLiveID(Image); - for(uint32_t m = 0; m < NumStates; m++) + if(IsReplayingAndReading() && liveid != ResourceId()) { - SERIALISE_ELEMENT(ImageRegionState, state, srcit->second.subresourceStates[m]); - - if(m_State < WRITING && liveid != ResourceId() && srcit != states.end()) + for(ImageRegionState &state : ImageState.subresourceStates) { VkImageMemoryBarrier t; t.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; @@ -295,7 +293,7 @@ void VulkanResourceManager::SerialiseImageStates(map & } } - if(m_State >= WRITING) + if(ser.IsWriting()) srcit++; } @@ -351,6 +349,13 @@ void VulkanResourceManager::SerialiseImageStates(map & } } +template void VulkanResourceManager::SerialiseImageStates(ReadSerialiser &ser, + std::map &states, + std::vector &barriers); +template void VulkanResourceManager::SerialiseImageStates(WriteSerialiser &ser, + std::map &states, + std::vector &barriers); + void VulkanResourceManager::MarkSparseMapReferenced(SparseMapping *sparse) { if(sparse == NULL) diff --git a/renderdoc/driver/vulkan/vk_manager.h b/renderdoc/driver/vulkan/vk_manager.h index b662e4f4b..5d41119e1 100644 --- a/renderdoc/driver/vulkan/vk_manager.h +++ b/renderdoc/driver/vulkan/vk_manager.h @@ -37,8 +37,8 @@ class VulkanResourceManager : public ResourceManager { public: - VulkanResourceManager(LogState s, Serialiser *ser, WrappedVulkan *core) - : ResourceManager(s, ser), m_Core(core) + VulkanResourceManager(CaptureState state, WrappedVulkan *core) + : ResourceManager(), m_State(state), m_Core(core) { } ~VulkanResourceManager() {} @@ -114,8 +114,9 @@ public: void ApplyBarriers(vector > &states, map &layouts); - void SerialiseImageStates(map &states, - vector &barriers); + template + void SerialiseImageStates(SerialiserType &ser, std::map &states, + std::vector &barriers); ResourceId GetID(WrappedVkRes *res) { @@ -143,11 +144,11 @@ public: typename UnwrapHelper::Outer *wrapped = new typename UnwrapHelper::Outer(obj, id); - SetTableIfDispatchable(m_State >= WRITING, parentObj, m_Core, wrapped); + SetTableIfDispatchable(IsCaptureMode(m_State), parentObj, m_Core, wrapped); AddCurrentResource(id, wrapped); - if(m_State < WRITING) + if(IsReplayMode(m_State)) AddWrapper(wrapped, ToTypedHandle(obj)); obj = realtype((uint64_t)wrapped); @@ -164,7 +165,7 @@ public: if(origit != m_OriginalIDs.end()) EraseLiveResource(origit->second); - if(m_State < WRITING) + if(IsReplayMode(m_State)) ResourceManager::RemoveWrapper(ToTypedHandle(Unwrap(obj))); ResourceManager::ReleaseCurrentResource(id); @@ -268,5 +269,6 @@ private: void Create_InitialState(ResourceId id, WrappedVkRes *live, bool hasData); void Apply_InitialState(WrappedVkRes *live, InitialContentData initial); + CaptureState m_State; WrappedVulkan *m_Core; };