mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-26 16:36:31 +00:00
Store list ID and relative EID for each drawcall use, for lookup later
This commit is contained in:
@@ -104,7 +104,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_Close()
|
||||
m_Cmd->GetDrawcallStack().pop_back();
|
||||
}
|
||||
|
||||
m_Cmd->m_BakedCmdListInfo[bakeId].BakeFrom(m_Cmd->m_BakedCmdListInfo[CommandList]);
|
||||
m_Cmd->m_BakedCmdListInfo[bakeId].BakeFrom(CommandList, m_Cmd->m_BakedCmdListInfo[CommandList]);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -157,7 +157,7 @@ bool WrappedID3D12CommandQueue::Serialise_ExecuteCommandLists(UINT NumCommandLis
|
||||
|
||||
// insert the baked command list in-line into this list of notes, assigning new event and
|
||||
// drawIDs
|
||||
m_Cmd.InsertDrawsAndRefreshIDs(cmdBufInfo.draw->children);
|
||||
m_Cmd.InsertDrawsAndRefreshIDs(cmdIds[c], cmdBufInfo.draw->children);
|
||||
|
||||
for(size_t e = 0; e < cmdBufInfo.draw->executedCmds.size(); e++)
|
||||
{
|
||||
|
||||
@@ -472,8 +472,20 @@ void WrappedID3D12CommandQueue::ReplayLog(LogState readType, uint32_t startEvent
|
||||
// past the command list records, so can't
|
||||
// skip to the file offset of the first event
|
||||
if(partial)
|
||||
{
|
||||
m_pSerialiser->SetOffset(ev.fileOffset);
|
||||
|
||||
D3D12CommandData::DrawcallUse use(ev.fileOffset, 0);
|
||||
auto it = std::lower_bound(m_Cmd.m_DrawcallUses.begin(), m_Cmd.m_DrawcallUses.end(), use);
|
||||
|
||||
if(it != m_Cmd.m_DrawcallUses.end())
|
||||
{
|
||||
BakedCmdListInfo &cmdInfo =
|
||||
m_Cmd.m_BakedCmdListInfo[m_Cmd.m_BakedCmdListInfo[it->cmdList].parentList];
|
||||
cmdInfo.curEventID = it->relativeEID;
|
||||
}
|
||||
}
|
||||
|
||||
m_Cmd.m_FirstEventID = startEventID;
|
||||
m_Cmd.m_LastEventID = endEventID;
|
||||
}
|
||||
@@ -1075,7 +1087,8 @@ void D3D12CommandData::AddDrawcall(const FetchDrawcall &d, bool hasEvents)
|
||||
RDCERR("Somehow lost drawcall stack!");
|
||||
}
|
||||
|
||||
void D3D12CommandData::InsertDrawsAndRefreshIDs(vector<D3D12DrawcallTreeNode> &cmdBufNodes)
|
||||
void D3D12CommandData::InsertDrawsAndRefreshIDs(ResourceId cmd,
|
||||
vector<D3D12DrawcallTreeNode> &cmdBufNodes)
|
||||
{
|
||||
// assign new drawcall IDs
|
||||
for(size_t i = 0; i < cmdBufNodes.size(); i++)
|
||||
@@ -1100,7 +1113,7 @@ void D3D12CommandData::InsertDrawsAndRefreshIDs(vector<D3D12DrawcallTreeNode> &c
|
||||
m_Events.push_back(n.draw.events[e]);
|
||||
}
|
||||
|
||||
DrawcallUse use(m_Events.back().fileOffset, n.draw.eventID);
|
||||
DrawcallUse use(m_Events.back().fileOffset, n.draw.eventID, cmd, cmdBufNodes[i].draw.eventID);
|
||||
|
||||
// insert in sorted location
|
||||
auto drawit = std::lower_bound(m_DrawcallUses.begin(), m_DrawcallUses.end(), use);
|
||||
|
||||
@@ -123,7 +123,7 @@ struct D3D12DrawcallCallback
|
||||
|
||||
struct BakedCmdListInfo
|
||||
{
|
||||
void BakeFrom(BakedCmdListInfo &parent)
|
||||
void BakeFrom(ResourceId parentID, BakedCmdListInfo &parent)
|
||||
{
|
||||
draw = parent.draw;
|
||||
curEvents = parent.curEvents;
|
||||
@@ -132,6 +132,8 @@ struct BakedCmdListInfo
|
||||
drawCount = parent.drawCount;
|
||||
crackedLists.swap(parent.crackedLists);
|
||||
|
||||
parentList = parentID;
|
||||
|
||||
curEventID = 0;
|
||||
|
||||
parent.draw = NULL;
|
||||
@@ -156,6 +158,8 @@ struct BakedCmdListInfo
|
||||
|
||||
vector<D3D12_RESOURCE_BARRIER> barriers;
|
||||
|
||||
ResourceId parentList;
|
||||
|
||||
D3D12DrawcallTreeNode *draw; // the root draw to copy from when submitting
|
||||
uint32_t eventCount; // how many events are in this cmd list, for quick skipping
|
||||
uint32_t curEventID; // current event ID while reading or executing
|
||||
@@ -243,7 +247,7 @@ struct D3D12CommandData
|
||||
uint32_t baseEvent;
|
||||
} m_Partial[ePartialNum];
|
||||
|
||||
void InsertDrawsAndRefreshIDs(vector<D3D12DrawcallTreeNode> &cmdBufNodes);
|
||||
void InsertDrawsAndRefreshIDs(ResourceId cmd, vector<D3D12DrawcallTreeNode> &cmdBufNodes);
|
||||
|
||||
// this is a list of uint64_t file offset -> uint32_t EIDs of where each
|
||||
// drawcall is used. E.g. the drawcall at offset 873954 is EID 50. If a
|
||||
@@ -252,9 +256,14 @@ struct D3D12CommandData
|
||||
// the first one being the 'primary'
|
||||
struct DrawcallUse
|
||||
{
|
||||
DrawcallUse(uint64_t offs, uint32_t eid) : fileOffset(offs), eventID(eid) {}
|
||||
DrawcallUse(uint64_t offs, uint32_t eid, ResourceId cmd = ResourceId(), uint32_t rel = 0)
|
||||
: fileOffset(offs), cmdList(cmd), eventID(eid), relativeEID(rel)
|
||||
{
|
||||
}
|
||||
uint64_t fileOffset;
|
||||
ResourceId cmdList;
|
||||
uint32_t eventID;
|
||||
uint32_t relativeEID;
|
||||
bool operator<(const DrawcallUse &o) const
|
||||
{
|
||||
if(fileOffset != o.fileOffset)
|
||||
|
||||
Reference in New Issue
Block a user