From e407fb416004438f3882dd9dc3e25602ba73e04b Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Thu, 20 Jul 2017 10:20:44 -0600 Subject: layers:Migrate image barrier check This check is only relevant within a renderPass so move it to the function specifically dedicated for in-renderPass barrier checks. --- layers/core_validation.cpp | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'layers/core_validation.cpp') diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 36d3f34a..6a2e9834 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -6227,7 +6227,8 @@ static bool ValidateRenderPassPipelineBarriers(layer_data *device_data, const ch } } for (uint32_t i = 0; i < image_mem_barrier_count; ++i) { - const auto &img_src_access_mask = image_barriers[i].srcAccessMask; + const auto &img_barrier = image_barriers[i]; + const auto &img_src_access_mask = img_barrier.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", @@ -6237,7 +6238,7 @@ static bool ValidateRenderPassPipelineBarriers(layer_data *device_data, const ch 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; + const auto &img_dst_access_mask = img_barrier.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", @@ -6249,7 +6250,7 @@ static bool ValidateRenderPassPipelineBarriers(layer_data *device_data, const ch } // Verify that a framebuffer image matches barrier image const auto &fb_state = GetFramebufferState(device_data, cb_state->activeFramebuffer); - const auto img_bar_image = image_barriers[i].image; + const auto img_bar_image = img_barrier.image; bool image_match = false; for (const auto &fb_attach : fb_state->attachments) { if (img_bar_image == fb_attach.image) { @@ -6265,6 +6266,16 @@ static bool ValidateRenderPassPipelineBarriers(layer_data *device_data, const ch ") does not match an image from the current framebuffer (0x%" PRIx64 "). %s", funcName, i, HandleToUint64(img_bar_image), fb_handle, validation_error_map[VALIDATION_ERROR_1b800936]); } + if (img_barrier.oldLayout != img_barrier.newLayout) { + skip |= + log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + HandleToUint64(cb_state->commandBuffer), __LINE__, VALIDATION_ERROR_1b80093a, "CORE", + "%s: As the Image Barrier for image 0x%" PRIx64 + " is being executed within a render pass instance, oldLayout must equal newLayout yet they are " + "%s and %s. %s", + funcName, HandleToUint64(img_barrier.image), string_VkImageLayout(img_barrier.oldLayout), + string_VkImageLayout(img_barrier.newLayout), validation_error_map[VALIDATION_ERROR_1b80093a]); + } } if (sub_dep.dependencyFlags != dependency_flags) { skip |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, @@ -6337,16 +6348,6 @@ static bool ValidateBarriers(layer_data *device_data, const char *funcName, GLOB } if (mem_barrier->oldLayout != mem_barrier->newLayout) { - if (cb_state->activeRenderPass) { - skip |= - log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, - HandleToUint64(cb_state->commandBuffer), __LINE__, VALIDATION_ERROR_1b80093a, "DS", - "%s: As the Image Barrier for image 0x%" PRIx64 - " is being executed within a render pass instance, oldLayout must equal newLayout yet they are " - "%s and %s. %s", - funcName, HandleToUint64(mem_barrier->image), string_VkImageLayout(mem_barrier->oldLayout), - string_VkImageLayout(mem_barrier->newLayout), validation_error_map[VALIDATION_ERROR_1b80093a]); - } skip |= ValidateMaskBitsFromLayouts(device_data, cb_state->commandBuffer, mem_barrier->srcAccessMask, mem_barrier->oldLayout, "Source"); skip |= ValidateMaskBitsFromLayouts(device_data, cb_state->commandBuffer, mem_barrier->dstAccessMask, -- cgit v1.2.3