diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2016-03-03 14:50:52 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2016-03-04 11:24:38 -0700 |
| commit | d5515ccd95694aaf7b8b1a5b2bd8e6e9cd89bb78 (patch) | |
| tree | cdad34881e3f21229ee02f047478a824b5dc91fa | |
| parent | 5ad7cbb06941ee4a5d71e5b4a39a69d3d1b3b1b7 (diff) | |
| download | usermoji-d5515ccd95694aaf7b8b1a5b2bd8e6e9cd89bb78.tar.xz | |
layers: LX401, Handle VK_WHOLE_SIZE in flush/invalidateMappedMemoryRanges
Mem_tracker was ignoring this setting and emitting invalid error messages.
Change-Id: Id26a5e0bdf3f5c907356a384b9febbae1e885c27
| -rw-r--r-- | layers/mem_tracker.cpp | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index 33766e9d..77651f90 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -1622,6 +1622,7 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUnmapMemory( VkBool32 validateMemoryIsMapped( layer_data *my_data, + const char *funcName, uint32_t memRangeCount, const VkMappedMemoryRange *pMemRanges) { @@ -1629,10 +1630,33 @@ validateMemoryIsMapped( for (uint32_t i = 0; i < memRangeCount; ++i) { auto mem_element = my_data->memObjMap.find(pMemRanges[i].memory); if (mem_element != my_data->memObjMap.end()) { - if (mem_element->second.memRange.offset > pMemRanges[i].offset || - (mem_element->second.memRange.offset + mem_element->second.memRange.size) < (pMemRanges[i].offset + pMemRanges[i].size)) { - skipCall |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, (uint64_t)pMemRanges[i].memory, - __LINE__, MEMTRACK_INVALID_MAP, "MEM", "Memory must be mapped before it can be flushed or invalidated."); + if (mem_element->second.memRange.offset > pMemRanges[i].offset) { + skipCall |= log_msg( + my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, + (uint64_t)pMemRanges[i].memory, __LINE__, + MEMTRACK_INVALID_MAP, "MEM", + "%s: Flush/Invalidate offset (" PRINTF_SIZE_T_SPECIFIER + ") is less than Memory Object's offset " + "(" PRINTF_SIZE_T_SPECIFIER ").", + funcName, pMemRanges[i].offset, + mem_element->second.memRange.offset); + } + if ((mem_element->second.memRange.size != VK_WHOLE_SIZE) && + ((mem_element->second.memRange.offset + + mem_element->second.memRange.size) < + (pMemRanges[i].offset + pMemRanges[i].size))) { + skipCall |= log_msg( + my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, + (uint64_t)pMemRanges[i].memory, __LINE__, + MEMTRACK_INVALID_MAP, "MEM", + "%s: Flush/Invalidate upper-bound (" PRINTF_SIZE_T_SPECIFIER + ") exceeds the Memory Object's upper-bound " + "(" PRINTF_SIZE_T_SPECIFIER ").", + funcName, pMemRanges[i].offset + pMemRanges[i].size, + mem_element->second.memRange.offset + + mem_element->second.memRange.size); } } } @@ -1683,7 +1707,7 @@ VK_LAYER_EXPORT VkResult VKAPI_CALL vkFlushMappedMemoryRanges( loader_platform_thread_lock_mutex(&globalLock); skipCall |= validateAndCopyNoncoherentMemoryToDriver(my_data, memRangeCount, pMemRanges); - skipCall |= validateMemoryIsMapped(my_data, memRangeCount, pMemRanges); + skipCall |= validateMemoryIsMapped(my_data, "vkFlushMappedMemoryRanges", memRangeCount, pMemRanges); loader_platform_thread_unlock_mutex(&globalLock); if (VK_FALSE == skipCall ) { result = my_data->device_dispatch_table->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges); @@ -1701,7 +1725,7 @@ VK_LAYER_EXPORT VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges( layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); loader_platform_thread_lock_mutex(&globalLock); - skipCall |= validateMemoryIsMapped(my_data, memRangeCount, pMemRanges); + skipCall |= validateMemoryIsMapped(my_data, "vkInvalidateMappedMemoryRanges", memRangeCount, pMemRanges); loader_platform_thread_unlock_mutex(&globalLock); if (VK_FALSE == skipCall) { result = my_data->device_dispatch_table->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges); |
