From: Mark Lobodzinski Date: Tue, 7 Feb 2017 23:36:03 +0000 (-0700) Subject: layers: Move ValidateCmdBufImageLayouts out of CV X-Git-Tag: upstream/1.1.92~1619 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=148ffe71bb94a0c8189918592e666c2a9474e750;p=platform%2Fupstream%2FVulkan-Tools.git layers: Move ValidateCmdBufImageLayouts out of CV Change-Id: I358250b6cacd42e4c2b28b324e3683b51efe75e0 --- diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp index 2de17de..0b58b86 100644 --- a/layers/buffer_validation.cpp +++ b/layers/buffer_validation.cpp @@ -1501,4 +1501,46 @@ void PreCallRecordCmdBlitImage(core_validation::layer_data *device_data, GLOBAL_ UpdateCmdBufferLastCmd(device_data, cb_node, CMD_BLITIMAGE); } - +// This validates that the initial layout specified in the command buffer for +// the IMAGE is the same +// as the global IMAGE layout +bool ValidateCmdBufImageLayouts(core_validation::layer_data *dev_data, GLOBAL_CB_NODE *pCB) { + const debug_report_data *report_data = core_validation::GetReportData(dev_data); + bool skip_call = false; + for (auto cb_image_data : pCB->imageLayoutMap) { + VkImageLayout imageLayout; + if (!FindGlobalLayout(dev_data, cb_image_data.first, imageLayout)) { + skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, 0, __LINE__, DRAWSTATE_INVALID_IMAGE_LAYOUT, "DS", + "Cannot submit cmd buffer using deleted image 0x%" PRIx64 ".", + reinterpret_cast(cb_image_data.first)); + } else { + if (cb_image_data.second.initialLayout == VK_IMAGE_LAYOUT_UNDEFINED) { + // TODO: Set memory invalid which is in mem_tracker currently + } else if (imageLayout != cb_image_data.second.initialLayout) { + if (cb_image_data.first.hasSubresource) { + skip_call |= log_msg( + report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, + reinterpret_cast(pCB->commandBuffer), __LINE__, DRAWSTATE_INVALID_IMAGE_LAYOUT, "DS", + "Cannot submit cmd buffer using image (0x%" PRIx64 + ") [sub-resource: aspectMask 0x%X array layer %u, mip level %u], " + "with layout %s when first use is %s.", + reinterpret_cast(cb_image_data.first.image), cb_image_data.first.subresource.aspectMask, + cb_image_data.first.subresource.arrayLayer, cb_image_data.first.subresource.mipLevel, + string_VkImageLayout(imageLayout), string_VkImageLayout(cb_image_data.second.initialLayout)); + } else { + skip_call |= + log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, + VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, reinterpret_cast(pCB->commandBuffer), + __LINE__, DRAWSTATE_INVALID_IMAGE_LAYOUT, "DS", "Cannot submit cmd buffer using image (0x%" PRIx64 + ") with layout %s when " + "first use is %s.", + reinterpret_cast(cb_image_data.first.image), string_VkImageLayout(imageLayout), + string_VkImageLayout(cb_image_data.second.initialLayout)); + } + } + SetGlobalLayout(dev_data, cb_image_data.first, cb_image_data.second.layout); + } + } + return skip_call; +} diff --git a/layers/buffer_validation.h b/layers/buffer_validation.h index 7722cc9..7476b0e 100644 --- a/layers/buffer_validation.h +++ b/layers/buffer_validation.h @@ -140,5 +140,6 @@ bool PreCallValidateCmdBlitImage(core_validation::layer_data *device_data, GLOBA void PreCallRecordCmdBlitImage(core_validation::layer_data *device_data, GLOBAL_CB_NODE *cb_node, IMAGE_STATE *src_image_state, IMAGE_STATE *dst_image_state); +bool ValidateCmdBufImageLayouts(core_validation::layer_data *dev_data, GLOBAL_CB_NODE *pCB); #endif // CORE_VALIDATION_BUFFER_VALIDATION_H_ diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 5e98b81..d1a011d 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -4111,49 +4111,6 @@ static bool ValidateStageMaskGsTsEnables(layer_data *dev_data, VkPipelineStageFl return skip; } -// This validates that the initial layout specified in the command buffer for -// the IMAGE is the same -// as the global IMAGE layout -static bool ValidateCmdBufImageLayouts(layer_data *dev_data, GLOBAL_CB_NODE *pCB) { - bool skip_call = false; - for (auto cb_image_data : pCB->imageLayoutMap) { - VkImageLayout imageLayout; - if (!FindGlobalLayout(dev_data, cb_image_data.first, imageLayout)) { - skip_call |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, - VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, 0, __LINE__, DRAWSTATE_INVALID_IMAGE_LAYOUT, "DS", - "Cannot submit cmd buffer using deleted image 0x%" PRIx64 ".", - reinterpret_cast(cb_image_data.first)); - } else { - if (cb_image_data.second.initialLayout == VK_IMAGE_LAYOUT_UNDEFINED) { - // TODO: Set memory invalid which is in mem_tracker currently - } else if (imageLayout != cb_image_data.second.initialLayout) { - if (cb_image_data.first.hasSubresource) { - skip_call |= log_msg( - dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, - reinterpret_cast(pCB->commandBuffer), __LINE__, DRAWSTATE_INVALID_IMAGE_LAYOUT, "DS", - "Cannot submit cmd buffer using image (0x%" PRIx64 - ") [sub-resource: aspectMask 0x%X array layer %u, mip level %u], " - "with layout %s when first use is %s.", - reinterpret_cast(cb_image_data.first.image), cb_image_data.first.subresource.aspectMask, - cb_image_data.first.subresource.arrayLayer, cb_image_data.first.subresource.mipLevel, - string_VkImageLayout(imageLayout), string_VkImageLayout(cb_image_data.second.initialLayout)); - } else { - skip_call |= - log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, - VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, reinterpret_cast(pCB->commandBuffer), - __LINE__, DRAWSTATE_INVALID_IMAGE_LAYOUT, "DS", "Cannot submit cmd buffer using image (0x%" PRIx64 - ") with layout %s when " - "first use is %s.", - reinterpret_cast(cb_image_data.first.image), string_VkImageLayout(imageLayout), - string_VkImageLayout(cb_image_data.second.initialLayout)); - } - } - SetGlobalLayout(dev_data, cb_image_data.first, cb_image_data.second.layout); - } - } - return skip_call; -} - // Loop through bound objects and increment their in_use counts // For any unknown objects, flag an error static bool ValidateAndIncrementBoundObjects(layer_data *dev_data, GLOBAL_CB_NODE const *cb_node) {