From 4aab7a2c557dee3677a90734248a2f0267ad73b3 Mon Sep 17 00:00:00 2001 From: Michael Lentine Date: Tue, 2 Feb 2016 17:28:24 -0600 Subject: [PATCH] layers: Validate subpass index in begin info is valid. --- layers/draw_state.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 39855d3..06d76f1 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(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", -- 2.7.4