From 058d399edd20a09a3f9b1ae39c374a244978ffdc Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Tue, 28 Nov 2017 15:02:29 -0700 Subject: layers:Add secondary CB warning Fixes #2237 If VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT is not set by a secondary command buffer, then any renderPass specified in the inheritance info will be ignored. Adding a warning if a non-NULL renderPass is included in the inheritance info but the VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT is not set. This is likely an oversight by the user and the current validation error that this case leads to (no active renderPass) doesn't directly point to the root cause. --- layers/core_validation.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'layers/core_validation.cpp') diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index e08ca129..769c65f2 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -5200,12 +5200,24 @@ VKAPI_ATTR VkResult VKAPI_CALL BeginCommandBuffer(VkCommandBuffer commandBuffer, cb_node->inheritanceInfo = *(cb_node->beginInfo.pInheritanceInfo); cb_node->beginInfo.pInheritanceInfo = &cb_node->inheritanceInfo; // If we are a secondary command-buffer and inheriting. Update the items we should inherit. - if ((cb_node->createInfo.level != VK_COMMAND_BUFFER_LEVEL_PRIMARY) && - (cb_node->beginInfo.flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)) { - cb_node->activeRenderPass = GetRenderPassState(dev_data, cb_node->beginInfo.pInheritanceInfo->renderPass); - cb_node->activeSubpass = cb_node->beginInfo.pInheritanceInfo->subpass; - cb_node->activeFramebuffer = cb_node->beginInfo.pInheritanceInfo->framebuffer; - cb_node->framebuffers.insert(cb_node->beginInfo.pInheritanceInfo->framebuffer); + if (cb_node->createInfo.level != VK_COMMAND_BUFFER_LEVEL_PRIMARY) { + if (cb_node->beginInfo.flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT) { + cb_node->activeRenderPass = GetRenderPassState(dev_data, cb_node->beginInfo.pInheritanceInfo->renderPass); + cb_node->activeSubpass = cb_node->beginInfo.pInheritanceInfo->subpass; + cb_node->activeFramebuffer = cb_node->beginInfo.pInheritanceInfo->framebuffer; + cb_node->framebuffers.insert(cb_node->beginInfo.pInheritanceInfo->framebuffer); + } else if (VK_NULL_HANDLE != cb_node->beginInfo.pInheritanceInfo->renderPass) { + // This is a user-requested warning. This is a likely case where user forgot to set RP continue bit + skip |= + log_msg(dev_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, + HandleToUint64(cb_node->beginInfo.pInheritanceInfo->renderPass), __LINE__, + VALIDATION_ERROR_0280006a, "CORE", + "vkBeginCommandBuffer(): Secondary command buffer with a non-null pInheritanceInfo->renderPass " + "does not have " + "VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT. If you intend to draw from this command buffer " + "you must set " + "VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT in pBeginInfo->flags."); + } } } } -- cgit v1.2.3