From c20626c29dd18334ca1e89fac45e9801be480ccf Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Thu, 17 Sep 2015 14:18:16 -0600 Subject: Finished migration of validation checks out of cmd_pipeline.c Added check to DrawState layer for submission of Primary cmd buffer in vkCmdExecuteCommands() call. Added a test to verify the check. Replaced some other checks in cmd_pipeline.c with asserts and the checks themselves are already handled in ParamChecker. --- layers/draw_state.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'layers/draw_state.cpp') diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index cf101b73..10b56d88 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -3115,10 +3115,20 @@ VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t if (!pCB->activeRenderPass) { skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_NO_ACTIVE_RENDERPASS, "DS", "Incorrect call to vkCmdExecuteCommands() without an active RenderPass."); - } else { - updateCBTracking(cmdBuffer); - skipCall |= addCmd(pCB, CMD_EXECUTECOMMANDS); } + GLOBAL_CB_NODE* pSubCB = NULL; + for (uint32_t i=0; icmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_INVALID_SECONDARY_CMD_BUFFER, "DS", + "vkCmdExecuteCommands() called w/ invalid Cmd Buffer %p in element %u of pCmdBuffers array.", (void*)pCmdBuffers[i], i); + } else if (VK_CMD_BUFFER_LEVEL_PRIMARY == pSubCB->createInfo.level) { + skipCall |= log_msg(mdd(pCB->cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType) 0, 0, 0, DRAWSTATE_INVALID_SECONDARY_CMD_BUFFER, "DS", + "vkCmdExecuteCommands() called w/ Primary Cmd Buffer %p in element %u of pCmdBuffers array. All cmd buffers in pCmdBuffers array must be secondary.", (void*)pCmdBuffers[i], i); + } + } + updateCBTracking(cmdBuffer); + skipCall |= addCmd(pCB, CMD_EXECUTECOMMANDS); } if (VK_FALSE == skipCall) get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers); @@ -3407,6 +3417,8 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice dev, const return (PFN_vkVoidFunction) vkCmdNextSubpass; if (!strcmp(funcName, "vkCmdEndRenderPass")) return (PFN_vkVoidFunction) vkCmdEndRenderPass; + if (!strcmp(funcName, "vkCmdExecuteCommands")) + return (PFN_vkVoidFunction) vkCmdExecuteCommands; VkLayerDispatchTable* pTable = get_dispatch_table(draw_state_device_table_map, dev); if (deviceExtMap.size() == 0 || deviceExtMap[pTable].debug_marker_enabled) -- cgit v1.2.3