diff options
| author | Tobin Ehlis <tobine@google.com> | 2016-10-25 22:00:47 -0600 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-10-25 22:00:47 -0600 |
| commit | 51116102d63f1ef61a84de0d9d9ffcfe01424763 (patch) | |
| tree | 65b2814cc1d8db03c3dd001449e2912b7bb70651 /layers/core_validation.cpp | |
| parent | b302313081b57a659279e97324aab78315adb240 (diff) | |
| download | usermoji-51116102d63f1ef61a84de0d9d9ffcfe01424763.tar.xz | |
layers:Refactor PostCallRecordFreeMemory()
Simplify the code based on review feedback. Don't need loop guard and
don't need to clear the set of struct that's about to be freed.
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 89babdda..b4b080a6 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -5108,31 +5108,27 @@ static bool PreCallValidateFreeMemory(layer_data *dev_data, VkDeviceMemory mem, static void PostCallRecordFreeMemory(layer_data *dev_data, VkDeviceMemory mem, DEVICE_MEM_INFO *mem_info, VK_OBJECT obj_struct) { // Clear mem binding for any bound objects - if (mem_info->obj_bindings.size() > 0) { - for (auto obj : mem_info->obj_bindings) { - log_msg(dev_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, obj.type, obj.handle, __LINE__, - MEMTRACK_FREED_MEM_REF, "MEM", "VK Object 0x%" PRIxLEAST64 " still has a reference to mem obj 0x%" PRIxLEAST64, - obj.handle, (uint64_t)mem_info->mem); - switch (obj.type) { - case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT: { - auto image_state = getImageState(dev_data, reinterpret_cast<VkImage &>(obj.handle)); - assert(image_state); // Any destroyed images should already be removed from bindings - image_state->binding.mem = MEMORY_UNBOUND; - break; - } - case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT: { - auto buff_node = getBufferNode(dev_data, reinterpret_cast<VkBuffer &>(obj.handle)); - assert(buff_node); // Any destroyed buffers should already be removed from bindings - buff_node->binding.mem = MEMORY_UNBOUND; - break; - } - default: - // Should only have buffer or image objects bound to memory - assert(0); - } + for (auto obj : mem_info->obj_bindings) { + log_msg(dev_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, obj.type, obj.handle, __LINE__, MEMTRACK_FREED_MEM_REF, + "MEM", "VK Object 0x%" PRIxLEAST64 " still has a reference to mem obj 0x%" PRIxLEAST64, obj.handle, + (uint64_t)mem_info->mem); + switch (obj.type) { + case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT: { + auto image_state = getImageState(dev_data, reinterpret_cast<VkImage &>(obj.handle)); + assert(image_state); // Any destroyed images should already be removed from bindings + image_state->binding.mem = MEMORY_UNBOUND; + break; + } + case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT: { + auto buff_node = getBufferNode(dev_data, reinterpret_cast<VkBuffer &>(obj.handle)); + assert(buff_node); // Any destroyed buffers should already be removed from bindings + buff_node->binding.mem = MEMORY_UNBOUND; + break; + } + default: + // Should only have buffer or image objects bound to memory + assert(0); } - // Clear the list of hanging references - mem_info->obj_bindings.clear(); } // Any bound cmd buffers are now invalid invalidateCommandBuffers(mem_info->cb_bindings, obj_struct); |
