diff options
| author | Tobin Ehlis <tobine@google.com> | 2017-07-19 11:11:52 -0600 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2017-07-19 15:25:08 -0600 |
| commit | 258c8c1566e8fb13084cb482429ebb1c87b62675 (patch) | |
| tree | 4edff088e80be5f924b1c3b5728a527e99cfcc91 /layers/core_validation.cpp | |
| parent | 00ce8bd1194626aa64e20b387e5aed4597683fe4 (diff) | |
| download | usermoji-258c8c1566e8fb13084cb482429ebb1c87b62675.tar.xz | |
layers:Add image mem barrier access mask checks
Complete remaining work for VALIDATION_ERROR_1b80092e and
VALIDATION_ERROR_1b800930. Make sure the image memory barriers src/dst
access masks are a subset of corresponding subpass self-dependency
access masks.
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 7c812082..1f7ff3b0 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -6161,8 +6161,8 @@ static bool ValidateRenderPassPipelineBarriers(layer_data *device_data, const ch VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask, VkDependencyFlags dependency_flags, uint32_t mem_barrier_count, const VkMemoryBarrier *mem_barriers, uint32_t buffer_mem_barrier_count, - const VkBufferMemoryBarrier *pBufferMemBarriers, uint32_t image_mem_barrier_count, - const VkImageMemoryBarrier *pImageMemBarriers) { + const VkBufferMemoryBarrier *buffer_mem_barriers, uint32_t image_mem_barrier_count, + const VkImageMemoryBarrier *image_barriers) { bool skip = false; auto rp_state = cb_state->activeRenderPass; auto rp_handle = HandleToUint64(rp_state->renderPass); @@ -6195,8 +6195,6 @@ static bool ValidateRenderPassPipelineBarriers(layer_data *device_data, const ch 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; if (0 != buffer_mem_barrier_count) { skip |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, rp_handle, __LINE__, VALIDATION_ERROR_1b800934, "CORE", @@ -6205,6 +6203,8 @@ static bool ValidateRenderPassPipelineBarriers(layer_data *device_data, const ch funcName, buffer_mem_barrier_count, cb_state->activeSubpass, rp_handle, validation_error_map[VALIDATION_ERROR_1b800934]); } + 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)) { @@ -6223,7 +6223,29 @@ static bool ValidateRenderPassPipelineBarriers(layer_data *device_data, const ch "%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, + funcName, i, mb_dst_access_mask, sub_dst_access_mask, cb_state->activeSubpass, rp_handle, + validation_error_map[VALIDATION_ERROR_1b800930]); + } + } + for (uint32_t i = 0; i < image_mem_barrier_count; ++i) { + const auto &img_src_access_mask = image_barriers[i].srcAccessMask; + if (img_src_access_mask != (sub_src_access_mask & img_src_access_mask)) { + skip |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, rp_handle, __LINE__, VALIDATION_ERROR_1b80092e, "CORE", + "%s: Barrier pImageMemoryBarriers[%d].srcAccessMask(0x%X) is not a subset of VkSubpassDependency " + "srcAccessMask(0x%X) of " + "subpass %d of renderPass 0x%" PRIx64 ". %s", + funcName, i, img_src_access_mask, sub_src_access_mask, cb_state->activeSubpass, rp_handle, + validation_error_map[VALIDATION_ERROR_1b80092e]); + } + const auto &img_dst_access_mask = image_barriers[i].dstAccessMask; + if (img_dst_access_mask != (sub_dst_access_mask & img_dst_access_mask)) { + skip |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, rp_handle, __LINE__, VALIDATION_ERROR_1b800930, "CORE", + "%s: Barrier pImageMemoryBarriers[%d].dstAccessMask(0x%X) is not a subset of VkSubpassDependency " + "dstAccessMask(0x%X) of " + "subpass %d of renderPass 0x%" PRIx64 ". %s", + funcName, i, img_dst_access_mask, sub_dst_access_mask, cb_state->activeSubpass, rp_handle, validation_error_map[VALIDATION_ERROR_1b800930]); } } |
