Update VulkanResourceManager to newest code

This commit is contained in:
baldurk
2017-10-05 12:50:56 +01:00
parent 6d360d3228
commit 51e62a447a
2 changed files with 30 additions and 23 deletions
+21 -16
View File
@@ -248,31 +248,29 @@ void VulkanResourceManager::MergeBarriers(vector<pair<ResourceId, ImageRegionSta
TRDBG("Post-merge, there are %u states", (uint32_t)dststates.size());
}
void VulkanResourceManager::SerialiseImageStates(map<ResourceId, ImageLayouts> &states,
vector<VkImageMemoryBarrier> &barriers)
template <typename SerialiserType>
void VulkanResourceManager::SerialiseImageStates(SerialiserType &ser,
std::map<ResourceId, ImageLayouts> &states,
std::vector<VkImageMemoryBarrier> &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<pair<ResourceId, ImageRegionState> > vec;
std::vector<pair<ResourceId, ImageRegionState> > 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<ResourceId, ImageLayouts> &
}
}
if(m_State >= WRITING)
if(ser.IsWriting())
srcit++;
}
@@ -351,6 +349,13 @@ void VulkanResourceManager::SerialiseImageStates(map<ResourceId, ImageLayouts> &
}
}
template void VulkanResourceManager::SerialiseImageStates(ReadSerialiser &ser,
std::map<ResourceId, ImageLayouts> &states,
std::vector<VkImageMemoryBarrier> &barriers);
template void VulkanResourceManager::SerialiseImageStates(WriteSerialiser &ser,
std::map<ResourceId, ImageLayouts> &states,
std::vector<VkImageMemoryBarrier> &barriers);
void VulkanResourceManager::MarkSparseMapReferenced(SparseMapping *sparse)
{
if(sparse == NULL)
+9 -7
View File
@@ -37,8 +37,8 @@ class VulkanResourceManager
: public ResourceManager<WrappedVkRes *, TypedRealHandle, VkResourceRecord>
{
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<pair<ResourceId, ImageRegionState> > &states,
map<ResourceId, ImageLayouts> &layouts);
void SerialiseImageStates(map<ResourceId, ImageLayouts> &states,
vector<VkImageMemoryBarrier> &barriers);
template <typename SerialiserType>
void SerialiseImageStates(SerialiserType &ser, std::map<ResourceId, ImageLayouts> &states,
std::vector<VkImageMemoryBarrier> &barriers);
ResourceId GetID(WrappedVkRes *res)
{
@@ -143,11 +144,11 @@ public:
typename UnwrapHelper<realtype>::Outer *wrapped =
new typename UnwrapHelper<realtype>::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;
};