diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-02-07 16:36:03 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-02-08 10:25:28 -0700 |
| commit | 148ffe71bb94a0c8189918592e666c2a9474e750 (patch) | |
| tree | 46ed38a2141f8829428f482d49f734c810186132 /layers/buffer_validation.cpp | |
| parent | 79343aac8492c6cddd58ee7fc29745e7408dd789 (diff) | |
| download | usermoji-148ffe71bb94a0c8189918592e666c2a9474e750.tar.xz | |
layers: Move ValidateCmdBufImageLayouts out of CV
Change-Id: I358250b6cacd42e4c2b28b324e3683b51efe75e0
Diffstat (limited to 'layers/buffer_validation.cpp')
| -rw-r--r-- | layers/buffer_validation.cpp | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp index 2de17dea..0b58b866 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<const uint64_t &>(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<uint64_t &>(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<const uint64_t &>(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<uint64_t &>(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<const uint64_t &>(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; +} |
