From 5251b1bd5d9002c4e289a93e0e24ce83dd45a383 Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Tue, 17 Apr 2018 16:14:26 -0600 Subject: [PATCH] layers:Capture rect by value to validate 2nd cb Fixes #2587 The lambda function was only capturing the pRect pointer by value so the underlying rect value could still be changed between when the command was submitted to a secondary CB and when the rect was validated at CmdExecuteCommands() time. Copy the actual rect value so that it can't change. --- layers/buffer_validation.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp index 7be395e..99b3fa0 100644 --- a/layers/buffer_validation.cpp +++ b/layers/buffer_validation.cpp @@ -2198,8 +2198,10 @@ bool PreCallValidateCmdClearAttachments(layer_data *device_data, VkCommandBuffer j); } } else { + const auto local_rect = + pRects[j].rect; // local copy of rect captured by value below to preserve original contents cb_node->cmd_execute_commands_functions.emplace_back([=](GLOBAL_CB_NODE *prim_cb, VkFramebuffer fb) { - if (false == ContainsRect(prim_cb->activeRenderPassBeginInfo.renderArea, pRects[j].rect)) { + if (false == ContainsRect(prim_cb->activeRenderPassBeginInfo.renderArea, local_rect)) { return log_msg( report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, HandleToUint64(commandBuffer), VALIDATION_ERROR_18600020, -- 2.7.4