From 5b81eff7591f519c3ec9baef4edf9f91431dbfb6 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 8 May 2023 12:17:09 +0100 Subject: [PATCH] Try to avoid timeouts on draws with huge number of instances with GS --- renderdoc/driver/vulkan/vk_postvs.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/renderdoc/driver/vulkan/vk_postvs.cpp b/renderdoc/driver/vulkan/vk_postvs.cpp index adb71169d..a4010ac15 100644 --- a/renderdoc/driver/vulkan/vk_postvs.cpp +++ b/renderdoc/driver/vulkan/vk_postvs.cpp @@ -3310,6 +3310,22 @@ void VulkanReplay::FetchTessGSOut(uint32_t eventId, VulkanRenderState &state) ObjDisp(cmd)->CmdEndTransformFeedbackEXT(Unwrap(cmd), 0, 1, NULL, NULL); ObjDisp(cmd)->CmdEndQuery(Unwrap(cmd), Unwrap(m_PostVS.XFBQueryPool), inst - 1); + + // Instanced draws with a wild number of instances can hang the GPU, sync after every 1000 + if((inst % 1000) == 0) + { + state.EndRenderPass(cmd); + + vkr = ObjDisp(dev)->EndCommandBuffer(Unwrap(cmd)); + CheckVkResult(vkr); + + cmd = m_pDriver->GetNextCmd(); + + vkr = ObjDisp(dev)->BeginCommandBuffer(Unwrap(cmd), &beginInfo); + CheckVkResult(vkr); + + state.BeginRenderPassAndApplyState(m_pDriver, cmd, VulkanRenderState::BindGraphics, false); + } } state.EndRenderPass(cmd);