From 08aa7399cd53459014812e30059a056b158add01 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 11 Sep 2017 18:22:44 +0100 Subject: [PATCH] Don't perform occlusion/statistics queries that aren't needed --- renderdoc/driver/vulkan/vk_counters.cpp | 27 +++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_counters.cpp b/renderdoc/driver/vulkan/vk_counters.cpp index 70396fc8e..aeea8da66 100644 --- a/renderdoc/driver/vulkan/vk_counters.cpp +++ b/renderdoc/driver/vulkan/vk_counters.cpp @@ -286,15 +286,38 @@ vector VulkanReplay::FetchCounters(const vector &coun ObjDisp(dev)->CreateQueryPool(Unwrap(dev), &timeStampPoolCreateInfo, NULL, &timeStampPool); RDCASSERTEQUAL(vkr, VK_SUCCESS); + bool occlNeeded = false; + bool statsNeeded = false; + + for(size_t c = 0; c < counters.size(); c++) + { + switch(counters[c]) + { + case GPUCounter::InputVerticesRead: + case GPUCounter::IAPrimitives: + case GPUCounter::GSPrimitives: + case GPUCounter::RasterizerInvocations: + case GPUCounter::RasterizedPrimitives: + case GPUCounter::VSInvocations: + case GPUCounter::TCSInvocations: + case GPUCounter::TESInvocations: + case GPUCounter::GSInvocations: + case GPUCounter::PSInvocations: + case GPUCounter::CSInvocations: statsNeeded = true; break; + case GPUCounter::SamplesWritten: occlNeeded = true; break; + default: break; + } + } + VkQueryPool occlusionPool = VK_NULL_HANDLE; - if(availableFeatures.occlusionQueryPrecise) + if(availableFeatures.occlusionQueryPrecise && occlNeeded) { vkr = ObjDisp(dev)->CreateQueryPool(Unwrap(dev), &occlusionPoolCreateInfo, NULL, &occlusionPool); RDCASSERTEQUAL(vkr, VK_SUCCESS); } VkQueryPool pipeStatsPool = VK_NULL_HANDLE; - if(availableFeatures.pipelineStatisticsQuery) + if(availableFeatures.pipelineStatisticsQuery && statsNeeded) { vkr = ObjDisp(dev)->CreateQueryPool(Unwrap(dev), &pipeStatsPoolCreateInfo, NULL, &pipeStatsPool); RDCASSERTEQUAL(vkr, VK_SUCCESS);