From 7b4a29da810cb5fd6f926055d1dbd8e0048f5398 Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Fri, 28 Mar 2025 14:30:54 +0100 Subject: [PATCH] tests: Mark a todo as resolved on MoltenVK 1.2.12. Technically it is not, the Vulkan commands we're generating are still not correct. But let's get rid of the failure message. --- tests/d3d12.c | 2 +- tests/d3d12_crosstest.h | 21 +++++++++++++++++++++ tests/vulkan_utils.h | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/tests/d3d12.c b/tests/d3d12.c index f58ad070..7c34a338 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -32901,7 +32901,7 @@ static void test_64kb_texture_alignment(void) transition_resource_state(command_list, textures[1], D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COPY_SOURCE); get_resource_readback_with_command_list(textures[1], 0, &rb, queue, command_list); - todo_if(is_mvk_device(device)) + todo_if(is_mvk_device_lt(device, 1, 2, 12)) check_readback_data_uint(&rb.rb, &box, 0xdeadbeef, 0); release_resource_readback(&rb); diff --git a/tests/d3d12_crosstest.h b/tests/d3d12_crosstest.h index f9810342..e3163776 100644 --- a/tests/d3d12_crosstest.h +++ b/tests/d3d12_crosstest.h @@ -531,6 +531,11 @@ static inline bool is_mvk_device(ID3D12Device *device) return false; } +static inline bool is_mvk_device_lt(ID3D12Device *device, uint32_t major, uint32_t minor, uint32_t patch) +{ + return false; +} + static inline bool is_macos_lt(unsigned int major, unsigned int minor, unsigned int patch) { return false; @@ -855,6 +860,22 @@ static inline bool is_mvk_device(ID3D12Device *device) return properties.driverID == VK_DRIVER_ID_MOLTENVK; } +/* MoltenVK uses a different pattern than standard Vulkan. */ +#define MVK_MAKE_API_VERSION(major, minor, patch) \ + ((((uint32_t)(major)) * 10000) + (((uint32_t)(minor)) * 100) + (uint32_t)(patch)) + +static inline bool is_mvk_device_lt(ID3D12Device *device, uint32_t major, uint32_t minor, uint32_t patch) +{ + VkPhysicalDeviceDriverPropertiesKHR driver_properties; + VkPhysicalDeviceProperties device_properties; + + get_driver_properties(device, &device_properties, &driver_properties); + if (driver_properties.driverID != VK_DRIVER_ID_MOLTENVK) + return false; + + return device_properties.driverVersion < MVK_MAKE_API_VERSION(major, minor, patch); +} + #ifdef __APPLE__ static inline bool is_macos_lt(unsigned int major, unsigned int minor, unsigned int patch) diff --git a/tests/vulkan_utils.h b/tests/vulkan_utils.h index c64dd2ea..57497b22 100644 --- a/tests/vulkan_utils.h +++ b/tests/vulkan_utils.h @@ -421,7 +421,7 @@ static inline void vulkan_test_context_destroy(const struct vulkan_test_context VK_CALL(vkDestroyInstance(context->instance, NULL)); } -/* This doesn't work for NVIDIA, because they use a different bit pattern. */ +/* This doesn't work for NVIDIA or MoltenVK, because they use a different bit pattern. */ static inline bool is_vulkan_driver_version_ge(const VkPhysicalDeviceProperties *device_properties, const VkPhysicalDeviceDriverPropertiesKHR *driver_properties, uint32_t major, uint32_t minor, uint32_t patch)