layers: INITIAL Changes to use new WSI swapchain extensions.

There are still some FIXME's that must be addressed, as well as fully
supporting the new entrypoints.  This patch serves as a basis for review and
further work with other Vulkan engineers.
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index 687012f..31f5075 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -50,7 +50,7 @@
     debug_report_data *report_data;
     // TODO: put instance data here
     VkDbgMsgCallback logging_callback;
-    bool wsi_lunarg_enabled;
+    bool wsi_enabled;
 } layer_data;
 
 static unordered_map<void *, layer_data *> layer_data_map;
@@ -70,7 +70,7 @@
 unordered_map<uint64_t,       MT_MEM_OBJ_INFO>      memObjMap;
 unordered_map<uint64_t,       MT_FENCE_INFO>        fenceMap;    // Map fence to fence info
 unordered_map<VkQueue,        MT_QUEUE_INFO>        queueMap;
-unordered_map<VkSwapChainWSI, MT_SWAP_CHAIN_INFO*>  swapChainMap;
+unordered_map<uint64_t,       MT_SWAP_CHAIN_INFO*>  swapChainMap;
 
 // Images and Buffers are 2 objects that can have memory bound to them so they get special treatment
 unordered_map<uint64_t, MT_OBJ_BINDING_INFO> imageMap;
@@ -337,7 +337,7 @@
 {
     MT_SWAP_CHAIN_INFO* pInfo = new MT_SWAP_CHAIN_INFO;
     memcpy(&pInfo->createInfo, pCI, sizeof(VkSwapChainCreateInfoWSI));
-    swapChainMap[swapChain] = pInfo;
+    swapChainMap[swapChain.handle] = pInfo;
 }
 
 // Add new CBInfo for this cb to map container
@@ -675,13 +675,9 @@
 {
     assert(object != NULL);
 
-    if (pAllocInfo) {  // MEM alloc created by vkCreateSwapChainWSI() doesn't have alloc info struct
-        memcpy(&memObjMap[mem.handle].allocInfo, pAllocInfo, sizeof(VkMemoryAllocInfo));
-        // TODO:  Update for real hardware, actually process allocation info structures
-        memObjMap[mem.handle].allocInfo.pNext = NULL;
-    } else {
-        memset(&memObjMap[mem.handle].allocInfo, 0, sizeof(VkMemoryAllocInfo));
-    }
+    memcpy(&memObjMap[mem.handle].allocInfo, pAllocInfo, sizeof(VkMemoryAllocInfo));
+    // TODO:  Update for real hardware, actually process allocation info structures
+    memObjMap[mem.handle].allocInfo.pNext = NULL;
     memObjMap[mem.handle].object = object;
     memObjMap[mem.handle].refCount = 0;
     memObjMap[mem.handle].mem = mem;
@@ -1302,11 +1298,10 @@
 {
     uint32_t i;
     layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
-    my_device_data->wsi_lunarg_enabled = false;
+    my_device_data->wsi_enabled = false;
     for (uint32_t i = 0; i < pCreateInfo->extensionCount; i++) {
-        if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_WSI_LUNARG_EXTENSION_NAME) == 0)
-            my_device_data->wsi_lunarg_enabled = true;
-
+        if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_WSI_DEVICE_SWAPCHAIN_EXTENSION_NAME) == 0)
+            my_device_data->wsi_enabled = true;
     }
 }
 
@@ -2887,7 +2882,7 @@
 
     if (VK_SUCCESS == result) {
         loader_platform_thread_lock_mutex(&globalLock);
-        swapChainMap[*pSwapChain]->createInfo = *pCreateInfo;
+        swapChainMap[pSwapChain->handle]->createInfo = *pCreateInfo;
         loader_platform_thread_unlock_mutex(&globalLock);
     }
 
@@ -2895,64 +2890,61 @@
 }
 
 VK_LAYER_EXPORT VkResult VKAPI vkDestroySwapChainWSI(
+    VkDevice                        device,
     VkSwapChainWSI swapChain)
 {
     loader_platform_thread_lock_mutex(&globalLock);
-    if (swapChainMap.find(swapChain) != swapChainMap.end()) {
-        MT_SWAP_CHAIN_INFO* pInfo = swapChainMap[swapChain];
+    if (swapChainMap.find(swapChain.handle) != swapChainMap.end()) {
+        MT_SWAP_CHAIN_INFO* pInfo = swapChainMap[swapChain.handle];
 
         if (pInfo->images.size() > 0) {
             for (auto it = pInfo->images.begin(); it != pInfo->images.end(); it++) {
-                clear_object_binding(swapChain, it->image.handle, VK_OBJECT_TYPE_SWAP_CHAIN_WSI);
-                freeMemObjInfo(swapChain, it->memory, true);
+                clear_object_binding((void*) swapChain.handle, it->image.handle, VK_OBJECT_TYPE_SWAP_CHAIN_WSI);
                 auto image_item = imageMap.find(it->image.handle);
                 if (image_item != imageMap.end())
                     imageMap.erase(image_item);
             }
         }
         delete pInfo;
-        swapChainMap.erase(swapChain);
+        swapChainMap.erase(swapChain.handle);
     }
     loader_platform_thread_unlock_mutex(&globalLock);
-    return get_dispatch_table(mem_tracker_device_table_map, swapChain)->DestroySwapChainWSI(swapChain);
+    return get_dispatch_table(mem_tracker_device_table_map, (void*) swapChain.handle)->DestroySwapChainWSI(device, swapChain);
 }
 
 VK_LAYER_EXPORT VkResult VKAPI vkGetSwapChainInfoWSI(
+    VkDevice                device,
     VkSwapChainWSI          swapChain,
     VkSwapChainInfoTypeWSI  infoType,
     size_t                 *pDataSize,
     void                   *pData)
 {
-    VkResult result = get_dispatch_table(mem_tracker_device_table_map, swapChain)->GetSwapChainInfoWSI(swapChain, infoType, pDataSize, pData);
+    VkResult result = get_dispatch_table(mem_tracker_device_table_map, (void*) swapChain.handle)->GetSwapChainInfoWSI(device, swapChain, infoType, pDataSize, pData);
 
-    if (infoType == VK_SWAP_CHAIN_INFO_TYPE_PERSISTENT_IMAGES_WSI && result == VK_SUCCESS) {
-        const size_t count = *pDataSize / sizeof(VkSwapChainImageInfoWSI);
-        MT_SWAP_CHAIN_INFO *pInfo = swapChainMap[swapChain];
+    if (infoType == VK_SWAP_CHAIN_INFO_TYPE_IMAGES_WSI && result == VK_SUCCESS) {
+        const size_t count = *pDataSize / sizeof(VkSwapChainImagePropertiesWSI);
+        MT_SWAP_CHAIN_INFO *pInfo = swapChainMap[swapChain.handle];
 
         if (pInfo->images.empty()) {
             pInfo->images.resize(count);
             memcpy(&pInfo->images[0], pData, sizeof(pInfo->images[0]) * count);
 
             if (pInfo->images.size() > 0) {
-                for (std::vector<VkSwapChainImageInfoWSI>::const_iterator it = pInfo->images.begin();
+                for (std::vector<VkSwapChainImagePropertiesWSI>::const_iterator it = pInfo->images.begin();
                      it != pInfo->images.end(); it++) {
                     // Add image object binding, then insert the new Mem Object and then bind it to created image
                     add_object_create_info(it->image.handle, VK_OBJECT_TYPE_SWAP_CHAIN_WSI, &pInfo->createInfo);
-                    add_object_binding_info(it->image.handle, VK_OBJECT_TYPE_IMAGE, it->memory);
-                    add_mem_obj_info(swapChain, it->memory, NULL);
-                    if (VK_FALSE == set_mem_binding(swapChain, it->memory, it->image.handle, VK_OBJECT_TYPE_IMAGE)) {
-                        log_msg(mdd(swapChain), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_IMAGE, it->image.handle, 0, MEMTRACK_MEMORY_BINDING_ERROR, "MEM",
-                                "In vkGetSwapChainInfoWSI(), unable to set image %#" PRIxLEAST64 " binding to mem obj %#" PRIxLEAST64, it->image.handle, it->memory.handle);
-                    }
                 }
             }
         } else {
+            const size_t count = *pDataSize / sizeof(VkSwapChainImagePropertiesWSI);
+            MT_SWAP_CHAIN_INFO *pInfo = swapChainMap[swapChain.handle];
             const bool mismatch = (pInfo->images.size() != count ||
                     memcmp(&pInfo->images[0], pData, sizeof(pInfo->images[0]) * count));
 
             if (mismatch) {
                 // TODO : Want swapChain to be srcObj here
-                log_msg(mdd(swapChain), VK_DBG_REPORT_WARN_BIT, VK_OBJECT_TYPE_SWAP_CHAIN_WSI, 0, 0, MEMTRACK_NONE, "SWAP_CHAIN",
+                log_msg(mdd((void*) swapChain.handle), VK_DBG_REPORT_WARN_BIT, VK_OBJECT_TYPE_SWAP_CHAIN_WSI, 0, 0, MEMTRACK_NONE, "SWAP_CHAIN",
                         "vkGetSwapChainInfoWSI(%p, VK_SWAP_CHAIN_INFO_TYPE_PERSISTENT_IMAGES_WSI) returned mismatching data", swapChain);
             }
         }
@@ -3145,14 +3137,20 @@
         return (PFN_vkVoidFunction) vkGetDeviceQueue;
 
     layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(dev), layer_data_map);
-    if (my_device_data->wsi_lunarg_enabled)
+    if (my_device_data->wsi_enabled)
     {
+        if (!strcmp(funcName, "vkGetSurfaceInfoWSI"))
+            return (PFN_vkVoidFunction) vkGetSurfaceInfoWSI;
         if (!strcmp(funcName, "vkCreateSwapChainWSI"))
             return (PFN_vkVoidFunction) vkCreateSwapChainWSI;
         if (!strcmp(funcName, "vkDestroySwapChainWSI"))
             return (PFN_vkVoidFunction) vkDestroySwapChainWSI;
         if (!strcmp(funcName, "vkGetSwapChainInfoWSI"))
             return (PFN_vkVoidFunction) vkGetSwapChainInfoWSI;
+        if (!strcmp(funcName, "vkAcquireNextImageWSI"))
+            return (PFN_vkVoidFunction) vkAcquireNextImageWSI;
+        if (!strcmp(funcName, "vkQueuePresentWSI"))
+            return (PFN_vkVoidFunction) vkQueuePresentWSI;
     }
 
     VkLayerDispatchTable *pDisp  = get_dispatch_table(mem_tracker_device_table_map, dev);