parameter_validation: avoid invalid GIPA call in vkCreateDevice
authorChia-I Wu <olv@google.com>
Sun, 15 May 2016 23:48:14 +0000 (07:48 +0800)
committerChia-I Wu <olv@google.com>
Sat, 21 May 2016 03:15:11 +0000 (11:15 +0800)
Save VkInstance in layer_data so that we query vkCreateDevice with a valid
instance.

layers/parameter_validation.cpp

index 87d1cbc..e0e29c6 100644 (file)
@@ -52,6 +52,8 @@
 namespace parameter_validation {
 
 struct layer_data {
+    VkInstance instance;
+
     debug_report_data *report_data;
     std::vector<VkDebugReportCallbackEXT> logging_callback;
 
@@ -1314,6 +1316,7 @@ CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallba
 
         VkLayerInstanceDispatchTable *pTable = initInstanceTable(*pInstance, fpGetInstanceProcAddr, pc_instance_table_map);
 
+        my_instance_data->instance = *pInstance;
         my_instance_data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionCount,
                                                                      pCreateInfo->ppEnabledExtensionNames);
 
@@ -1618,7 +1621,7 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateDevice(VkPhysicalDevice physicalDevice,
 
         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;
         }