From f89babd2ae76780c8145da6e648771aee9745cc4 Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Wed, 18 Jan 2017 15:14:29 -0700 Subject: layers: Refactor ClearAttachments to pre/post form Change-Id: Ica1bf93ddcd7eb0c2e83171ba5e56df382571677 --- layers/core_validation.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'layers/core_validation.cpp') diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 01312656..68cb1b64 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -8847,13 +8847,10 @@ static inline bool ContainsRect(VkRect2D rect, VkRect2D sub_rect) { return true; } -VKAPI_ATTR void VKAPI_CALL CmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, - const VkClearAttachment *pAttachments, uint32_t rectCount, - const VkClearRect *pRects) { - bool skip = false; - layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); - std::unique_lock lock(global_lock); +bool PreCallValidateCmdClearAttachments(layer_data *dev_data, VkCommandBuffer commandBuffer, uint32_t attachmentCount, + const VkClearAttachment *pAttachments, uint32_t rectCount, const VkClearRect *pRects) { GLOBAL_CB_NODE *cb_node = getCBNode(dev_data, commandBuffer); + bool skip = false; if (cb_node) { skip |= ValidateCmd(dev_data, cb_node, CMD_CLEARATTACHMENTS, "vkCmdClearAttachments()"); UpdateCmdBufferLastCmd(dev_data, cb_node, CMD_CLEARATTACHMENTS); @@ -8943,7 +8940,18 @@ VKAPI_ATTR void VKAPI_CALL CmdClearAttachments(VkCommandBuffer commandBuffer, ui } } } - lock.unlock(); + return skip; +} + +VKAPI_ATTR void VKAPI_CALL CmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, + const VkClearAttachment *pAttachments, uint32_t rectCount, + const VkClearRect *pRects) { + bool skip = false; + layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); + { + std::lock_guard lock(global_lock); + skip = PreCallValidateCmdClearAttachments(dev_data, commandBuffer, attachmentCount, pAttachments, rectCount, pRects); + } if (!skip) dev_data->dispatch_table.CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects); } -- cgit v1.2.3