From: Brendan Shanks bshanks@codeweavers.com
--- dlls/winevulkan/vulkan.c | 11 ++++++++++- include/wine/vulkan_driver.h | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 61b3a42d63f..ac93931092b 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -384,6 +384,8 @@ static VkResult wine_vk_physical_device_init(struct wine_phys_dev *object, VkPhy have_external_memory_host = TRUE; else if (!strcmp(host_properties[i].extensionName, "VK_EXT_map_memory_placed")) have_memory_placed = TRUE; + else if (!strcmp(host_properties[i].extensionName, "VK_EXT_swapchain_maintenance1")) + object->obj.has_swapchain_maintenance1 = true; else if (!strcmp(host_properties[i].extensionName, "VK_KHR_map_memory2")) have_map_memory2 = TRUE; } @@ -545,7 +547,7 @@ static VkResult wine_vk_device_convert_create_info(VkPhysicalDevice client_physi struct conversion_context *ctx, const VkDeviceCreateInfo *src, VkDeviceCreateInfo *dst) { struct wine_phys_dev *phys_dev = wine_phys_dev_from_handle(client_physical_device); - const char *extra_extensions[2], * const*extensions = src->ppEnabledExtensionNames; + const char *extra_extensions[3], * const*extensions = src->ppEnabledExtensionNames; unsigned int i, extra_count = 0, extensions_count = src->enabledExtensionCount;
*dst = *src; @@ -590,6 +592,13 @@ static VkResult wine_vk_device_convert_create_info(VkPhysicalDevice client_physi extra_extensions[extra_count++] = "VK_EXT_external_memory_host"; }
+ /* win32u uses VkSwapchainPresentScalingCreateInfoEXT if available. */ + if (phys_dev->obj.has_swapchain_maintenance1) + { + if (!find_extension(extensions, extensions_count, "VK_EXT_swapchain_maintenance1")) + extra_extensions[extra_count++] = "VK_EXT_swapchain_maintenance1"; + } + if (extra_count) { const char **new_extensions; diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index 55613f3211f..0579ea7773f 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -21,6 +21,7 @@ #define __WINE_VULKAN_DRIVER_H
#include <stdarg.h> +#include <stdbool.h> #include <stddef.h>
#include <windef.h> @@ -90,6 +91,7 @@ struct vulkan_physical_device { VULKAN_OBJECT_HEADER( VkPhysicalDevice, physical_device ); struct vulkan_instance *instance; + bool has_swapchain_maintenance1; };
static inline struct vulkan_physical_device *vulkan_physical_device_from_handle( VkPhysicalDevice handle )