diff options
| author | Chia-I Wu <olv@google.com> | 2016-05-17 07:57:15 +0800 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-05-24 06:29:13 -0600 |
| commit | 3a47bcd51ee269a8526edc70a53c28eee18be831 (patch) | |
| tree | e47def01c7c6b023fe559a5c6f6f973b20c0a806 | |
| parent | a9b5ac2c9c02a4228da2f0bb1484e64d7e4aaf90 (diff) | |
| download | usermoji-3a47bcd51ee269a8526edc70a53c28eee18be831.tar.xz | |
unique_objects: avoid invalid GIPA call in vkCreateDevice
Save VkInstance in layer_data so that we query vkCreateDevice with a valid
instance.
| -rw-r--r-- | layers/unique_objects.h | 7 |
1 files changed, 6 insertions, 1 deletions
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<uint64_t, uint64_t> 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; } |
