aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorChris Forbes <chrisforbes@google.com>2016-09-07 11:43:52 +1200
committerChris Forbes <chrisforbes@google.com>2016-09-07 16:58:24 +1200
commit8c6b3e2ca5c408def872dbd8bbdb80f76589812c (patch)
tree5fe50bbc96dd0d9c5dd9cfeb8dd93b0df6d3d58c /layers/core_validation.cpp
parent6be3cdfac51fd153b8039803ce38c31af4384fcd (diff)
downloadusermoji-8c6b3e2ca5c408def872dbd8bbdb80f76589812c.tar.xz
layers: Make CmdNextSubpass more careful about side effects on failure
Signed-off-by: Chris Forbes <chrisforbes@google.com>
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 12a8ee7e..df2c6c92 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -10069,14 +10069,21 @@ VKAPI_ATTR void VKAPI_CALL CmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpa
if (pCB) {
skip_call |= validatePrimaryCommandBuffer(dev_data, pCB, "vkCmdNextSubpass");
skip_call |= addCmd(dev_data, pCB, CMD_NEXTSUBPASS, "vkCmdNextSubpass()");
- pCB->activeSubpass++;
- pCB->activeSubpassContents = contents;
- TransitionSubpassLayouts(dev_data, pCB, &pCB->activeRenderPassBeginInfo, pCB->activeSubpass);
skip_call |= outsideRenderPass(dev_data, pCB, "vkCmdNextSubpass");
}
lock.unlock();
- if (!skip_call)
- dev_data->device_dispatch_table->CmdNextSubpass(commandBuffer, contents);
+
+ if (skip_call)
+ return;
+
+ dev_data->device_dispatch_table->CmdNextSubpass(commandBuffer, contents);
+
+ if (pCB) {
+ lock.lock();
+ pCB->activeSubpass++;
+ pCB->activeSubpassContents = contents;
+ TransitionSubpassLayouts(dev_data, pCB, &pCB->activeRenderPassBeginInfo, pCB->activeSubpass);
+ }
}
VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(VkCommandBuffer commandBuffer) {