aboutsummaryrefslogtreecommitdiff
path: root/layers/draw_state.cpp
diff options
context:
space:
mode:
authorMichael Lentine <mlentine@google.com>2016-02-02 16:47:58 -0600
committerTobin Ehlis <tobine@google.com>2016-02-04 11:17:40 -0700
commit9efcf135273f232baf2fe3fcd592209eda59a048 (patch)
treee92522244791a9d8f4537eae7ddee3af489facea /layers/draw_state.cpp
parentee73d499441ed22413fe925a4f0629be869da52c (diff)
downloadusermoji-9efcf135273f232baf2fe3fcd592209eda59a048.tar.xz
layers: Make sure fb render pass and secondary render pass are compatible.
Diffstat (limited to 'layers/draw_state.cpp')
-rw-r--r--layers/draw_state.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 072a34c6..39855d3b 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -6292,10 +6292,20 @@ bool validateFramebuffer(layer_data* dev_data, VkCommandBuffer primaryBuffer, co
}
VkFramebuffer primary_fb = pCB->framebuffer;
VkFramebuffer secondary_fb = pSubCB->beginInfo.pInheritanceInfo->framebuffer;
- if (secondary_fb != VK_NULL_HANDLE && primary_fb != secondary_fb) {
- skip_call |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT) 0, 0, __LINE__, DRAWSTATE_INVALID_SECONDARY_COMMAND_BUFFER, "DS",
- "vkCmdExecuteCommands() called w/ invalid Cmd Buffer %p which has a framebuffer %" PRIx64 " that is not compatible with the current framebuffer %" PRIx64 ".",
- (void*)secondaryBuffer, reinterpret_cast<uint64_t>(secondary_fb), reinterpret_cast<uint64_t>(primary_fb));
+ if (secondary_fb != VK_NULL_HANDLE) {
+ if (primary_fb != secondary_fb) {
+ skip_call |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT) 0, 0, __LINE__, DRAWSTATE_INVALID_SECONDARY_COMMAND_BUFFER, "DS",
+ "vkCmdExecuteCommands() called w/ invalid Cmd Buffer %p which has a framebuffer %" PRIx64 " that is not compatible with the current framebuffer %" PRIx64 ".",
+ (void*)secondaryBuffer, reinterpret_cast<uint64_t>(secondary_fb), reinterpret_cast<uint64_t>(primary_fb));
+ }
+ auto fb_data = dev_data->frameBufferMap.find(secondary_fb);
+ if (fb_data == dev_data->frameBufferMap.end() || !fb_data->second) {
+ skip_call |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT) 0, 0, __LINE__, DRAWSTATE_INVALID_SECONDARY_COMMAND_BUFFER, "DS",
+ "vkCmdExecuteCommands() called w/ invalid Cmd Buffer %p which has invalid framebuffer %" PRIx64 ".",
+ (void*)secondaryBuffer, reinterpret_cast<uint64_t>(secondary_fb));
+ return skip_call;
+ }
+ skip_call |= validateRenderPassCompatibility(dev_data, secondaryBuffer, fb_data->second->renderPass, secondaryBuffer, pSubCB->beginInfo.pInheritanceInfo->renderPass);
}
return skip_call;
}