layers: Get rid of old CBSTATUS-based dynamic viewport and scissor
These were superceded by the precise tracking of dynamic scissors and
viewports.
Fix up the tests to look for the precise errors, and get rid of the
broken clearing of static scissors & viewports, which triggered other
errors.
Signed-off-by: Chris Forbes <chrisforbes@google.com>
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 09f4bcb..471237c 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -2240,11 +2240,7 @@
// Validate state stored as flags at time of draw call
static bool validate_draw_state_flags(layer_data *dev_data, GLOBAL_CB_NODE *pCB, const PIPELINE_NODE *pPipe, bool indexedDraw) {
- bool result;
- result = validate_status(dev_data, pCB, CBSTATUS_VIEWPORT_SET, VK_DEBUG_REPORT_ERROR_BIT_EXT, DRAWSTATE_VIEWPORT_NOT_BOUND,
- "Dynamic viewport state not set for this command buffer");
- result |= validate_status(dev_data, pCB, CBSTATUS_SCISSOR_SET, VK_DEBUG_REPORT_ERROR_BIT_EXT, DRAWSTATE_SCISSOR_NOT_BOUND,
- "Dynamic scissor state not set for this command buffer");
+ bool result = false;
if (pPipe->graphicsPipelineCI.pInputAssemblyState &&
((pPipe->graphicsPipelineCI.pInputAssemblyState->topology == VK_PRIMITIVE_TOPOLOGY_LINE_LIST) ||
(pPipe->graphicsPipelineCI.pInputAssemblyState->topology == VK_PRIMITIVE_TOPOLOGY_LINE_STRIP))) {
@@ -4073,12 +4069,6 @@
CBStatusFlags psoDynStateMask = CBSTATUS_ALL;
for (uint32_t i = 0; i < pPipe->graphicsPipelineCI.pDynamicState->dynamicStateCount; i++) {
switch (pPipe->graphicsPipelineCI.pDynamicState->pDynamicStates[i]) {
- case VK_DYNAMIC_STATE_VIEWPORT:
- psoDynStateMask &= ~CBSTATUS_VIEWPORT_SET;
- break;
- case VK_DYNAMIC_STATE_SCISSOR:
- psoDynStateMask &= ~CBSTATUS_SCISSOR_SET;
- break;
case VK_DYNAMIC_STATE_LINE_WIDTH:
psoDynStateMask &= ~CBSTATUS_LINE_WIDTH_SET;
break;
@@ -7020,7 +7010,6 @@
GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer);
if (pCB) {
skip_call |= addCmd(dev_data, pCB, CMD_SETVIEWPORTSTATE, "vkCmdSetViewport()");
- pCB->status |= CBSTATUS_VIEWPORT_SET;
pCB->viewportMask |= ((1u<<viewportCount) - 1u) << firstViewport;
}
lock.unlock();
@@ -7036,7 +7025,6 @@
GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer);
if (pCB) {
skip_call |= addCmd(dev_data, pCB, CMD_SETSCISSORSTATE, "vkCmdSetScissor()");
- pCB->status |= CBSTATUS_SCISSOR_SET;
pCB->scissorMask |= ((1u<<scissorCount) - 1u) << firstScissor;
}
lock.unlock();
diff --git a/layers/core_validation_types.h b/layers/core_validation_types.h
index 4edfa9c..df05e34 100644
--- a/layers/core_validation_types.h
+++ b/layers/core_validation_types.h
@@ -402,17 +402,15 @@
enum CBStatusFlagBits {
// clang-format off
CBSTATUS_NONE = 0x00000000, // No status is set
- CBSTATUS_VIEWPORT_SET = 0x00000001, // Viewport has been set
- CBSTATUS_LINE_WIDTH_SET = 0x00000002, // Line width has been set
- CBSTATUS_DEPTH_BIAS_SET = 0x00000004, // Depth bias has been set
- CBSTATUS_BLEND_CONSTANTS_SET = 0x00000008, // Blend constants state has been set
- CBSTATUS_DEPTH_BOUNDS_SET = 0x00000010, // Depth bounds state object has been set
- CBSTATUS_STENCIL_READ_MASK_SET = 0x00000020, // Stencil read mask has been set
- CBSTATUS_STENCIL_WRITE_MASK_SET = 0x00000040, // Stencil write mask has been set
- CBSTATUS_STENCIL_REFERENCE_SET = 0x00000080, // Stencil reference has been set
- CBSTATUS_SCISSOR_SET = 0x00000100, // Scissor has been set
- CBSTATUS_INDEX_BUFFER_BOUND = 0x00000200, // Index buffer has been set
- CBSTATUS_ALL = 0x000001FF, // All dynamic state set (intentionally exclude index buffer)
+ CBSTATUS_LINE_WIDTH_SET = 0x00000001, // Line width has been set
+ CBSTATUS_DEPTH_BIAS_SET = 0x00000002, // Depth bias has been set
+ CBSTATUS_BLEND_CONSTANTS_SET = 0x00000004, // Blend constants state has been set
+ CBSTATUS_DEPTH_BOUNDS_SET = 0x00000008, // Depth bounds state object has been set
+ CBSTATUS_STENCIL_READ_MASK_SET = 0x00000010, // Stencil read mask has been set
+ CBSTATUS_STENCIL_WRITE_MASK_SET = 0x00000020, // Stencil write mask has been set
+ CBSTATUS_STENCIL_REFERENCE_SET = 0x00000040, // Stencil reference has been set
+ CBSTATUS_INDEX_BUFFER_BOUND = 0x00000080, // Index buffer has been set
+ CBSTATUS_ALL = 0x0000007F, // All dynamic state set (intentionally exclude index buffer)
// clang-format on
};
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 987c4f1..7ce5631 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -415,13 +415,9 @@
// the ones we want
if (failMask & BsoFailViewport) {
pipelineobj.MakeDynamic(VK_DYNAMIC_STATE_VIEWPORT);
- m_viewports.clear();
- m_scissors.clear();
}
if (failMask & BsoFailScissor) {
pipelineobj.MakeDynamic(VK_DYNAMIC_STATE_SCISSOR);
- m_scissors.clear();
- m_viewports.clear();
}
if (failMask & BsoFailBlend) {
pipelineobj.MakeDynamic(VK_DYNAMIC_STATE_BLEND_CONSTANTS);
@@ -6180,7 +6176,7 @@
ASSERT_NO_FATAL_FAILURE(InitState());
// Dynamic viewport state
- m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT, "Dynamic viewport state not set for this command buffer");
+ m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT, "Dynamic viewport(s) 0 are used by PSO, but were not provided");
VKTriangleTest(bindStateVertShaderText, bindStateFragShaderText, BsoFailViewport);
m_errorMonitor->VerifyFound();
}
@@ -6191,7 +6187,7 @@
ASSERT_NO_FATAL_FAILURE(InitState());
// Dynamic scissor state
- m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT, "Dynamic scissor state not set for this command buffer");
+ m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT, "Dynamic scissor(s) 0 are used by PSO, but were not provided");
VKTriangleTest(bindStateVertShaderText, bindStateFragShaderText, BsoFailScissor);
m_errorMonitor->VerifyFound();
}