loader: bug 12992: extension and layer support

Much of layers and loader updated to work with
final extension and layer mechanism.
Not everything is working here.
diff --git a/loader/trampoline.c b/loader/trampoline.c
index 1f9c363..6df6f68 100644
--- a/loader/trampoline.c
+++ b/loader/trampoline.c
@@ -58,22 +58,6 @@
     }
     loader_platform_thread_lock_mutex(&loader_lock);
     memset(ptr_instance, 0, sizeof(struct loader_instance));
-    ptr_instance->app_extension_count = pCreateInfo->extensionCount;
-    ptr_instance->app_extension_props = (ptr_instance->app_extension_count > 0) ?
-                malloc(sizeof (VkExtensionProperties) * ptr_instance->app_extension_count) : NULL;
-    if (ptr_instance->app_extension_props == NULL && (ptr_instance->app_extension_count > 0)) {
-        loader_platform_thread_unlock_mutex(&loader_lock);
-        return VK_ERROR_OUT_OF_HOST_MEMORY;
-    }
-
-    /*
-     * Make local copy of extension properties indicated by application.
-     */
-    if (ptr_instance->app_extension_props) {
-        memcpy(ptr_instance->app_extension_props,
-               pCreateInfo->pEnabledExtensions,
-               sizeof(VkExtensionProperties) * ptr_instance->app_extension_count);
-    }
 
     ptr_instance->disp = malloc(sizeof(VkLayerInstanceDispatchTable));
     if (ptr_instance->disp == NULL) {
@@ -84,9 +68,9 @@
     ptr_instance->next = loader.instances;
     loader.instances = ptr_instance;
 
-    loader_enable_instance_layers(ptr_instance);
+    loader_enable_instance_layers(ptr_instance, pCreateInfo);
 
-    debug_report_create_instance(ptr_instance);
+    debug_report_create_instance(ptr_instance, pCreateInfo);
 
     /* enable any layers on instance chain */
     loader_activate_instance_layers(ptr_instance);
@@ -273,23 +257,29 @@
 }
 
 LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
-                                                VkPhysicalDevice gpu,
-                                                uint32_t extensionIndex,
-                                                VkExtensionProperties* pProperties)
+    VkPhysicalDevice                            physicalDevice,
+    const char*                                 pLayerName,
+    uint32_t*                                   pCount,
+    VkExtensionProperties*                      pProperties)
 {
     VkResult res;
 
-    res = loader_GetPhysicalDeviceExtensionProperties(gpu, extensionIndex, pProperties);
+    loader_platform_thread_lock_mutex(&loader_lock);
+    res = loader_GetPhysicalDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties);
+    loader_platform_thread_unlock_mutex(&loader_lock);
     return res;
 }
 
-LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionCount(
-                                                VkPhysicalDevice gpu,
-                                                uint32_t* pCount)
+LOADER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pCount,
+    VkLayerProperties*                          pProperties)
 {
     VkResult res;
 
-    res = loader_GetPhysicalDeviceExtensionCount(gpu, pCount);
+    loader_platform_thread_lock_mutex(&loader_lock);
+    res = loader_GetPhysicalDeviceLayerProperties(physicalDevice, pCount, pProperties);
+    loader_platform_thread_unlock_mutex(&loader_lock);
     return res;
 }