Refactor context record/id

This commit is contained in:
baldurk
2015-09-16 18:11:36 +02:00
parent 9b8431066a
commit 55073df153
2 changed files with 37 additions and 49 deletions
+34 -45
View File
@@ -364,23 +364,21 @@ WrappedVulkan::WrappedVulkan(const char *logFilename)
RDCEraseEl(m_FakeBBExtent);
m_ResourceManager = new VulkanResourceManager(m_State, m_pSerialiser, this);
m_ContextResourceID = GetResourceManager()->RegisterResource(VkResource(eResSpecial, VK_NULL_HANDLE));
m_HeaderChunk = NULL;
if(!RenderDoc::Inst().IsReplayApp())
{
m_ContextRecord = GetResourceManager()->AddResourceRecord(m_ContextResourceID);
m_ContextRecord->DataInSerialiser = false;
m_ContextRecord->Length = 0;
m_ContextRecord->NumSubResources = 0;
m_ContextRecord->SpecialResource = true;
m_ContextRecord->SubResources = NULL;
m_FrameCaptureRecord = GetResourceManager()->AddResourceRecord(ResourceIDGen::GetNewUniqueID());
m_FrameCaptureRecord->DataInSerialiser = false;
m_FrameCaptureRecord->Length = 0;
m_FrameCaptureRecord->NumSubResources = 0;
m_FrameCaptureRecord->SpecialResource = true;
m_FrameCaptureRecord->SubResources = NULL;
}
else
{
m_ContextRecord = NULL;
m_FrameCaptureRecord = NULL;
ResourceIDGen::SetReplayResourceIDs();
}
@@ -934,21 +932,21 @@ VkResult WrappedVulkan::vkDestroyDevice(VkDevice device)
{
// VKTODOHIGH m_InstanceRecord
if(m_ContextRecord)
if(m_FrameCaptureRecord)
{
RDCASSERT(m_ContextRecord->GetRefCount() == 1);
m_ContextRecord->Delete(GetResourceManager());
m_ContextRecord = NULL;
RDCASSERT(m_FrameCaptureRecord->GetRefCount() == 1);
m_FrameCaptureRecord->Delete(GetResourceManager());
m_FrameCaptureRecord = NULL;
}
m_ResourceManager->Shutdown();
m_ContextRecord = GetResourceManager()->AddResourceRecord(m_ContextResourceID);
m_ContextRecord->DataInSerialiser = false;
m_ContextRecord->Length = 0;
m_ContextRecord->NumSubResources = 0;
m_ContextRecord->SpecialResource = true;
m_ContextRecord->SubResources = NULL;
m_FrameCaptureRecord = GetResourceManager()->AddResourceRecord(ResourceIDGen::GetNewUniqueID());
m_FrameCaptureRecord->DataInSerialiser = false;
m_FrameCaptureRecord->Length = 0;
m_FrameCaptureRecord->NumSubResources = 0;
m_FrameCaptureRecord->SpecialResource = true;
m_FrameCaptureRecord->SubResources = NULL;
}
if(m_PhysicalReplayData[i].cmd != VK_NULL_HANDLE)
@@ -1397,7 +1395,7 @@ VkResult WrappedVulkan::vkQueueSubmit(
SCOPED_SERIALISE_CONTEXT(QUEUE_SUBMIT);
Serialise_vkQueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
m_ContextRecord->AddChunk(scope.Get());
m_FrameCaptureRecord->AddChunk(scope.Get());
}
for(uint32_t i=0; i < cmdBufferCount; i++)
@@ -1521,7 +1519,7 @@ VkResult WrappedVulkan::vkQueueWaitIdle(VkQueue queue)
SCOPED_SERIALISE_CONTEXT(QUEUE_WAIT_IDLE);
Serialise_vkQueueWaitIdle(queue);
m_ContextRecord->AddChunk(scope.Get());
m_FrameCaptureRecord->AddChunk(scope.Get());
GetResourceManager()->MarkResourceFrameReferenced(MakeRes(queue), eFrameRef_Read);
}
@@ -1549,7 +1547,7 @@ VkResult WrappedVulkan::vkDeviceWaitIdle(VkDevice device)
SCOPED_SERIALISE_CONTEXT(DEVICE_WAIT_IDLE);
Serialise_vkDeviceWaitIdle(device);
m_ContextRecord->AddChunk(scope.Get());
m_FrameCaptureRecord->AddChunk(scope.Get());
}
return ret;
@@ -1834,7 +1832,7 @@ VkResult WrappedVulkan::vkBindBufferMemory(
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(chunk);
m_FrameCaptureRecord->AddChunk(chunk);
GetResourceManager()->MarkResourceFrameReferenced(MakeRes(buffer), eFrameRef_Write);
GetResourceManager()->MarkResourceFrameReferenced(MakeRes(mem), eFrameRef_Read);
@@ -1894,7 +1892,7 @@ VkResult WrappedVulkan::vkBindImageMemory(
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(chunk);
m_FrameCaptureRecord->AddChunk(chunk);
GetResourceManager()->MarkResourceFrameReferenced(MakeRes(image), eFrameRef_Write);
GetResourceManager()->MarkResourceFrameReferenced(MakeRes(mem), eFrameRef_Read);
@@ -3611,7 +3609,7 @@ VkResult WrappedVulkan::vkUpdateDescriptorSets(
SCOPED_SERIALISE_CONTEXT(UPDATE_DESC_SET);
Serialise_vkUpdateDescriptorSets(device, 1, &pDescriptorWrites[i], 0, NULL);
m_ContextRecord->AddChunk(scope.Get());
m_FrameCaptureRecord->AddChunk(scope.Get());
}
// don't have to mark referenced any of the resources pointed to by the descriptor set - that's handled
@@ -3625,7 +3623,7 @@ VkResult WrappedVulkan::vkUpdateDescriptorSets(
SCOPED_SERIALISE_CONTEXT(UPDATE_DESC_SET);
Serialise_vkUpdateDescriptorSets(device, 0, NULL, 1, &pDescriptorCopies[i]);
m_ContextRecord->AddChunk(scope.Get());
m_FrameCaptureRecord->AddChunk(scope.Get());
}
// don't have to mark referenced any of the resources pointed to by the descriptor sets - that's handled
@@ -5699,7 +5697,7 @@ void WrappedVulkan::Serialise_CaptureScope(uint64_t offset)
record.frameInfo.fileOffset = offset;
record.frameInfo.firstEvent = 1;//m_pImmediateContext->GetEventID();
record.frameInfo.frameNumber = FrameNumber;
record.frameInfo.immContextId = GetResourceManager()->GetOriginalID(m_ContextResourceID);
record.frameInfo.immContextId = ResourceId();
m_FrameRecord.push_back(record);
GetResourceManager()->CreateInitialContents();
@@ -5731,7 +5729,7 @@ void WrappedVulkan::EndCaptureFrame(VkImage presentImage)
delete call;
}
m_ContextRecord->AddChunk(scope.Get());
m_FrameCaptureRecord->AddChunk(scope.Get());
}
void WrappedVulkan::AttemptCapture()
@@ -5739,19 +5737,19 @@ void WrappedVulkan::AttemptCapture()
m_State = WRITING_CAPFRAME;
{
RDCDEBUG("Immediate Context %llu Attempting capture", GetContextResourceID());
RDCDEBUG("Attempting capture");
//m_SuccessfulCapture = true;
m_ContextRecord->LockChunks();
while(m_ContextRecord->HasChunks())
m_FrameCaptureRecord->LockChunks();
while(m_FrameCaptureRecord->HasChunks())
{
Chunk *chunk = m_ContextRecord->GetLastChunk();
Chunk *chunk = m_FrameCaptureRecord->GetLastChunk();
SAFE_DELETE(chunk);
m_ContextRecord->PopChunk();
m_FrameCaptureRecord->PopChunk();
}
m_ContextRecord->UnlockChunks();
m_FrameCaptureRecord->UnlockChunks();
}
}
@@ -7205,8 +7203,6 @@ VkResult WrappedVulkan::vkQueuePresentWSI(
{
SCOPED_SERIALISE_CONTEXT(DEVICE_INIT);
SERIALISE_ELEMENT(ResourceId, immContextId, m_ContextResourceID);
m_pFileSerialiser->Insert(scope.Get(true));
}
@@ -7248,7 +7244,7 @@ VkResult WrappedVulkan::vkQueuePresentWSI(
}
recordlist.clear();
m_ContextRecord->Insert(recordlist);
m_FrameCaptureRecord->Insert(recordlist);
RDCDEBUG("Flushing %u chunks to file serialiser from context record", (uint32_t)recordlist.size());
@@ -7693,9 +7689,6 @@ void WrappedVulkan::ProcessChunk(uint64_t offset, VulkanChunkType context)
{
case DEVICE_INIT:
{
SERIALISE_ELEMENT(ResourceId, immContextId, ResourceId());
GetResourceManager()->AddLiveResource(immContextId, VkResource(eResSpecial, VK_NULL_HANDLE));
break;
}
case ENUM_PHYSICALS:
@@ -8108,8 +8101,6 @@ void WrappedVulkan::DebugCallback(
void WrappedVulkan::AddDrawcall(FetchDrawcall d, bool hasEvents)
{
if(d.context == ResourceId()) d.context = GetResourceManager()->GetOriginalID(m_ContextResourceID);
m_AddedDrawcall = true;
WrappedVulkan *context = this;
@@ -8168,11 +8159,9 @@ void WrappedVulkan::AddDrawcall(FetchDrawcall d, bool hasEvents)
void WrappedVulkan::AddEvent(VulkanChunkType type, string description, ResourceId ctx)
{
if(ctx == ResourceId()) ctx = GetResourceManager()->GetOriginalID(m_ContextResourceID);
FetchAPIEvent apievent;
apievent.context = ctx;
apievent.context = ResourceId();
apievent.fileOffset = m_CurChunkOffset;
apievent.eventID = m_CurEventID;
+3 -4
View File
@@ -123,8 +123,7 @@ private:
VkResourceRecord *m_InstanceRecord;
ResourceId m_ContextResourceID;
VkResourceRecord *m_ContextRecord;
VkResourceRecord *m_FrameCaptureRecord;
Chunk *m_HeaderChunk;
// we record the command buffer records so we can insert them
@@ -397,7 +396,7 @@ private:
void ContextReplayLog(LogState readType, uint32_t startEventID, uint32_t endEventID, bool partial);
void ContextProcessChunk(uint64_t offset, VulkanChunkType chunk, bool forceExecute);
void AddDrawcall(FetchDrawcall d, bool hasEvents);
void AddEvent(VulkanChunkType type, string description, ResourceId ctx = ResourceId());
void AddEvent(VulkanChunkType type, string description);
// no copy semantics
WrappedVulkan(const WrappedVulkan &);
@@ -429,7 +428,7 @@ public:
WrappedVulkan(const char *logFilename);
~WrappedVulkan();
ResourceId GetContextResourceID() { return m_ContextResourceID; }
ResourceId GetContextResourceID() { return m_FrameCaptureRecord->GetResourceID(); }
VulkanResourceManager *GetResourceManager() { return m_ResourceManager; }