layers: Change MemTracker maps to contain structs

Remove one unnecessary level of indirection.

Conflicts:
	layers/mem_tracker.cpp
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index 62b00fb..8bcd30a 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -51,11 +51,11 @@
 
 #define MAX_BINDING 0xFFFFFFFF
 
-unordered_map<VkCmdBuffer,    MT_CB_INFO*>          cbMap;
-unordered_map<VkDeviceMemory, MT_MEM_OBJ_INFO*>     memObjMap;
-unordered_map<VkObject,       MT_OBJ_INFO*>         objectMap;
-unordered_map<VkFence,        MT_FENCE_INFO*>       fenceMap;    // Map fence to fence info
-unordered_map<VkQueue,        MT_QUEUE_INFO*>       queueMap;
+unordered_map<VkCmdBuffer,    MT_CB_INFO>           cbMap;
+unordered_map<VkDeviceMemory, MT_MEM_OBJ_INFO>      memObjMap;
+unordered_map<VkObject,       MT_OBJ_INFO>          objectMap;
+unordered_map<VkFence,        MT_FENCE_INFO>        fenceMap;    // Map fence to fence info
+unordered_map<VkQueue,        MT_QUEUE_INFO>        queueMap;
 unordered_map<VkSwapChainWSI, MT_SWAP_CHAIN_INFO*>  swapChainMap;
 
 // TODO : Add per-device fence completion
@@ -65,21 +65,15 @@
 // Add new queue for this device to map container
 static void addQueueInfo(const VkQueue queue)
 {
-    MT_QUEUE_INFO* pInfo   = new MT_QUEUE_INFO;
+    MT_QUEUE_INFO* pInfo   = &queueMap[queue];
     pInfo->lastRetiredId   = 0;
     pInfo->lastSubmittedId = 0;
-    queueMap[queue]        = pInfo;
 }
 
 static void deleteQueueInfoList(
     void)
 {
     // Process queue list, cleaning up each entry before deleting
-    if (queueMap.size() <= 0)
-        return;
-    for (unordered_map<VkQueue, MT_QUEUE_INFO*>::iterator ii=queueMap.begin(); ii!=queueMap.end(); ++ii) {
-        (*ii).second->pQueueCmdBuffers.clear();
-    }
     queueMap.clear();
 }
 
@@ -94,19 +88,16 @@
 static void addCBInfo(
     const VkCmdBuffer cb)
 {
-    MT_CB_INFO* pInfo = new MT_CB_INFO;
-    memset(pInfo, 0, (sizeof(MT_CB_INFO) - sizeof(list<VkDeviceMemory>)));
-    pInfo->cmdBuffer = cb;
-    cbMap[cb]        = pInfo;
+    cbMap[cb].cmdBuffer = cb;
 }
 
 // Return ptr to Info in CB map, or NULL if not found
 static MT_CB_INFO* getCBInfo(
     const VkCmdBuffer cb)
 {
-    unordered_map<VkCmdBuffer, MT_CB_INFO*>::iterator item = cbMap.find(cb);
+    unordered_map<VkCmdBuffer, MT_CB_INFO>::iterator item = cbMap.find(cb);
     if (item != cbMap.end()) {
-        return (*item).second;
+        return &(*item).second;
     } else {
         return NULL;
     }
@@ -116,9 +107,9 @@
 static MT_OBJ_INFO* getObjectInfo(
     const VkObject object)
 {
-    unordered_map<VkObject, MT_OBJ_INFO*>::iterator item = objectMap.find(object);
+    unordered_map<VkObject, MT_OBJ_INFO>::iterator item = objectMap.find(object);
     if (item != objectMap.end()) {
-        return (*item).second;
+        return &(*item).second;
     } else {
         return NULL;
     }
@@ -131,7 +122,7 @@
     const int        struct_size,
     const char      *name_prefix)
 {
-    MT_OBJ_INFO* pInfo = new MT_OBJ_INFO;
+    MT_OBJ_INFO* pInfo = &objectMap[object];
     memset(pInfo, 0, sizeof(MT_OBJ_INFO));
     memcpy(&pInfo->create_info, pCreateInfo, struct_size);
     sprintf(pInfo->object_name, "%s_%p", name_prefix, object);
@@ -139,7 +130,6 @@
     pInfo->object     = object;
     pInfo->ref_count  = 1;
     pInfo->sType      = sType;
-    objectMap[object] = pInfo;
 
     return pInfo;
 }
@@ -150,13 +140,10 @@
     VkQueue queue)
 {
     // Create fence object
-    MT_QUEUE_INFO* pQueueInfo = queueMap[queue];
     uint64_t       fenceId    = g_currentFenceId++;
     if (fence != NULL) {
-        MT_FENCE_INFO* pFenceInfo = new MT_FENCE_INFO;
-        pFenceInfo->fenceId = fenceId;
-        pFenceInfo->queue = queue;
-        fenceMap[fence] = pFenceInfo;
+        fenceMap[fence].fenceId = fenceId;
+        fenceMap[fence].queue = queue;
         // Validate that fence is in UNSIGNALED state
         MT_OBJ_INFO* pObjectInfo = getObjectInfo(fence);
         if (pObjectInfo != NULL) {
@@ -168,7 +155,7 @@
         }
     }
     // Update most recently submitted fence and fenceId for Queue
-    pQueueInfo->lastSubmittedId = fenceId;
+    queueMap[queue].lastSubmittedId = fenceId;
     return fenceId;
 }
 
@@ -176,28 +163,20 @@
 static void deleteFenceInfo(
     VkFence fence)
 {
-    unordered_map<VkFence, MT_FENCE_INFO*>::iterator item;
-    item = fenceMap.find(fence);
-    if (item != fenceMap.end()) {
-        MT_FENCE_INFO* pDelInfo = (*item).second;
-        if (pDelInfo != NULL) {
-            delete pDelInfo;
-        }
-        fenceMap.erase(item);
-    }
+    fenceMap.erase(fence);
 }
 
 // Record information when a fence is known to be signalled
 static void updateFenceTracking(
     VkFence fence)
 {
-    unordered_map<VkFence, MT_FENCE_INFO*>::iterator fence_item = fenceMap.find(fence);
+    unordered_map<VkFence, MT_FENCE_INFO>::iterator fence_item = fenceMap.find(fence);
     if (fence_item != fenceMap.end()) {
-        MT_FENCE_INFO *pCurFenceInfo = (*fence_item).second;
+        MT_FENCE_INFO *pCurFenceInfo = &(*fence_item).second;
         VkQueue queue = pCurFenceInfo->queue;
-        unordered_map<VkQueue, MT_QUEUE_INFO*>::iterator queue_item = queueMap.find(queue);
+        unordered_map<VkQueue, MT_QUEUE_INFO>::iterator queue_item = queueMap.find(queue);
         if (queue_item != queueMap.end()) {
-            MT_QUEUE_INFO *pQueueInfo = (*queue_item).second;
+            MT_QUEUE_INFO *pQueueInfo = &(*queue_item).second;
             if (pQueueInfo->lastRetiredId < pCurFenceInfo->fenceId) {
                 pQueueInfo->lastRetiredId = pCurFenceInfo->fenceId;
             }
@@ -217,21 +196,21 @@
 static void retireQueueFences(
     VkQueue queue)
 {
-    MT_QUEUE_INFO *pQueueInfo = queueMap[queue];
-    // Set Queue's lastRetired to lastSubmitted
+    MT_QUEUE_INFO *pQueueInfo = &queueMap[queue];
+    // Set queue's lastRetired to lastSubmitted indicating all fences completed
     pQueueInfo->lastRetiredId = pQueueInfo->lastSubmittedId;
 }
 
-// Helper routine that updates fence list for all queues to all-retired
+// Helper routine that updates all queues to all-retired
 static void retireDeviceFences(
     VkDevice device)
 {
     // Process each queue for device
     // TODO: Add multiple device support
-    if (queueMap.size() <= 0)
-        return;
-    for (unordered_map<VkQueue, MT_QUEUE_INFO*>::iterator ii=queueMap.begin(); ii!=queueMap.end(); ++ii) {
-        retireQueueFences((*ii).first);
+    for (unordered_map<VkQueue, MT_QUEUE_INFO>::iterator ii=queueMap.begin(); ii!=queueMap.end(); ++ii) {
+        // Set queue's lastRetired to lastSubmitted indicating all fences completed
+        MT_QUEUE_INFO *pQueueInfo = &(*ii).second;
+        pQueueInfo->lastRetiredId = pQueueInfo->lastSubmittedId;
     }
 }
 
@@ -240,9 +219,9 @@
 static MT_MEM_OBJ_INFO* getMemObjInfo(
     const VkDeviceMemory mem)
 {
-    unordered_map<VkDeviceMemory, MT_MEM_OBJ_INFO*>::iterator item = memObjMap.find(mem);
+    unordered_map<VkDeviceMemory, MT_MEM_OBJ_INFO>::iterator item = memObjMap.find(mem);
     if (item != memObjMap.end()) {
-        return (*item).second;
+        return &(*item).second;
     } else {
         return NULL;
     }
@@ -252,17 +231,15 @@
     const VkDeviceMemory     mem,
     const VkMemoryAllocInfo *pAllocInfo)
 {
-    MT_MEM_OBJ_INFO* pInfo = new MT_MEM_OBJ_INFO;
-    pInfo->refCount        = 0;
-    memset(&pInfo->allocInfo, 0, sizeof(VkMemoryAllocInfo));
-
+    memObjMap[mem].refCount = 0;
     if (pAllocInfo) {  // MEM alloc created by vkCreateSwapChainWSI() doesn't have alloc info struct
-        memcpy(&pInfo->allocInfo, pAllocInfo, sizeof(VkMemoryAllocInfo));
+        memcpy(&memObjMap[mem].allocInfo, pAllocInfo, sizeof(VkMemoryAllocInfo));
         // TODO:  Update for real hardware, actually process allocation info structures
-        pInfo->allocInfo.pNext = NULL;
+        memObjMap[mem].allocInfo.pNext = NULL;
+    } else {
+        memset(&memObjMap[mem].allocInfo, 0, sizeof(VkMemoryAllocInfo));
     }
-    pInfo->mem = mem;
-    memObjMap[mem] = pInfo;
+    memObjMap[mem].mem = mem;
 }
 
 // Find CB Info and add mem binding to list container
@@ -372,11 +349,7 @@
     result = freeCBBindings(cb);
     // Delete the CBInfo info
     if (result == VK_TRUE) {
-        if (cbMap.find(cb) != cbMap.end()) {
-            MT_CB_INFO* pDelInfo = cbMap[cb];
-            delete pDelInfo;
-            cbMap.erase(cb);
-        }
+        cbMap.erase(cb);
     }
     return result;
 }
@@ -385,14 +358,11 @@
 static bool32_t deleteCBInfoList(
     void)
 {
-    bool32_t result = VK_TRUE;
-    if (cbMap.size() <= 0)
-        return result;
-    for (unordered_map<VkCmdBuffer, MT_CB_INFO*>::iterator ii=cbMap.begin(); ii!=cbMap.end(); ++ii) {
+    for (unordered_map<VkCmdBuffer, MT_CB_INFO>::iterator ii=cbMap.begin(); ii!=cbMap.end(); ++ii) {
         freeCBBindings((*ii).first);
-        delete (*ii).second;
     }
-    return result;
+    cbMap.clear();
+    return VK_TRUE;
 }
 
 // For given MemObjInfo, report Obj & CB bindings
@@ -434,10 +404,8 @@
 static void deleteMemObjInfo(
     VkDeviceMemory mem)
 {
-    unordered_map<VkDeviceMemory, MT_MEM_OBJ_INFO*>::iterator item = memObjMap.find(mem);
+    unordered_map<VkDeviceMemory, MT_MEM_OBJ_INFO>::iterator item = memObjMap.find(mem);
     if (item != memObjMap.end()) {
-        MT_MEM_OBJ_INFO* pDelInfo = (*item).second;
-        delete pDelInfo;
         memObjMap.erase(item);
     }
     else {
@@ -460,7 +428,7 @@
         result = VK_FALSE;
     } else if (pCBInfo->lastSubmittedQueue != NULL) {
         VkQueue queue = pCBInfo->lastSubmittedQueue;
-        MT_QUEUE_INFO *pQueueInfo = queueMap[queue];
+        MT_QUEUE_INFO *pQueueInfo = &queueMap[queue];
         if (pCBInfo->fenceId > pQueueInfo->lastRetiredId) {
             char str[1024];
             sprintf(str, "fence %p for CB %p has not been checked for completion",
@@ -642,8 +610,8 @@
     layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, MEMTRACK_NONE, "MEM", str);
     if (objectMap.size() <= 0)
         return;
-    for (unordered_map<VkObject, MT_OBJ_INFO*>::iterator ii=objectMap.begin(); ii!=objectMap.end(); ++ii) {
-        pInfo = (*ii).second;
+    for (unordered_map<VkObject, MT_OBJ_INFO>::iterator ii=objectMap.begin(); ii!=objectMap.end(); ++ii) {
+        pInfo = &(*ii).second;
         sprintf(str, "    ObjInfo %p has object %p, pMemObjInfo %p", pInfo, pInfo->object, pInfo->pMemObjInfo);
         layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, pInfo->object, 0, MEMTRACK_NONE, "MEM", str);
     }
@@ -689,8 +657,8 @@
     if (memObjMap.size() <= 0)
         return;
 
-    for (unordered_map<VkDeviceMemory, MT_MEM_OBJ_INFO*>::iterator ii=memObjMap.begin(); ii!=memObjMap.end(); ++ii) {
-        pInfo = (*ii).second;
+    for (unordered_map<VkDeviceMemory, MT_MEM_OBJ_INFO>::iterator ii=memObjMap.begin(); ii!=memObjMap.end(); ++ii) {
+        pInfo = &(*ii).second;
 
         sprintf(str, "    ===MemObjInfo at %p===", (void*)pInfo);
         layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, MEMTRACK_NONE, "MEM", str);
@@ -742,8 +710,8 @@
     if (cbMap.size() <= 0)
         return;
 
-    for (unordered_map<VkCmdBuffer, MT_CB_INFO*>::iterator ii=cbMap.begin(); ii!=cbMap.end(); ++ii) {
-        pCBInfo = (*ii).second;
+    for (unordered_map<VkCmdBuffer, MT_CB_INFO>::iterator ii=cbMap.begin(); ii!=cbMap.end(); ++ii) {
+        pCBInfo = &(*ii).second;
 
         sprintf(str, "    CB Info (%p) has CB %p, fenceId %" PRIx64", and fence %p",
             (void*)pCBInfo, (void*)pCBInfo->cmdBuffer, pCBInfo->fenceId,
@@ -828,8 +796,8 @@
     // Report any memory leaks
     MT_MEM_OBJ_INFO* pInfo = NULL;
     if (memObjMap.size() > 0) {
-        for (unordered_map<VkDeviceMemory, MT_MEM_OBJ_INFO*>::iterator ii=memObjMap.begin(); ii!=memObjMap.end(); ++ii) {
-            pInfo = (*ii).second;
+        for (unordered_map<VkDeviceMemory, MT_MEM_OBJ_INFO>::iterator ii=memObjMap.begin(); ii!=memObjMap.end(); ++ii) {
+            pInfo = &(*ii).second;
 
             if (pInfo->allocInfo.allocationSize != 0) {
                 sprintf(str, "Mem Object %p has not been freed. You should clean up this memory by calling "
@@ -1096,7 +1064,7 @@
     VkObjectType objType,
     VkObject     object)
 {
-    unordered_map<VkObject, MT_OBJ_INFO*>::iterator item;
+    unordered_map<VkObject, MT_OBJ_INFO>::iterator item;
     loader_platform_thread_lock_mutex(&globalLock);
 
     // First check if this is a CmdBuffer or fence
@@ -1112,7 +1080,7 @@
     }
 
     if ((item = objectMap.find(object)) != objectMap.end()) {
-        MT_OBJ_INFO* pDelInfo = (*item).second;
+        MT_OBJ_INFO* pDelInfo = &(*item).second;
         if (pDelInfo->pMemObjInfo) {
             // Wsi allocated Memory is tied to image object so clear the binding and free that memory automatically
             if (0 == pDelInfo->pMemObjInfo->allocInfo.allocationSize) { // Wsi allocated memory has NULL allocInfo w/ 0 size
@@ -1133,7 +1101,6 @@
                 clearObjectBinding(object);
             }
         }
-        delete pDelInfo;
         objectMap.erase(item);
     }
 
@@ -2082,8 +2049,6 @@
                 clearObjectBinding(it->image);
                 freeMemObjInfo(it->memory, true);
 
-                MT_OBJ_INFO* pDelInfo = objectMap[it->image];
-                delete pDelInfo;
                 objectMap.erase(it->image);
             }
         }