loader: Remove the global extension list from scanned_icds struct
authorJon Ashburn <jon@lunarg.com>
Fri, 14 Aug 2015 20:49:22 +0000 (14:49 -0600)
committerJon Ashburn <jon@lunarg.com>
Mon, 24 Aug 2015 15:17:44 +0000 (09:17 -0600)
This list is regenerated as needed and stored in the instance object.

loader/loader.c
loader/loader.h

index c70d377..e5d6f2e 100644 (file)
@@ -797,13 +797,18 @@ static VkExtensionProperties *get_extension_property(
 void loader_get_icd_loader_instance_extensions(struct loader_extension_list *inst_exts)
 {
     struct loader_scanned_icds *icd_list = loader.scanned_icd_list;
-
+    struct loader_extension_list icd_exts;
     loader_log(VK_DBG_REPORT_DEBUG_BIT, 0, "Build ICD instance extension list");
     // traverse scanned icd list adding non-duplicate extensions to the list
     while (icd_list != NULL) {
+        loader_init_ext_list(&icd_exts);
+        loader_add_global_extensions(icd_list->GetGlobalExtensionProperties,
+                                     icd_list->lib_name,
+                                     &icd_exts);
         loader_add_to_ext_list(inst_exts,
-                               icd_list->global_extension_list.count,
-                               icd_list->global_extension_list.list);
+                               icd_exts.count,
+                               icd_exts.list);
+        loader_destroy_ext_list(&icd_exts);
         icd_list = icd_list->next;
     };
 
@@ -966,7 +971,6 @@ static void loader_scanned_icd_add(const char *filename)
     new_node->GetInstanceProcAddr = fp_get_proc_addr;
     new_node->CreateInstance = fp_create_inst;
     new_node->GetGlobalExtensionProperties = fp_get_global_ext_props;
-    loader_init_ext_list(&new_node->global_extension_list);
     loader_init_ext_list(&new_node->device_extension_list);
     new_node->next = loader.scanned_icd_list;
 
@@ -979,10 +983,6 @@ static void loader_scanned_icd_add(const char *filename)
 
     loader.scanned_icd_list = new_node;
 
-    loader_add_global_extensions(
-                (PFN_vkGetGlobalExtensionProperties) fp_get_global_ext_props,
-                new_node->lib_name,
-                &new_node->global_extension_list);
 }
 
 static bool loader_icd_init_entrys(struct loader_icd *icd,
@@ -2365,7 +2365,7 @@ VkResult VKAPI loader_CreateInstance(
             icd_create_info.extensionCount = 0;
             for (uint32_t i = 0; i < pCreateInfo->extensionCount; i++) {
                 prop = get_extension_property(pCreateInfo->ppEnabledExtensionNames[i],
-                                              &scanned_icds->global_extension_list);
+                                              &ptr_instance->ext_list);
                 if (prop) {
                     filtered_extension_names[icd_create_info.extensionCount] = (char *) pCreateInfo->ppEnabledExtensionNames[i];
                     icd_create_info.extensionCount++;
index 5b66266..6b3503c 100644 (file)
@@ -161,7 +161,7 @@ struct loader_instance {
     uint32_t total_icd_count;
     struct loader_icd *icds;
     struct loader_instance *next;
-    struct loader_extension_list ext_list;
+    struct loader_extension_list ext_list;   // icds and loaders extensions
     /* TODO: Should keep track of application provided allocation functions */
 
     struct loader_msg_callback_map_entry *icd_msg_callback_map;
@@ -195,12 +195,8 @@ struct loader_scanned_icds {
     PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
     PFN_vkCreateInstance CreateInstance;
     PFN_vkGetGlobalExtensionProperties GetGlobalExtensionProperties;
-    VkInstance instance;
     struct loader_scanned_icds *next;
 
-    /* cache of global extensions for specific ICD */
-    struct loader_extension_list global_extension_list;
-
     /*
      * cache of device extensions for specific ICD,
      * filled in at CreateInstance time