tests: Tweak dynamic viewport/scissor tests to hit partial updates
core_validation's handling of this was pretty broken. The 'not bound at
all' case is different, let's use these to hit the 'some
viewport/scissor used by the PSO is not set in the dynamic state' cases.
Signed-off-by: Chris Forbes <chrisforbes@google.com>
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 71d2135..174896d 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -8957,6 +8957,12 @@
"Gfx Pipeline viewportCount is 1, but pViewports is NULL. ");
ASSERT_NO_FATAL_FAILURE(InitState());
+
+ if (!m_device->phy().features().multiViewport) {
+ printf("Device does not support multiple viewports/scissors; skipped.\n");
+ return;
+ }
+
ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
VkDescriptorPoolSize ds_type_count = {};
@@ -9096,8 +9102,7 @@
// pViewports
m_errorMonitor->SetDesiredFailureMsg(
VK_DEBUG_REPORT_ERROR_BIT_EXT,
- "Dynamic scissorCount from vkCmdSetScissor() is 2, but PSO "
- "scissorCount is 1. These counts must match.");
+ "Dynamic scissor(s) 0 are used by PSO, ");
VkViewport vp = {}; // Just need dummy vp to point to
vp_state_ci.pViewports = &vp;
@@ -9107,9 +9112,9 @@
BeginCommandBuffer();
vkCmdBindPipeline(m_commandBuffer->GetBufferHandle(),
VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
- VkRect2D scissors[2] = {}; // don't care about data
+ VkRect2D scissors[1] = {}; // don't care about data
// Count of 2 doesn't match PSO count of 1
- vkCmdSetScissor(m_commandBuffer->GetBufferHandle(), 0, 2, scissors);
+ vkCmdSetScissor(m_commandBuffer->GetBufferHandle(), 1, 1, scissors);
Draw(1, 0, 0, 0);
m_errorMonitor->VerifyFound();
@@ -9131,6 +9136,12 @@
"Gfx Pipeline scissorCount is 1, but pScissors is NULL. ");
ASSERT_NO_FATAL_FAILURE(InitState());
+
+ if (!m_device->phy().features().multiViewport) {
+ printf("Device does not support multiple viewports/scissors; skipped.\n");
+ return;
+ }
+
ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
VkDescriptorPoolSize ds_type_count = {};
@@ -9271,8 +9282,7 @@
// pViewports
m_errorMonitor->SetDesiredFailureMsg(
VK_DEBUG_REPORT_ERROR_BIT_EXT,
- "Dynamic viewportCount from vkCmdSetViewport() is 2, but PSO "
- "viewportCount is 1. These counts must match.");
+ "Dynamic viewport(s) 0 are used by PSO, ");
VkRect2D sc = {}; // Just need dummy vp to point to
vp_state_ci.pScissors = ≻
@@ -9282,9 +9292,9 @@
BeginCommandBuffer();
vkCmdBindPipeline(m_commandBuffer->GetBufferHandle(),
VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
- VkViewport viewports[2] = {}; // don't care about data
+ VkViewport viewports[1] = {}; // don't care about data
// Count of 2 doesn't match PSO count of 1
- vkCmdSetViewport(m_commandBuffer->GetBufferHandle(), 0, 2, viewports);
+ vkCmdSetViewport(m_commandBuffer->GetBufferHandle(), 1, 1, viewports);
Draw(1, 0, 0, 0);
m_errorMonitor->VerifyFound();