layers: Flag DrawState INVALID_RENDERPASS error if NULL RenderPass used to Begin/End/Continue a RenderPass
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 94c471f..131a723 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -2037,7 +2037,11 @@
if (pBeginInfo->pNext) {
VkCmdBufferGraphicsBeginInfo* pCbGfxBI = (VkCmdBufferGraphicsBeginInfo*)pBeginInfo->pNext;
if (VK_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO == pCbGfxBI->sType) {
- pCB->activeRenderPass = pCbGfxBI->renderPassContinue.renderPass;
+ if (pCbGfxBI->renderPassContinue.renderPass)
+ pCB->activeRenderPass = pCbGfxBI->renderPassContinue.renderPass;
+ else
+ log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, DRAWSTATE_INVALID_RENDERPASS, "DS",
+ "You cannot use a NULL RenderPass object in vkCmdBeginCommandBuffer()");
}
}
} else {
@@ -2706,12 +2710,18 @@
{
GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
if (pCB) {
- updateCBTracking(cmdBuffer);
- addCmd(pCB, CMD_BEGINRENDERPASS);
- pCB->activeRenderPass = pRenderPassBegin->renderPass;
- pCB->framebuffer = pRenderPassBegin->framebuffer;
- if (pCB->lastBoundPipeline) {
- validatePipelineState(pCB, VK_PIPELINE_BIND_POINT_GRAPHICS, pCB->lastBoundPipeline);
+ if (pRenderPassBegin && pRenderPassBegin->renderPass) {
+ updateCBTracking(cmdBuffer);
+ addCmd(pCB, CMD_BEGINRENDERPASS);
+ pCB->activeRenderPass = pRenderPassBegin->renderPass;
+ pCB->framebuffer = pRenderPassBegin->framebuffer;
+ if (pCB->lastBoundPipeline) {
+ validatePipelineState(pCB, VK_PIPELINE_BIND_POINT_GRAPHICS, pCB->lastBoundPipeline);
+ }
+ }
+ else {
+ log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, DRAWSTATE_INVALID_RENDERPASS, "DS",
+ "You cannot use a NULL RenderPass object in vkCmdBeginRenderPass()");
}
}
get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
@@ -2721,9 +2731,15 @@
{
GLOBAL_CB_NODE* pCB = getCBNode(cmdBuffer);
if (pCB) {
- updateCBTracking(cmdBuffer);
- addCmd(pCB, CMD_ENDRENDERPASS);
- pCB->activeRenderPass = 0;
+ if (renderPass) {
+ updateCBTracking(cmdBuffer);
+ addCmd(pCB, CMD_ENDRENDERPASS);
+ pCB->activeRenderPass = 0;
+ }
+ else {
+ log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkObjectType) 0, NULL, 0, DRAWSTATE_INVALID_RENDERPASS, "DS",
+ "You cannot use a NULL RenderPass object in vkCmdEndRenderPass()");
+ }
}
get_dispatch_table(draw_state_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer, renderPass);
}