aboutsummaryrefslogtreecommitdiff
path: root/layers/draw_state.cpp
diff options
context:
space:
mode:
authorMichael Lentine <mlentine@google.com>2016-02-02 17:28:24 -0600
committerTobin Ehlis <tobine@google.com>2016-02-04 11:17:41 -0700
commit4aab7a2c557dee3677a90734248a2f0267ad73b3 (patch)
tree897f9aef94c5636c7b297142b8edaa4d9dd22a85 /layers/draw_state.cpp
parent9efcf135273f232baf2fe3fcd592209eda59a048 (diff)
downloadusermoji-4aab7a2c557dee3677a90734248a2f0267ad73b3.tar.xz
layers: Validate subpass index in begin info is valid.
Diffstat (limited to 'layers/draw_state.cpp')
-rw-r--r--layers/draw_state.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 39855d3b..06d76f1f 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -4389,6 +4389,17 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(VkCommandBuf
"support precise occlusion queries.", reinterpret_cast<void*>(commandBuffer));
}
}
+ if (pInfo->renderPass != VK_NULL_HANDLE) {
+ auto rp_data = dev_data->renderPassMap.find(pInfo->renderPass);
+ if (rp_data != dev_data->renderPassMap.end() && rp_data->second && rp_data->second->pCreateInfo) {
+ if (pInfo->subpass >= rp_data->second->pCreateInfo->subpassCount) {
+ skipCall |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, (uint64_t)commandBuffer,
+ __LINE__, DRAWSTATE_BEGIN_CB_INVALID_STATE, "DS",
+ "vkBeginCommandBuffer(): Secondary Command Buffers (%p) must has a subpass index (%d) that is less than the number of subpasses (%d).",
+ (void*)commandBuffer, pInfo->subpass, rp_data->second->pCreateInfo->subpassCount);
+ }
+ }
+ }
}
if (CB_RECORDING == pCB->state) {
skipCall |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, (uint64_t)commandBuffer, __LINE__, DRAWSTATE_BEGIN_CB_INVALID_STATE, "DS",