From c944bd9bed476f64f74bbd879e0c4c23bd5a74d1 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 27 Oct 2025 00:32:29 +0100 Subject: [PATCH] Fix missing Vulkan feature activation for host query reset --- .../GraphicsDevice/Vulkan/GPUContextVulkan.cpp | 2 +- .../GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp | 18 ++++++++++++++++++ .../GraphicsDevice/Vulkan/GPUDeviceVulkan.h | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp b/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp index 00af99154..c374bbeed 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp @@ -114,7 +114,7 @@ GPUContextVulkan::GPUContextVulkan(GPUDeviceVulkan* device, QueueVulkan* queue) #if GPU_ENABLE_TRACY #if VK_EXT_calibrated_timestamps && VK_EXT_host_query_reset && !PLATFORM_SWITCH // Use calibrated timestamps extension - if (vkResetQueryPoolEXT && vkGetCalibratedTimestampsEXT) + if (vkResetQueryPoolEXT && vkGetCalibratedTimestampsEXT && _device->PhysicalDeviceFeatures12.hostQueryReset) { _tracyContext = tracy::CreateVkContext(_device->Adapter->Gpu, _device->Device, vkResetQueryPoolEXT, vkGetPhysicalDeviceCalibrateableTimeDomainsEXT, vkGetCalibratedTimestampsEXT); } diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp b/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp index 7c54be973..e96f7b3b3 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp @@ -1568,7 +1568,15 @@ bool GPUDeviceVulkan::Init() vkGetPhysicalDeviceQueueFamilyProperties(gpu, &queueCount, QueueFamilyProps.Get()); // Query device features + RenderToolsVulkan::ZeroStruct(PhysicalDeviceFeatures12, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES); vkGetPhysicalDeviceFeatures(gpu, &PhysicalDeviceFeatures); + if (vkGetPhysicalDeviceFeatures2) + { + VkPhysicalDeviceFeatures2 features2; + RenderToolsVulkan::ZeroStruct(features2, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2); + features2.pNext = &PhysicalDeviceFeatures12; + vkGetPhysicalDeviceFeatures2(gpu, &features2); + } // Get extensions and layers Array deviceExtensions; @@ -1671,6 +1679,16 @@ bool GPUDeviceVulkan::Init() VulkanPlatform::RestrictEnabledPhysicalDeviceFeatures(PhysicalDeviceFeatures, enabledFeatures); deviceInfo.pEnabledFeatures = &enabledFeatures; +#if GPU_ENABLE_TRACY && VK_EXT_calibrated_timestamps && VK_EXT_host_query_reset + VkPhysicalDeviceHostQueryResetFeatures resetFeatures; + if (PhysicalDeviceFeatures12.hostQueryReset) + { + RenderToolsVulkan::ZeroStruct(resetFeatures, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES); + resetFeatures.hostQueryReset = VK_TRUE; + deviceInfo.pNext = &resetFeatures; + } +#endif + // Create the device VALIDATE_VULKAN_RESULT(vkCreateDevice(gpu, &deviceInfo, nullptr, &Device)); diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.h b/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.h index ae265100c..09fa93f3e 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.h +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.h @@ -496,6 +496,7 @@ public: /// The physical device enabled features. /// VkPhysicalDeviceFeatures PhysicalDeviceFeatures; + VkPhysicalDeviceVulkan12Features PhysicalDeviceFeatures12; Array TimestampQueryPools; Array OcclusionQueryPools;