aboutsummaryrefslogtreecommitdiff
path: root/layers
diff options
context:
space:
mode:
authorSlawomir Cygan <slawomir.cygan@intel.com>2016-11-28 17:53:23 +0100
committerMark Lobodzinski <mark@lunarg.com>2016-12-09 10:33:22 -0700
commit87d55e68fbb5461a19ec2906b7ebcb05f3ec1973 (patch)
tree477e680f9be309ff352689a33829cc007f940fe6 /layers
parent03c3e0e9c9258bb81d42246373c18f27dea80788 (diff)
downloadusermoji-87d55e68fbb5461a19ec2906b7ebcb05f3ec1973.tar.xz
layers: Warn if RenderPass clearvalues ignored
PR 1203: Vulkan spec does permit clearValueCount to be greater than number of values used by clear ops. However we have seen apps that pass garbage as clearValueCount - the best we can do in this situation is to emit a warning. Change-Id: If52c02759410500e96976d91fd42a9b2a7e2df41
Diffstat (limited to 'layers')
-rw-r--r--layers/core_validation.cpp30
-rw-r--r--layers/core_validation_error_enums.h1
2 files changed, 20 insertions, 11 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 6fec80d1..d9793683 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -10700,17 +10700,25 @@ CmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo *p
}
}
if (clear_op_size > pRenderPassBegin->clearValueCount) {
- skip_call |=
- log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
- reinterpret_cast<uint64_t &>(renderPass), __LINE__, VALIDATION_ERROR_00442, "DS",
- "In vkCmdBeginRenderPass() the VkRenderPassBeginInfo struct has a clearValueCount of %u but there must "
- "be at least %u "
- "entries in pClearValues array to account for the highest index attachment in renderPass 0x%" PRIx64
- " that uses VK_ATTACHMENT_LOAD_OP_CLEAR is %u. Note that the pClearValues array "
- "is indexed by attachment number so even if some pClearValues entries between 0 and %u correspond to "
- "attachments that aren't cleared they will be ignored. %s",
- pRenderPassBegin->clearValueCount, clear_op_size, reinterpret_cast<uint64_t &>(renderPass),
- clear_op_size, clear_op_size - 1, validation_error_map[VALIDATION_ERROR_00442]);
+ skip_call |= log_msg(
+ dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
+ reinterpret_cast<uint64_t &>(renderPass), __LINE__, VALIDATION_ERROR_00442,
+ "DS", "In vkCmdBeginRenderPass() the VkRenderPassBeginInfo struct has a clearValueCount of %u but there must "
+ "be at least %u entries in pClearValues array to account for the highest index attachment in renderPass "
+ "0x%" PRIx64 " that uses VK_ATTACHMENT_LOAD_OP_CLEAR is %u. Note that the pClearValues array "
+ "is indexed by attachment number so even if some pClearValues entries between 0 and %u correspond to "
+ "attachments that aren't cleared they will be ignored. %s",
+ pRenderPassBegin->clearValueCount, clear_op_size, reinterpret_cast<uint64_t &>(renderPass), clear_op_size,
+ clear_op_size - 1, validation_error_map[VALIDATION_ERROR_00442]);
+ }
+ if (clear_op_size < pRenderPassBegin->clearValueCount) {
+ skip_call |= log_msg(
+ dev_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
+ reinterpret_cast<uint64_t &>(renderPass), __LINE__, DRAWSTATE_RENDERPASS_TOO_MANY_CLEAR_VALUES, "DS",
+ "In vkCmdBeginRenderPass() the VkRenderPassBeginInfo struct has a clearValueCount of %u but only first %u "
+ "entries in pClearValues array are used. The highest index attachment in renderPass 0x%" PRIx64
+ " that uses VK_ATTACHMENT_LOAD_OP_CLEAR is %u - other pClearValues are ignored.",
+ pRenderPassBegin->clearValueCount, clear_op_size, reinterpret_cast<uint64_t &>(renderPass), clear_op_size);
}
skip_call |= VerifyRenderAreaBounds(dev_data, pRenderPassBegin);
skip_call |= VerifyFramebufferAndRenderPassLayouts(dev_data, cb_node, pRenderPassBegin);
diff --git a/layers/core_validation_error_enums.h b/layers/core_validation_error_enums.h
index 2ea083cb..145e7e87 100644
--- a/layers/core_validation_error_enums.h
+++ b/layers/core_validation_error_enums.h
@@ -97,6 +97,7 @@ enum DRAW_STATE_ERROR {
DRAWSTATE_INDEX_BUFFER_NOT_BOUND,
DRAWSTATE_PIPELINE_LAYOUTS_INCOMPATIBLE,
DRAWSTATE_RENDERPASS_INCOMPATIBLE,
+ DRAWSTATE_RENDERPASS_TOO_MANY_CLEAR_VALUES,
DRAWSTATE_FRAMEBUFFER_INCOMPATIBLE,
DRAWSTATE_INVALID_FRAMEBUFFER_CREATE_INFO,
DRAWSTATE_INVALID_RENDERPASS,