From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/winevulkan/vulkan.c | 52 +++++++++------------------------------- 1 file changed, 11 insertions(+), 41 deletions(-) diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 5484c6d7f4d..cb2d4c4bab5 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -661,13 +661,9 @@ static VkResult wine_vk_get_time_domains(struct vulkan_physical_device *physical VkTimeDomainEXT *time_domains, VkResult (*get_domains)(VkPhysicalDevice, uint32_t *, VkTimeDomainEXT *)) { - BOOL supports_device = FALSE, supports_monotonic = FALSE, supports_monotonic_raw = FALSE; const VkTimeDomainEXT performance_counter_domain = get_performance_counter_time_domain(); + uint32_t host_time_domain_count, count, capacity = *time_domain_count; VkTimeDomainEXT *host_time_domains; - uint32_t host_time_domain_count; - VkTimeDomainEXT out_time_domains[2]; - uint32_t out_time_domain_count; - unsigned int i; VkResult res; /* Find out the time domains supported on the host */ @@ -685,46 +681,20 @@ static VkResult wine_vk_get_time_domains(struct vulkan_physical_device *physical return res; } - for (i = 0; i < host_time_domain_count; i++) + count = 0; + for (uint32_t i = 0; i < host_time_domain_count; i++) { - if (host_time_domains[i] == VK_TIME_DOMAIN_DEVICE_EXT) - supports_device = TRUE; - else if (host_time_domains[i] == VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT) - supports_monotonic = TRUE; - else if (host_time_domains[i] == VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT) - supports_monotonic_raw = TRUE; - else - FIXME("Unknown time domain %d\n", host_time_domains[i]); + VkTimeDomainEXT domain = host_time_domains[i]; + if (domain == performance_counter_domain) domain = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT; + if (domain == VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR) continue; + if (domain == VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_KHR) continue; + if (++count > capacity) continue; + if (time_domains) time_domains[count - 1] = domain; } + res = time_domains && count > capacity ? VK_INCOMPLETE : VK_SUCCESS; + *time_domain_count = count; free(host_time_domains); - - out_time_domain_count = 0; - - /* Map our monotonic times -> QPC */ - if (supports_monotonic_raw && performance_counter_domain == VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT) - out_time_domains[out_time_domain_count++] = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT; - else if (supports_monotonic && performance_counter_domain == VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT) - out_time_domains[out_time_domain_count++] = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT; - else - FIXME("VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT not supported on this platform.\n"); - - /* Forward the device domain time */ - if (supports_device) - out_time_domains[out_time_domain_count++] = VK_TIME_DOMAIN_DEVICE_EXT; - - /* Send the count/domains back to the app */ - if (!time_domains) - { - *time_domain_count = out_time_domain_count; - return VK_SUCCESS; - } - - for (i = 0; i < min(*time_domain_count, out_time_domain_count); i++) - time_domains[i] = out_time_domains[i]; - - res = *time_domain_count < out_time_domain_count ? VK_INCOMPLETE : VK_SUCCESS; - *time_domain_count = out_time_domain_count; return res; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10152