From 810be9ae8e5e3ba147756658601684e943f7bc47 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 13 Dec 2019 11:10:28 +0000 Subject: [PATCH] Handle depth/stencil 3D textures exhausting UBO ring twice as fast * We do two renders per slice - for depth and stencil, make sure to account for that. --- renderdoc/driver/vulkan/vk_replay.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index 9dc160f80..6b3d2d2df 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -3030,10 +3030,12 @@ void VulkanReplay::GetTextureData(ResourceId tex, const Subresource &sub, m_DebugWidth = imCreateInfo.extent.width; m_DebugHeight = imCreateInfo.extent.height; + int renderCount = 0; + // if 3d texture, render each slice separately, otherwise render once for(uint32_t i = 0; i < numFBs; i++) { - if(numFBs > 1 && (i % m_TexRender.UBO.GetRingCount()) == 0) + if(numFBs > 1 && (renderCount % m_TexRender.UBO.GetRingCount()) == 0) { m_pDriver->SubmitCmds(); m_pDriver->FlushQ(); @@ -3107,6 +3109,7 @@ void VulkanReplay::GetTextureData(ResourceId tex, const Subresource &sub, }; RenderTextureInternal(texDisplay, rpbegin, renderFlags); + renderCount++; // for textures with stencil, do another draw to copy the stencil if(isStencil) @@ -3123,6 +3126,7 @@ void VulkanReplay::GetTextureData(ResourceId tex, const Subresource &sub, texDisplay.red = texDisplay.blue = texDisplay.alpha = false; RenderTextureInternal(texDisplay, rpbegin, (renderFlags & ~eTexDisplay_RemapFloat) | eTexDisplay_RemapUInt | eTexDisplay_GreenOnly); + renderCount++; } }