From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winevulkan/loader.c | 14 +++++++++++++- dlls/winevulkan/vulkan.c | 15 --------------- dlls/winevulkan/vulkan_loader.h | 3 --- dlls/winevulkan/vulkan_private.h | 2 -- 4 files changed, 13 insertions(+), 21 deletions(-)
diff --git a/dlls/winevulkan/loader.c b/dlls/winevulkan/loader.c index 77bed3603af..b5d1b5a1310 100644 --- a/dlls/winevulkan/loader.c +++ b/dlls/winevulkan/loader.c @@ -29,6 +29,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(vulkan); #define WINE_VULKAN_ICD_VERSION 4
static HINSTANCE hinstance; +static BOOL get_device_proc_addr_instance_procs = FALSE;
VkResult WINAPI vkEnumerateInstanceLayerProperties(uint32_t *count, VkLayerProperties *properties) { @@ -154,7 +155,7 @@ PFN_vkVoidFunction WINAPI vkGetDeviceProcAddr(VkDevice device, const char *name) * https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues/2323 * https://github.com/KhronosGroup/Vulkan-Docs/issues/655 */ - if ((device->quirks & WINEVULKAN_QUIRK_GET_DEVICE_PROC_ADDR) + if (get_device_proc_addr_instance_procs && ((func = wine_vk_get_instance_proc_addr(name)) || (func = wine_vk_get_phys_dev_proc_addr(name)))) { @@ -324,6 +325,7 @@ VkResult WINAPI vkCreateInstance(const VkInstanceCreateInfo *create_info, const VkAllocationCallbacks *allocator, VkInstance *ret) { struct vkCreateInstance_params params; + const VkApplicationInfo *app_info; struct VkInstance_T *instance; uint32_t phys_dev_count = 8, i; NTSTATUS status; @@ -333,6 +335,16 @@ VkResult WINAPI vkCreateInstance(const VkInstanceCreateInfo *create_info, if (!wine_vk_init_once()) return VK_ERROR_INITIALIZATION_FAILED;
+ if ((app_info = create_info->pApplicationInfo)) + { + TRACE("Application name %s, application version %#x.\n", debugstr_a(app_info->pApplicationName), app_info->applicationVersion); + TRACE("Engine name %s, engine version %#x.\n", debugstr_a(app_info->pEngineName), app_info->engineVersion); + TRACE("API version %#x.\n", app_info->apiVersion); + + if (app_info->pEngineName && !strcmp(app_info->pEngineName, "idTech")) + get_device_proc_addr_instance_procs = TRUE; + } + for (;;) { if (!(instance = vulkan_client_object_create(FIELD_OFFSET(struct VkInstance_T, phys_devs[phys_dev_count])))) diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index ec326dda168..d566eec841e 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -980,8 +980,6 @@ VkResult wine_vkCreateDevice(VkPhysicalDevice client_physical_device, const VkDe for (i = 0; i < create_info_host.queueCreateInfoCount; i++) wine_vk_device_init_queues(device, create_info_host.pQueueCreateInfos + i);
- client_device->quirks = CONTAINING_RECORD(instance, struct wine_instance, obj)->quirks; - TRACE("Created device %p, host_device %p.\n", device, device->obj.host.device); for (i = 0; i < device->queue_count; i++) { @@ -999,7 +997,6 @@ VkResult wine_vkCreateInstance(const VkInstanceCreateInfo *create_info, void *client_ptr) { VkInstanceCreateInfo create_info_host; - const VkApplicationInfo *app_info; struct conversion_context ctx; struct wine_instance *instance; VkInstance host_instance, client_instance = client_ptr; @@ -1058,18 +1055,6 @@ VkResult wine_vkCreateInstance(const VkInstanceCreateInfo *create_info, return res; }
- if ((app_info = create_info->pApplicationInfo)) - { - TRACE("Application name %s, application version %#x.\n", - debugstr_a(app_info->pApplicationName), app_info->applicationVersion); - TRACE("Engine name %s, engine version %#x.\n", debugstr_a(app_info->pEngineName), - app_info->engineVersion); - TRACE("API version %#x.\n", app_info->apiVersion); - - if (app_info->pEngineName && !strcmp(app_info->pEngineName, "idTech")) - instance->quirks |= WINEVULKAN_QUIRK_GET_DEVICE_PROC_ADDR; - } - TRACE("Created instance %p, host_instance %p.\n", instance, instance->obj.host.instance);
for (i = 0; i < instance->obj.physical_device_count; i++) diff --git a/dlls/winevulkan/vulkan_loader.h b/dlls/winevulkan/vulkan_loader.h index 6c9cbeb9f83..1d91bdf0216 100644 --- a/dlls/winevulkan/vulkan_loader.h +++ b/dlls/winevulkan/vulkan_loader.h @@ -40,8 +40,6 @@ /* Magic value defined by Vulkan ICD / Loader spec */ #define VULKAN_ICD_MAGIC_VALUE 0x01CDC0DE
-#define WINEVULKAN_QUIRK_GET_DEVICE_PROC_ADDR 0x00000001 - struct VkPhysicalDevice_T { struct vulkan_client_object obj; @@ -62,7 +60,6 @@ struct VkQueue_T struct VkDevice_T { struct vulkan_client_object obj; - unsigned int quirks; struct VkQueue_T queues[1]; };
diff --git a/dlls/winevulkan/vulkan_private.h b/dlls/winevulkan/vulkan_private.h index 2324e6f8639..0231cd3291b 100644 --- a/dlls/winevulkan/vulkan_private.h +++ b/dlls/winevulkan/vulkan_private.h @@ -74,8 +74,6 @@ struct wine_instance
struct wine_debug_report_callback default_callback;
- unsigned int quirks; - struct rb_tree objects; pthread_rwlock_t objects_lock; };