From 42016ab09cc1c7a7f96f20e5a10bab62dd7bb17a Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Fri, 3 Oct 2025 15:10:02 +0200 Subject: [PATCH] tests: Introduce get_nvidia_driver_version(). --- tests/d3d12_crosstest.h | 10 ++++------ tests/vulkan_utils.h | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/tests/d3d12_crosstest.h b/tests/d3d12_crosstest.h index d0ef79b08..9a15176f7 100644 --- a/tests/d3d12_crosstest.h +++ b/tests/d3d12_crosstest.h @@ -837,21 +837,19 @@ static inline bool is_nvidia_device(ID3D12Device *device) return properties.driverID == VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR; } -/* NVIDIA uses a different bit pattern than standard Vulkan. */ -#define NV_MAKE_API_VERSION(major, minor, patch) \ - ((((uint32_t)(major)) << 22u) | (((uint32_t)(minor)) << 14u) | (((uint32_t)(patch)) << 6u)) - static inline bool is_nvidia_device_lt(ID3D12Device *device, uint32_t major, uint32_t minor, uint32_t patch) { VkPhysicalDeviceDriverPropertiesKHR driver_properties; + uint32_t driver_major, driver_minor, driver_patch; VkPhysicalDeviceProperties device_properties; get_driver_properties(device, &device_properties, &driver_properties); - if (driver_properties.driverID != VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR) + + if (!get_nvidia_driver_version(&device_properties, &driver_properties, &driver_major, &driver_minor, &driver_patch)) return false; - return device_properties.driverVersion < NV_MAKE_API_VERSION(major, minor, patch); + return compare_versions(driver_major, driver_minor, driver_patch, major, minor, patch) < 0; } static inline bool is_qualcomm_device(ID3D12Device *device) diff --git a/tests/vulkan_utils.h b/tests/vulkan_utils.h index 7830e1e7f..a75742e62 100644 --- a/tests/vulkan_utils.h +++ b/tests/vulkan_utils.h @@ -507,4 +507,20 @@ static inline bool get_mvk_driver_version(const VkPhysicalDeviceProperties *devi return true; } +static inline bool get_nvidia_driver_version(const VkPhysicalDeviceProperties *device_properties, + const VkPhysicalDeviceDriverPropertiesKHR *driver_properties, + uint32_t *major, uint32_t *minor, uint32_t *patch) +{ + uint32_t version = device_properties->driverVersion; + + if (driver_properties->driverID != VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR) + return false; + + *major = (version >> 22u); + *minor = (version >> 14u) & ((1u << (22 - 14)) - 1); + *patch = (version >> 6u) & ((1u << (14 - 6)) - 1); + + return true; +} + #endif /* __VKD3D_VULKAN_UTILS_H */