layers: LX506 fix vkFlushMappedMemoryRanges validation error
authorMark Mueller <markm@lunarg.com>
Mon, 30 May 2016 22:46:38 +0000 (16:46 -0600)
committerMark Mueller <markm@lunarg.com>
Wed, 1 Jun 2016 19:32:10 +0000 (13:32 -0600)
Fix LX506: vkFlushMappedMemoryRanges validation error
 with VkMappedMemoryRange::size = VK_WHOLE_SIZE.
Resolution: Change test of size variable to correctly test the
 size passed by application against the relevant mapped memory

Change-Id: I6d855482985512b5096696f5c37346dde8a391ac

layers/core_validation.cpp

index aa342c4..f5e0509 100644 (file)
@@ -9428,16 +9428,18 @@ static bool validateMemoryIsMapped(layer_data *my_data, const char *funcName, ui
                     "(" PRINTF_SIZE_T_SPECIFIER ").",
                     funcName, static_cast<size_t>(pMemRanges[i].offset), static_cast<size_t>(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))) {
+
+            const uint64_t my_dataTerminus =
+                    (mem_element->second.memRange.size == VK_WHOLE_SIZE) ? mem_element->second.allocInfo.allocationSize :
+                                                                           (mem_element->second.memRange.offset + mem_element->second.memRange.size);
+            if (pMemRanges[i].size != VK_WHOLE_SIZE && (my_dataTerminus < (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, static_cast<size_t>(pMemRanges[i].offset + pMemRanges[i].size),
-                                    static_cast<size_t>(mem_element->second.memRange.offset + mem_element->second.memRange.size));
+                                    static_cast<size_t>(my_dataTerminus));
             }
         }
     }