From 78a44a4ef665e73ca8b11d1daea63ad7c3867906 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Sat, 29 Nov 2025 12:16:42 -0400 Subject: [PATCH] [vk] Adjusted Query Cache --- src/video_core/renderer_vulkan/vk_query_cache.cpp | 10 +++++++--- src/video_core/vulkan_common/vulkan_device.h | 5 +++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_query_cache.cpp b/src/video_core/renderer_vulkan/vk_query_cache.cpp index 4997747ef3..8ffe6b9ceb 100644 --- a/src/video_core/renderer_vulkan/vk_query_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_query_cache.cpp @@ -42,7 +42,8 @@ public: static constexpr size_t BANK_SIZE = 256; static constexpr size_t QUERY_SIZE = 8; explicit SamplesQueryBank(const Device& device_, size_t index_) - : BankBase(BANK_SIZE), device{device_}, index{index_} { + : BankBase(BANK_SIZE), device{device_}, index{index_}, + supports_host_query_reset{device_.SupportsHostQueryReset()} { const auto& dev = device.GetLogical(); query_pool = dev.CreateQueryPool({ .sType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, @@ -60,8 +61,10 @@ public: void Reset() override { ASSERT(references == 0); VideoCommon::BankBase::Reset(); - const auto& dev = device.GetLogical(); - dev.ResetQueryPool(*query_pool, 0, BANK_SIZE); + if (supports_host_query_reset) { + const auto& dev = device.GetLogical(); + dev.ResetQueryPool(*query_pool, 0, BANK_SIZE); + } host_results.fill(0ULL); next_bank = 0; } @@ -99,6 +102,7 @@ public: private: const Device& device; const size_t index; + const bool supports_host_query_reset; vk::QueryPool query_pool; std::array host_results; }; diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index aa3a4707d7..5871e3c2a8 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -366,6 +366,11 @@ public: return GetDriverID() != VK_DRIVER_ID_QUALCOMM_PROPRIETARY; } + /// Returns true if vkResetQueryPool can be used from the host. + bool SupportsHostQueryReset() const { + return features.host_query_reset.hostQueryReset; + } + /// Returns true when the driver should use the mobile mega buffer allocator. bool ShouldUseMobileMegaBuffer() const { return use_mobile_megabuffer;