mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-21 06:51:35 +00:00
Tidy up some cases that weren't properly advancing subpasses. Refs #195
This commit is contained in:
@@ -1919,14 +1919,7 @@ void WrappedVulkan::ReplayLog(uint32_t frameID, uint32_t startEventID, uint32_t
|
||||
// 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)
|
||||
{
|
||||
uint32_t numSubpasses = (uint32_t)m_CreationInfo.m_RenderPass[m_RenderState.renderPass].subpasses.size();
|
||||
|
||||
for(uint32_t sub=m_RenderState.subpass; sub < numSubpasses-1; sub++)
|
||||
ObjDisp(cmd)->CmdNextSubpass(Unwrap(cmd), VK_SUBPASS_CONTENTS_INLINE);
|
||||
|
||||
ObjDisp(cmd)->CmdEndRenderPass(Unwrap(cmd));
|
||||
}
|
||||
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
|
||||
|
||||
@@ -3496,6 +3496,8 @@ ResourceId VulkanDebugManager::RenderOverlay(ResourceId texid, TextureDisplayOve
|
||||
|
||||
vt->CmdClearAttachments(Unwrap(cmd), (uint32_t)atts.size(), &atts[0], 1, &rect);
|
||||
|
||||
m_pDriver->m_RenderState.EndRenderPass(cmd);
|
||||
|
||||
vkr = vt->EndCommandBuffer(Unwrap(cmd));
|
||||
RDCASSERTEQUAL(vkr, VK_SUCCESS);
|
||||
|
||||
@@ -5115,7 +5117,7 @@ void VulkanDebugManager::InitPostVSBuffers(uint32_t frameID, uint32_t eventID)
|
||||
// do single draw
|
||||
modifiedstate.BeginRenderPassAndApplyState(cmd);
|
||||
ObjDisp(cmd)->CmdDraw(Unwrap(cmd), drawcall->numIndices, drawcall->numInstances, drawcall->vertexOffset, drawcall->instanceOffset);
|
||||
ObjDisp(cmd)->CmdEndRenderPass(Unwrap(cmd));
|
||||
modifiedstate.EndRenderPass(cmd);
|
||||
|
||||
VkBufferMemoryBarrier meshbufbarrier = {
|
||||
VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, NULL,
|
||||
@@ -5249,7 +5251,7 @@ void VulkanDebugManager::InitPostVSBuffers(uint32_t frameID, uint32_t eventID)
|
||||
// do single draw
|
||||
modifiedstate.BeginRenderPassAndApplyState(cmd);
|
||||
ObjDisp(cmd)->CmdDrawIndexed(Unwrap(cmd), (uint32_t)indices.size(), drawcall->numInstances, 0, drawcall->vertexOffset, drawcall->instanceOffset);
|
||||
ObjDisp(cmd)->CmdEndRenderPass(Unwrap(cmd));
|
||||
modifiedstate.EndRenderPass(cmd);
|
||||
|
||||
// rebase existing index buffer to point to the right elements in our stream-out'd
|
||||
// vertex buffer
|
||||
|
||||
@@ -200,3 +200,13 @@ void VulkanRenderState::BindPipeline(VkCommandBuffer cmd)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VulkanRenderState::EndRenderPass(VkCommandBuffer cmd)
|
||||
{
|
||||
uint32_t numSubpasses = (uint32_t)m_CreationInfo->m_RenderPass[renderPass].subpasses.size();
|
||||
|
||||
for(uint32_t sub=subpass; sub < numSubpasses-1; sub++)
|
||||
ObjDisp(cmd)->CmdNextSubpass(Unwrap(cmd), VK_SUBPASS_CONTENTS_INLINE);
|
||||
|
||||
ObjDisp(cmd)->CmdEndRenderPass(Unwrap(cmd));
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ struct VulkanRenderState
|
||||
VulkanRenderState(VulkanCreationInfo *createInfo);
|
||||
VulkanRenderState &operator =(const VulkanRenderState &o);
|
||||
void BeginRenderPassAndApplyState(VkCommandBuffer cmd);
|
||||
void EndRenderPass(VkCommandBuffer cmd);
|
||||
void BindPipeline(VkCommandBuffer cmd);
|
||||
|
||||
// dynamic state
|
||||
@@ -78,7 +79,6 @@ struct VulkanRenderState
|
||||
vector<VertBuffer> vbuffers;
|
||||
|
||||
VulkanResourceManager *GetResourceManager() { return m_ResourceManager; }
|
||||
|
||||
VulkanResourceManager *m_ResourceManager;
|
||||
VulkanCreationInfo *m_CreationInfo;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user