aboutsummaryrefslogtreecommitdiff
path: root/layers/mem_tracker.cpp
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2016-03-03 14:50:52 -0700
committerMark Lobodzinski <mark@lunarg.com>2016-03-04 11:24:38 -0700
commitd5515ccd95694aaf7b8b1a5b2bd8e6e9cd89bb78 (patch)
treecdad34881e3f21229ee02f047478a824b5dc91fa /layers/mem_tracker.cpp
parent5ad7cbb06941ee4a5d71e5b4a39a69d3d1b3b1b7 (diff)
downloadusermoji-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
Diffstat (limited to 'layers/mem_tracker.cpp')
-rw-r--r--layers/mem_tracker.cpp36
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);