mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-23 15:06:32 +00:00
Begin handling partial replay of both primary and secondary cmd buffers
This commit is contained in:
@@ -246,7 +246,7 @@ class WrappedID3D12CommandQueue : public ID3D12CommandQueue,
|
||||
}
|
||||
|
||||
bool ShouldRerecordCmd(ResourceId cmdid);
|
||||
bool InRerecordRange();
|
||||
bool InRerecordRange(ResourceId cmdid);
|
||||
ID3D12GraphicsCommandList *RerecordCmdList(ResourceId cmdid);
|
||||
|
||||
void ProcessChunk(uint64_t offset, D3D12ChunkType context);
|
||||
|
||||
@@ -283,12 +283,6 @@ WrappedVulkan::WrappedVulkan(const char *logFilename) : m_RenderState(&m_Creatio
|
||||
|
||||
m_LastCmdBufferID = ResourceId();
|
||||
|
||||
m_PartialReplayData.renderPassActive = false;
|
||||
m_PartialReplayData.resultPartialCmdBuffer = VK_NULL_HANDLE;
|
||||
m_PartialReplayData.outsideCmdBuffer = VK_NULL_HANDLE;
|
||||
m_PartialReplayData.partialParent = ResourceId();
|
||||
m_PartialReplayData.baseEvent = 0;
|
||||
|
||||
m_DrawcallStack.push_back(&m_ParentDrawcall);
|
||||
|
||||
m_SetDeviceLoaderData = NULL;
|
||||
@@ -1629,12 +1623,15 @@ void WrappedVulkan::ContextReplayLog(LogState readType, uint32_t startEventID, u
|
||||
|
||||
m_CleanupEvents.clear();
|
||||
|
||||
if(m_PartialReplayData.resultPartialCmdBuffer != VK_NULL_HANDLE)
|
||||
for(int p = 0; p < ePartialNum; p++)
|
||||
{
|
||||
// deliberately call our own function, so this is destroyed as a wrapped object
|
||||
vkFreeCommandBuffers(m_PartialReplayData.partialDevice, m_PartialReplayData.resultPartialCmdPool,
|
||||
1, &m_PartialReplayData.resultPartialCmdBuffer);
|
||||
m_PartialReplayData.resultPartialCmdBuffer = VK_NULL_HANDLE;
|
||||
if(m_Partial[p].resultPartialCmdBuffer != VK_NULL_HANDLE)
|
||||
{
|
||||
// deliberately call our own function, so this is destroyed as a wrapped object
|
||||
vkFreeCommandBuffers(m_Partial[p].partialDevice, m_Partial[p].resultPartialCmdPool, 1,
|
||||
&m_Partial[p].resultPartialCmdBuffer);
|
||||
m_Partial[p].resultPartialCmdBuffer = VK_NULL_HANDLE;
|
||||
}
|
||||
}
|
||||
|
||||
for(auto it = m_RerecordCmds.begin(); it != m_RerecordCmds.end(); ++it)
|
||||
@@ -2123,10 +2120,10 @@ void WrappedVulkan::ReplayLog(uint32_t startEventID, uint32_t endEventID, Replay
|
||||
{
|
||||
if(!partial)
|
||||
{
|
||||
m_PartialReplayData.renderPassActive = false;
|
||||
RDCASSERT(m_PartialReplayData.resultPartialCmdBuffer == VK_NULL_HANDLE);
|
||||
m_PartialReplayData.partialParent = ResourceId();
|
||||
m_PartialReplayData.baseEvent = 0;
|
||||
RDCASSERT(m_Partial[Primary].resultPartialCmdBuffer == VK_NULL_HANDLE);
|
||||
RDCASSERT(m_Partial[Secondary].resultPartialCmdBuffer == VK_NULL_HANDLE);
|
||||
m_Partial[Primary].Reset();
|
||||
m_Partial[Secondary].Reset();
|
||||
m_RenderState = VulkanRenderState(&m_CreationInfo);
|
||||
m_RenderState.m_ResourceManager = GetResourceManager();
|
||||
}
|
||||
@@ -2141,7 +2138,7 @@ void WrappedVulkan::ReplayLog(uint32_t startEventID, uint32_t endEventID, Replay
|
||||
// has chosen a subsection that lies within a command buffer
|
||||
if(partial)
|
||||
{
|
||||
VkCommandBuffer cmd = m_PartialReplayData.outsideCmdBuffer = GetNextCmd();
|
||||
VkCommandBuffer cmd = m_Partial[Primary].outsideCmdBuffer = GetNextCmd();
|
||||
|
||||
VkCommandBufferBeginInfo beginInfo = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, NULL,
|
||||
VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT};
|
||||
@@ -2149,10 +2146,10 @@ void WrappedVulkan::ReplayLog(uint32_t startEventID, uint32_t endEventID, Replay
|
||||
vkr = ObjDisp(cmd)->BeginCommandBuffer(Unwrap(cmd), &beginInfo);
|
||||
RDCASSERTEQUAL(vkr, VK_SUCCESS);
|
||||
|
||||
rpWasActive = m_PartialReplayData.renderPassActive;
|
||||
rpWasActive = m_Partial[Primary].renderPassActive;
|
||||
|
||||
// if a render pass was active, begin it and set up the partial replay state
|
||||
if(m_PartialReplayData.renderPassActive)
|
||||
if(m_Partial[Primary].renderPassActive)
|
||||
m_RenderState.BeginRenderPassAndApplyState(cmd);
|
||||
// if we had a compute pipeline, need to bind that
|
||||
else if(m_RenderState.compute.pipeline != ResourceId())
|
||||
@@ -2174,25 +2171,25 @@ void WrappedVulkan::ReplayLog(uint32_t startEventID, uint32_t endEventID, Replay
|
||||
else
|
||||
RDCFATAL("Unexpected replay type");
|
||||
|
||||
if(m_PartialReplayData.outsideCmdBuffer != VK_NULL_HANDLE)
|
||||
if(m_Partial[Primary].outsideCmdBuffer != VK_NULL_HANDLE)
|
||||
{
|
||||
VkCommandBuffer cmd = m_PartialReplayData.outsideCmdBuffer;
|
||||
VkCommandBuffer cmd = m_Partial[Primary].outsideCmdBuffer;
|
||||
|
||||
// check if the render pass is active - it could have become active
|
||||
// even if it wasn't before (if the above event was a CmdBeginRenderPass)
|
||||
if(m_PartialReplayData.renderPassActive)
|
||||
if(m_Partial[Primary].renderPassActive)
|
||||
m_RenderState.EndRenderPass(cmd);
|
||||
|
||||
// we might have replayed a CmdBeginRenderPass or CmdEndRenderPass,
|
||||
// but we want to keep the partial replay data state intact, so restore
|
||||
// whether or not a render pass was active.
|
||||
m_PartialReplayData.renderPassActive = rpWasActive;
|
||||
m_Partial[Primary].renderPassActive = rpWasActive;
|
||||
|
||||
ObjDisp(cmd)->EndCommandBuffer(Unwrap(cmd));
|
||||
|
||||
SubmitCmds();
|
||||
|
||||
m_PartialReplayData.outsideCmdBuffer = VK_NULL_HANDLE;
|
||||
m_Partial[Primary].outsideCmdBuffer = VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
#if defined(SINGLE_FLUSH_VALIDATE)
|
||||
@@ -2379,31 +2376,39 @@ VkBool32 WrappedVulkan::DebugCallback(VkDebugReportFlagsEXT flags,
|
||||
|
||||
bool WrappedVulkan::ShouldRerecordCmd(ResourceId cmdid)
|
||||
{
|
||||
if(m_PartialReplayData.outsideCmdBuffer != VK_NULL_HANDLE)
|
||||
if(m_Partial[Primary].outsideCmdBuffer != VK_NULL_HANDLE)
|
||||
return true;
|
||||
|
||||
if(m_DrawcallCallback && m_DrawcallCallback->RecordAllCmds())
|
||||
return true;
|
||||
|
||||
return cmdid == m_PartialReplayData.partialParent;
|
||||
return cmdid == m_Partial[Primary].partialParent || cmdid == m_Partial[Secondary].partialParent;
|
||||
}
|
||||
|
||||
bool WrappedVulkan::InRerecordRange()
|
||||
bool WrappedVulkan::InRerecordRange(ResourceId cmdid)
|
||||
{
|
||||
if(m_PartialReplayData.outsideCmdBuffer != VK_NULL_HANDLE)
|
||||
if(m_Partial[Primary].outsideCmdBuffer != VK_NULL_HANDLE)
|
||||
return true;
|
||||
|
||||
if(m_DrawcallCallback && m_DrawcallCallback->RecordAllCmds())
|
||||
return true;
|
||||
|
||||
return m_BakedCmdBufferInfo[m_PartialReplayData.partialParent].curEventID <=
|
||||
m_LastEventID - m_PartialReplayData.baseEvent;
|
||||
for(int p = 0; p < ePartialNum; p++)
|
||||
{
|
||||
if(cmdid == m_Partial[p].partialParent)
|
||||
{
|
||||
return m_BakedCmdBufferInfo[m_Partial[p].partialParent].curEventID <=
|
||||
m_LastEventID - m_Partial[p].baseEvent;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
VkCommandBuffer WrappedVulkan::RerecordCmdBuf(ResourceId cmdid)
|
||||
VkCommandBuffer WrappedVulkan::RerecordCmdBuf(ResourceId cmdid, PartialReplayIndex partialType)
|
||||
{
|
||||
if(m_PartialReplayData.outsideCmdBuffer != VK_NULL_HANDLE)
|
||||
return m_PartialReplayData.outsideCmdBuffer;
|
||||
if(m_Partial[Primary].outsideCmdBuffer != VK_NULL_HANDLE)
|
||||
return m_Partial[Primary].outsideCmdBuffer;
|
||||
|
||||
if(m_DrawcallCallback && m_DrawcallCallback->RecordAllCmds())
|
||||
{
|
||||
@@ -2414,7 +2419,16 @@ VkCommandBuffer WrappedVulkan::RerecordCmdBuf(ResourceId cmdid)
|
||||
return it->second;
|
||||
}
|
||||
|
||||
return m_PartialReplayData.resultPartialCmdBuffer;
|
||||
if(partialType != ePartialNum)
|
||||
return m_Partial[partialType].resultPartialCmdBuffer;
|
||||
|
||||
for(int p = 0; p < ePartialNum; p++)
|
||||
if(cmdid == m_Partial[p].partialParent)
|
||||
return m_Partial[p].resultPartialCmdBuffer;
|
||||
|
||||
RDCERR("Calling re-record for invalid command buffer id");
|
||||
|
||||
return VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
void WrappedVulkan::AddDrawcall(const FetchDrawcall &d, bool hasEvents)
|
||||
|
||||
@@ -396,8 +396,27 @@ private:
|
||||
};
|
||||
vector<DrawcallUse> m_DrawcallUses;
|
||||
|
||||
enum PartialReplayIndex
|
||||
{
|
||||
Primary,
|
||||
Secondary,
|
||||
ePartialNum
|
||||
};
|
||||
|
||||
struct PartialReplayData
|
||||
{
|
||||
PartialReplayData() { Reset(); }
|
||||
void Reset()
|
||||
{
|
||||
resultPartialCmdPool = VK_NULL_HANDLE;
|
||||
resultPartialCmdBuffer = VK_NULL_HANDLE;
|
||||
partialDevice = VK_NULL_HANDLE;
|
||||
outsideCmdBuffer = VK_NULL_HANDLE;
|
||||
partialParent = ResourceId();
|
||||
baseEvent = 0;
|
||||
renderPassActive = false;
|
||||
}
|
||||
|
||||
// if we're doing a partial replay, by definition only one command
|
||||
// buffer will be partial at any one time. While replaying through
|
||||
// the command buffer chunks, the partial command buffer will be
|
||||
@@ -447,7 +466,7 @@ private:
|
||||
// reach the vkEndCommandBuffer that we also need to end a render
|
||||
// pass.
|
||||
bool renderPassActive;
|
||||
} m_PartialReplayData;
|
||||
} m_Partial[ePartialNum];
|
||||
|
||||
map<ResourceId, VkCommandBuffer> m_RerecordCmds;
|
||||
|
||||
@@ -457,8 +476,8 @@ private:
|
||||
VulkanRenderState m_RenderState;
|
||||
|
||||
bool ShouldRerecordCmd(ResourceId cmdid);
|
||||
bool InRerecordRange();
|
||||
VkCommandBuffer RerecordCmdBuf(ResourceId cmdid);
|
||||
bool InRerecordRange(ResourceId cmdid);
|
||||
VkCommandBuffer RerecordCmdBuf(ResourceId cmdid, PartialReplayIndex partialType = ePartialNum);
|
||||
|
||||
// this info is stored in the record on capture, but we
|
||||
// need it on replay too
|
||||
|
||||
@@ -3913,7 +3913,8 @@ ResourceId VulkanDebugManager::RenderOverlay(ResourceId texid, TextureDisplayOve
|
||||
|
||||
VkImageSubresourceRange subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1};
|
||||
|
||||
if(!m_pDriver->m_PartialReplayData.renderPassActive)
|
||||
// Secondary commands can't have render passes
|
||||
if(!m_pDriver->m_Partial[WrappedVulkan::Primary].renderPassActive)
|
||||
{
|
||||
// don't do anything, no drawcall capable of making overlays selected
|
||||
float black[] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
|
||||
@@ -321,26 +321,33 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
const vector<uint32_t> &baseEvents = m_PartialReplayData.cmdBufferSubmits[bakeId];
|
||||
uint32_t length = m_BakedCmdBufferInfo[bakeId].eventCount;
|
||||
const uint32_t length = m_BakedCmdBufferInfo[bakeId].eventCount;
|
||||
|
||||
bool partial = false;
|
||||
int partialType = ePartialNum;
|
||||
|
||||
for(auto it = baseEvents.begin(); it != baseEvents.end(); ++it)
|
||||
// check for partial execution of this command buffer
|
||||
for(int p = 0; p < ePartialNum; p++)
|
||||
{
|
||||
if(*it <= m_LastEventID && m_LastEventID < (*it + length))
|
||||
const vector<uint32_t> &baseEvents = m_Partial[p].cmdBufferSubmits[bakeId];
|
||||
|
||||
for(auto it = baseEvents.begin(); it != baseEvents.end(); ++it)
|
||||
{
|
||||
RDCDEBUG("vkBegin - partial detected %u < %u < %u, %llu -> %llu", *it, m_LastEventID,
|
||||
*it + length, cmdId, bakeId);
|
||||
if(*it <= m_LastEventID && m_LastEventID < (*it + length))
|
||||
{
|
||||
RDCDEBUG("vkBegin - partial detected %u < %u < %u, %llu -> %llu", *it, m_LastEventID,
|
||||
*it + length, cmdId, bakeId);
|
||||
|
||||
m_PartialReplayData.partialParent = cmdId;
|
||||
m_PartialReplayData.baseEvent = *it;
|
||||
m_PartialReplayData.renderPassActive = false;
|
||||
m_PartialReplayData.partialDevice = device;
|
||||
m_PartialReplayData.resultPartialCmdPool =
|
||||
(VkCommandPool)(uint64_t)GetResourceManager()->GetNonDispWrapper(allocInfo.commandPool);
|
||||
m_Partial[p].partialParent = cmdId;
|
||||
m_Partial[p].baseEvent = *it;
|
||||
m_Partial[p].renderPassActive = false;
|
||||
m_Partial[p].partialDevice = device;
|
||||
m_Partial[p].resultPartialCmdPool =
|
||||
(VkCommandPool)(uint64_t)GetResourceManager()->GetNonDispWrapper(allocInfo.commandPool);
|
||||
|
||||
partial = true;
|
||||
partial = true;
|
||||
partialType = p;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -367,7 +374,7 @@ bool WrappedVulkan::Serialise_vkBeginCommandBuffer(Serialiser *localSerialiser,
|
||||
|
||||
if(partial)
|
||||
{
|
||||
m_PartialReplayData.resultPartialCmdBuffer = cmd;
|
||||
m_Partial[partialType].resultPartialCmdBuffer = cmd;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -519,7 +526,8 @@ bool WrappedVulkan::Serialise_vkEndCommandBuffer(Serialiser *localSerialiser,
|
||||
|
||||
bool recordAll = m_DrawcallCallback && m_DrawcallCallback->RecordAllCmds();
|
||||
|
||||
if(!recordAll && m_PartialReplayData.renderPassActive)
|
||||
if(!recordAll && m_Partial[Primary].partialParent == cmdid &&
|
||||
m_Partial[Primary].renderPassActive)
|
||||
{
|
||||
uint32_t numSubpasses =
|
||||
(uint32_t)m_CreationInfo.m_RenderPass[m_RenderState.renderPass].subpasses.size();
|
||||
@@ -536,7 +544,8 @@ bool WrappedVulkan::Serialise_vkEndCommandBuffer(Serialiser *localSerialiser,
|
||||
// duplicates when it comes time to clean up. See above in vkBeginCommandBuffer
|
||||
m_RerecordCmds.erase(cmdid);
|
||||
|
||||
m_PartialReplayData.partialParent = ResourceId();
|
||||
if(m_Partial[Primary].partialParent == cmdid)
|
||||
m_Partial[Primary].partialParent = ResourceId();
|
||||
}
|
||||
|
||||
m_BakedCmdBufferInfo[cmdid].curEventID = 0;
|
||||
@@ -655,11 +664,11 @@ bool WrappedVulkan::Serialise_vkCmdBeginRenderPass(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
m_PartialReplayData.renderPassActive = true;
|
||||
m_Partial[Primary].renderPassActive = true;
|
||||
ObjDisp(commandBuffer)->CmdBeginRenderPass(Unwrap(commandBuffer), &beginInfo, cont);
|
||||
|
||||
m_RenderState.subpass = 0;
|
||||
@@ -752,7 +761,7 @@ bool WrappedVulkan::Serialise_vkCmdNextSubpass(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
@@ -841,7 +850,7 @@ bool WrappedVulkan::Serialise_vkCmdExecuteCommands(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
@@ -919,11 +928,11 @@ bool WrappedVulkan::Serialise_vkCmdEndRenderPass(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
m_PartialReplayData.renderPassActive = false;
|
||||
m_Partial[Primary].renderPassActive = false;
|
||||
ObjDisp(commandBuffer)->CmdEndRenderPass(Unwrap(commandBuffer));
|
||||
}
|
||||
}
|
||||
@@ -988,7 +997,7 @@ bool WrappedVulkan::Serialise_vkCmdBindPipeline(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
pipeline = GetResourceManager()->GetLiveHandle<VkPipeline>(pipeid);
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
@@ -1133,7 +1142,7 @@ bool WrappedVulkan::Serialise_vkCmdBindDescriptorSets(
|
||||
{
|
||||
layout = GetResourceManager()->GetLiveHandle<VkPipelineLayout>(layoutid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
@@ -1313,7 +1322,7 @@ bool WrappedVulkan::Serialise_vkCmdBindVertexBuffers(Serialiser *localSerialiser
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -1399,7 +1408,7 @@ bool WrappedVulkan::Serialise_vkCmdBindIndexBuffer(Serialiser *localSerialiser,
|
||||
{
|
||||
buffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)->CmdBindIndexBuffer(Unwrap(commandBuffer), Unwrap(buffer), offs, idxType);
|
||||
@@ -1471,7 +1480,7 @@ bool WrappedVulkan::Serialise_vkCmdUpdateBuffer(Serialiser *localSerialiser,
|
||||
{
|
||||
destBuffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -1546,7 +1555,7 @@ bool WrappedVulkan::Serialise_vkCmdFillBuffer(Serialiser *localSerialiser,
|
||||
{
|
||||
destBuffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)->CmdFillBuffer(Unwrap(commandBuffer), Unwrap(destBuffer), offs, sz, d);
|
||||
@@ -1614,7 +1623,7 @@ bool WrappedVulkan::Serialise_vkCmdPushConstants(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
layout = GetResourceManager()->GetLiveHandle<VkPipelineLayout>(layid);
|
||||
@@ -1717,7 +1726,7 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier(
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -1835,7 +1844,7 @@ bool WrappedVulkan::Serialise_vkCmdWriteTimestamp(Serialiser *localSerialiser,
|
||||
{
|
||||
queryPool = GetResourceManager()->GetLiveHandle<VkQueryPool>(poolid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)->CmdWriteTimestamp(Unwrap(commandBuffer), stage, Unwrap(queryPool), q);
|
||||
@@ -1900,7 +1909,7 @@ bool WrappedVulkan::Serialise_vkCmdCopyQueryPoolResults(
|
||||
queryPool = GetResourceManager()->GetLiveHandle<VkQueryPool>(qid);
|
||||
destBuffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -1978,7 +1987,7 @@ bool WrappedVulkan::Serialise_vkCmdBeginQuery(Serialiser *localSerialiser,
|
||||
{
|
||||
queryPool = GetResourceManager()->GetLiveHandle<VkQueryPool>(qid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)->CmdBeginQuery(Unwrap(commandBuffer), Unwrap(queryPool), q, f);
|
||||
@@ -2033,7 +2042,7 @@ bool WrappedVulkan::Serialise_vkCmdEndQuery(Serialiser *localSerialiser,
|
||||
{
|
||||
queryPool = GetResourceManager()->GetLiveHandle<VkQueryPool>(qid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)->CmdEndQuery(Unwrap(commandBuffer), Unwrap(queryPool), q);
|
||||
@@ -2089,7 +2098,7 @@ bool WrappedVulkan::Serialise_vkCmdResetQueryPool(Serialiser *localSerialiser,
|
||||
{
|
||||
queryPool = GetResourceManager()->GetLiveHandle<VkQueryPool>(qid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)->CmdResetQueryPool(Unwrap(commandBuffer), Unwrap(queryPool), first, count);
|
||||
|
||||
@@ -42,7 +42,7 @@ bool WrappedVulkan::Serialise_vkCmdDraw(Serialiser *localSerialiser, VkCommandBu
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
@@ -127,7 +127,7 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndexed(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
@@ -219,7 +219,7 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndirect(Serialiser *localSerialiser,
|
||||
{
|
||||
buffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
@@ -328,7 +328,7 @@ bool WrappedVulkan::Serialise_vkCmdDrawIndexedIndirect(Serialiser *localSerialis
|
||||
{
|
||||
buffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
@@ -435,7 +435,7 @@ bool WrappedVulkan::Serialise_vkCmdDispatch(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
@@ -514,7 +514,7 @@ bool WrappedVulkan::Serialise_vkCmdDispatchIndirect(Serialiser *localSerialiser,
|
||||
{
|
||||
buffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
@@ -622,7 +622,7 @@ bool WrappedVulkan::Serialise_vkCmdBlitImage(Serialiser *localSerialiser,
|
||||
srcImage = GetResourceManager()->GetLiveHandle<VkImage>(srcid);
|
||||
destImage = GetResourceManager()->GetLiveHandle<VkImage>(dstid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -737,7 +737,7 @@ bool WrappedVulkan::Serialise_vkCmdResolveImage(Serialiser *localSerialiser,
|
||||
srcImage = GetResourceManager()->GetLiveHandle<VkImage>(srcid);
|
||||
destImage = GetResourceManager()->GetLiveHandle<VkImage>(dstid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -852,7 +852,7 @@ bool WrappedVulkan::Serialise_vkCmdCopyImage(Serialiser *localSerialiser,
|
||||
srcImage = GetResourceManager()->GetLiveHandle<VkImage>(srcid);
|
||||
destImage = GetResourceManager()->GetLiveHandle<VkImage>(dstid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -967,7 +967,7 @@ bool WrappedVulkan::Serialise_vkCmdCopyBufferToImage(Serialiser *localSerialiser
|
||||
srcBuffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
destImage = GetResourceManager()->GetLiveHandle<VkImage>(imgid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -1073,7 +1073,7 @@ bool WrappedVulkan::Serialise_vkCmdCopyImageToBuffer(Serialiser *localSerialiser
|
||||
srcImage = GetResourceManager()->GetLiveHandle<VkImage>(imgid);
|
||||
destBuffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -1180,7 +1180,7 @@ bool WrappedVulkan::Serialise_vkCmdCopyBuffer(Serialiser *localSerialiser,
|
||||
srcBuffer = GetResourceManager()->GetLiveHandle<VkBuffer>(srcid);
|
||||
destBuffer = GetResourceManager()->GetLiveHandle<VkBuffer>(dstid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -1296,7 +1296,7 @@ bool WrappedVulkan::Serialise_vkCmdClearColorImage(Serialiser *localSerialiser,
|
||||
{
|
||||
image = GetResourceManager()->GetLiveHandle<VkImage>(imgid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -1384,7 +1384,7 @@ bool WrappedVulkan::Serialise_vkCmdClearDepthStencilImage(
|
||||
{
|
||||
image = GetResourceManager()->GetLiveHandle<VkImage>(imgid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)
|
||||
@@ -1475,7 +1475,7 @@ bool WrappedVulkan::Serialise_vkCmdClearAttachments(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(commandBuffer)->CmdClearAttachments(Unwrap(commandBuffer), acount, atts, rcount, rects);
|
||||
|
||||
@@ -40,7 +40,7 @@ bool WrappedVulkan::Serialise_vkCmdSetViewport(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(cmdBuffer)->CmdSetViewport(Unwrap(cmdBuffer), first, count, views);
|
||||
@@ -100,7 +100,7 @@ bool WrappedVulkan::Serialise_vkCmdSetScissor(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(cmdBuffer)->CmdSetScissor(Unwrap(cmdBuffer), first, count, scissors);
|
||||
@@ -157,7 +157,7 @@ bool WrappedVulkan::Serialise_vkCmdSetLineWidth(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(cmdBuffer)->CmdSetLineWidth(Unwrap(cmdBuffer), width);
|
||||
@@ -209,7 +209,7 @@ bool WrappedVulkan::Serialise_vkCmdSetDepthBias(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(cmdBuffer)->CmdSetDepthBias(Unwrap(cmdBuffer), bias, biasclamp, slope);
|
||||
@@ -273,7 +273,7 @@ bool WrappedVulkan::Serialise_vkCmdSetBlendConstants(Serialiser *localSerialiser
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(cmdBuffer)->CmdSetBlendConstants(Unwrap(cmdBuffer), blendFactor);
|
||||
@@ -324,7 +324,7 @@ bool WrappedVulkan::Serialise_vkCmdSetDepthBounds(Serialiser *localSerialiser,
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(cmdBuffer)->CmdSetDepthBounds(Unwrap(cmdBuffer), mind, maxd);
|
||||
@@ -378,7 +378,7 @@ bool WrappedVulkan::Serialise_vkCmdSetStencilCompareMask(Serialiser *localSerial
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(cmdBuffer)->CmdSetStencilCompareMask(Unwrap(cmdBuffer), face, mask);
|
||||
@@ -435,7 +435,7 @@ bool WrappedVulkan::Serialise_vkCmdSetStencilWriteMask(Serialiser *localSerialis
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(cmdBuffer)->CmdSetStencilWriteMask(Unwrap(cmdBuffer), face, mask);
|
||||
@@ -492,7 +492,7 @@ bool WrappedVulkan::Serialise_vkCmdSetStencilReference(Serialiser *localSerialis
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(cmdBuffer)->CmdSetStencilReference(Unwrap(cmdBuffer), face, mask);
|
||||
|
||||
@@ -232,7 +232,8 @@ bool WrappedVulkan::Serialise_vkQueueSubmit(Serialiser *localSerialiser, VkQueue
|
||||
m_DebugMessages.back().eventID += m_RootEventID;
|
||||
}
|
||||
|
||||
m_PartialReplayData.cmdBufferSubmits[cmdIds[c]].push_back(m_RootEventID);
|
||||
// only primary command buffers can be submitted
|
||||
m_Partial[Primary].cmdBufferSubmits[cmdIds[c]].push_back(m_RootEventID);
|
||||
|
||||
m_RootEventID += cmdBufInfo.eventCount;
|
||||
m_RootDrawcallID += cmdBufInfo.drawCount;
|
||||
@@ -315,12 +316,12 @@ bool WrappedVulkan::Serialise_vkQueueSubmit(Serialiser *localSerialiser, VkQueue
|
||||
|
||||
uint32_t end = eid + m_BakedCmdBufferInfo[cmdIds[c]].eventCount;
|
||||
|
||||
if(eid == m_PartialReplayData.baseEvent)
|
||||
if(eid == m_Partial[Primary].baseEvent)
|
||||
{
|
||||
ResourceId partial = GetResID(RerecordCmdBuf(cmdIds[c]));
|
||||
ResourceId partial = GetResID(RerecordCmdBuf(cmdIds[c], Primary));
|
||||
RDCDEBUG("Queue Submit partial replay of %llu at %u, using %llu", cmdIds[c], eid, partial);
|
||||
trimmedCmdIds.push_back(partial);
|
||||
trimmedCmds.push_back(Unwrap(RerecordCmdBuf(cmdIds[c])));
|
||||
trimmedCmds.push_back(Unwrap(RerecordCmdBuf(cmdIds[c], Primary)));
|
||||
}
|
||||
else if(m_LastEventID >= end)
|
||||
{
|
||||
|
||||
@@ -563,7 +563,7 @@ bool WrappedVulkan::Serialise_vkCmdSetEvent(Serialiser *localSerialiser, VkComma
|
||||
{
|
||||
event = GetResourceManager()->GetLiveHandle<VkEvent>(eid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
ObjDisp(cmdBuffer)->CmdSetEvent(Unwrap(cmdBuffer), Unwrap(event), mask);
|
||||
@@ -619,7 +619,7 @@ bool WrappedVulkan::Serialise_vkCmdResetEvent(Serialiser *localSerialiser, VkCom
|
||||
{
|
||||
event = GetResourceManager()->GetLiveHandle<VkEvent>(eid);
|
||||
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
// ObjDisp(cmdBuffer)->CmdResetEvent(Unwrap(cmdBuffer), Unwrap(event), mask);
|
||||
@@ -711,7 +711,7 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents(
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange())
|
||||
if(ShouldRerecordCmd(cmdid) && InRerecordRange(cmdid))
|
||||
{
|
||||
cmdBuffer = RerecordCmdBuf(cmdid);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user