aboutsummaryrefslogtreecommitdiff
path: root/layers/buffer_validation.cpp
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-02-06 15:04:23 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-02-07 14:02:48 -0700
commite29da03f6e7a3028855c19979a111053773fa65c (patch)
tree373d645fd529640f2ee9edf4d531bceb283eb5d7 /layers/buffer_validation.cpp
parentf5b5c8cfd935f5209858ab1e0b19b76aedbcefbf (diff)
downloadusermoji-e29da03f6e7a3028855c19979a111053773fa65c.tar.xz
layers: Fixed some blitimage VUs
There were three checks which were improperly limited to depth-stencil aspects. Two of the checks (for zero layerCounts) are also not prohibited by the spec (for ImageBlit structures, anyhow) and so have been changed to warnings. The remaining check for matching src and dest layerCounts was moved and had the correct VU ID added. Change-Id: Idb37fa94e4359e25c7bdcaed8ad65c2ddddefe0d
Diffstat (limited to 'layers/buffer_validation.cpp')
-rw-r--r--layers/buffer_validation.cpp49
1 files changed, 24 insertions, 25 deletions
diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp
index 772f39be..0d5df23a 100644
--- a/layers/buffer_validation.cpp
+++ b/layers/buffer_validation.cpp
@@ -1287,8 +1287,9 @@ bool PreCallValidateCmdBlitImage(core_validation::layer_data *device_data, GLOBA
skip |= ValidateCmd(device_data, cb_node, CMD_BLITIMAGE, "vkCmdBlitImage()");
skip |= insideRenderPass(device_data, cb_node, "vkCmdBlitImage()", VALIDATION_ERROR_01300);
- // Warn for zero-sized regions
for (uint32_t i = 0; i < regionCount; i++) {
+
+ // Warn for zero-sized regions
if ((pRegions[i].srcOffsets[0].x == pRegions[i].srcOffsets[1].x) ||
(pRegions[i].srcOffsets[0].y == pRegions[i].srcOffsets[1].y) ||
(pRegions[i].srcOffsets[0].z == pRegions[i].srcOffsets[1].z)) {
@@ -1307,6 +1308,27 @@ bool PreCallValidateCmdBlitImage(core_validation::layer_data *device_data, GLOBA
reinterpret_cast<uint64_t>(cb_node->commandBuffer), __LINE__, DRAWSTATE_INVALID_EXTENTS, "IMAGE",
"%s", ss.str().c_str());
}
+ if (pRegions[i].srcSubresource.layerCount == 0) {
+ char const str[] = "vkCmdBlitImage: number of layers in source subresource is zero";
+ skip |= log_msg(report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
+ reinterpret_cast<uint64_t>(cb_node->commandBuffer), __LINE__, DRAWSTATE_MISMATCHED_IMAGE_ASPECT,
+ "IMAGE", str);
+ }
+ if (pRegions[i].dstSubresource.layerCount == 0) {
+ char const str[] = "vkCmdBlitImage: number of layers in destination subresource is zero";
+ skip |= log_msg(report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
+ reinterpret_cast<uint64_t>(cb_node->commandBuffer), __LINE__, DRAWSTATE_MISMATCHED_IMAGE_ASPECT,
+ "IMAGE", str);
+ }
+
+ // Check that src/dst layercounts match
+ if (pRegions[i].srcSubresource.layerCount != pRegions[i].dstSubresource.layerCount) {
+ skip |=
+ log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
+ reinterpret_cast<uint64_t>(cb_node->commandBuffer), __LINE__, VALIDATION_ERROR_01304, "IMAGE",
+ "vkCmdBlitImage: layerCount in source and destination subresource of pRegions[%d] does not match. %s",
+ i, validation_error_map[VALIDATION_ERROR_01304]);
+ }
}
VkFormat src_format = src_image_state->createInfo.format;
@@ -1336,6 +1358,7 @@ bool PreCallValidateCmdBlitImage(core_validation::layer_data *device_data, GLOBA
// Validate aspect bits and formats for depth/stencil images
if (vk_format_is_depth_or_stencil(src_format) || vk_format_is_depth_or_stencil(dst_format)) {
+
if (src_format != dst_format) {
std::stringstream ss;
ss << "vkCmdBlitImage: If one of srcImage and dstImage images has a format of depth, stencil or depth "
@@ -1347,31 +1370,7 @@ bool PreCallValidateCmdBlitImage(core_validation::layer_data *device_data, GLOBA
"%s. %s", ss.str().c_str(), validation_error_map[VALIDATION_ERROR_02192]);
}
- // TODO: Confirm that all these checks are intended to be nested under depth/stencil only
for (uint32_t i = 0; i < regionCount; i++) {
- if (pRegions[i].srcSubresource.layerCount == 0) {
- char const str[] = "vkCmdBlitImage: number of layers in source subresource is zero";
- // TODO: Verify against Valid Use section of spec, if this case yields undefined results, then it's an error
- skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
- reinterpret_cast<uint64_t>(cb_node->commandBuffer), __LINE__, DRAWSTATE_MISMATCHED_IMAGE_ASPECT,
- "IMAGE", str);
- }
-
- if (pRegions[i].dstSubresource.layerCount == 0) {
- char const str[] = "vkCmdBlitImage: number of layers in destination subresource is zero";
- // TODO: Verify against Valid Use section of spec, if this case yields undefined results, then it's an error
- skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
- reinterpret_cast<uint64_t>(cb_node->commandBuffer), __LINE__, DRAWSTATE_MISMATCHED_IMAGE_ASPECT,
- "IMAGE", str);
- }
-
- if (pRegions[i].srcSubresource.layerCount != pRegions[i].dstSubresource.layerCount) {
- char const str[] = "vkCmdBlitImage: number of layers in source and destination subresources must match";
- skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
- reinterpret_cast<uint64_t>(cb_node->commandBuffer), __LINE__, DRAWSTATE_MISMATCHED_IMAGE_ASPECT,
- "IMAGE", str);
- }
-
VkImageAspectFlags srcAspect = pRegions[i].srcSubresource.aspectMask;
VkImageAspectFlags dstAspect = pRegions[i].dstSubresource.aspectMask;