diff options
| author | Tobin Ehlis <tobine@google.com> | 2016-09-06 18:46:55 -0600 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-09-06 18:46:55 -0600 |
| commit | 6be3cdfac51fd153b8039803ce38c31af4384fcd (patch) | |
| tree | 5ba5a7abc4bf5574c8b1deaa6086307cf063aac2 | |
| parent | d6c8bf5c50aa3254b021ed14af41ff314ee38881 (diff) | |
| download | usermoji-6be3cdfac51fd153b8039803ce38c31af4384fcd.tar.xz | |
layers: Add MEMTRACK_INVALID_MEM_REGION error
Add new enum value "MEMTRACK_INVALID_MEM_REGION" to track case when a
region of an allocation bound to an image or buffer is not valid due
to the memory not being correctly updated.
This was previously aliased to USAGE_FLAG case which was masking the fact
that there are no tests written for this invalid mem region case.
| -rw-r--r-- | layers/core_validation.cpp | 4 | ||||
| -rw-r--r-- | layers/core_validation_error_enums.h | 1 | ||||
| -rw-r--r-- | layers/vk_validation_layer_details.md | 3 |
3 files changed, 5 insertions, 3 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index e687cf79..12a8ee7e 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -474,7 +474,7 @@ static bool ValidateMemoryIsValid(layer_data *dev_data, VkDeviceMemory mem, uint if (mem_info) { if (!mem_info->bound_ranges[bound_object_handle].valid) { return log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, - reinterpret_cast<uint64_t &>(mem), __LINE__, MEMTRACK_INVALID_USAGE_FLAG, "MEM", + reinterpret_cast<uint64_t &>(mem), __LINE__, MEMTRACK_INVALID_MEM_REGION, "MEM", "%s: Cannot read invalid region of memory allocation 0x%" PRIx64 " for bound %s object 0x%" PRIx64 ", please fill the memory before using.", functionName, reinterpret_cast<uint64_t &>(mem), object_type_to_string(type), bound_object_handle); @@ -489,7 +489,7 @@ static bool ValidateImageMemoryIsValid(layer_data *dev_data, IMAGE_NODE *image_n if (image_node->mem == MEMTRACKER_SWAP_CHAIN_IMAGE_KEY) { if (!image_node->valid) { return log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, - reinterpret_cast<uint64_t &>(image_node->mem), __LINE__, MEMTRACK_INVALID_USAGE_FLAG, "MEM", + reinterpret_cast<uint64_t &>(image_node->mem), __LINE__, MEMTRACK_INVALID_MEM_REGION, "MEM", "%s: Cannot read invalid swapchain image 0x%" PRIx64 ", please fill the memory before using.", functionName, reinterpret_cast<uint64_t &>(image_node->image)); } diff --git a/layers/core_validation_error_enums.h b/layers/core_validation_error_enums.h index 8ceba84d..b90b9d4c 100644 --- a/layers/core_validation_error_enums.h +++ b/layers/core_validation_error_enums.h @@ -40,6 +40,7 @@ enum MEM_TRACK_ERROR { MEMTRACK_INVALID_USAGE_FLAG, // Usage flags specified at image/buffer create conflict w/ use of object MEMTRACK_INVALID_MAP, // Size flag specified at alloc is too small for mapping range MEMTRACK_INVALID_MEM_TYPE, // Memory Type mismatch + MEMTRACK_INVALID_MEM_REGION, // Memory region for object bound to an allocation is invalid MEMTRACK_OBJECT_NOT_BOUND, // Image or Buffer used without having memory bound to it }; diff --git a/layers/vk_validation_layer_details.md b/layers/vk_validation_layer_details.md index d7009c4c..0d0a9fbf 100644 --- a/layers/vk_validation_layer_details.md +++ b/layers/vk_validation_layer_details.md @@ -165,7 +165,8 @@ The Mem Tracker portion of the VK_LAYER_LUNARG_core_validation layer tracks memo | Image/Buffer Usage bits | Verify correct USAGE bits set based on how Images and Buffers are used | INVALID_USAGE_FLAG | vkCreateImage, vkCreateBuffer, vkCreateBufferView, vkCmdCopyBuffer, vkCmdCopyQueryPoolResults, vkCmdCopyImage, vkCmdBlitImage, vkCmdCopyBufferToImage, vkCmdCopyImageToBuffer, vkCmdUpdateBuffer, vkCmdFillBuffer | InvalidUsageBits | NA | | Memory Map Range Checks | Validates that Memory Mapping Requests are valid for the Memory Object (in-range, not currently mapped on Map, currently mapped on UnMap, size is non-zero) | INVALID_MAP | vkMapMemory | InvalidMemoryMapping | NA | | Memory Type Index Checks | Validates that specified memory type indices are valid | INVALID_MEM_TYPE | vkBindImageMemory vkBindBufferMemory | TODO | Need to fix up and re-enable BindImageInvalidMemoryType test as noted in comment in test | -| Memory Bound To Object Checks | Validates that memory was bound to image or buffer before use | OBJECT_NOT_BOUND | vkCreateImageView vkCreateBufferView vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage vkCmdUpdateBuffer vkCmdFillBuffer vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyQueryPoolResults| CreateBufferViewNoMemoryBoundToBuffer CreateImageViewNoMemoryBoundToImage ImageMemoryNotBound BufferMemoryNotBound | None | +| Memory Region Valid | Verify that a portion of a memory allocation with a bound image or object has valid data. | INVALID_MEM_REGION | vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdCopyBuffer vkCmdBeginRenderPass vkQueuePresentKHR vkQueueSubmit | TODO | Write tests for this case | +| Memory Bound To Object Checks | Validates that memory was bound to image or buffer before use | OBJECT_NOT_BOUND | vkCreateImageView vkCreateBufferView vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdResolveImage vkCmdUpdateBuffer vkCmdFillBuffer vkCmdBindIndexBuffer vkCmdBindVertexBuffers vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyQueryPoolResults| CreateBufferViewNoMemoryBoundToBuffer CreateImageViewNoMemoryBoundToImage ImageMemoryNotBound BufferMemoryNotBound | None | | NA | Enum used for informational messages | NONE | | TODO | None | | NA | Enum used for errors in the layer itself. This does not indicate an app issue, but instead a bug in the layer. | INTERNAL_ERROR | | TODO | None | |
