Tidy up some cases that weren't properly advancing subpasses. Refs #195

This commit is contained in:
baldurk
2016-03-01 19:35:48 +01:00
parent d987423fb9
commit 8680360ed1
4 changed files with 16 additions and 11 deletions
+1 -8
View File
@@ -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
+4 -2
View File
@@ -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
+10
View File
@@ -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));
}
+1 -1
View File
@@ -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;
};