From 3a47bcd51ee269a8526edc70a53c28eee18be831 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 17 May 2016 07:57:15 +0800 Subject: unique_objects: avoid invalid GIPA call in vkCreateDevice Save VkInstance in layer_data so that we query vkCreateDevice with a valid instance. --- layers/unique_objects.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/layers/unique_objects.h b/layers/unique_objects.h index 0da90a19..9abf240c 100644 --- a/layers/unique_objects.h +++ b/layers/unique_objects.h @@ -45,6 +45,8 @@ namespace unique_objects { static uint64_t global_unique_id = 1; struct layer_data { + VkInstance instance; + bool wsi_enabled; std::unordered_map unique_id_mapping; // Map uniqueID to actual object handle VkPhysicalDevice gpu; @@ -162,6 +164,8 @@ VkResult explicit_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const return result; } + layer_data *my_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map); + my_data->instance = *pInstance; initInstanceTable(*pInstance, fpGetInstanceProcAddr, unique_objects_instance_table_map); createInstanceRegisterExtensions(pCreateInfo, *pInstance); @@ -194,12 +198,13 @@ static void createDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo VkResult explicit_CreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) { + layer_data *my_instance_data = get_my_data_ptr(get_dispatch_key(gpu), layer_data_map); VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); assert(chain_info->u.pLayerInfo); PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr; - PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice)fpGetInstanceProcAddr(NULL, "vkCreateDevice"); + PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice)fpGetInstanceProcAddr(my_instance_data->instance, "vkCreateDevice"); if (fpCreateDevice == NULL) { return VK_ERROR_INITIALIZATION_FAILED; } -- cgit v1.2.3