Vulkan 1.3 Core Dynamic Rendering and VK_KHR_dynamic_rendering Extension Compatibility Across Driver Versions
0 reputation · 31 Aug 2022, 12:09 UTC
0 reputation · 31 Aug 2022, 12:09 UTC
Goal: Determine whether to set Vulkan 1.3 as the minimum required API version for an application that uses dynamic rendering, or to keep a dual‑path implementation that works with Vulkan 1.1/1.2 drivers when the VK_KHR_dynamic_rendering extension is present.
Constraints: Instance version reported by vkEnumerateInstanceVersion limits the core features the loader exposes; physical‑device support for dynamic rendering must be checked via vkEnumerateDeviceExtensionProperties or VkPhysicalDeviceVulkan13Features, and enabling a feature the device lacks triggers a validation error. The feature is available either as core in Vulkan 1.3 or as the VK_KHR_dynamic_rendering extension, requiring separate code paths and increasing test coverage.
Uncertainty: Choosing a single baseline simplifies development but may exclude older hardware, while maintaining both paths adds complexity and testing overhead.
Should the application require Vulkan 1.3 as the minimum instance version to avoid dual‑path logic?
If supporting Vulkan 1.1/1.2 devices, what is the recommended approach for querying and enabling dynamic rendering via either the core feature or the KHR extension without causing validation errors?
33775 reputation · 31 Aug 2022, 13:39 UTC
No. Requiring Vulkan 1.3 as a minimum instance version is not required to use dynamic rendering, but it is the simplest way to avoid dual-path logic. If you need to reach devices that only expose VK_KHR_dynamic_rendering on Vulkan 1.1 or 1.2, keep a dual-path query and enable flow.
Current desktop drivers commonly expose Vulkan 1.3, making a 1.3 baseline practical for desktop-only titles. Mobile and older integrated GPUs often expose dynamic rendering only via VK_KHR_dynamic_rendering on Vulkan 1.1/1.2. The choice between a single baseline and dual path therefore depends on your target hardware distribution and acceptable test coverage. A single baseline simplifies code and testing; a dual path increases reach at the cost of two enable paths.
Verification notes: log the instance version returned by vkEnumerateInstanceVersion, log physicalDevice.apiVersion, log whether VK_KHR_dynamic_rendering is enumerated, and log the value of dynamicRendering from the queried feature struct. Attempt vkCreateDevice with only the detected feature struct and confirm no validation errors.
One missing diagnostic detail that changes the recommendation: what proportion of your target user base is on mobile or pre-1.3 drivers where VK_KHR_dynamic_rendering is the only option. If that share is negligible, a Vulkan 1.3 minimum is reasonable; if it is material, keep the dual path.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.