aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2015-11-04 13:51:23 -0700
committerMark Lobodzinski <mark@lunarg.com>2015-11-04 14:01:40 -0700
commit588ad9bb1d4cc99cf9f9d63f2d0ff6c2e80ce184 (patch)
tree4a9fdbc0bf7bb38a202df7c14293feedb1d87585
parent3bf6058b6188e15610f10bd153344b7c99a59517 (diff)
downloadusermoji-588ad9bb1d4cc99cf9f9d63f2d0ff6c2e80ce184.tar.xz
layers: Fix some bugs in the memory barrier validation code
Fix some merge-request related issues in DrawState
-rw-r--r--layers/draw_state.cpp10
-rw-r--r--layers/vk_validation_layer_details.md3
2 files changed, 7 insertions, 6 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index d6dad7e6..55809943 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -3321,7 +3321,7 @@ bool TransitionImageLayouts(VkCommandBuffer cmdBuffer, uint32_t memBarrierCount,
bool ValidateOutputMaskBits(const layer_data* my_data, VkCommandBuffer cmdBuffer, const VkImageMemoryBarrier* image_mem_barrier, VkAccessFlags bit) {
bool skip_call = false;
- if (image_mem_barrier->srcAccessMask | bit) {
+ if (image_mem_barrier->srcAccessMask & bit) {
if (image_mem_barrier->srcAccessMask != bit) {
skip_call |= log_msg(my_data->report_data, VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, DRAWSTATE_INVALID_BARRIER, "DS",
"Additional bits in srcAccessMask %d are specified when source layout is %d.", image_mem_barrier->srcAccessMask, image_mem_barrier->oldLayout);
@@ -3336,28 +3336,28 @@ bool ValidateOutputMaskBits(const layer_data* my_data, VkCommandBuffer cmdBuffer
//TODO: Combine this with function below
bool ValidateInputMaskBits(const layer_data* my_data, VkCommandBuffer cmdBuffer, const VkImageMemoryBarrier* image_mem_barrier, VkAccessFlags bit) {
bool skip_call = false;
- if (image_mem_barrier->dstAccessMask | bit) {
+ if (image_mem_barrier->dstAccessMask & bit) {
if (image_mem_barrier->dstAccessMask != bit) {
skip_call |= log_msg(my_data->report_data, VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, DRAWSTATE_INVALID_BARRIER, "DS",
"Additional bits in dstAccessMask %d are specified when dest layout is %d.", image_mem_barrier->srcAccessMask, image_mem_barrier->newLayout);
}
} else {
skip_call |= log_msg(my_data->report_data, VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, DRAWSTATE_INVALID_BARRIER, "DS",
- "Cannot specify srcAccessMask %d without %d when dest layout is %d.", image_mem_barrier->srcAccessMask, bit, image_mem_barrier->newLayout);
+ "Cannot specify dstAccessMask %d without %d when dest layout is %d.", image_mem_barrier->srcAccessMask, bit, image_mem_barrier->newLayout);
}
return skip_call;
}
bool ValidateInputMaskBits(const layer_data* my_data, VkCommandBuffer cmdBuffer, const VkImageMemoryBarrier* image_mem_barrier, VkAccessFlags bit1, VkAccessFlags bit2) {
bool skip_call = false;
- if (image_mem_barrier->dstAccessMask | bit1 || image_mem_barrier->dstAccessMask | bit2) {
+ if (image_mem_barrier->dstAccessMask & bit1 || image_mem_barrier->dstAccessMask & bit2) {
if (image_mem_barrier->dstAccessMask & !(bit1 | bit2)) {
skip_call |= log_msg(my_data->report_data, VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, DRAWSTATE_INVALID_BARRIER, "DS",
"Additional bits in dstAccessMask %d are specified when dest layout is %d.", image_mem_barrier->srcAccessMask, image_mem_barrier->newLayout);
}
} else {
skip_call |= log_msg(my_data->report_data, VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, DRAWSTATE_INVALID_BARRIER, "DS",
- "Cannot specify srcAccessMask %d without %d or %d when dest layout is %d.", image_mem_barrier->srcAccessMask, bit1, bit2, image_mem_barrier->newLayout);
+ "Cannot specify dstAccessMask %d without %d or %d when dest layout is %d.", image_mem_barrier->srcAccessMask, bit1, bit2, image_mem_barrier->newLayout);
}
return skip_call;
}
diff --git a/layers/vk_validation_layer_details.md b/layers/vk_validation_layer_details.md
index b5592824..e02d5568 100644
--- a/layers/vk_validation_layer_details.md
+++ b/layers/vk_validation_layer_details.md
@@ -161,7 +161,7 @@ The MemTracker layer tracks memory objects and references and validates that the
| Free Referenced Memory | Checks to see if memory being freed still has current references | FREED_MEM_REF | vmFreeMemory | FreeBoundMemory | NA |
| Memory Properly Bound | Validate that the memory object referenced in the call was properly created, is currently valid, and is properly bound to the object | MISSING_MEM_BINDINGS | vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyQueryPoolResults vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage | NA | NA |
| Valid Object | Verifies that the specified Vulkan object was created properly and is currently valid | INVALID_OBJECT | vkCmdBindPipeline vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage | NA | NA |
-| Bind Invalid Memory | Validate that memory object was correctly created, that the command buffer object was correctly created, and that both are currently valid objects. | MEMORY_BINDING_ERROR | vkQueueBindSparse vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage | NA | The valid Object checks are primarily the responsibilty of ObjectTracker layer, so these checks are more of a backup in case ObjectTracker is not enabled |
+| Bind Invalid Memory | Validate that memory object was correctly created, that the command buffer object was correctly created, and that both are currently valid objects. | MEMORY_BINDING_ERROR | vkQueueBindSparse vkCmdDrawIndirect vkCmdDrawIndexedIndirect vkCmdDispatchIndirect vkCmdCopyBuffer vkCmdCopyImage vkCmdBlitImage vkCmdCopyBufferToImage vkCmdCopyImageToBuffer vkCmdUpdateBuffer vkCmdFillBuffer vkCmdClearColorImage vkCmdClearDepthStencilImage vkCmdResolveImage | NA | The valid Object checks are primarily the responsibilty of ObjectTracker layer, so these checks are more of a backup in case ObjectTracker is not enabled |
| Objects Not Destroyed | Verify all objects destroyed at DestroyDevice time | MEMORY_LEAK | vkDestroyDevice | NA | NA |
| Memory Mapping State | Verifies that mapped memory is CPU-visible | INVALID_STATE | vkMapMemory | MapMemWithoutHostVisibleBit | NA |
| Command Buffer Synchronization | Command Buffer must be complete before BeginCommandBuffer or ResetCommandBuffer can be called | RESET_CB_WHILE_IN_FLIGHT | vkBeginCommandBuffer vkResetCommandBuffer | CallBeginCommandBufferBeforeCompletion CallBeginCommandBufferBeforeCompletion | NA |
@@ -169,6 +169,7 @@ The MemTracker layer tracks memory objects and references and validates that the
| Immutable Memory Binding | Validates that non-sparse memory bindings are immutable, so objects are not re-boundt | REBIND_OBJECT | vkBindBufferMemory, vkBindImageMemory | RebindMemory | NA |
| 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 |
| Objects Not Destroyed Warning | Warns if any memory objects have not been freed before their objects are destroyed | MEM_OBJ_CLEAR_EMPTY_BINDINGS | vkDestroyDevice | TBD | NA |
+| Memory Map Range Checks | Validates that Memory Mapping Requests are valid for the Memory Object | INVALID_MAP | vkMapMemory | TBD | NA |
| NA | Enum used for informational messages | NONE | | NA | 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 | | NA | None |