diff options
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index e5b11c9c..e85ceeed 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -6147,7 +6147,7 @@ VKAPI_ATTR void VKAPI_CALL CmdResetEvent(VkCommandBuffer commandBuffer, VkEvent // Pre: cb_state->activeRenderPass must be a pointer to valid renderPass state static bool ValidateRenderPassPipelineBarriers(layer_data *device_data, const char *funcName, GLOBAL_CB_NODE const *cb_state, VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask, - uint32_t memBarrierCount, const VkMemoryBarrier *pMemBarriers, + uint32_t mem_barrier_count, const VkMemoryBarrier *mem_barriers, uint32_t bufferBarrierCount, const VkBufferMemoryBarrier *pBufferMemBarriers, uint32_t imageMemBarrierCount, const VkImageMemoryBarrier *pImageMemBarriers) { bool skip = false; @@ -6162,24 +6162,50 @@ static bool ValidateRenderPassPipelineBarriers(layer_data *device_data, const ch } else { assert(rp_state->subpass_to_dependency_index[cb_state->activeSubpass] != -1); const auto &sub_dep = rp_state->createInfo.pDependencies[rp_state->subpass_to_dependency_index[cb_state->activeSubpass]]; - const auto &sub_src_mask = sub_dep.srcStageMask; - const auto &sub_dst_mask = sub_dep.dstStageMask; - if (src_stage_mask != (sub_src_mask & src_stage_mask)) { + const auto &sub_src_stage_mask = sub_dep.srcStageMask; + const auto &sub_dst_stage_mask = sub_dep.dstStageMask; + if (src_stage_mask != (sub_src_stage_mask & src_stage_mask)) { skip |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, rp_handle, __LINE__, VALIDATION_ERROR_1b80092a, "CORE", "%s: Barrier srcStageMask(0x%X) is not a subset of VkSubpassDependency srcStageMask(0x%X) of " "subpass %d of renderPass 0x%" PRIx64 ". %s", - funcName, src_stage_mask, sub_src_mask, cb_state->activeSubpass, rp_handle, + funcName, src_stage_mask, sub_src_stage_mask, cb_state->activeSubpass, rp_handle, validation_error_map[VALIDATION_ERROR_1b80092a]); } - if (dst_stage_mask != (sub_dst_mask & dst_stage_mask)) { + if (dst_stage_mask != (sub_dst_stage_mask & dst_stage_mask)) { skip |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, rp_handle, __LINE__, VALIDATION_ERROR_1b80092c, "CORE", "%s: Barrier dstStageMask(0x%X) is not a subset of VkSubpassDependency dstStageMask(0x%X) of " "subpass %d of renderPass 0x%" PRIx64 ". %s", - funcName, dst_stage_mask, sub_dst_mask, cb_state->activeSubpass, rp_handle, + funcName, dst_stage_mask, sub_dst_stage_mask, cb_state->activeSubpass, rp_handle, validation_error_map[VALIDATION_ERROR_1b80092c]); } + const auto &sub_src_access_mask = sub_dep.srcAccessMask; + const auto &sub_dst_access_mask = sub_dep.dstAccessMask; + for (uint32_t i = 0; i < mem_barrier_count; ++i) { + const auto &mb_src_access_mask = mem_barriers[i].srcAccessMask; + if (mb_src_access_mask != (sub_src_access_mask & mb_src_access_mask)) { + skip |= + log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + rp_handle, __LINE__, VALIDATION_ERROR_1b80092e, "CORE", + "%s: Barrier pMemoryBarriers[%d].srcAccessMask(0x%X) is not a subset of VkSubpassDependency " + "srcAccessMask(0x%X) of " + "subpass %d of renderPass 0x%" PRIx64 ". %s", + funcName, i, mb_src_access_mask, sub_src_access_mask, cb_state->activeSubpass, rp_handle, + validation_error_map[VALIDATION_ERROR_1b80092e]); + } + const auto &mb_dst_access_mask = mem_barriers[i].dstAccessMask; + if (mb_dst_access_mask != (sub_dst_access_mask & mb_dst_access_mask)) { + skip |= + log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + rp_handle, __LINE__, VALIDATION_ERROR_1b800930, "CORE", + "%s: Barrier pMemoryBarriers[%d].dstAccessMask(0x%X) is not a subset of VkSubpassDependency " + "dstAccessMask(0x%X) of " + "subpass %d of renderPass 0x%" PRIx64 ". %s", + funcName, i, mb_src_access_mask, sub_src_access_mask, cb_state->activeSubpass, rp_handle, + validation_error_map[VALIDATION_ERROR_1b800930]); + } + } } return skip; } |
