layers: Generate CB dynamic status flags
diff --git a/layers/cmd_buffer_state.cpp b/layers/cmd_buffer_state.cpp
index 8cd9230..ce87416 100644
--- a/layers/cmd_buffer_state.cpp
+++ b/layers/cmd_buffer_state.cpp
@@ -76,287 +76,6 @@
return kGeneratedCommandNameList[type];
}
-VkDynamicState ConvertToDynamicState(CBStatus flag) {
- switch (flag) {
- case CBSTATUS_LINE_WIDTH_SET:
- return VK_DYNAMIC_STATE_LINE_WIDTH;
- case CBSTATUS_DEPTH_BIAS_SET:
- return VK_DYNAMIC_STATE_DEPTH_BIAS;
- case CBSTATUS_BLEND_CONSTANTS_SET:
- return VK_DYNAMIC_STATE_BLEND_CONSTANTS;
- case CBSTATUS_DEPTH_BOUNDS_SET:
- return VK_DYNAMIC_STATE_DEPTH_BOUNDS;
- case CBSTATUS_STENCIL_READ_MASK_SET:
- return VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK;
- case CBSTATUS_STENCIL_WRITE_MASK_SET:
- return VK_DYNAMIC_STATE_STENCIL_WRITE_MASK;
- case CBSTATUS_STENCIL_REFERENCE_SET:
- return VK_DYNAMIC_STATE_STENCIL_REFERENCE;
- case CBSTATUS_VIEWPORT_SET:
- return VK_DYNAMIC_STATE_VIEWPORT;
- case CBSTATUS_SCISSOR_SET:
- return VK_DYNAMIC_STATE_SCISSOR;
- case CBSTATUS_EXCLUSIVE_SCISSOR_SET:
- return VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV;
- case CBSTATUS_SHADING_RATE_PALETTE_SET:
- return VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV;
- case CBSTATUS_LINE_STIPPLE_SET:
- return VK_DYNAMIC_STATE_LINE_STIPPLE_EXT;
- case CBSTATUS_VIEWPORT_W_SCALING_SET:
- return VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV;
- case CBSTATUS_CULL_MODE_SET:
- return VK_DYNAMIC_STATE_CULL_MODE_EXT;
- case CBSTATUS_FRONT_FACE_SET:
- return VK_DYNAMIC_STATE_FRONT_FACE_EXT;
- case CBSTATUS_PRIMITIVE_TOPOLOGY_SET:
- return VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT;
- case CBSTATUS_VIEWPORT_WITH_COUNT_SET:
- return VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT;
- case CBSTATUS_SCISSOR_WITH_COUNT_SET:
- return VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT;
- case CBSTATUS_VERTEX_INPUT_BINDING_STRIDE_SET:
- return VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT;
- case CBSTATUS_DEPTH_TEST_ENABLE_SET:
- return VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT;
- case CBSTATUS_DEPTH_WRITE_ENABLE_SET:
- return VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT;
- case CBSTATUS_DEPTH_COMPARE_OP_SET:
- return VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT;
- case CBSTATUS_DEPTH_BOUNDS_TEST_ENABLE_SET:
- return VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT;
- case CBSTATUS_STENCIL_TEST_ENABLE_SET:
- return VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT;
- case CBSTATUS_STENCIL_OP_SET:
- return VK_DYNAMIC_STATE_STENCIL_OP_EXT;
- case CBSTATUS_DISCARD_RECTANGLE_SET:
- return VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT;
- case CBSTATUS_SAMPLE_LOCATIONS_SET:
- return VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT;
- case CBSTATUS_COARSE_SAMPLE_ORDER_SET:
- return VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV;
- case CBSTATUS_PATCH_CONTROL_POINTS_SET:
- return VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT;
- case CBSTATUS_RASTERIZER_DISCARD_ENABLE_SET:
- return VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT;
- case CBSTATUS_DEPTH_BIAS_ENABLE_SET:
- return VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT;
- case CBSTATUS_LOGIC_OP_SET:
- return VK_DYNAMIC_STATE_LOGIC_OP_EXT;
- case CBSTATUS_PRIMITIVE_RESTART_ENABLE_SET:
- return VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT;
- case CBSTATUS_VERTEX_INPUT_SET:
- return VK_DYNAMIC_STATE_VERTEX_INPUT_EXT;
- case CBSTATUS_COLOR_WRITE_ENABLE_SET:
- return VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT;
- case CBSTATUS_TESSELLATION_DOMAIN_ORIGIN_SET:
- return VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT;
- case CBSTATUS_DEPTH_CLAMP_ENABLE_SET:
- return VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT;
- case CBSTATUS_POLYGON_MODE_SET:
- return VK_DYNAMIC_STATE_POLYGON_MODE_EXT;
- case CBSTATUS_RASTERIZATION_SAMPLES_SET:
- return VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT;
- case CBSTATUS_SAMPLE_MASK_SET:
- return VK_DYNAMIC_STATE_SAMPLE_MASK_EXT;
- case CBSTATUS_ALPHA_TO_COVERAGE_ENABLE_SET:
- return VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT;
- case CBSTATUS_ALPHA_TO_ONE_ENABLE_SET:
- return VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT;
- case CBSTATUS_LOGIC_OP_ENABLE_SET:
- return VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT;
- case CBSTATUS_COLOR_BLEND_ENABLE_SET:
- return VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT;
- case CBSTATUS_COLOR_BLEND_EQUATION_SET:
- return VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT;
- case CBSTATUS_COLOR_WRITE_MASK_SET:
- return VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT;
- case CBSTATUS_RASTERIZATION_STREAM_SET:
- return VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT;
- case CBSTATUS_CONSERVATIVE_RASTERIZATION_MODE_SET:
- return VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT;
- case CBSTATUS_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_SET:
- return VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT;
- case CBSTATUS_DEPTH_CLIP_ENABLE_SET:
- return VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT;
- case CBSTATUS_SAMPLE_LOCATIONS_ENABLE_SET:
- return VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT;
- case CBSTATUS_COLOR_BLEND_ADVANCED_SET:
- return VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT;
- case CBSTATUS_PROVOKING_VERTEX_MODE_SET:
- return VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT;
- case CBSTATUS_LINE_RASTERIZATION_MODE_SET:
- return VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT;
- case CBSTATUS_LINE_STIPPLE_ENABLE_SET:
- return VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT;
- case CBSTATUS_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_SET:
- return VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT;
- case CBSTATUS_VIEWPORT_W_SCALING_ENABLE_SET:
- return VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV;
- case CBSTATUS_VIEWPORT_SWIZZLE_SET:
- return VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV;
- case CBSTATUS_COVERAGE_TO_COLOR_ENABLE_SET:
- return VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV;
- case CBSTATUS_COVERAGE_TO_COLOR_LOCATION_SET:
- return VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV;
- case CBSTATUS_COVERAGE_MODULATION_MODE_SET:
- return VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV;
- case CBSTATUS_COVERAGE_MODULATION_TABLE_ENABLE_SET:
- return VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV;
- case CBSTATUS_COVERAGE_MODULATION_TABLE_SET:
- return VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV;
- case CBSTATUS_SHADING_RATE_IMAGE_ENABLE_SET:
- return VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV;
- case CBSTATUS_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_SET:
- return VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV;
- case CBSTATUS_COVERAGE_REDUCTION_MODE_SET:
- return VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV;
- default:
- // CBSTATUS_INDEX_BUFFER_BOUND is not in VkDynamicState
- return VK_DYNAMIC_STATE_MAX_ENUM;
- }
- return VK_DYNAMIC_STATE_MAX_ENUM;
-}
-
-CBStatus ConvertToCBStatus(VkDynamicState state) {
- switch (state) {
- case VK_DYNAMIC_STATE_VIEWPORT:
- return CBSTATUS_VIEWPORT_SET;
- case VK_DYNAMIC_STATE_SCISSOR:
- return CBSTATUS_SCISSOR_SET;
- case VK_DYNAMIC_STATE_LINE_WIDTH:
- return CBSTATUS_LINE_WIDTH_SET;
- case VK_DYNAMIC_STATE_DEPTH_BIAS:
- return CBSTATUS_DEPTH_BIAS_SET;
- case VK_DYNAMIC_STATE_BLEND_CONSTANTS:
- return CBSTATUS_BLEND_CONSTANTS_SET;
- case VK_DYNAMIC_STATE_DEPTH_BOUNDS:
- return CBSTATUS_DEPTH_BOUNDS_SET;
- case VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK:
- return CBSTATUS_STENCIL_READ_MASK_SET;
- case VK_DYNAMIC_STATE_STENCIL_WRITE_MASK:
- return CBSTATUS_STENCIL_WRITE_MASK_SET;
- case VK_DYNAMIC_STATE_STENCIL_REFERENCE:
- return CBSTATUS_STENCIL_REFERENCE_SET;
- case VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV:
- return CBSTATUS_VIEWPORT_W_SCALING_SET;
- case VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT:
- return CBSTATUS_DISCARD_RECTANGLE_SET;
- case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT:
- return CBSTATUS_SAMPLE_LOCATIONS_SET;
- case VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV:
- return CBSTATUS_SHADING_RATE_PALETTE_SET;
- case VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV:
- return CBSTATUS_COARSE_SAMPLE_ORDER_SET;
- case VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV:
- return CBSTATUS_EXCLUSIVE_SCISSOR_SET;
- case VK_DYNAMIC_STATE_LINE_STIPPLE_EXT:
- return CBSTATUS_LINE_STIPPLE_SET;
- case VK_DYNAMIC_STATE_CULL_MODE_EXT:
- return CBSTATUS_CULL_MODE_SET;
- case VK_DYNAMIC_STATE_FRONT_FACE_EXT:
- return CBSTATUS_FRONT_FACE_SET;
- case VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT:
- return CBSTATUS_PRIMITIVE_TOPOLOGY_SET;
- case VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT:
- return CBSTATUS_VIEWPORT_WITH_COUNT_SET;
- case VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT:
- return CBSTATUS_SCISSOR_WITH_COUNT_SET;
- case VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT:
- return CBSTATUS_VERTEX_INPUT_BINDING_STRIDE_SET;
- case VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT:
- return CBSTATUS_DEPTH_TEST_ENABLE_SET;
- case VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT:
- return CBSTATUS_DEPTH_WRITE_ENABLE_SET;
- case VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT:
- return CBSTATUS_DEPTH_COMPARE_OP_SET;
- case VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT:
- return CBSTATUS_DEPTH_BOUNDS_TEST_ENABLE_SET;
- case VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT:
- return CBSTATUS_STENCIL_TEST_ENABLE_SET;
- case VK_DYNAMIC_STATE_STENCIL_OP_EXT:
- return CBSTATUS_STENCIL_OP_SET;
- case VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT:
- return CBSTATUS_PATCH_CONTROL_POINTS_SET;
- case VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT:
- return CBSTATUS_RASTERIZER_DISCARD_ENABLE_SET;
- case VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT:
- return CBSTATUS_DEPTH_BIAS_ENABLE_SET;
- case VK_DYNAMIC_STATE_LOGIC_OP_EXT:
- return CBSTATUS_LOGIC_OP_SET;
- case VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT:
- return CBSTATUS_PRIMITIVE_RESTART_ENABLE_SET;
- case VK_DYNAMIC_STATE_VERTEX_INPUT_EXT:
- return CBSTATUS_VERTEX_INPUT_SET;
- case VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT:
- return CBSTATUS_COLOR_WRITE_ENABLE_SET;
- case VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT:
- return CBSTATUS_TESSELLATION_DOMAIN_ORIGIN_SET;
- case VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT:
- return CBSTATUS_DEPTH_CLAMP_ENABLE_SET;
- case VK_DYNAMIC_STATE_POLYGON_MODE_EXT:
- return CBSTATUS_POLYGON_MODE_SET;
- case VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT:
- return CBSTATUS_RASTERIZATION_SAMPLES_SET;
- case VK_DYNAMIC_STATE_SAMPLE_MASK_EXT:
- return CBSTATUS_SAMPLE_MASK_SET;
- case VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT:
- return CBSTATUS_ALPHA_TO_COVERAGE_ENABLE_SET;
- case VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT:
- return CBSTATUS_ALPHA_TO_ONE_ENABLE_SET;
- case VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT:
- return CBSTATUS_LOGIC_OP_ENABLE_SET;
- case VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT:
- return CBSTATUS_COLOR_BLEND_ENABLE_SET;
- case VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT:
- return CBSTATUS_COLOR_BLEND_EQUATION_SET;
- case VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT:
- return CBSTATUS_COLOR_WRITE_MASK_SET;
- case VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT:
- return CBSTATUS_RASTERIZATION_STREAM_SET;
- case VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT:
- return CBSTATUS_CONSERVATIVE_RASTERIZATION_MODE_SET;
- case VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT:
- return CBSTATUS_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_SET;
- case VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT:
- return CBSTATUS_DEPTH_CLIP_ENABLE_SET;
- case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT:
- return CBSTATUS_SAMPLE_LOCATIONS_ENABLE_SET;
- case VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT:
- return CBSTATUS_COLOR_BLEND_ADVANCED_SET;
- case VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT:
- return CBSTATUS_PROVOKING_VERTEX_MODE_SET;
- case VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT:
- return CBSTATUS_LINE_RASTERIZATION_MODE_SET;
- case VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT:
- return CBSTATUS_LINE_STIPPLE_ENABLE_SET;
- case VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT:
- return CBSTATUS_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_SET;
- case VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV:
- return CBSTATUS_VIEWPORT_W_SCALING_ENABLE_SET;
- case VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV:
- return CBSTATUS_VIEWPORT_SWIZZLE_SET;
- case VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV:
- return CBSTATUS_COVERAGE_TO_COLOR_ENABLE_SET;
- case VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV:
- return CBSTATUS_COVERAGE_TO_COLOR_LOCATION_SET;
- case VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV:
- return CBSTATUS_COVERAGE_MODULATION_MODE_SET;
- case VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV:
- return CBSTATUS_COVERAGE_MODULATION_TABLE_ENABLE_SET;
- case VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV:
- return CBSTATUS_COVERAGE_MODULATION_TABLE_SET;
- case VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV:
- return CBSTATUS_SHADING_RATE_IMAGE_ENABLE_SET;
- case VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV:
- return CBSTATUS_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_SET;
- case VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV:
- return CBSTATUS_COVERAGE_REDUCTION_MODE_SET;
- default:
- return CBSTATUS_NUM;
- }
- return CBSTATUS_NUM;
-}
-
CMD_BUFFER_STATE::CMD_BUFFER_STATE(ValidationStateTracker *dev, VkCommandBuffer cb, const VkCommandBufferAllocateInfo *pCreateInfo,
const COMMAND_POOL_STATE *pool)
: REFCOUNTED_NODE(cb, kVulkanObjectTypeCommandBuffer),
@@ -1128,8 +847,8 @@
uint32_t &used = usedViewportScissorCount;
used = std::max(used, pipelineStaticViewportCount);
used = std::max(used, pipelineStaticScissorCount);
- usedDynamicViewportCount |= dynamic_status[CBSTATUS_VIEWPORT_WITH_COUNT_SET];
- usedDynamicScissorCount |= dynamic_status[CBSTATUS_SCISSOR_WITH_COUNT_SET];
+ usedDynamicViewportCount |= dynamic_status[CB_DYNAMIC_VIEWPORT_WITH_COUNT_SET];
+ usedDynamicScissorCount |= dynamic_status[CB_DYNAMIC_SCISSOR_WITH_COUNT_SET];
}
// Generic function to handle state update for all CmdDispatch* type functions
@@ -1384,21 +1103,19 @@
void CMD_BUFFER_STATE::RecordCmd(CMD_TYPE cmd_type) { commandCount++; }
-void CMD_BUFFER_STATE::RecordStateCmd(CMD_TYPE cmd_type, CBStatus state)
-{
- CBStatusFlags state_bits;
+void CMD_BUFFER_STATE::RecordStateCmd(CMD_TYPE cmd_type, CB_DYNAMIC_STATUS state) {
+ CBDynamicFlags state_bits;
state_bits.set(state);
RecordStateCmd(cmd_type, state_bits);
}
-void CMD_BUFFER_STATE::RecordStateCmd(CMD_TYPE cmd_type, CBStatusFlags const & state_bits)
-{
+void CMD_BUFFER_STATE::RecordStateCmd(CMD_TYPE cmd_type, CBDynamicFlags const &state_bits) {
RecordCmd(cmd_type);
status |= state_bits;
static_status &= ~state_bits;
}
-void CMD_BUFFER_STATE::RecordColorWriteEnableStateCmd(CMD_TYPE cmd_type, CBStatus state, uint32_t attachment_count) {
+void CMD_BUFFER_STATE::RecordColorWriteEnableStateCmd(CMD_TYPE cmd_type, CB_DYNAMIC_STATUS state, uint32_t attachment_count) {
RecordStateCmd(cmd_type, state);
dynamicColorWriteEnableAttachmentCount = std::max(dynamicColorWriteEnableAttachmentCount, attachment_count);
}
diff --git a/layers/cmd_buffer_state.h b/layers/cmd_buffer_state.h
index 8d5d6ff..85e3ac2 100644
--- a/layers/cmd_buffer_state.h
+++ b/layers/cmd_buffer_state.h
@@ -36,8 +36,6 @@
#include "descriptor_sets.h"
#include "qfo_transfer.h"
-#include <bitset>
-
struct SUBPASS_INFO;
class FRAMEBUFFER_STATE;
class RENDER_PASS_STATE;
@@ -120,86 +118,6 @@
CB_INVALID_INCOMPLETE, // fouled before recording was completed
};
-// CB Status -- used to track status of various bindings on cmd buffer objects
-
-enum CBStatus {
- CBSTATUS_INDEX_BUFFER_BOUND = 0, // Index buffer has been set
- CBSTATUS_FIRST_DYNAMIC, // Start of the dynamic state section
- CBSTATUS_LINE_WIDTH_SET = CBSTATUS_FIRST_DYNAMIC, // Line width has been set
- CBSTATUS_DEPTH_BIAS_SET, // Depth bias has been set
- CBSTATUS_BLEND_CONSTANTS_SET, // Blend constants state has been set
- CBSTATUS_DEPTH_BOUNDS_SET, // Depth bounds state object has been set
- CBSTATUS_STENCIL_READ_MASK_SET, // Stencil read mask has been set
- CBSTATUS_STENCIL_WRITE_MASK_SET, // Stencil write mask has been set
- CBSTATUS_STENCIL_REFERENCE_SET, // Stencil reference has been set
- CBSTATUS_VIEWPORT_SET,
- CBSTATUS_SCISSOR_SET,
- CBSTATUS_EXCLUSIVE_SCISSOR_SET,
- CBSTATUS_SHADING_RATE_PALETTE_SET,
- CBSTATUS_LINE_STIPPLE_SET,
- CBSTATUS_VIEWPORT_W_SCALING_SET,
- CBSTATUS_CULL_MODE_SET,
- CBSTATUS_FRONT_FACE_SET,
- CBSTATUS_PRIMITIVE_TOPOLOGY_SET,
- CBSTATUS_VIEWPORT_WITH_COUNT_SET,
- CBSTATUS_SCISSOR_WITH_COUNT_SET,
- CBSTATUS_VERTEX_INPUT_BINDING_STRIDE_SET,
- CBSTATUS_DEPTH_TEST_ENABLE_SET,
- CBSTATUS_DEPTH_WRITE_ENABLE_SET,
- CBSTATUS_DEPTH_COMPARE_OP_SET,
- CBSTATUS_DEPTH_BOUNDS_TEST_ENABLE_SET,
- CBSTATUS_STENCIL_TEST_ENABLE_SET,
- CBSTATUS_STENCIL_OP_SET,
- CBSTATUS_DISCARD_RECTANGLE_SET,
- CBSTATUS_SAMPLE_LOCATIONS_SET,
- CBSTATUS_COARSE_SAMPLE_ORDER_SET,
- CBSTATUS_PATCH_CONTROL_POINTS_SET,
- CBSTATUS_RASTERIZER_DISCARD_ENABLE_SET,
- CBSTATUS_DEPTH_BIAS_ENABLE_SET,
- CBSTATUS_LOGIC_OP_SET,
- CBSTATUS_PRIMITIVE_RESTART_ENABLE_SET,
- CBSTATUS_VERTEX_INPUT_SET,
- CBSTATUS_COLOR_WRITE_ENABLE_SET,
- CBSTATUS_TESSELLATION_DOMAIN_ORIGIN_SET,
- CBSTATUS_DEPTH_CLAMP_ENABLE_SET,
- CBSTATUS_POLYGON_MODE_SET,
- CBSTATUS_RASTERIZATION_SAMPLES_SET,
- CBSTATUS_SAMPLE_MASK_SET,
- CBSTATUS_ALPHA_TO_COVERAGE_ENABLE_SET,
- CBSTATUS_ALPHA_TO_ONE_ENABLE_SET,
- CBSTATUS_LOGIC_OP_ENABLE_SET,
- CBSTATUS_COLOR_BLEND_ENABLE_SET,
- CBSTATUS_COLOR_BLEND_EQUATION_SET,
- CBSTATUS_COLOR_WRITE_MASK_SET,
- CBSTATUS_RASTERIZATION_STREAM_SET,
- CBSTATUS_CONSERVATIVE_RASTERIZATION_MODE_SET,
- CBSTATUS_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_SET,
- CBSTATUS_DEPTH_CLIP_ENABLE_SET,
- CBSTATUS_SAMPLE_LOCATIONS_ENABLE_SET,
- CBSTATUS_COLOR_BLEND_ADVANCED_SET,
- CBSTATUS_PROVOKING_VERTEX_MODE_SET,
- CBSTATUS_LINE_RASTERIZATION_MODE_SET,
- CBSTATUS_LINE_STIPPLE_ENABLE_SET,
- CBSTATUS_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_SET,
- CBSTATUS_VIEWPORT_W_SCALING_ENABLE_SET,
- CBSTATUS_VIEWPORT_SWIZZLE_SET,
- CBSTATUS_COVERAGE_TO_COLOR_ENABLE_SET,
- CBSTATUS_COVERAGE_TO_COLOR_LOCATION_SET,
- CBSTATUS_COVERAGE_MODULATION_MODE_SET,
- CBSTATUS_COVERAGE_MODULATION_TABLE_ENABLE_SET,
- CBSTATUS_COVERAGE_MODULATION_TABLE_SET,
- CBSTATUS_SHADING_RATE_IMAGE_ENABLE_SET,
- CBSTATUS_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_SET,
- CBSTATUS_COVERAGE_REDUCTION_MODE_SET,
- CBSTATUS_NUM,
-};
-
-typedef std::bitset<CBSTATUS_NUM> CBStatusFlags;
-
-VkDynamicState ConvertToDynamicState(CBStatus flag);
-CBStatus ConvertToCBStatus(VkDynamicState state);
-std::string DynamicStateString(CBStatusFlags const &input_value);
-
struct BufferBinding {
std::shared_ptr<BUFFER_STATE> buffer_state;
VkDeviceSize size;
@@ -258,10 +176,10 @@
bool pipeline_bound = false; // True if CmdBindPipeline has been called on this command buffer, false otherwise
typedef uint64_t ImageLayoutUpdateCount;
ImageLayoutUpdateCount image_layout_change_count; // The sequence number for changes to image layout (for cached validation)
- CBStatusFlags status; // Track status of various bindings on cmd buffer
- CBStatusFlags static_status; // All state bits provided by current graphics pipeline
+ CBDynamicFlags status; // Track status of various bindings on cmd buffer
+ CBDynamicFlags static_status; // All state bits provided by current graphics pipeline
// rather than dynamic state
- CBStatusFlags dynamic_status; // dynamic state set up in pipeline
+ CBDynamicFlags dynamic_status; // dynamic state set up in pipeline
std::string begin_rendering_func_name;
// Currently storing "lastBound" objects on per-CB basis
// long-term may want to create caches of "lastBound" states and could have
@@ -510,9 +428,9 @@
void UpdatePipelineState(CMD_TYPE cmd_type, const VkPipelineBindPoint bind_point);
virtual void RecordCmd(CMD_TYPE cmd_type);
- void RecordStateCmd(CMD_TYPE cmd_type, CBStatus state);
- void RecordStateCmd(CMD_TYPE cmd_type, CBStatusFlags const & state_bits);
- void RecordColorWriteEnableStateCmd(CMD_TYPE cmd_type, CBStatus state, uint32_t attachment_count);
+ void RecordStateCmd(CMD_TYPE cmd_type, CB_DYNAMIC_STATUS state);
+ void RecordStateCmd(CMD_TYPE cmd_type, CBDynamicFlags const &state_bits);
+ void RecordColorWriteEnableStateCmd(CMD_TYPE cmd_type, CB_DYNAMIC_STATUS state, uint32_t attachment_count);
void RecordTransferCmd(CMD_TYPE cmd_type, std::shared_ptr<BINDABLE> &&buf1, std::shared_ptr<BINDABLE> &&buf2 = nullptr);
void RecordSetEvent(CMD_TYPE cmd_type, VkEvent event, VkPipelineStageFlags2KHR stageMask);
void RecordResetEvent(CMD_TYPE cmd_type, VkEvent event, VkPipelineStageFlags2KHR stageMask);
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 7e703af..49302ab 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -368,7 +368,8 @@
}
// Check object status for selected flag state
-bool CoreChecks::ValidateStatus(const CMD_BUFFER_STATE *pNode, CBStatus status, const char *fail_msg, const char *msg_code) const {
+bool CoreChecks::ValidateStatus(const CMD_BUFFER_STATE *pNode, CB_DYNAMIC_STATUS status, const char *fail_msg,
+ const char *msg_code) const {
if (!(pNode->status[status])) {
return LogError(pNode->commandBuffer(), msg_code, "%s: %s.", report_data->FormatHandle(pNode->commandBuffer()).c_str(),
fail_msg);
@@ -390,37 +391,37 @@
if (pPipe->topology_at_rasterizer == VK_PRIMITIVE_TOPOLOGY_LINE_LIST ||
pPipe->topology_at_rasterizer == VK_PRIMITIVE_TOPOLOGY_LINE_STRIP) {
result |=
- ValidateStatus(pCB, CBSTATUS_LINE_WIDTH_SET, "Dynamic line width state not set for this command buffer", msg_code);
+ ValidateStatus(pCB, CB_DYNAMIC_LINE_WIDTH_SET, "Dynamic line width state not set for this command buffer", msg_code);
}
const auto rp_state = pPipe->RasterizationState();
if (rp_state && (rp_state->depthBiasEnable == VK_TRUE)) {
result |=
- ValidateStatus(pCB, CBSTATUS_DEPTH_BIAS_SET, "Dynamic depth bias state not set for this command buffer", msg_code);
+ ValidateStatus(pCB, CB_DYNAMIC_DEPTH_BIAS_SET, "Dynamic depth bias state not set for this command buffer", msg_code);
}
if (pPipe->BlendConstantsEnabled()) {
- result |= ValidateStatus(pCB, CBSTATUS_BLEND_CONSTANTS_SET, "Dynamic blend constants state not set for this command buffer",
- msg_code);
+ result |= ValidateStatus(pCB, CB_DYNAMIC_BLEND_CONSTANTS_SET,
+ "Dynamic blend constants state not set for this command buffer", msg_code);
}
const auto ds_state = pPipe->DepthStencilState();
if (ds_state && (ds_state->depthBoundsTestEnable == VK_TRUE)) {
- result |=
- ValidateStatus(pCB, CBSTATUS_DEPTH_BOUNDS_SET, "Dynamic depth bounds state not set for this command buffer", msg_code);
+ result |= ValidateStatus(pCB, CB_DYNAMIC_DEPTH_BOUNDS_SET, "Dynamic depth bounds state not set for this command buffer",
+ msg_code);
}
if (ds_state && (ds_state->stencilTestEnable == VK_TRUE)) {
- result |= ValidateStatus(pCB, CBSTATUS_STENCIL_READ_MASK_SET,
+ result |= ValidateStatus(pCB, CB_DYNAMIC_STENCIL_COMPARE_MASK_SET,
"Dynamic stencil read mask state not set for this command buffer", msg_code);
- result |= ValidateStatus(pCB, CBSTATUS_STENCIL_WRITE_MASK_SET,
+ result |= ValidateStatus(pCB, CB_DYNAMIC_STENCIL_WRITE_MASK_SET,
"Dynamic stencil write mask state not set for this command buffer", msg_code);
- result |= ValidateStatus(pCB, CBSTATUS_STENCIL_REFERENCE_SET,
+ result |= ValidateStatus(pCB, CB_DYNAMIC_STENCIL_REFERENCE_SET,
"Dynamic stencil reference state not set for this command buffer", msg_code);
}
if (pPipe->topology_at_rasterizer == VK_PRIMITIVE_TOPOLOGY_LINE_LIST ||
pPipe->topology_at_rasterizer == VK_PRIMITIVE_TOPOLOGY_LINE_STRIP) {
const auto *line_state = LvlFindInChain<VkPipelineRasterizationLineStateCreateInfoEXT>(rp_state);
if (line_state && line_state->stippledLineEnable) {
- result |= ValidateStatus(pCB, CBSTATUS_LINE_STIPPLE_SET, "Dynamic line stipple state not set for this command buffer",
- msg_code);
+ result |= ValidateStatus(pCB, CB_DYNAMIC_LINE_STIPPLE_EXT_SET,
+ "Dynamic line stipple state not set for this command buffer", msg_code);
}
}
@@ -779,19 +780,6 @@
}
}
-std::string DynamicStateString(CBStatusFlags const &input_value) {
- std::string ret;
- for (int index = 0; index < CBSTATUS_NUM; ++index) {
- CBStatus status = static_cast<CBStatus>(index);
- if (input_value[status]) {
- if (!ret.empty()) ret.append("|");
- ret.append(string_VkDynamicState(ConvertToDynamicState(status)));
- }
- }
- if (ret.empty()) ret.append(string_VkDynamicState(ConvertToDynamicState(CBSTATUS_NUM)));
- return ret;
-}
-
bool CoreChecks::GetPhysicalDeviceImageFormatProperties(IMAGE_STATE &image_state, const char *vuid_string) const {
bool skip = false;
const auto image_create_info = image_state.createInfo;
@@ -1114,7 +1102,7 @@
}
// Verify if using dynamic state setting commands that it doesn't set up in pipeline
- CBStatusFlags invalid_status(~CBStatusFlags(1U << CBSTATUS_INDEX_BUFFER_BOUND));
+ CBDynamicFlags invalid_status(~CBDynamicFlags(0));
invalid_status &= ~pCB->dynamic_status;
invalid_status &= ~pCB->static_status;
@@ -1400,22 +1388,23 @@
}
}
- skip |= ValidateStatus(pCB, CBSTATUS_PATCH_CONTROL_POINTS_SET, "Dynamic patch control points not set for this command buffer",
- vuid.patch_control_points);
- skip |= ValidateStatus(pCB, CBSTATUS_RASTERIZER_DISCARD_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_PATCH_CONTROL_POINTS_EXT_SET,
+ "Dynamic patch control points not set for this command buffer", vuid.patch_control_points);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_RASTERIZER_DISCARD_ENABLE_SET,
"Dynamic rasterizer discard enable not set for this command buffer", vuid.rasterizer_discard_enable);
- skip |= ValidateStatus(pCB, CBSTATUS_DEPTH_BIAS_ENABLE_SET, "Dynamic depth bias enable not set for this command buffer",
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_DEPTH_BIAS_ENABLE_SET, "Dynamic depth bias enable not set for this command buffer",
vuid.depth_bias_enable);
- skip |= ValidateStatus(pCB, CBSTATUS_LOGIC_OP_SET, "Dynamic state logicOp not set for this command buffer", vuid.logic_op);
- skip |= ValidateStatus(pCB, CBSTATUS_PRIMITIVE_RESTART_ENABLE_SET,
- "Dynamic primitive restart enable not set for this command buffer", vuid.primitive_restart_enable);
- skip |= ValidateStatus(pCB, CBSTATUS_VERTEX_INPUT_BINDING_STRIDE_SET,
- "Dynamic vertex input binding stride not set for this command buffer", vuid.vertex_input_binding_stride);
skip |=
- ValidateStatus(pCB, CBSTATUS_VERTEX_INPUT_SET, "Dynamic vertex input not set for this command buffer", vuid.vertex_input);
- skip |= ValidateStatus(pCB, CBSTATUS_COLOR_WRITE_ENABLE_SET, "Dynamic color write enable not set for this command buffer",
+ ValidateStatus(pCB, CB_DYNAMIC_LOGIC_OP_EXT_SET, "Dynamic state logicOp not set for this command buffer", vuid.logic_op);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_PRIMITIVE_RESTART_ENABLE_SET,
+ "Dynamic primitive restart enable not set for this command buffer", vuid.primitive_restart_enable);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE_SET,
+ "Dynamic vertex input binding stride not set for this command buffer", vuid.vertex_input_binding_stride);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_VERTEX_INPUT_EXT_SET, "Dynamic vertex input not set for this command buffer",
+ vuid.vertex_input);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COLOR_WRITE_ENABLE_EXT_SET, "Dynamic color write enable not set for this command buffer",
vuid.color_write_enable);
- if (IsDynamic(pPipeline, VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT) && pCB->status[CBSTATUS_COLOR_WRITE_ENABLE_SET]) {
+ if (IsDynamic(pPipeline, VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT) && pCB->status[CB_DYNAMIC_COLOR_WRITE_ENABLE_EXT_SET]) {
const auto color_blend_state = pCB->GetCurrentPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS)->ColorBlendState();
if (color_blend_state) {
uint32_t blend_attachment_count = color_blend_state->attachmentCount;
@@ -1429,12 +1418,12 @@
}
}
}
- skip |= ValidateStatus(pCB, CBSTATUS_SAMPLE_LOCATIONS_SET, "Dynamic sample locations not set for this command buffer",
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_SAMPLE_LOCATIONS_EXT_SET, "Dynamic sample locations not set for this command buffer",
vuid.dynamic_sample_locations);
// VUID {refpage}-primitiveTopology-03420
- skip |= ValidateStatus(pCB, CBSTATUS_PRIMITIVE_TOPOLOGY_SET, "Dynamic primitive topology state not set for this command buffer",
- vuid.primitive_topology);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_PRIMITIVE_TOPOLOGY_SET,
+ "Dynamic primitive topology state not set for this command buffer", vuid.primitive_topology);
if (IsDynamic(pPipeline, VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT) &&
!phys_dev_ext_props.extended_dynamic_state3_props.dynamicPrimitiveTopologyUnrestricted) {
bool compatible_topology = false;
@@ -1502,67 +1491,67 @@
}
}
- skip |= ValidateStatus(pCB, CBSTATUS_TESSELLATION_DOMAIN_ORIGIN_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_TESSELLATION_DOMAIN_ORIGIN_EXT_SET,
"Dynamic tessellation domain origin state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_DEPTH_CLAMP_ENABLE_SET, "Dynamic depth clamp enable state not set for this command buffer",
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_DEPTH_CLAMP_ENABLE_EXT_SET,
+ "Dynamic depth clamp enable state not set for this command buffer", kVUIDUndefined);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_POLYGON_MODE_EXT_SET, "Dynamic polygon mode state not set for this command buffer",
kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_POLYGON_MODE_SET, "Dynamic polygon mode state not set for this command buffer",
- kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_RASTERIZATION_SAMPLES_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_RASTERIZATION_SAMPLES_EXT_SET,
"Dynamic rasterization samples state not set for this command buffer", kVUIDUndefined);
- skip |=
- ValidateStatus(pCB, CBSTATUS_SAMPLE_MASK_SET, "Dynamic sample mask state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_ALPHA_TO_COVERAGE_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_SAMPLE_MASK_EXT_SET, "Dynamic sample mask state not set for this command buffer",
+ kVUIDUndefined);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_ALPHA_TO_COVERAGE_ENABLE_EXT_SET,
"Dynamic alpha to coverage enable state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_ALPHA_TO_ONE_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_ALPHA_TO_ONE_ENABLE_EXT_SET,
"Dynamic alpha to one enable state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_LOGIC_OP_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_LOGIC_OP_ENABLE_EXT_SET,
"Dynamic logic operation enable state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_COLOR_BLEND_ENABLE_SET, "Dynamic color blend enable state not set for this command buffer",
- kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_COLOR_BLEND_EQUATION_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COLOR_BLEND_ENABLE_EXT_SET,
+ "Dynamic color blend enable state not set for this command buffer", kVUIDUndefined);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COLOR_BLEND_EQUATION_EXT_SET,
"Dynamic color blend equation state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_COLOR_WRITE_MASK_SET, "Dynamic color write mask state not set for this command buffer",
- kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_RASTERIZATION_STREAM_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COLOR_WRITE_MASK_EXT_SET,
+ "Dynamic color write mask state not set for this command buffer", kVUIDUndefined);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_RASTERIZATION_STREAM_EXT_SET,
"Dynamic rasterization stream state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_CONSERVATIVE_RASTERIZATION_MODE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_CONSERVATIVE_RASTERIZATION_MODE_EXT_SET,
"Dynamic conservative rasterization mode state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT_SET,
"Dynamic extra primitive overestimation size state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_DEPTH_CLIP_ENABLE_SET, "Dynamic depth clip enable state not set for this command buffer",
- kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_SAMPLE_LOCATIONS_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_DEPTH_CLIP_ENABLE_EXT_SET,
+ "Dynamic depth clip enable state not set for this command buffer", kVUIDUndefined);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_SAMPLE_LOCATIONS_ENABLE_EXT_SET,
"Dynamic sample locations enable state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_COLOR_BLEND_ADVANCED_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COLOR_BLEND_ADVANCED_EXT_SET,
"Dynamic color blend advanced state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_PROVOKING_VERTEX_MODE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_PROVOKING_VERTEX_MODE_EXT_SET,
"Dynamic provoking vertex mode state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_LINE_RASTERIZATION_MODE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_LINE_RASTERIZATION_MODE_EXT_SET,
"Dynamic line rasterization mode state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_LINE_STIPPLE_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_LINE_STIPPLE_ENABLE_EXT_SET,
"Dynamic line stipple enable state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT_SET,
"Dynamic depth clip negative one to one state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_VIEWPORT_W_SCALING_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_VIEWPORT_W_SCALING_ENABLE_NV_SET,
"Dynamic viewport W scaling enable state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_VIEWPORT_SWIZZLE_SET, "Dynamic viewport swizzle state not set for this command buffer",
- kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_COVERAGE_TO_COLOR_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_VIEWPORT_SWIZZLE_NV_SET,
+ "Dynamic viewport swizzle state not set for this command buffer", kVUIDUndefined);
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COVERAGE_TO_COLOR_ENABLE_NV_SET,
"Dynamic coverage to color enable state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_COVERAGE_TO_COLOR_LOCATION_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COVERAGE_TO_COLOR_LOCATION_NV_SET,
"Dynamic coverage to color location state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_COVERAGE_MODULATION_MODE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COVERAGE_MODULATION_MODE_NV_SET,
"Dynamic coverage modulation mode state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_COVERAGE_MODULATION_TABLE_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COVERAGE_MODULATION_TABLE_ENABLE_NV_SET,
"Dynamic coverage modulation table enable state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_COVERAGE_MODULATION_TABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COVERAGE_MODULATION_TABLE_NV_SET,
"Dynamic coverage modulation table state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_SHADING_RATE_IMAGE_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_SHADING_RATE_IMAGE_ENABLE_NV_SET,
"Dynamic shading rate image enable state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV_SET,
"Dynamic representative fragment test enable state not set for this command buffer", kVUIDUndefined);
- skip |= ValidateStatus(pCB, CBSTATUS_COVERAGE_REDUCTION_MODE_SET,
+ skip |= ValidateStatus(pCB, CB_DYNAMIC_COVERAGE_REDUCTION_MODE_NV_SET,
"Dynamic coverage reduction mode state not set for this command buffer", kVUIDUndefined);
if (pPipeline->fragment_output_state->dual_source_blending &&
diff --git a/layers/core_validation.h b/layers/core_validation.h
index 1f765b8..6fcdb47 100644
--- a/layers/core_validation.h
+++ b/layers/core_validation.h
@@ -223,7 +223,7 @@
const Location& loc) const;
bool ValidateMaxTimelineSemaphoreValueDifference(const Location& loc, const SEMAPHORE_STATE& semaphore_state,
uint64_t value) const;
- bool ValidateStatus(const CMD_BUFFER_STATE* pNode, CBStatus status, const char* fail_msg, const char* msg_code) const;
+ bool ValidateStatus(const CMD_BUFFER_STATE* pNode, CB_DYNAMIC_STATUS status, const char* fail_msg, const char* msg_code) const;
bool ValidateDrawStateFlags(const CMD_BUFFER_STATE* pCB, const PIPELINE_STATE* pPipe, const char* msg_code) const;
bool LogInvalidAttachmentMessage(const char* type1_string, const RENDER_PASS_STATE* rp1_state, const char* type2_string,
const RENDER_PASS_STATE* rp2_state, uint32_t primary_attach, uint32_t secondary_attach,
diff --git a/layers/generated/command_validation.cpp b/layers/generated/command_validation.cpp
index f89605e..3412a62 100644
--- a/layers/generated/command_validation.cpp
+++ b/layers/generated/command_validation.cpp
@@ -4,7 +4,7 @@
/***************************************************************************
*
- * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021-2022 The Khronos Group Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -986,3 +986,315 @@
return skip;
}
+
+static VkDynamicState ConvertToDynamicState(CB_DYNAMIC_STATUS flag) {
+ switch (flag) {
+ case CB_DYNAMIC_VIEWPORT_SET:
+ return VK_DYNAMIC_STATE_VIEWPORT;
+ case CB_DYNAMIC_SCISSOR_SET:
+ return VK_DYNAMIC_STATE_SCISSOR;
+ case CB_DYNAMIC_LINE_WIDTH_SET:
+ return VK_DYNAMIC_STATE_LINE_WIDTH;
+ case CB_DYNAMIC_DEPTH_BIAS_SET:
+ return VK_DYNAMIC_STATE_DEPTH_BIAS;
+ case CB_DYNAMIC_BLEND_CONSTANTS_SET:
+ return VK_DYNAMIC_STATE_BLEND_CONSTANTS;
+ case CB_DYNAMIC_DEPTH_BOUNDS_SET:
+ return VK_DYNAMIC_STATE_DEPTH_BOUNDS;
+ case CB_DYNAMIC_STENCIL_COMPARE_MASK_SET:
+ return VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK;
+ case CB_DYNAMIC_STENCIL_WRITE_MASK_SET:
+ return VK_DYNAMIC_STATE_STENCIL_WRITE_MASK;
+ case CB_DYNAMIC_STENCIL_REFERENCE_SET:
+ return VK_DYNAMIC_STATE_STENCIL_REFERENCE;
+ case CB_DYNAMIC_CULL_MODE_SET:
+ return VK_DYNAMIC_STATE_CULL_MODE;
+ case CB_DYNAMIC_FRONT_FACE_SET:
+ return VK_DYNAMIC_STATE_FRONT_FACE;
+ case CB_DYNAMIC_PRIMITIVE_TOPOLOGY_SET:
+ return VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY;
+ case CB_DYNAMIC_VIEWPORT_WITH_COUNT_SET:
+ return VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT;
+ case CB_DYNAMIC_SCISSOR_WITH_COUNT_SET:
+ return VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT;
+ case CB_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE_SET:
+ return VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE;
+ case CB_DYNAMIC_DEPTH_TEST_ENABLE_SET:
+ return VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE;
+ case CB_DYNAMIC_DEPTH_WRITE_ENABLE_SET:
+ return VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE;
+ case CB_DYNAMIC_DEPTH_COMPARE_OP_SET:
+ return VK_DYNAMIC_STATE_DEPTH_COMPARE_OP;
+ case CB_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE_SET:
+ return VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE;
+ case CB_DYNAMIC_STENCIL_TEST_ENABLE_SET:
+ return VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE;
+ case CB_DYNAMIC_STENCIL_OP_SET:
+ return VK_DYNAMIC_STATE_STENCIL_OP;
+ case CB_DYNAMIC_RASTERIZER_DISCARD_ENABLE_SET:
+ return VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE;
+ case CB_DYNAMIC_DEPTH_BIAS_ENABLE_SET:
+ return VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE;
+ case CB_DYNAMIC_PRIMITIVE_RESTART_ENABLE_SET:
+ return VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE;
+ case CB_DYNAMIC_VIEWPORT_W_SCALING_NV_SET:
+ return VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV;
+ case CB_DYNAMIC_DISCARD_RECTANGLE_EXT_SET:
+ return VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT;
+ case CB_DYNAMIC_SAMPLE_LOCATIONS_EXT_SET:
+ return VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT;
+ case CB_DYNAMIC_RAY_TRACING_PIPELINE_STACK_SIZE_KHR_SET:
+ return VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR;
+ case CB_DYNAMIC_VIEWPORT_SHADING_RATE_PALETTE_NV_SET:
+ return VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV;
+ case CB_DYNAMIC_VIEWPORT_COARSE_SAMPLE_ORDER_NV_SET:
+ return VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV;
+ case CB_DYNAMIC_EXCLUSIVE_SCISSOR_NV_SET:
+ return VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV;
+ case CB_DYNAMIC_FRAGMENT_SHADING_RATE_KHR_SET:
+ return VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR;
+ case CB_DYNAMIC_LINE_STIPPLE_EXT_SET:
+ return VK_DYNAMIC_STATE_LINE_STIPPLE_EXT;
+ case CB_DYNAMIC_VERTEX_INPUT_EXT_SET:
+ return VK_DYNAMIC_STATE_VERTEX_INPUT_EXT;
+ case CB_DYNAMIC_PATCH_CONTROL_POINTS_EXT_SET:
+ return VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT;
+ case CB_DYNAMIC_LOGIC_OP_EXT_SET:
+ return VK_DYNAMIC_STATE_LOGIC_OP_EXT;
+ case CB_DYNAMIC_COLOR_WRITE_ENABLE_EXT_SET:
+ return VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT;
+ case CB_DYNAMIC_TESSELLATION_DOMAIN_ORIGIN_EXT_SET:
+ return VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT;
+ case CB_DYNAMIC_DEPTH_CLAMP_ENABLE_EXT_SET:
+ return VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT;
+ case CB_DYNAMIC_POLYGON_MODE_EXT_SET:
+ return VK_DYNAMIC_STATE_POLYGON_MODE_EXT;
+ case CB_DYNAMIC_RASTERIZATION_SAMPLES_EXT_SET:
+ return VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT;
+ case CB_DYNAMIC_SAMPLE_MASK_EXT_SET:
+ return VK_DYNAMIC_STATE_SAMPLE_MASK_EXT;
+ case CB_DYNAMIC_ALPHA_TO_COVERAGE_ENABLE_EXT_SET:
+ return VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT;
+ case CB_DYNAMIC_ALPHA_TO_ONE_ENABLE_EXT_SET:
+ return VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT;
+ case CB_DYNAMIC_LOGIC_OP_ENABLE_EXT_SET:
+ return VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT;
+ case CB_DYNAMIC_COLOR_BLEND_ENABLE_EXT_SET:
+ return VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT;
+ case CB_DYNAMIC_COLOR_BLEND_EQUATION_EXT_SET:
+ return VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT;
+ case CB_DYNAMIC_COLOR_WRITE_MASK_EXT_SET:
+ return VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT;
+ case CB_DYNAMIC_RASTERIZATION_STREAM_EXT_SET:
+ return VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT;
+ case CB_DYNAMIC_CONSERVATIVE_RASTERIZATION_MODE_EXT_SET:
+ return VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT;
+ case CB_DYNAMIC_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT_SET:
+ return VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT;
+ case CB_DYNAMIC_DEPTH_CLIP_ENABLE_EXT_SET:
+ return VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT;
+ case CB_DYNAMIC_SAMPLE_LOCATIONS_ENABLE_EXT_SET:
+ return VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT;
+ case CB_DYNAMIC_COLOR_BLEND_ADVANCED_EXT_SET:
+ return VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT;
+ case CB_DYNAMIC_PROVOKING_VERTEX_MODE_EXT_SET:
+ return VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT;
+ case CB_DYNAMIC_LINE_RASTERIZATION_MODE_EXT_SET:
+ return VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT;
+ case CB_DYNAMIC_LINE_STIPPLE_ENABLE_EXT_SET:
+ return VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT;
+ case CB_DYNAMIC_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT_SET:
+ return VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT;
+ case CB_DYNAMIC_VIEWPORT_W_SCALING_ENABLE_NV_SET:
+ return VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV;
+ case CB_DYNAMIC_VIEWPORT_SWIZZLE_NV_SET:
+ return VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV;
+ case CB_DYNAMIC_COVERAGE_TO_COLOR_ENABLE_NV_SET:
+ return VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV;
+ case CB_DYNAMIC_COVERAGE_TO_COLOR_LOCATION_NV_SET:
+ return VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV;
+ case CB_DYNAMIC_COVERAGE_MODULATION_MODE_NV_SET:
+ return VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV;
+ case CB_DYNAMIC_COVERAGE_MODULATION_TABLE_ENABLE_NV_SET:
+ return VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV;
+ case CB_DYNAMIC_COVERAGE_MODULATION_TABLE_NV_SET:
+ return VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV;
+ case CB_DYNAMIC_SHADING_RATE_IMAGE_ENABLE_NV_SET:
+ return VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV;
+ case CB_DYNAMIC_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV_SET:
+ return VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV;
+ case CB_DYNAMIC_COVERAGE_REDUCTION_MODE_NV_SET:
+ return VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV;
+ default:
+ return VK_DYNAMIC_STATE_MAX_ENUM;
+ }
+}
+
+static CB_DYNAMIC_STATUS ConvertToCBDynamicStatus(VkDynamicState state) {
+ switch (state) {
+ case VK_DYNAMIC_STATE_VIEWPORT:
+ return CB_DYNAMIC_VIEWPORT_SET;
+ case VK_DYNAMIC_STATE_SCISSOR:
+ return CB_DYNAMIC_SCISSOR_SET;
+ case VK_DYNAMIC_STATE_LINE_WIDTH:
+ return CB_DYNAMIC_LINE_WIDTH_SET;
+ case VK_DYNAMIC_STATE_DEPTH_BIAS:
+ return CB_DYNAMIC_DEPTH_BIAS_SET;
+ case VK_DYNAMIC_STATE_BLEND_CONSTANTS:
+ return CB_DYNAMIC_BLEND_CONSTANTS_SET;
+ case VK_DYNAMIC_STATE_DEPTH_BOUNDS:
+ return CB_DYNAMIC_DEPTH_BOUNDS_SET;
+ case VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK:
+ return CB_DYNAMIC_STENCIL_COMPARE_MASK_SET;
+ case VK_DYNAMIC_STATE_STENCIL_WRITE_MASK:
+ return CB_DYNAMIC_STENCIL_WRITE_MASK_SET;
+ case VK_DYNAMIC_STATE_STENCIL_REFERENCE:
+ return CB_DYNAMIC_STENCIL_REFERENCE_SET;
+ case VK_DYNAMIC_STATE_CULL_MODE:
+ return CB_DYNAMIC_CULL_MODE_SET;
+ case VK_DYNAMIC_STATE_FRONT_FACE:
+ return CB_DYNAMIC_FRONT_FACE_SET;
+ case VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY:
+ return CB_DYNAMIC_PRIMITIVE_TOPOLOGY_SET;
+ case VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT:
+ return CB_DYNAMIC_VIEWPORT_WITH_COUNT_SET;
+ case VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT:
+ return CB_DYNAMIC_SCISSOR_WITH_COUNT_SET;
+ case VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE:
+ return CB_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE_SET;
+ case VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE:
+ return CB_DYNAMIC_DEPTH_TEST_ENABLE_SET;
+ case VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE:
+ return CB_DYNAMIC_DEPTH_WRITE_ENABLE_SET;
+ case VK_DYNAMIC_STATE_DEPTH_COMPARE_OP:
+ return CB_DYNAMIC_DEPTH_COMPARE_OP_SET;
+ case VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE:
+ return CB_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE_SET;
+ case VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE:
+ return CB_DYNAMIC_STENCIL_TEST_ENABLE_SET;
+ case VK_DYNAMIC_STATE_STENCIL_OP:
+ return CB_DYNAMIC_STENCIL_OP_SET;
+ case VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE:
+ return CB_DYNAMIC_RASTERIZER_DISCARD_ENABLE_SET;
+ case VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE:
+ return CB_DYNAMIC_DEPTH_BIAS_ENABLE_SET;
+ case VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE:
+ return CB_DYNAMIC_PRIMITIVE_RESTART_ENABLE_SET;
+ case VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV:
+ return CB_DYNAMIC_VIEWPORT_W_SCALING_NV_SET;
+ case VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT:
+ return CB_DYNAMIC_DISCARD_RECTANGLE_EXT_SET;
+ case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT:
+ return CB_DYNAMIC_SAMPLE_LOCATIONS_EXT_SET;
+ case VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR:
+ return CB_DYNAMIC_RAY_TRACING_PIPELINE_STACK_SIZE_KHR_SET;
+ case VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV:
+ return CB_DYNAMIC_VIEWPORT_SHADING_RATE_PALETTE_NV_SET;
+ case VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV:
+ return CB_DYNAMIC_VIEWPORT_COARSE_SAMPLE_ORDER_NV_SET;
+ case VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV:
+ return CB_DYNAMIC_EXCLUSIVE_SCISSOR_NV_SET;
+ case VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR:
+ return CB_DYNAMIC_FRAGMENT_SHADING_RATE_KHR_SET;
+ case VK_DYNAMIC_STATE_LINE_STIPPLE_EXT:
+ return CB_DYNAMIC_LINE_STIPPLE_EXT_SET;
+ case VK_DYNAMIC_STATE_VERTEX_INPUT_EXT:
+ return CB_DYNAMIC_VERTEX_INPUT_EXT_SET;
+ case VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT:
+ return CB_DYNAMIC_PATCH_CONTROL_POINTS_EXT_SET;
+ case VK_DYNAMIC_STATE_LOGIC_OP_EXT:
+ return CB_DYNAMIC_LOGIC_OP_EXT_SET;
+ case VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT:
+ return CB_DYNAMIC_COLOR_WRITE_ENABLE_EXT_SET;
+ case VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT:
+ return CB_DYNAMIC_TESSELLATION_DOMAIN_ORIGIN_EXT_SET;
+ case VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT:
+ return CB_DYNAMIC_DEPTH_CLAMP_ENABLE_EXT_SET;
+ case VK_DYNAMIC_STATE_POLYGON_MODE_EXT:
+ return CB_DYNAMIC_POLYGON_MODE_EXT_SET;
+ case VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT:
+ return CB_DYNAMIC_RASTERIZATION_SAMPLES_EXT_SET;
+ case VK_DYNAMIC_STATE_SAMPLE_MASK_EXT:
+ return CB_DYNAMIC_SAMPLE_MASK_EXT_SET;
+ case VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT:
+ return CB_DYNAMIC_ALPHA_TO_COVERAGE_ENABLE_EXT_SET;
+ case VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT:
+ return CB_DYNAMIC_ALPHA_TO_ONE_ENABLE_EXT_SET;
+ case VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT:
+ return CB_DYNAMIC_LOGIC_OP_ENABLE_EXT_SET;
+ case VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT:
+ return CB_DYNAMIC_COLOR_BLEND_ENABLE_EXT_SET;
+ case VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT:
+ return CB_DYNAMIC_COLOR_BLEND_EQUATION_EXT_SET;
+ case VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT:
+ return CB_DYNAMIC_COLOR_WRITE_MASK_EXT_SET;
+ case VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT:
+ return CB_DYNAMIC_RASTERIZATION_STREAM_EXT_SET;
+ case VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT:
+ return CB_DYNAMIC_CONSERVATIVE_RASTERIZATION_MODE_EXT_SET;
+ case VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT:
+ return CB_DYNAMIC_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT_SET;
+ case VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT:
+ return CB_DYNAMIC_DEPTH_CLIP_ENABLE_EXT_SET;
+ case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT:
+ return CB_DYNAMIC_SAMPLE_LOCATIONS_ENABLE_EXT_SET;
+ case VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT:
+ return CB_DYNAMIC_COLOR_BLEND_ADVANCED_EXT_SET;
+ case VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT:
+ return CB_DYNAMIC_PROVOKING_VERTEX_MODE_EXT_SET;
+ case VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT:
+ return CB_DYNAMIC_LINE_RASTERIZATION_MODE_EXT_SET;
+ case VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT:
+ return CB_DYNAMIC_LINE_STIPPLE_ENABLE_EXT_SET;
+ case VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT:
+ return CB_DYNAMIC_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT_SET;
+ case VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV:
+ return CB_DYNAMIC_VIEWPORT_W_SCALING_ENABLE_NV_SET;
+ case VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV:
+ return CB_DYNAMIC_VIEWPORT_SWIZZLE_NV_SET;
+ case VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV:
+ return CB_DYNAMIC_COVERAGE_TO_COLOR_ENABLE_NV_SET;
+ case VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV:
+ return CB_DYNAMIC_COVERAGE_TO_COLOR_LOCATION_NV_SET;
+ case VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV:
+ return CB_DYNAMIC_COVERAGE_MODULATION_MODE_NV_SET;
+ case VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV:
+ return CB_DYNAMIC_COVERAGE_MODULATION_TABLE_ENABLE_NV_SET;
+ case VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV:
+ return CB_DYNAMIC_COVERAGE_MODULATION_TABLE_NV_SET;
+ case VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV:
+ return CB_DYNAMIC_SHADING_RATE_IMAGE_ENABLE_NV_SET;
+ case VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV:
+ return CB_DYNAMIC_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV_SET;
+ case VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV:
+ return CB_DYNAMIC_COVERAGE_REDUCTION_MODE_NV_SET;
+ default:
+ return CB_DYNAMIC_STATUS_NUM;
+ }
+}
+
+std::string DynamicStateString(CBDynamicFlags const &dynamic_state) {
+ std::string ret;
+ for (int index = 0; index < CB_DYNAMIC_STATUS_NUM; ++index) {
+ CB_DYNAMIC_STATUS status = static_cast<CB_DYNAMIC_STATUS>(index);
+ if (dynamic_state[status]) {
+ if (!ret.empty()) ret.append("|");
+ ret.append(string_VkDynamicState(ConvertToDynamicState(status)));
+ }
+ }
+ if (ret.empty()) ret.append(string_VkDynamicState(ConvertToDynamicState(CB_DYNAMIC_STATUS_NUM)));
+ return ret;
+}
+
+CBDynamicFlags MakeStaticStateMask(VkPipelineDynamicStateCreateInfo const *info) {
+ // initially assume everything is static state
+ CBDynamicFlags flags(~CBDynamicFlags(0));
+
+ if (info) {
+ for (uint32_t i = 0; i < info->dynamicStateCount; i++) {
+ flags.reset(ConvertToCBDynamicStatus(info->pDynamicStates[i]));
+ }
+ }
+ return flags;
+}
+
diff --git a/layers/generated/command_validation.h b/layers/generated/command_validation.h
index d110929..111cef4 100644
--- a/layers/generated/command_validation.h
+++ b/layers/generated/command_validation.h
@@ -4,7 +4,7 @@
/***************************************************************************
*
- * Copyright (c) 2021 The Khronos Group Inc.
+ * Copyright (c) 2021-2022 The Khronos Group Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@
#pragma once
#include <array>
+#include <bitset>
// Used as key for maps of all vkCmd* calls
// Does not include vkBeginCommandBuffer/vkEndCommandBuffer
@@ -479,3 +480,81 @@
"vkCmdWriteTimestamp2",
"vkCmdWriteTimestamp2KHR",
}};
+
+typedef enum CB_DYNAMIC_STATUS {
+ CB_DYNAMIC_VIEWPORT_SET = 1,
+ CB_DYNAMIC_SCISSOR_SET = 2,
+ CB_DYNAMIC_LINE_WIDTH_SET = 3,
+ CB_DYNAMIC_DEPTH_BIAS_SET = 4,
+ CB_DYNAMIC_BLEND_CONSTANTS_SET = 5,
+ CB_DYNAMIC_DEPTH_BOUNDS_SET = 6,
+ CB_DYNAMIC_STENCIL_COMPARE_MASK_SET = 7,
+ CB_DYNAMIC_STENCIL_WRITE_MASK_SET = 8,
+ CB_DYNAMIC_STENCIL_REFERENCE_SET = 9,
+ CB_DYNAMIC_CULL_MODE_SET = 10,
+ CB_DYNAMIC_FRONT_FACE_SET = 11,
+ CB_DYNAMIC_PRIMITIVE_TOPOLOGY_SET = 12,
+ CB_DYNAMIC_VIEWPORT_WITH_COUNT_SET = 13,
+ CB_DYNAMIC_SCISSOR_WITH_COUNT_SET = 14,
+ CB_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE_SET = 15,
+ CB_DYNAMIC_DEPTH_TEST_ENABLE_SET = 16,
+ CB_DYNAMIC_DEPTH_WRITE_ENABLE_SET = 17,
+ CB_DYNAMIC_DEPTH_COMPARE_OP_SET = 18,
+ CB_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE_SET = 19,
+ CB_DYNAMIC_STENCIL_TEST_ENABLE_SET = 20,
+ CB_DYNAMIC_STENCIL_OP_SET = 21,
+ CB_DYNAMIC_RASTERIZER_DISCARD_ENABLE_SET = 22,
+ CB_DYNAMIC_DEPTH_BIAS_ENABLE_SET = 23,
+ CB_DYNAMIC_PRIMITIVE_RESTART_ENABLE_SET = 24,
+ CB_DYNAMIC_VIEWPORT_W_SCALING_NV_SET = 25,
+ CB_DYNAMIC_DISCARD_RECTANGLE_EXT_SET = 26,
+ CB_DYNAMIC_SAMPLE_LOCATIONS_EXT_SET = 27,
+ CB_DYNAMIC_RAY_TRACING_PIPELINE_STACK_SIZE_KHR_SET = 28,
+ CB_DYNAMIC_VIEWPORT_SHADING_RATE_PALETTE_NV_SET = 29,
+ CB_DYNAMIC_VIEWPORT_COARSE_SAMPLE_ORDER_NV_SET = 30,
+ CB_DYNAMIC_EXCLUSIVE_SCISSOR_NV_SET = 31,
+ CB_DYNAMIC_FRAGMENT_SHADING_RATE_KHR_SET = 32,
+ CB_DYNAMIC_LINE_STIPPLE_EXT_SET = 33,
+ CB_DYNAMIC_VERTEX_INPUT_EXT_SET = 34,
+ CB_DYNAMIC_PATCH_CONTROL_POINTS_EXT_SET = 35,
+ CB_DYNAMIC_LOGIC_OP_EXT_SET = 36,
+ CB_DYNAMIC_COLOR_WRITE_ENABLE_EXT_SET = 37,
+ CB_DYNAMIC_TESSELLATION_DOMAIN_ORIGIN_EXT_SET = 38,
+ CB_DYNAMIC_DEPTH_CLAMP_ENABLE_EXT_SET = 39,
+ CB_DYNAMIC_POLYGON_MODE_EXT_SET = 40,
+ CB_DYNAMIC_RASTERIZATION_SAMPLES_EXT_SET = 41,
+ CB_DYNAMIC_SAMPLE_MASK_EXT_SET = 42,
+ CB_DYNAMIC_ALPHA_TO_COVERAGE_ENABLE_EXT_SET = 43,
+ CB_DYNAMIC_ALPHA_TO_ONE_ENABLE_EXT_SET = 44,
+ CB_DYNAMIC_LOGIC_OP_ENABLE_EXT_SET = 45,
+ CB_DYNAMIC_COLOR_BLEND_ENABLE_EXT_SET = 46,
+ CB_DYNAMIC_COLOR_BLEND_EQUATION_EXT_SET = 47,
+ CB_DYNAMIC_COLOR_WRITE_MASK_EXT_SET = 48,
+ CB_DYNAMIC_RASTERIZATION_STREAM_EXT_SET = 49,
+ CB_DYNAMIC_CONSERVATIVE_RASTERIZATION_MODE_EXT_SET = 50,
+ CB_DYNAMIC_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT_SET = 51,
+ CB_DYNAMIC_DEPTH_CLIP_ENABLE_EXT_SET = 52,
+ CB_DYNAMIC_SAMPLE_LOCATIONS_ENABLE_EXT_SET = 53,
+ CB_DYNAMIC_COLOR_BLEND_ADVANCED_EXT_SET = 54,
+ CB_DYNAMIC_PROVOKING_VERTEX_MODE_EXT_SET = 55,
+ CB_DYNAMIC_LINE_RASTERIZATION_MODE_EXT_SET = 56,
+ CB_DYNAMIC_LINE_STIPPLE_ENABLE_EXT_SET = 57,
+ CB_DYNAMIC_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT_SET = 58,
+ CB_DYNAMIC_VIEWPORT_W_SCALING_ENABLE_NV_SET = 59,
+ CB_DYNAMIC_VIEWPORT_SWIZZLE_NV_SET = 60,
+ CB_DYNAMIC_COVERAGE_TO_COLOR_ENABLE_NV_SET = 61,
+ CB_DYNAMIC_COVERAGE_TO_COLOR_LOCATION_NV_SET = 62,
+ CB_DYNAMIC_COVERAGE_MODULATION_MODE_NV_SET = 63,
+ CB_DYNAMIC_COVERAGE_MODULATION_TABLE_ENABLE_NV_SET = 64,
+ CB_DYNAMIC_COVERAGE_MODULATION_TABLE_NV_SET = 65,
+ CB_DYNAMIC_SHADING_RATE_IMAGE_ENABLE_NV_SET = 66,
+ CB_DYNAMIC_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV_SET = 67,
+ CB_DYNAMIC_COVERAGE_REDUCTION_MODE_NV_SET = 68,
+ CB_DYNAMIC_STATUS_NUM = 69
+} CB_DYNAMIC_STATUS;
+
+typedef std::bitset<CB_DYNAMIC_STATUS_NUM> CBDynamicFlags;
+std::string DynamicStateString(CBDynamicFlags const &dynamic_state);
+struct VkPipelineDynamicStateCreateInfo;
+CBDynamicFlags MakeStaticStateMask(VkPipelineDynamicStateCreateInfo const *info);
+
diff --git a/layers/state_tracker.cpp b/layers/state_tracker.cpp
index d2b01bd..c33575d 100644
--- a/layers/state_tracker.cpp
+++ b/layers/state_tracker.cpp
@@ -2536,18 +2536,6 @@
}
}
-CBStatusFlags MakeStaticStateMask(VkPipelineDynamicStateCreateInfo const *ds) {
- // initially assume everything is static state
- CBStatusFlags flags(~CBStatusFlags(1U << CBSTATUS_INDEX_BUFFER_BOUND));
-
- if (ds) {
- for (uint32_t i = 0; i < ds->dynamicStateCount; i++) {
- flags.reset(ConvertToCBStatus(ds->pDynamicStates[i]));
- }
- }
- return flags;
-}
-
// Validation cache:
// CV is the bottommost implementor of this extension. Don't pass calls down.
@@ -2566,14 +2554,14 @@
cb_state->status &= ~cb_state->static_status;
cb_state->static_status = MakeStaticStateMask(dynamic_state ? dynamic_state->ptr() : nullptr);
cb_state->status |= cb_state->static_status;
- cb_state->dynamic_status = ~CBStatusFlags(1U << CBSTATUS_INDEX_BUFFER_BOUND);
+ cb_state->dynamic_status = ~CBDynamicFlags(0);
cb_state->dynamic_status &= ~cb_state->static_status;
// Used to calculate CMD_BUFFER_STATE::usedViewportScissorCount upon draw command with this graphics pipeline.
// If rasterization disabled (no viewport/scissors used), or the actual number of viewports/scissors is dynamic (unknown at
// this time), then these are set to 0 to disable this checking.
- auto has_dynamic_viewport_count = cb_state->dynamic_status[CBSTATUS_VIEWPORT_WITH_COUNT_SET];
- auto has_dynamic_scissor_count = cb_state->dynamic_status[CBSTATUS_SCISSOR_WITH_COUNT_SET];
+ auto has_dynamic_viewport_count = cb_state->dynamic_status[CB_DYNAMIC_VIEWPORT_WITH_COUNT_SET];
+ auto has_dynamic_scissor_count = cb_state->dynamic_status[CB_DYNAMIC_SCISSOR_WITH_COUNT_SET];
cb_state->pipelineStaticViewportCount =
has_dynamic_viewport_count || !rasterization_enabled ? 0 : viewport_state->viewportCount;
cb_state->pipelineStaticScissorCount =
@@ -2585,14 +2573,14 @@
// I am taking the latter interpretation based on the implementation details of NVIDIA's Vulkan driver.
if (!has_dynamic_viewport_count) {
cb_state->trashedViewportCount = true;
- if (rasterization_enabled && (cb_state->static_status[CBSTATUS_VIEWPORT_SET])) {
+ if (rasterization_enabled && (cb_state->static_status[CB_DYNAMIC_VIEWPORT_SET])) {
cb_state->trashedViewportMask |= (uint32_t(1) << viewport_state->viewportCount) - 1u;
// should become = ~uint32_t(0) if the other interpretation is correct.
}
}
if (!has_dynamic_scissor_count) {
cb_state->trashedScissorCount = true;
- if (rasterization_enabled && (cb_state->static_status[CBSTATUS_SCISSOR_SET])) {
+ if (rasterization_enabled && (cb_state->static_status[CB_DYNAMIC_SCISSOR_SET])) {
cb_state->trashedScissorMask |= (uint32_t(1) << viewport_state->scissorCount) - 1u;
// should become = ~uint32_t(0) if the other interpretation is correct.
}
@@ -2607,7 +2595,7 @@
void ValidationStateTracker::PreCallRecordCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport,
uint32_t viewportCount, const VkViewport *pViewports) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETVIEWPORT, CBSTATUS_VIEWPORT_SET);
+ cb_state->RecordStateCmd(CMD_SETVIEWPORT, CB_DYNAMIC_VIEWPORT_SET);
uint32_t bits = ((1u << viewportCount) - 1u) << firstViewport;
cb_state->viewportMask |= bits;
cb_state->trashedViewportMask &= ~bits;
@@ -2622,7 +2610,7 @@
uint32_t exclusiveScissorCount,
const VkRect2D *pExclusiveScissors) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETEXCLUSIVESCISSORNV, CBSTATUS_EXCLUSIVE_SCISSOR_SET);
+ cb_state->RecordStateCmd(CMD_SETEXCLUSIVESCISSORNV, CB_DYNAMIC_EXCLUSIVE_SCISSOR_NV_SET);
// TODO: We don't have VUIDs for validating that all exclusive scissors have been set.
// cb_state->exclusiveScissorMask |= ((1u << exclusiveScissorCount) - 1u) << firstExclusiveScissor;
}
@@ -2644,7 +2632,7 @@
uint32_t viewportCount,
const VkShadingRatePaletteNV *pShadingRatePalettes) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETVIEWPORTSHADINGRATEPALETTENV, CBSTATUS_SHADING_RATE_PALETTE_SET);
+ cb_state->RecordStateCmd(CMD_SETVIEWPORTSHADINGRATEPALETTENV, CB_DYNAMIC_VIEWPORT_SHADING_RATE_PALETTE_NV_SET);
// TODO: We don't have VUIDs for validating that all shading rate palettes have been set.
// cb_state->shadingRatePaletteMask |= ((1u << viewportCount) - 1u) << firstViewport;
}
@@ -2912,30 +2900,30 @@
uint32_t viewportCount,
const VkViewportWScalingNV *pViewportWScalings) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETVIEWPORTWSCALINGNV, CBSTATUS_VIEWPORT_W_SCALING_SET);
+ cb_state->RecordStateCmd(CMD_SETVIEWPORTWSCALINGNV, CB_DYNAMIC_VIEWPORT_W_SCALING_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETLINEWIDTH, CBSTATUS_LINE_WIDTH_SET);
+ cb_state->RecordStateCmd(CMD_SETLINEWIDTH, CB_DYNAMIC_LINE_WIDTH_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetLineStippleEXT(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor,
uint16_t lineStipplePattern) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETLINESTIPPLEEXT, CBSTATUS_LINE_STIPPLE_SET);
+ cb_state->RecordStateCmd(CMD_SETLINESTIPPLEEXT, CB_DYNAMIC_LINE_STIPPLE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor,
float depthBiasClamp, float depthBiasSlopeFactor) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHBIAS, CBSTATUS_DEPTH_BIAS_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHBIAS, CB_DYNAMIC_DEPTH_BIAS_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount,
const VkRect2D *pScissors) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSCISSOR, CBSTATUS_SCISSOR_SET);
+ cb_state->RecordStateCmd(CMD_SETSCISSOR, CB_DYNAMIC_SCISSOR_SET);
uint32_t bits = ((1u << scissorCount) - 1u) << firstScissor;
cb_state->scissorMask |= bits;
cb_state->trashedScissorMask &= ~bits;
@@ -2943,31 +2931,31 @@
void ValidationStateTracker::PreCallRecordCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETBLENDCONSTANTS, CBSTATUS_BLEND_CONSTANTS_SET);
+ cb_state->RecordStateCmd(CMD_SETBLENDCONSTANTS, CB_DYNAMIC_BLEND_CONSTANTS_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds,
float maxDepthBounds) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHBOUNDS, CBSTATUS_DEPTH_BOUNDS_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHBOUNDS, CB_DYNAMIC_DEPTH_BOUNDS_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
uint32_t compareMask) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSTENCILCOMPAREMASK, CBSTATUS_STENCIL_READ_MASK_SET);
+ cb_state->RecordStateCmd(CMD_SETSTENCILCOMPAREMASK, CB_DYNAMIC_STENCIL_COMPARE_MASK_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
uint32_t writeMask) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSTENCILWRITEMASK, CBSTATUS_STENCIL_WRITE_MASK_SET);
+ cb_state->RecordStateCmd(CMD_SETSTENCILWRITEMASK, CB_DYNAMIC_STENCIL_WRITE_MASK_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
uint32_t reference) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSTENCILREFERENCE, CBSTATUS_STENCIL_REFERENCE_SET);
+ cb_state->RecordStateCmd(CMD_SETSTENCILREFERENCE, CB_DYNAMIC_STENCIL_REFERENCE_SET);
}
// Update the bound state for the bind point, including the effects of incompatible pipeline layouts
@@ -4681,42 +4669,42 @@
void ValidationStateTracker::PreCallRecordCmdSetCullModeEXT(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCULLMODEEXT, CBSTATUS_CULL_MODE_SET);
+ cb_state->RecordStateCmd(CMD_SETCULLMODEEXT, CB_DYNAMIC_CULL_MODE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCULLMODE, CBSTATUS_CULL_MODE_SET);
+ cb_state->RecordStateCmd(CMD_SETCULLMODE, CB_DYNAMIC_CULL_MODE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetFrontFaceEXT(VkCommandBuffer commandBuffer, VkFrontFace frontFace) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETFRONTFACEEXT, CBSTATUS_FRONT_FACE_SET);
+ cb_state->RecordStateCmd(CMD_SETFRONTFACEEXT, CB_DYNAMIC_FRONT_FACE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETFRONTFACE, CBSTATUS_FRONT_FACE_SET);
+ cb_state->RecordStateCmd(CMD_SETFRONTFACE, CB_DYNAMIC_FRONT_FACE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetPrimitiveTopologyEXT(VkCommandBuffer commandBuffer,
VkPrimitiveTopology primitiveTopology) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETPRIMITIVETOPOLOGYEXT, CBSTATUS_PRIMITIVE_TOPOLOGY_SET);
+ cb_state->RecordStateCmd(CMD_SETPRIMITIVETOPOLOGYEXT, CB_DYNAMIC_PRIMITIVE_TOPOLOGY_SET);
cb_state->primitiveTopology = primitiveTopology;
}
void ValidationStateTracker::PreCallRecordCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer,
VkPrimitiveTopology primitiveTopology) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETPRIMITIVETOPOLOGY, CBSTATUS_PRIMITIVE_TOPOLOGY_SET);
+ cb_state->RecordStateCmd(CMD_SETPRIMITIVETOPOLOGY, CB_DYNAMIC_PRIMITIVE_TOPOLOGY_SET);
cb_state->primitiveTopology = primitiveTopology;
}
void ValidationStateTracker::RecordCmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount,
const VkViewport *pViewports, CMD_TYPE cmdType) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(cmdType, CBSTATUS_VIEWPORT_WITH_COUNT_SET);
+ cb_state->RecordStateCmd(cmdType, CB_DYNAMIC_VIEWPORT_WITH_COUNT_SET);
uint32_t bits = (1u << viewportCount) - 1u;
cb_state->viewportWithCountMask |= bits;
cb_state->trashedViewportMask &= ~bits;
@@ -4742,7 +4730,7 @@
void ValidationStateTracker::RecordCmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount,
const VkRect2D *pScissors, CMD_TYPE cmdType) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(cmdType, CBSTATUS_SCISSOR_WITH_COUNT_SET);
+ cb_state->RecordStateCmd(cmdType, CB_DYNAMIC_SCISSOR_WITH_COUNT_SET);
uint32_t bits = (1u << scissorCount) - 1u;
cb_state->scissorWithCountMask |= bits;
cb_state->trashedScissorMask &= ~bits;
@@ -4766,7 +4754,7 @@
const VkDeviceSize *pStrides, CMD_TYPE cmd_type) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
if (pStrides) {
- cb_state->RecordStateCmd(cmd_type, CBSTATUS_VERTEX_INPUT_BINDING_STRIDE_SET);
+ cb_state->RecordStateCmd(cmd_type, CB_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE_SET);
}
uint32_t end = firstBinding + bindingCount;
@@ -4805,81 +4793,81 @@
void ValidationStateTracker::PreCallRecordCmdSetDepthTestEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHTESTENABLEEXT, CBSTATUS_DEPTH_TEST_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHTESTENABLEEXT, CB_DYNAMIC_DEPTH_TEST_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHTESTENABLE, CBSTATUS_DEPTH_TEST_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHTESTENABLE, CB_DYNAMIC_DEPTH_TEST_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthWriteEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHWRITEENABLEEXT, CBSTATUS_DEPTH_WRITE_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHWRITEENABLEEXT, CB_DYNAMIC_DEPTH_WRITE_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHWRITEENABLE, CBSTATUS_DEPTH_WRITE_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHWRITEENABLE, CB_DYNAMIC_DEPTH_WRITE_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthCompareOpEXT(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHCOMPAREOPEXT, CBSTATUS_DEPTH_COMPARE_OP_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHCOMPAREOPEXT, CB_DYNAMIC_DEPTH_COMPARE_OP_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHCOMPAREOP, CBSTATUS_DEPTH_COMPARE_OP_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHCOMPAREOP, CB_DYNAMIC_DEPTH_COMPARE_OP_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthBoundsTestEnableEXT(VkCommandBuffer commandBuffer,
VkBool32 depthBoundsTestEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHBOUNDSTESTENABLEEXT, CBSTATUS_DEPTH_BOUNDS_TEST_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHBOUNDSTESTENABLEEXT, CB_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer,
VkBool32 depthBoundsTestEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHBOUNDSTESTENABLE, CBSTATUS_DEPTH_BOUNDS_TEST_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHBOUNDSTESTENABLE, CB_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetStencilTestEnableEXT(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSTENCILTESTENABLEEXT, CBSTATUS_STENCIL_TEST_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETSTENCILTESTENABLEEXT, CB_DYNAMIC_STENCIL_TEST_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSTENCILTESTENABLE, CBSTATUS_STENCIL_TEST_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETSTENCILTESTENABLE, CB_DYNAMIC_STENCIL_TEST_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetStencilOpEXT(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp,
VkCompareOp compareOp) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSTENCILOPEXT, CBSTATUS_STENCIL_OP_SET);
+ cb_state->RecordStateCmd(CMD_SETSTENCILOPEXT, CB_DYNAMIC_STENCIL_OP_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp,
VkCompareOp compareOp) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSTENCILOP, CBSTATUS_STENCIL_OP_SET);
+ cb_state->RecordStateCmd(CMD_SETSTENCILOP, CB_DYNAMIC_STENCIL_OP_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle,
uint32_t discardRectangleCount,
const VkRect2D *pDiscardRectangles) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDISCARDRECTANGLEEXT, CBSTATUS_DISCARD_RECTANGLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDISCARDRECTANGLEEXT, CB_DYNAMIC_DISCARD_RECTANGLE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetSampleLocationsEXT(VkCommandBuffer commandBuffer,
const VkSampleLocationsInfoEXT *pSampleLocationsInfo) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSAMPLELOCATIONSEXT, CBSTATUS_SAMPLE_LOCATIONS_SET);
+ cb_state->RecordStateCmd(CMD_SETSAMPLELOCATIONSEXT, CB_DYNAMIC_SAMPLE_LOCATIONS_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetCoarseSampleOrderNV(VkCommandBuffer commandBuffer,
@@ -4887,53 +4875,53 @@
uint32_t customSampleOrderCount,
const VkCoarseSampleOrderCustomNV *pCustomSampleOrders) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOARSESAMPLEORDERNV, CBSTATUS_COARSE_SAMPLE_ORDER_SET);
+ cb_state->RecordStateCmd(CMD_SETCOARSESAMPLEORDERNV, CB_DYNAMIC_VIEWPORT_COARSE_SAMPLE_ORDER_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer, uint32_t patchControlPoints) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETPATCHCONTROLPOINTSEXT, CBSTATUS_PATCH_CONTROL_POINTS_SET);
+ cb_state->RecordStateCmd(CMD_SETPATCHCONTROLPOINTSEXT, CB_DYNAMIC_PATCH_CONTROL_POINTS_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetLogicOpEXT(VkCommandBuffer commandBuffer, VkLogicOp logicOp) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETLOGICOPEXT, CBSTATUS_LOGIC_OP_SET);
+ cb_state->RecordStateCmd(CMD_SETLOGICOPEXT, CB_DYNAMIC_LOGIC_OP_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetRasterizerDiscardEnableEXT(VkCommandBuffer commandBuffer,
VkBool32 rasterizerDiscardEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETRASTERIZERDISCARDENABLEEXT, CBSTATUS_RASTERIZER_DISCARD_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETRASTERIZERDISCARDENABLEEXT, CB_DYNAMIC_RASTERIZER_DISCARD_ENABLE_SET);
cb_state->rasterization_disabled = rasterizerDiscardEnable == VK_TRUE;
}
void ValidationStateTracker::PreCallRecordCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer,
VkBool32 rasterizerDiscardEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETRASTERIZERDISCARDENABLE, CBSTATUS_RASTERIZER_DISCARD_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETRASTERIZERDISCARDENABLE, CB_DYNAMIC_RASTERIZER_DISCARD_ENABLE_SET);
cb_state->rasterization_disabled = rasterizerDiscardEnable == VK_TRUE;
}
void ValidationStateTracker::PreCallRecordCmdSetDepthBiasEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHBIASENABLEEXT, CBSTATUS_DEPTH_BIAS_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHBIASENABLEEXT, CB_DYNAMIC_DEPTH_BIAS_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHBIASENABLE, CBSTATUS_DEPTH_BIAS_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHBIASENABLE, CB_DYNAMIC_DEPTH_BIAS_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetPrimitiveRestartEnableEXT(VkCommandBuffer commandBuffer,
VkBool32 primitiveRestartEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETPRIMITIVERESTARTENABLEEXT, CBSTATUS_PRIMITIVE_RESTART_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETPRIMITIVERESTARTENABLEEXT, CB_DYNAMIC_PRIMITIVE_RESTART_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer,
VkBool32 primitiveRestartEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETPRIMITIVERESTARTENABLE, CBSTATUS_PRIMITIVE_RESTART_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETPRIMITIVERESTARTENABLE, CB_DYNAMIC_PRIMITIVE_RESTART_ENABLE_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetVertexInputEXT(
@@ -4941,8 +4929,8 @@
const VkVertexInputBindingDescription2EXT *pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount,
const VkVertexInputAttributeDescription2EXT *pVertexAttributeDescriptions) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- CBStatusFlags status_flags;
- status_flags.set(CBSTATUS_VERTEX_INPUT_SET);
+ CBDynamicFlags status_flags;
+ status_flags.set(CB_DYNAMIC_VERTEX_INPUT_EXT_SET);
const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_GRAPHICS);
const auto pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
@@ -4951,7 +4939,7 @@
if (dynamic_state) {
for (uint32_t i = 0; i < dynamic_state->dynamicStateCount; ++i) {
if (dynamic_state->pDynamicStates[i] == VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT) {
- status_flags.set(CBSTATUS_VERTEX_INPUT_BINDING_STRIDE_SET);
+ status_flags.set(CB_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE_SET);
break;
}
}
@@ -4963,193 +4951,193 @@
void ValidationStateTracker::PreCallRecordCmdSetColorWriteEnableEXT(VkCommandBuffer commandBuffer, uint32_t attachmentCount,
const VkBool32 *pColorWriteEnables) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordColorWriteEnableStateCmd(CMD_SETCOLORWRITEENABLEEXT, CBSTATUS_COLOR_WRITE_ENABLE_SET, attachmentCount);
+ cb_state->RecordColorWriteEnableStateCmd(CMD_SETCOLORWRITEENABLEEXT, CB_DYNAMIC_COLOR_WRITE_ENABLE_EXT_SET, attachmentCount);
}
void ValidationStateTracker::PreCallRecordCmdSetTessellationDomainOriginEXT(VkCommandBuffer commandBuffer,
VkTessellationDomainOrigin domainOrigin) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETTESSELLATIONDOMAINORIGINEXT, CBSTATUS_TESSELLATION_DOMAIN_ORIGIN_SET);
+ cb_state->RecordStateCmd(CMD_SETTESSELLATIONDOMAINORIGINEXT, CB_DYNAMIC_TESSELLATION_DOMAIN_ORIGIN_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthClampEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClampEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHCLAMPENABLEEXT, CBSTATUS_DEPTH_CLAMP_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHCLAMPENABLEEXT, CB_DYNAMIC_DEPTH_CLAMP_ENABLE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetPolygonModeEXT(VkCommandBuffer commandBuffer, VkPolygonMode polygonMode) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETPOLYGONMODEEXT, CBSTATUS_POLYGON_MODE_SET);
+ cb_state->RecordStateCmd(CMD_SETPOLYGONMODEEXT, CB_DYNAMIC_POLYGON_MODE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetRasterizationSamplesEXT(VkCommandBuffer commandBuffer,
VkSampleCountFlagBits rasterizationSamples) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETRASTERIZATIONSAMPLESEXT, CBSTATUS_RASTERIZATION_SAMPLES_SET);
+ cb_state->RecordStateCmd(CMD_SETRASTERIZATIONSAMPLESEXT, CB_DYNAMIC_RASTERIZATION_SAMPLES_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetSampleMaskEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits samples,
const VkSampleMask *pSampleMask) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSAMPLEMASKEXT, CBSTATUS_SAMPLE_MASK_SET);
+ cb_state->RecordStateCmd(CMD_SETSAMPLEMASKEXT, CB_DYNAMIC_SAMPLE_MASK_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetAlphaToCoverageEnableEXT(VkCommandBuffer commandBuffer,
VkBool32 alphaToCoverageEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETALPHATOCOVERAGEENABLEEXT, CBSTATUS_ALPHA_TO_COVERAGE_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETALPHATOCOVERAGEENABLEEXT, CB_DYNAMIC_ALPHA_TO_COVERAGE_ENABLE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetAlphaToOneEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETALPHATOONEENABLEEXT, CBSTATUS_ALPHA_TO_ONE_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETALPHATOONEENABLEEXT, CB_DYNAMIC_ALPHA_TO_ONE_ENABLE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetLogicOpEnableEXT(VkCommandBuffer commandBuffer, VkBool32 logicOpEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETLOGICOPENABLEEXT, CBSTATUS_LOGIC_OP_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETLOGICOPENABLEEXT, CB_DYNAMIC_LOGIC_OP_ENABLE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetColorBlendEnableEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment,
uint32_t attachmentCount, const VkBool32 *pColorBlendEnables) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOLORBLENDENABLEEXT, CBSTATUS_COLOR_BLEND_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETCOLORBLENDENABLEEXT, CB_DYNAMIC_COLOR_BLEND_ENABLE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetColorBlendEquationEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment,
uint32_t attachmentCount,
const VkColorBlendEquationEXT *pColorBlendEquations) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOLORBLENDEQUATIONEXT, CBSTATUS_COLOR_BLEND_EQUATION_SET);
+ cb_state->RecordStateCmd(CMD_SETCOLORBLENDEQUATIONEXT, CB_DYNAMIC_COLOR_BLEND_EQUATION_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetColorWriteMaskEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment,
uint32_t attachmentCount,
const VkColorComponentFlags *pColorWriteMasks) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOLORWRITEMASKEXT, CBSTATUS_COLOR_WRITE_MASK_SET);
+ cb_state->RecordStateCmd(CMD_SETCOLORWRITEMASKEXT, CB_DYNAMIC_COLOR_WRITE_MASK_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetRasterizationStreamEXT(VkCommandBuffer commandBuffer,
uint32_t rasterizationStream) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETRASTERIZATIONSTREAMEXT, CBSTATUS_RASTERIZATION_STREAM_SET);
+ cb_state->RecordStateCmd(CMD_SETRASTERIZATIONSTREAMEXT, CB_DYNAMIC_RASTERIZATION_STREAM_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetConservativeRasterizationModeEXT(
VkCommandBuffer commandBuffer, VkConservativeRasterizationModeEXT conservativeRasterizationMode) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCONSERVATIVERASTERIZATIONMODEEXT, CBSTATUS_CONSERVATIVE_RASTERIZATION_MODE_SET);
+ cb_state->RecordStateCmd(CMD_SETCONSERVATIVERASTERIZATIONMODEEXT, CB_DYNAMIC_CONSERVATIVE_RASTERIZATION_MODE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetExtraPrimitiveOverestimationSizeEXT(VkCommandBuffer commandBuffer,
float extraPrimitiveOverestimationSize) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETEXTRAPRIMITIVEOVERESTIMATIONSIZEEXT, CBSTATUS_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_SET);
+ cb_state->RecordStateCmd(CMD_SETEXTRAPRIMITIVEOVERESTIMATIONSIZEEXT, CB_DYNAMIC_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthClipEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClipEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHCLIPENABLEEXT, CBSTATUS_DEPTH_CLIP_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHCLIPENABLEEXT, CB_DYNAMIC_DEPTH_CLIP_ENABLE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetSampleLocationsEnableEXT(VkCommandBuffer commandBuffer,
VkBool32 sampleLocationsEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSAMPLELOCATIONSENABLEEXT, CBSTATUS_SAMPLE_LOCATIONS_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETSAMPLELOCATIONSENABLEEXT, CB_DYNAMIC_SAMPLE_LOCATIONS_ENABLE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetColorBlendAdvancedEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment,
uint32_t attachmentCount,
const VkColorBlendAdvancedEXT *pColorBlendAdvanced) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOLORBLENDADVANCEDEXT, CBSTATUS_COLOR_BLEND_ADVANCED_SET);
+ cb_state->RecordStateCmd(CMD_SETCOLORBLENDADVANCEDEXT, CB_DYNAMIC_COLOR_BLEND_ADVANCED_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetProvokingVertexModeEXT(VkCommandBuffer commandBuffer,
VkProvokingVertexModeEXT provokingVertexMode) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETPROVOKINGVERTEXMODEEXT, CBSTATUS_PROVOKING_VERTEX_MODE_SET);
+ cb_state->RecordStateCmd(CMD_SETPROVOKINGVERTEXMODEEXT, CB_DYNAMIC_PROVOKING_VERTEX_MODE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetLineRasterizationModeEXT(VkCommandBuffer commandBuffer,
VkLineRasterizationModeEXT lineRasterizationMode) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETLINERASTERIZATIONMODEEXT, CBSTATUS_LINE_RASTERIZATION_MODE_SET);
+ cb_state->RecordStateCmd(CMD_SETLINERASTERIZATIONMODEEXT, CB_DYNAMIC_LINE_RASTERIZATION_MODE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetLineStippleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETLINESTIPPLEENABLEEXT, CBSTATUS_LINE_STIPPLE_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETLINESTIPPLEENABLEEXT, CB_DYNAMIC_LINE_STIPPLE_ENABLE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetDepthClipNegativeOneToOneEXT(VkCommandBuffer commandBuffer,
VkBool32 negativeOneToOne) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETDEPTHCLIPNEGATIVEONETOONEEXT, CBSTATUS_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_SET);
+ cb_state->RecordStateCmd(CMD_SETDEPTHCLIPNEGATIVEONETOONEEXT, CB_DYNAMIC_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetViewportWScalingEnableNV(VkCommandBuffer commandBuffer,
VkBool32 viewportWScalingEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETVIEWPORTWSCALINGENABLENV, CBSTATUS_VIEWPORT_W_SCALING_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETVIEWPORTWSCALINGENABLENV, CB_DYNAMIC_VIEWPORT_W_SCALING_ENABLE_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetViewportSwizzleNV(VkCommandBuffer commandBuffer, uint32_t firstViewport,
uint32_t viewportCount,
const VkViewportSwizzleNV *pViewportSwizzles) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETVIEWPORTSWIZZLENV, CBSTATUS_VIEWPORT_SWIZZLE_SET);
+ cb_state->RecordStateCmd(CMD_SETVIEWPORTSWIZZLENV, CB_DYNAMIC_VIEWPORT_SWIZZLE_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetCoverageToColorEnableNV(VkCommandBuffer commandBuffer,
VkBool32 coverageToColorEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOVERAGETOCOLORENABLENV, CBSTATUS_COVERAGE_TO_COLOR_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETCOVERAGETOCOLORENABLENV, CB_DYNAMIC_COVERAGE_TO_COLOR_ENABLE_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetCoverageToColorLocationNV(VkCommandBuffer commandBuffer,
uint32_t coverageToColorLocation) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOVERAGETOCOLORLOCATIONNV, CBSTATUS_COVERAGE_TO_COLOR_LOCATION_SET);
+ cb_state->RecordStateCmd(CMD_SETCOVERAGETOCOLORLOCATIONNV, CB_DYNAMIC_COVERAGE_TO_COLOR_LOCATION_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetCoverageModulationModeNV(VkCommandBuffer commandBuffer,
VkCoverageModulationModeNV coverageModulationMode) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOVERAGEMODULATIONMODENV, CBSTATUS_COVERAGE_MODULATION_MODE_SET);
+ cb_state->RecordStateCmd(CMD_SETCOVERAGEMODULATIONMODENV, CB_DYNAMIC_COVERAGE_MODULATION_MODE_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetCoverageModulationTableEnableNV(VkCommandBuffer commandBuffer,
VkBool32 coverageModulationTableEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOVERAGEMODULATIONTABLEENABLENV, CBSTATUS_COVERAGE_MODULATION_TABLE_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETCOVERAGEMODULATIONTABLEENABLENV, CB_DYNAMIC_COVERAGE_MODULATION_TABLE_ENABLE_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetCoverageModulationTableNV(VkCommandBuffer commandBuffer,
uint32_t coverageModulationTableCount,
const float *pCoverageModulationTable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOVERAGEMODULATIONTABLENV, CBSTATUS_COVERAGE_MODULATION_TABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETCOVERAGEMODULATIONTABLENV, CB_DYNAMIC_COVERAGE_MODULATION_TABLE_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetShadingRateImageEnableNV(VkCommandBuffer commandBuffer,
VkBool32 shadingRateImageEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETSHADINGRATEIMAGEENABLENV, CBSTATUS_SHADING_RATE_IMAGE_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETSHADINGRATEIMAGEENABLENV, CB_DYNAMIC_SHADING_RATE_IMAGE_ENABLE_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetRepresentativeFragmentTestEnableNV(VkCommandBuffer commandBuffer,
VkBool32 representativeFragmentTestEnable) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETREPRESENTATIVEFRAGMENTTESTENABLENV, CBSTATUS_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_SET);
+ cb_state->RecordStateCmd(CMD_SETREPRESENTATIVEFRAGMENTTESTENABLENV, CB_DYNAMIC_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV_SET);
}
void ValidationStateTracker::PreCallRecordCmdSetCoverageReductionModeNV(VkCommandBuffer commandBuffer,
VkCoverageReductionModeNV coverageReductionMode) {
auto cb_state = GetWrite<CMD_BUFFER_STATE>(commandBuffer);
- cb_state->RecordStateCmd(CMD_SETCOVERAGEREDUCTIONMODENV, CBSTATUS_COVERAGE_REDUCTION_MODE_SET);
+ cb_state->RecordStateCmd(CMD_SETCOVERAGEREDUCTIONMODENV, CB_DYNAMIC_COVERAGE_REDUCTION_MODE_NV_SET);
}
void ValidationStateTracker::RecordGetBufferDeviceAddress(const VkBufferDeviceAddressInfo *pInfo, VkDeviceAddress address) {
diff --git a/scripts/command_validation_generator.py b/scripts/command_validation_generator.py
index 67d56b2..66ef598 100644
--- a/scripts/command_validation_generator.py
+++ b/scripts/command_validation_generator.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3 -i
#
-# Copyright (c) 2021 The Khronos Group Inc.
+# Copyright (c) 2021-2022 The Khronos Group Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -93,6 +93,7 @@
self.alias_dict = dict() # Dict of cmd aliases
self.header_file = False # Header file generation flag
self.source_file = False # Source file generation flag
+ self.dynamic_states = [] # VkDynamicState enum values
#
# Walk the JSON-derived dict and find all "vuid" key values
@@ -142,7 +143,7 @@
copyright += '\n'
copyright += '/***************************************************************************\n'
copyright += ' *\n'
- copyright += ' * Copyright (c) 2021 The Khronos Group Inc.\n'
+ copyright += ' * Copyright (c) 2021-2022 The Khronos Group Inc.\n'
copyright += ' *\n'
copyright += ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
copyright += ' * you may not use this file except in compliance with the License.\n'
@@ -167,6 +168,7 @@
elif self.header_file:
write('#pragma once', file=self.outFile)
write('#include <array>', file=self.outFile)
+ write('#include <bitset>', file=self.outFile)
#
# Write generated file content to output file
@@ -174,12 +176,14 @@
if self.header_file:
write(self.commandTypeEnum(), file=self.outFile)
write(self.commandNameList(), file=self.outFile)
+ write(self.dynamicTypeEnum(), file=self.outFile)
elif self.source_file:
write(self.commandRecordingList(), file=self.outFile)
write(self.commandQueueTypeList(), file=self.outFile)
write(self.commandRenderPassList(), file=self.outFile)
write(self.commandBufferLevelList(), file=self.outFile)
write(self.validateFunction(), file=self.outFile)
+ write(self.dynamicFunction(), file=self.outFile)
# Finish processing in superclass
OutputGenerator.endFile(self)
@@ -206,7 +210,13 @@
self.commands[name] = cmdinfo
if alias is not None:
self.alias_dict[name] = alias
-
+ #
+ # List the enum for the commands
+ def genGroup(self, groupinfo, name, alias):
+ if (name == 'VkDynamicState'):
+ for elem in groupinfo.elem.findall('enum'):
+ if elem.get('alias') is None:
+ self.dynamic_states.append(elem.get('name'))
#
# List the enum for the commands
def commandTypeEnum(self):
@@ -238,6 +248,28 @@
return output
#
+ # List the enum for the dynamic command buffer status flags
+ def dynamicTypeEnum(self):
+ output = '''
+typedef enum CB_DYNAMIC_STATUS {\n'''
+ counter = 1
+ for name in self.dynamic_states:
+ state_name = name[17:] # VK_DYNAMIC_STATE_LINE_WIDTH -> LINE_WIDTH
+ output += ' CB_DYNAMIC_{}_SET = {},\n'.format(state_name, str(counter))
+ counter += 1
+
+ output += ' CB_DYNAMIC_STATUS_NUM = ' + str(counter)
+ output += '''
+} CB_DYNAMIC_STATUS;
+
+typedef std::bitset<CB_DYNAMIC_STATUS_NUM> CBDynamicFlags;
+std::string DynamicStateString(CBDynamicFlags const &dynamic_state);
+struct VkPipelineDynamicStateCreateInfo;
+CBDynamicFlags MakeStaticStateMask(VkPipelineDynamicStateCreateInfo const *info);
+'''
+ return output
+
+ #
# For each CMD_TYPE give a string name add a *-recording VUID
# Each vkCmd* will have one
def commandRecordingList(self):
@@ -414,3 +446,59 @@
return skip;
}'''
return output
+
+ #
+ # List the enum for the dynamic command buffer status flags
+ def dynamicFunction(self):
+ output = '''
+static VkDynamicState ConvertToDynamicState(CB_DYNAMIC_STATUS flag) {
+ switch (flag) {\n'''
+ for name in self.dynamic_states:
+ state_name = name[17:] # VK_DYNAMIC_STATE_LINE_WIDTH -> LINE_WIDTH
+ output += ' case CB_DYNAMIC_{}_SET:\n'.format(state_name)
+ output += ' return {};\n'.format(name)
+ output += ''' default:
+ return VK_DYNAMIC_STATE_MAX_ENUM;
+ }
+}
+'''
+ output += '''
+static CB_DYNAMIC_STATUS ConvertToCBDynamicStatus(VkDynamicState state) {
+ switch (state) {\n'''
+ for name in self.dynamic_states:
+ state_name = name[17:] # VK_DYNAMIC_STATE_LINE_WIDTH -> LINE_WIDTH
+ output += ' case {}:\n'.format(name)
+ output += ' return CB_DYNAMIC_{}_SET;\n'.format(state_name)
+ output += ''' default:
+ return CB_DYNAMIC_STATUS_NUM;
+ }
+}
+'''
+
+ output += '''
+std::string DynamicStateString(CBDynamicFlags const &dynamic_state) {
+ std::string ret;
+ for (int index = 0; index < CB_DYNAMIC_STATUS_NUM; ++index) {
+ CB_DYNAMIC_STATUS status = static_cast<CB_DYNAMIC_STATUS>(index);
+ if (dynamic_state[status]) {
+ if (!ret.empty()) ret.append("|");
+ ret.append(string_VkDynamicState(ConvertToDynamicState(status)));
+ }
+ }
+ if (ret.empty()) ret.append(string_VkDynamicState(ConvertToDynamicState(CB_DYNAMIC_STATUS_NUM)));
+ return ret;
+}
+
+CBDynamicFlags MakeStaticStateMask(VkPipelineDynamicStateCreateInfo const *info) {
+ // initially assume everything is static state
+ CBDynamicFlags flags(~CBDynamicFlags(0));
+
+ if (info) {
+ for (uint32_t i = 0; i < info->dynamicStateCount; i++) {
+ flags.reset(ConvertToCBDynamicStatus(info->pDynamicStates[i]));
+ }
+ }
+ return flags;
+}
+'''
+ return output
\ No newline at end of file