diff options
| author | Chris Forbes <chrisforbes@google.com> | 2016-03-31 17:37:36 +1300 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-04-01 14:24:37 -0600 |
| commit | 830679111a357460247993d2ed43dfdf2945f592 (patch) | |
| tree | 22f3a8209b3a179475a0c6da9080ed0313bfb3dc /layers/core_validation.cpp | |
| parent | 5ddf30b518566a62cdcba3287035d5016c26127c (diff) | |
| download | usermoji-830679111a357460247993d2ed43dfdf2945f592.tar.xz | |
layers: Replace DEVICE_MEM_INFO::pObjBindings with unordered_set
- Add operator== && std::hash specialization required for use in
unordered_set.
- Replace list by unordered_set
- Delete piles of stuff
V2: Fix accidentally inverted error condition
Signed-off-by: Chris Forbes <chrisforbes@google.com>
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 57 |
1 files changed, 15 insertions, 42 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 495ebf5e..d250a4b0 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -618,7 +618,7 @@ static void delete_cmd_buf_info_list(layer_data *my_data) { static VkBool32 reportMemReferencesAndCleanUp(layer_data *dev_data, DEVICE_MEM_INFO *pMemObjInfo) { VkBool32 skipCall = VK_FALSE; size_t cmdBufRefCount = pMemObjInfo->pCommandBufferBindings.size(); - size_t objRefCount = pMemObjInfo->pObjBindings.size(); + size_t objRefCount = pMemObjInfo->objBindings.size(); if ((pMemObjInfo->pCommandBufferBindings.size()) != 0) { skipCall = log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, @@ -640,14 +640,14 @@ static VkBool32 reportMemReferencesAndCleanUp(layer_data *dev_data, DEVICE_MEM_I pMemObjInfo->pCommandBufferBindings.clear(); } - if (objRefCount > 0 && pMemObjInfo->pObjBindings.size() > 0) { - for (auto it = pMemObjInfo->pObjBindings.begin(); it != pMemObjInfo->pObjBindings.end(); ++it) { - log_msg(dev_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, it->type, it->handle, __LINE__, + if (objRefCount > 0 && pMemObjInfo->objBindings.size() > 0) { + for (auto obj : pMemObjInfo->objBindings) { + log_msg(dev_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, obj.type, obj.handle, __LINE__, MEMTRACK_FREED_MEM_REF, "MEM", "VK Object %#" PRIxLEAST64 " still has a reference to mem obj %#" PRIxLEAST64, - it->handle, (uint64_t)pMemObjInfo->mem); + obj.handle, (uint64_t)pMemObjInfo->mem); } // Clear the list of hanging references - pMemObjInfo->pObjBindings.clear(); + pMemObjInfo->objBindings.clear(); } return skipCall; } @@ -720,7 +720,7 @@ static VkBool32 freeMemObjInfo(layer_data *dev_data, void *object, VkDeviceMemor } // Now verify that no references to this mem obj remain and remove bindings - if (pInfo->pCommandBufferBindings.size() || pInfo->pObjBindings.size()) { + if (pInfo->pCommandBufferBindings.size() || pInfo->objBindings.size()) { skipCall |= reportMemReferencesAndCleanUp(dev_data, pInfo); } // Delete mem obj info @@ -758,15 +758,7 @@ static VkBool32 clear_object_binding(layer_data *dev_data, void *dispObj, uint64 if (pMemObjInfo) { // This obj is bound to a memory object. Remove the reference to this object in that memory object's list, // and set the objects memory binding pointer to NULL. - VkBool32 clearSucceeded = VK_FALSE; - for (auto it = pMemObjInfo->pObjBindings.begin(); it != pMemObjInfo->pObjBindings.end(); ++it) { - if ((it->handle == handle) && (it->type == type)) { - pMemObjInfo->pObjBindings.erase(it); - clearSucceeded = VK_TRUE; - break; - } - } - if (VK_FALSE == clearSucceeded) { + if (!pMemObjInfo->objBindings.erase({handle, type})) { skipCall |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, type, handle, __LINE__, MEMTRACK_INVALID_OBJECT, "MEM", "While trying to clear mem binding for %s obj %#" PRIxLEAST64 @@ -814,10 +806,7 @@ static VkBool32 set_mem_binding(layer_data *dev_data, void *dispatch_object, VkD ") which has already been bound to mem object %#" PRIxLEAST64, apiName, (uint64_t)mem, handle, (uint64_t)pPrevBinding->mem); } else { - MT_OBJ_HANDLE_TYPE oht; - oht.handle = handle; - oht.type = type; - pMemInfo->pObjBindings.push_front(oht); + pMemInfo->objBindings.insert({handle, type}); // For image objects, make sure default memory state is correctly set // TODO : What's the best/correct way to handle this? if (VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT == type) { @@ -856,23 +845,7 @@ static VkBool32 set_sparse_mem_binding(layer_data *dev_data, void *dispObject, V // non-null case so should have real mem obj DEVICE_MEM_INFO *pInfo = get_mem_obj_info(dev_data, mem); if (pInfo) { - // Search for object in memory object's binding list - VkBool32 found = VK_FALSE; - if (pInfo->pObjBindings.size() > 0) { - for (auto it = pInfo->pObjBindings.begin(); it != pInfo->pObjBindings.end(); ++it) { - if (((*it).handle == handle) && ((*it).type == type)) { - found = VK_TRUE; - break; - } - } - } - // If not present, add to list - if (found == VK_FALSE) { - MT_OBJ_HANDLE_TYPE oht; - oht.handle = handle; - oht.type = type; - pInfo->pObjBindings.push_front(oht); - } + pInfo->objBindings.insert({handle, type}); // Need to set mem binding for this object pObjBindInfo->mem = mem; } @@ -939,7 +912,7 @@ static void print_mem_list(layer_data *dev_data, void *dispObj) { __LINE__, MEMTRACK_NONE, "MEM", " Mem object: %#" PRIxLEAST64, (uint64_t)(pInfo->mem)); log_msg(dev_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, 0, __LINE__, MEMTRACK_NONE, "MEM", " Ref Count: " PRINTF_SIZE_T_SPECIFIER, - pInfo->pCommandBufferBindings.size() + pInfo->pObjBindings.size()); + pInfo->pCommandBufferBindings.size() + pInfo->objBindings.size()); if (0 != pInfo->allocInfo.allocationSize) { string pAllocInfoMsg = vk_print_vkmemoryallocateinfo(&pInfo->allocInfo, "MEM(INFO): "); log_msg(dev_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, 0, @@ -951,11 +924,11 @@ static void print_mem_list(layer_data *dev_data, void *dispObj) { log_msg(dev_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, 0, __LINE__, MEMTRACK_NONE, "MEM", " VK OBJECT Binding list of size " PRINTF_SIZE_T_SPECIFIER " elements:", - pInfo->pObjBindings.size()); - if (pInfo->pObjBindings.size() > 0) { - for (list<MT_OBJ_HANDLE_TYPE>::iterator it = pInfo->pObjBindings.begin(); it != pInfo->pObjBindings.end(); ++it) { + pInfo->objBindings.size()); + if (pInfo->objBindings.size() > 0) { + for (auto obj : pInfo->objBindings) { log_msg(dev_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, - 0, __LINE__, MEMTRACK_NONE, "MEM", " VK OBJECT %" PRIu64, it->handle); + 0, __LINE__, MEMTRACK_NONE, "MEM", " VK OBJECT %" PRIu64, obj.handle); } } |
