mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-28 18:31:40 +00:00
Track command buffer and root debug msgs separately. Closes #2435
* This also prevents messages from being populated after initial load to avoid a never-ending increase of messages.
This commit is contained in:
@@ -2278,6 +2278,8 @@ bool WrappedID3D11Device::EndFrameCapture(void *dev, void *wnd)
|
||||
RDCERR("NULL deferred context in resource record!");
|
||||
}
|
||||
|
||||
m_DebugMessages.clear();
|
||||
|
||||
GetResourceManager()->ClearReferencedResources();
|
||||
|
||||
GetResourceManager()->FreeInitialContents();
|
||||
|
||||
@@ -1777,6 +1777,8 @@ void WrappedVulkan::StartFrameCapture(void *dev, void *wnd)
|
||||
frame.captureTime = Timing::GetUnixTimestamp();
|
||||
m_CapturedFrames.push_back(frame);
|
||||
|
||||
m_DebugMessages.clear();
|
||||
|
||||
GetResourceManager()->ClearReferencedResources();
|
||||
GetResourceManager()->ClearReferencedMemory();
|
||||
|
||||
@@ -3977,9 +3979,22 @@ void WrappedVulkan::AddDebugMessage(MessageCategory c, MessageSeverity sv, Messa
|
||||
void WrappedVulkan::AddDebugMessage(DebugMessage msg)
|
||||
{
|
||||
if(IsLoading(m_State))
|
||||
m_EventMessages.push_back(msg);
|
||||
{
|
||||
if(m_LastCmdBufferID != ResourceId())
|
||||
{
|
||||
msg.eventId = m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID;
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].debugMessages.push_back(msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.eventId = m_RootEventID;
|
||||
m_RootEventMessages.push_back(msg);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_DebugMessages.push_back(msg);
|
||||
}
|
||||
}
|
||||
|
||||
void WrappedVulkan::CheckErrorVkResult(VkResult vkr)
|
||||
@@ -4034,7 +4049,7 @@ VkBool32 WrappedVulkan::DebugCallback(MessageSeverity severity, MessageCategory
|
||||
// function calls are replayed after the call to Serialise_DebugMessages() so we don't have a
|
||||
// sync point to gather together all the messages from the sink. But instead we can just push
|
||||
// them directly into the list since we're linearised
|
||||
if(IsReplayMode(m_State))
|
||||
if(IsLoading(m_State))
|
||||
{
|
||||
ProcessDebugMessage(msg);
|
||||
AddDebugMessage(msg);
|
||||
@@ -4678,13 +4693,9 @@ void WrappedVulkan::AddEvent()
|
||||
|
||||
apievent.chunkIndex = uint32_t(m_StructuredFile->chunks.size() - 1);
|
||||
|
||||
for(size_t i = 0; i < m_EventMessages.size(); i++)
|
||||
m_EventMessages[i].eventId = apievent.eventId;
|
||||
|
||||
if(m_LastCmdBufferID != ResourceId())
|
||||
{
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].curEvents.push_back(apievent);
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].debugMessages.append(m_EventMessages);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4692,10 +4703,10 @@ void WrappedVulkan::AddEvent()
|
||||
m_Events.resize(apievent.eventId + 1);
|
||||
m_Events[apievent.eventId] = apievent;
|
||||
|
||||
m_DebugMessages.append(m_EventMessages);
|
||||
}
|
||||
m_DebugMessages.append(m_RootEventMessages);
|
||||
|
||||
m_EventMessages.clear();
|
||||
m_RootEventMessages.clear();
|
||||
}
|
||||
}
|
||||
|
||||
const APIEvent &WrappedVulkan::GetEvent(uint32_t eventId)
|
||||
|
||||
@@ -278,7 +278,7 @@ private:
|
||||
|
||||
// the messages retrieved for the current event (filled in Serialise_vk...() and read in
|
||||
// AddEvent())
|
||||
rdcarray<DebugMessage> m_EventMessages;
|
||||
rdcarray<DebugMessage> m_RootEventMessages;
|
||||
|
||||
// list of all debug messages by EID in the frame
|
||||
rdcarray<DebugMessage> m_DebugMessages;
|
||||
|
||||
@@ -967,7 +967,7 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(SerialiserType &ser, VkComman
|
||||
InsertCommandQueueFamily(BakedCommandBuffer, cmdQueueFamilyIt->second);
|
||||
}
|
||||
|
||||
m_LastCmdBufferID = CommandBuffer;
|
||||
m_LastCmdBufferID = BakedCommandBuffer;
|
||||
|
||||
// when loading, allocate a new resource ID for each push descriptor slot in this command buffer
|
||||
if(IsLoading(m_State))
|
||||
@@ -990,12 +990,12 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(SerialiserType &ser, VkComman
|
||||
}
|
||||
}
|
||||
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].level = m_BakedCmdBufferInfo[BakedCommandBuffer].level =
|
||||
m_BakedCmdBufferInfo[CommandBuffer].level = m_BakedCmdBufferInfo[BakedCommandBuffer].level =
|
||||
AllocateInfo.level;
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].beginFlags =
|
||||
m_BakedCmdBufferInfo[CommandBuffer].beginFlags =
|
||||
m_BakedCmdBufferInfo[BakedCommandBuffer].beginFlags = BeginInfo.flags;
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].markerCount = 0;
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].imageStates.clear();
|
||||
m_BakedCmdBufferInfo[CommandBuffer].markerCount = 0;
|
||||
m_BakedCmdBufferInfo[CommandBuffer].imageStates.clear();
|
||||
m_BakedCmdBufferInfo[BakedCommandBuffer].imageStates.clear();
|
||||
|
||||
VkCommandBufferBeginInfo unwrappedBeginInfo = BeginInfo;
|
||||
@@ -1042,7 +1042,7 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(SerialiserType &ser, VkComman
|
||||
{
|
||||
#if ENABLED(VERBOSE_PARTIAL_REPLAY)
|
||||
RDCDEBUG("vkBegin - partial detected %u < %u < %u, %s -> %s", it->baseEvent,
|
||||
m_LastEventID, it->baseEvent + length, ToStr(m_LastCmdBufferID).c_str(),
|
||||
m_LastEventID, it->baseEvent + length, ToStr(CommandBuffer).c_str(),
|
||||
ToStr(BakedCommandBuffer).c_str());
|
||||
#endif
|
||||
|
||||
@@ -1061,7 +1061,7 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(SerialiserType &ser, VkComman
|
||||
{
|
||||
#if ENABLED(VERBOSE_PARTIAL_REPLAY)
|
||||
RDCDEBUG("vkBegin - full re-record detected %u < %u <= %u, %s -> %s", it->baseEvent,
|
||||
it->baseEvent + length, m_LastEventID, ToStr(m_LastCmdBufferID).c_str(),
|
||||
it->baseEvent + length, m_LastEventID, ToStr(CommandBuffer).c_str(),
|
||||
ToStr(BakedCommandBuffer).c_str());
|
||||
#endif
|
||||
|
||||
@@ -1089,7 +1089,7 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(SerialiserType &ser, VkComman
|
||||
}
|
||||
|
||||
#if ENABLED(VERBOSE_PARTIAL_REPLAY)
|
||||
RDCDEBUG("vkBegin - re-recording %s -> %s into %s", ToStr(m_LastCmdBufferID).c_str(),
|
||||
RDCDEBUG("vkBegin - re-recording %s -> %s into %s", ToStr(CommandBuffer).c_str(),
|
||||
ToStr(BakedCommandBuffer).c_str(), ToStr(GetResID(cmd)).c_str());
|
||||
#endif
|
||||
|
||||
@@ -1103,8 +1103,8 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(SerialiserType &ser, VkComman
|
||||
// (even if it's baked to several command buffers in the frame)
|
||||
// there's no issue with clashes here.
|
||||
m_RerecordCmds[BakedCommandBuffer] = cmd;
|
||||
m_RerecordCmds[m_LastCmdBufferID] = cmd;
|
||||
InsertCommandQueueFamily(BakedCommandBuffer, FindCommandQueueFamily(m_LastCmdBufferID));
|
||||
m_RerecordCmds[CommandBuffer] = cmd;
|
||||
InsertCommandQueueFamily(BakedCommandBuffer, FindCommandQueueFamily(CommandBuffer));
|
||||
|
||||
m_RerecordCmdList.push_back({AllocateInfo.commandPool, cmd});
|
||||
|
||||
@@ -1127,12 +1127,12 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(SerialiserType &ser, VkComman
|
||||
|
||||
// whenever a vkCmd command-building chunk asks for the command buffer, it
|
||||
// will get our baked version.
|
||||
if(GetResourceManager()->HasReplacement(m_LastCmdBufferID))
|
||||
GetResourceManager()->RemoveReplacement(m_LastCmdBufferID);
|
||||
if(GetResourceManager()->HasReplacement(CommandBuffer))
|
||||
GetResourceManager()->RemoveReplacement(CommandBuffer);
|
||||
|
||||
GetResourceManager()->ReplaceResource(m_LastCmdBufferID, BakedCommandBuffer);
|
||||
GetResourceManager()->ReplaceResource(CommandBuffer, BakedCommandBuffer);
|
||||
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID = 0;
|
||||
m_BakedCmdBufferInfo[CommandBuffer].curEventID = 0;
|
||||
m_BakedCmdBufferInfo[BakedCommandBuffer].curEventID = 0;
|
||||
}
|
||||
else
|
||||
@@ -1173,10 +1173,10 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(SerialiserType &ser, VkComman
|
||||
|
||||
// whenever a vkCmd command-building chunk asks for the command buffer, it
|
||||
// will get our baked version.
|
||||
if(GetResourceManager()->HasReplacement(m_LastCmdBufferID))
|
||||
GetResourceManager()->RemoveReplacement(m_LastCmdBufferID);
|
||||
if(GetResourceManager()->HasReplacement(CommandBuffer))
|
||||
GetResourceManager()->RemoveReplacement(CommandBuffer);
|
||||
|
||||
GetResourceManager()->ReplaceResource(m_LastCmdBufferID, BakedCommandBuffer);
|
||||
GetResourceManager()->ReplaceResource(CommandBuffer, BakedCommandBuffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1184,9 +1184,9 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(SerialiserType &ser, VkComman
|
||||
}
|
||||
|
||||
// propagate any name there might be
|
||||
if(m_CreationInfo.m_Names.find(m_LastCmdBufferID) != m_CreationInfo.m_Names.end())
|
||||
if(m_CreationInfo.m_Names.find(CommandBuffer) != m_CreationInfo.m_Names.end())
|
||||
m_CreationInfo.m_Names[GetResourceManager()->GetLiveID(BakedCommandBuffer)] =
|
||||
m_CreationInfo.m_Names[m_LastCmdBufferID];
|
||||
m_CreationInfo.m_Names[CommandBuffer];
|
||||
|
||||
{
|
||||
VulkanActionTreeNode *action = new VulkanActionTreeNode;
|
||||
|
||||
Reference in New Issue
Block a user