layers: MemTracker clears CB refs if CB obj destroyed and correctly destroys Wsi created images along w/ freeing their memory.
diff --git a/layers/mem_tracker.c b/layers/mem_tracker.c
index b7e3f65..8007f5d 100644
--- a/layers/mem_tracker.c
+++ b/layers/mem_tracker.c
@@ -1289,10 +1289,13 @@
 
 XGL_LAYER_EXPORT XGL_RESULT XGLAPI xglDestroyObject(XGL_OBJECT object)
 {
-    // TODO : Verify that no memory is bound to this object at time of destruction
+    // First check if this is a CmdBuffer
+    if (NULL != getGlobalCBNode((XGL_CMD_BUFFER)object)) {
+        deleteGlobalCBNode((XGL_CMD_BUFFER)object);
+    }
+    // Now locate node in global list along with prev node
     GLOBAL_OBJECT_NODE* pTrav = pGlobalObjectHead;
     GLOBAL_OBJECT_NODE* pPrev = pTrav;
-    // First locate node in global list along with prev node
     while (pTrav) {
         if (object == pTrav->object)
             break;
@@ -1301,11 +1304,19 @@
     }
     if (pTrav) {
         if (pTrav->pMemNode) {
-            char str[1024];
-            sprintf(str, "Destroying obj %p that is still bound to memory object %p\nYou should first clear binding by calling xglBindObjectMemory(%p, 0, XGL_NULL_HANDLE)", object, (void*)pTrav->pMemNode->mem, object);
-            layerCbMsg(XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0, object, 0, MEMTRACK_DESTROY_OBJECT_ERROR, "MEM", str);
-            // From the spec : If an object has previous memory binding, it is required to unbind memory from an API object before it is destroyed.
-            clearObjectBinding(object);
+            // Wsi allocated Memory is tied to image object so clear the binding and free that memory automatically
+            if (0 == pTrav->pMemNode->allocInfo.allocationSize) { // Wsi allocated memory has NULL allocInfo w/ 0 size
+                XGL_GPU_MEMORY memToFree = pTrav->pMemNode->mem;
+                clearObjectBinding(object);
+                freeMemNode(memToFree);
+            }
+            else {
+                char str[1024];
+                sprintf(str, "Destroying obj %p that is still bound to memory object %p\nYou should first clear binding by calling xglBindObjectMemory(%p, 0, XGL_NULL_HANDLE)", object, (void*)pTrav->pMemNode->mem, object);
+                layerCbMsg(XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0, object, 0, MEMTRACK_DESTROY_OBJECT_ERROR, "MEM", str);
+                // From the spec : If an object has previous memory binding, it is required to unbind memory from an API object before it is destroyed.
+                clearObjectBinding(object);
+            }
         }
         if (pGlobalObjectHead == pTrav) // update HEAD if needed
             pGlobalObjectHead = pTrav->pNext;