tests: Fix tests that re-submit Cmd Buffers w/ ONE_TIME_SUBMIT flag
Added a way to pass VkCmdBufferBeginInfo through test framework.
For tests that do multiple submits, update BeginCommandBuffer() calls to not set ONE_TIME_SUBMIT flag.
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index c6a82d9..a0b867a 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -1469,7 +1469,7 @@
pCB->submitCount++; // increment submit count
if ((pCB->beginInfo.flags & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT) && (pCB->submitCount > 1)) {
log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, 0, 0, DRAWSTATE_CMD_BUFFER_SINGLE_SUBMIT_VIOLATION, "DS",
- "CB %#" PRIxLEAST64 " was created w/ VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT set, but has been submitted %#" PRIxLEAST64 " times.", reinterpret_cast<VkUintPtrLeast64>(pCB->cmdBuffer), pCB->submitCount);
+ "CB %#" PRIxLEAST64 " was begun w/ VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT set, but has been submitted %#" PRIxLEAST64 " times.", reinterpret_cast<VkUintPtrLeast64>(pCB->cmdBuffer), pCB->submitCount);
}
if (CB_UPDATE_COMPLETE != pCB->state) {
// Flag error for using CB w/o vkEndCommandBuffer() called
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 87cf9ad..6ece510 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -997,7 +997,7 @@
msgFlags = m_errorMonitor->GetState(&msgString);
ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an err after re-submitting Command Buffer that was created with one-time submit flag";
- if (!strstr(msgString.c_str(),"was created w/ VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT set, but has been submitted")) {
+ if (!strstr(msgString.c_str(),"was begun w/ VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT set, but has been submitted")) {
FAIL() << "Error received was not 'CB (0xaddress) was created w/ VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT set...'";
}
}
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 0a58165..e2766d0 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -274,9 +274,11 @@
void VKTriangleTest(const char *vertShaderText, const char *fragShaderText, const bool rotate);
VkResult BeginCommandBuffer(VkCommandBufferObj &cmdBuffer);
+ VkResult BeginCommandBuffer(VkCommandBufferObj &cmdBuffer, VkCmdBufferBeginInfo *beginInfo);
VkResult EndCommandBuffer(VkCommandBufferObj &cmdBuffer);
/* Convenience functions that use built-in command buffer */
VkResult BeginCommandBuffer() { return BeginCommandBuffer(*m_cmdBuffer); }
+ VkResult BeginCommandBuffer(VkCmdBufferBeginInfo *beginInfo) { return BeginCommandBuffer(*m_cmdBuffer, beginInfo); }
VkResult EndCommandBuffer() { return EndCommandBuffer(*m_cmdBuffer); }
void Draw(uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
{ m_cmdBuffer->Draw(firstVertex, vertexCount, firstInstance, instanceCount); }
@@ -340,6 +342,23 @@
return result;
}
+VkResult VkRenderTest::BeginCommandBuffer(VkCommandBufferObj &cmdBuffer, VkCmdBufferBeginInfo *beginInfo)
+{
+ VkResult result;
+
+ result = cmdBuffer.BeginCommandBuffer(beginInfo);
+
+ /*
+ * For render test all drawing happens in a single render pass
+ * on a single command buffer.
+ */
+ if (VK_SUCCESS == result && renderPass()) {
+ cmdBuffer.BeginRenderPass(renderPassBeginInfo());
+ }
+
+ return result;
+}
+
VkResult VkRenderTest::EndCommandBuffer(VkCommandBufferObj &cmdBuffer)
{
VkResult result;
@@ -486,7 +505,12 @@
descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, constantBuffer);
ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
- ASSERT_VK_SUCCESS(BeginCommandBuffer());
+
+ VkCmdBufferBeginInfo cbBeginInfo;
+ memset(&cbBeginInfo, 0, sizeof(VkCmdBufferBeginInfo));
+ cbBeginInfo.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO;
+ cbBeginInfo.flags = VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT;
+ ASSERT_VK_SUCCESS(BeginCommandBuffer(&cbBeginInfo));
GenericDrawPreparation(pipelineobj, descriptorSet);
#ifdef DUMP_STATE_DOT
@@ -1401,7 +1425,12 @@
descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, MVPBuffer);
ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
- ASSERT_VK_SUCCESS(BeginCommandBuffer());
+
+ VkCmdBufferBeginInfo cbBeginInfo;
+ memset(&cbBeginInfo, 0, sizeof(VkCmdBufferBeginInfo));
+ cbBeginInfo.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO;
+ cbBeginInfo.flags = VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT;
+ ASSERT_VK_SUCCESS(BeginCommandBuffer(&cbBeginInfo));
GenericDrawPreparation(pipelineobj, descriptorSet);
@@ -2773,7 +2802,12 @@
pipelineobj.SetDepthStencil(&ds_state);
ASSERT_NO_FATAL_FAILURE(InitRenderTarget(m_depthStencil->BindInfo()));
- ASSERT_VK_SUCCESS(BeginCommandBuffer());
+
+ VkCmdBufferBeginInfo cbBeginInfo;
+ memset(&cbBeginInfo, 0, sizeof(VkCmdBufferBeginInfo));
+ cbBeginInfo.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO;
+ cbBeginInfo.flags = VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT;
+ ASSERT_VK_SUCCESS(BeginCommandBuffer(&cbBeginInfo));
GenericDrawPreparation(pipelineobj, descriptorSet);