// Copyright 2019-2024 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

// Common Valid Usage
// Common to all drawing commands
include::{chapters}/commonvalidity/draw_dispatch_common.adoc[]
  * [[VUID-{refpage}-renderPass-02684]]
    The current render pass must: be <<renderpass-compatibility,compatible>>
    with the pname:renderPass member of the
    sname:VkGraphicsPipelineCreateInfo structure specified when creating the
    sname:VkPipeline bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS
  * [[VUID-{refpage}-subpass-02685]]
    The subpass index of the current render pass must: be equal to the
    pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
    specified when creating the sname:VkPipeline bound to
    ename:VK_PIPELINE_BIND_POINT_GRAPHICS
  * [[VUID-{refpage}-None-07748]]
    If any shader statically accesses an input attachment, a valid
    descriptor must: be bound to the pipeline via a descriptor set
  * [[VUID-{refpage}-OpTypeImage-07468]]
    If any shader executed by this pipeline accesses an code:OpTypeImage
    variable with a code:Dim operand of code:SubpassData, it must: be
    decorated with an code:InputAttachmentIndex that corresponds to a valid
    input attachment in the current subpass
  * [[VUID-{refpage}-None-07469]]
    Input attachment views accessed in a subpass must: be created with the
    same elink:VkFormat as the corresponding subpass definition, and be
    created with a slink:VkImageView that is compatible with the attachment
    referenced by the subpass'
    pname:pInputAttachments[code:InputAttachmentIndex] in the currently
    bound slink:VkFramebuffer as specified by
    <<compatibility-inputattachment,Fragment Input Attachment
    Compatibility>>
  * [[VUID-{refpage}-None-06537]]
    Memory backing image subresources used as attachments in the current
    render pass must: not be written in any way other than as an attachment
    by this command
  * [[VUID-{refpage}-None-09000]]
    If a color attachment is written by any prior command in this subpass or
    by the load, store, or resolve operations for this subpass,
ifdef::VK_EXT_attachment_feedback_loop_layout[]
    it is not in the
    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT image layout,
    and
ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
    either:
  ** {empty}
endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
    the ename:VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT is
    set on the currently bound pipeline
ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
    or
  ** the last call to flink:vkCmdSetAttachmentFeedbackLoopEnableEXT included
     ename:VK_IMAGE_ASPECT_COLOR_BIT and
ifdef::VK_EXT_shader_object[]
  *** there is no currently bound graphics pipeline or
endif::VK_EXT_shader_object[]
  *** the currently bound graphics pipeline was created with
      ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
endif::VK_EXT_attachment_feedback_loop_layout[]
    it must: not be accessed in any way other than as an attachment by this
    command
  * [[VUID-{refpage}-None-09001]]
    If a depth attachment is written by any prior command in this subpass or
    by the load, store, or resolve operations for this subpass,
ifdef::VK_EXT_attachment_feedback_loop_layout[]
    it is not in the
    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT image layout,
    and
ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
    either:
  ** {empty}
endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
    the
    ename:VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
    is set on the currently bound pipeline
ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
    or
  ** the last call to flink:vkCmdSetAttachmentFeedbackLoopEnableEXT included
     ename:VK_IMAGE_ASPECT_DEPTH_BIT and
ifdef::VK_EXT_shader_object[]
  *** there is no currently bound graphics pipeline or
endif::VK_EXT_shader_object[]
  *** the currently bound graphics pipeline was created with
      ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
endif::VK_EXT_attachment_feedback_loop_layout[]
    it must: not be accessed in any way other than as an attachment by this
    command
  * [[VUID-{refpage}-None-09002]]
    If a stencil attachment is written by any prior command in this subpass
    or by the load, store, or resolve operations for this subpass,
ifdef::VK_EXT_attachment_feedback_loop_layout[]
    it is not in the
    ename:VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT image layout,
    and
ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
    either:
  ** {empty}
endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
    the
    ename:VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
    is set on the currently bound pipeline
ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
    or
  ** the last call to flink:vkCmdSetAttachmentFeedbackLoopEnableEXT included
     ename:VK_IMAGE_ASPECT_STENCIL_BIT and
ifdef::VK_EXT_shader_object[]
  *** there is no currently bound graphics pipeline or
endif::VK_EXT_shader_object[]
  *** the currently bound graphics pipeline was created with
      ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
endif::VK_EXT_attachment_feedback_loop_layout[]
    it must: not be accessed in any way other than as an attachment by this
    command
ifdef::VK_EXT_attachment_feedback_loop_layout[]
  * [[VUID-{refpage}-None-09003]]
    If an attachment is written by any prior command in this subpass or by
    the load, store, or resolve operations for this subpass, it must: not be
    accessed in any way other than as an attachment, storage image, or
    sampled image by this command
endif::VK_EXT_attachment_feedback_loop_layout[]
  * [[VUID-{refpage}-None-06539]]
    If any previously recorded command in the current subpass accessed an
    image subresource used as an attachment in this subpass in any way other
    than as an attachment, this command must: not write to that image
    subresource as an attachment
  * [[VUID-{refpage}-None-06886]]
    If the current render pass instance uses a depth/stencil attachment with
    a read-only layout for the depth aspect, <<fragops-depth-write, depth
    writes>> must: be disabled
  * [[VUID-{refpage}-None-06887]]
    If the current render pass instance uses a depth/stencil attachment with
    a read-only layout for the stencil aspect, both front and back
    pname:writeMask are not zero, and stencil test is enabled,
    <<fragops-stencil, all stencil ops>> must: be ename:VK_STENCIL_OP_KEEP
  * [[VUID-{refpage}-None-07831]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled then
    flink:vkCmdSetViewport must: have been called in the current command
    buffer prior to this drawing command
  * [[VUID-{refpage}-None-07832]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SCISSOR dynamic state enabled then
    flink:vkCmdSetScissor must: have been called in the current command
    buffer prior to this drawing command
  * [[VUID-{refpage}-None-07833]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled then
    flink:vkCmdSetLineWidth must: have been called in the current command
    buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08617]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetPolygonModeEXT in the current command
    buffer set pname:polygonMode to ename:VK_POLYGON_MODE_LINE,
    flink:vkCmdSetLineWidth must: have been called in the current command
    buffer prior to this drawing command
  * [[VUID-{refpage}-None-08618]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetPrimitiveTopology in the current command
    buffer set pname:primitiveTopology to any line topology,
    flink:vkCmdSetLineWidth must: have been called in the current command
    buffer prior to this drawing command
  * [[VUID-{refpage}-None-08619]]
    If a shader object that outputs line primitives is bound to the
    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
    ename:VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to
    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
    pname:rasterizerDiscardEnable to ename:VK_FALSE, flink:vkCmdSetLineWidth
    must: have been called in the current command buffer prior to this
    drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07834]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled then
    flink:vkCmdSetDepthBias
ifdef::VK_EXT_depth_bias_control[]
    or flink:vkCmdSetDepthBias2EXT
endif::VK_EXT_depth_bias_control[]
    must: have been called in the current command buffer prior to this
    drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08620]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetDepthBiasEnable in the current command
    buffer set pname:depthBiasEnable to ename:VK_TRUE,
    flink:vkCmdSetDepthBias
ifdef::VK_EXT_depth_bias_control[]
    or flink:vkCmdSetDepthBias2EXT
endif::VK_EXT_depth_bias_control[]
    must: have been called in the current command buffer prior to this
    drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07835]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled then
    flink:vkCmdSetBlendConstants must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08621]]
    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, and the most recent call to
    flink:vkCmdSetColorBlendEnableEXT in the current command buffer set any
    element of pname:pColorBlendEnables to ename:VK_TRUE, and the most
    recent call to flink:vkCmdSetColorBlendEquationEXT in the current
    command buffer set the same element of pname:pColorBlendEquations to a
    sname:VkColorBlendEquationEXT structure with any elink:VkBlendFactor
    member with a value of ename:VK_BLEND_FACTOR_CONSTANT_COLOR,
    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,
    ename:VK_BLEND_FACTOR_CONSTANT_ALPHA, or
    ename:VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,
    flink:vkCmdSetBlendConstants must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07836]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled, and if the
    current pname:depthBoundsTestEnable state is ename:VK_TRUE, then
    flink:vkCmdSetDepthBounds must: have been called in the current command
    buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08622]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetDepthBoundsTestEnable in the current
    command buffer set pname:depthBoundsTestEnable to ename:VK_TRUE, then
    flink:vkCmdSetDepthBounds must: have been called in the current command
    buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07837]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled, and
    if the current pname:stencilTestEnable state is ename:VK_TRUE, then
    flink:vkCmdSetStencilCompareMask must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08623]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetStencilTestEnable in the current command
    buffer set pname:stencilTestEnable to ename:VK_TRUE,
    flink:vkCmdSetStencilCompareMask must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07838]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled, and if
    the current pname:stencilTestEnable state is ename:VK_TRUE, then
    flink:vkCmdSetStencilWriteMask must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08624]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetStencilTestEnable in the current command
    buffer set pname:stencilTestEnable to ename:VK_TRUE,
    flink:vkCmdSetStencilWriteMask must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07839]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled, and if
    the current pname:stencilTestEnable state is ename:VK_TRUE, then
    flink:vkCmdSetStencilReference must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08625]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetStencilTestEnable in the current command
    buffer set pname:stencilTestEnable to ename:VK_TRUE,
    flink:vkCmdSetStencilReference must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_VERSION_1_1,VK_KHR_multiview[]
  * [[VUID-{refpage}-maxMultiviewInstanceIndex-02688]]
    If the draw is recorded in a render pass instance with multiview
    enabled, the maximum instance index must: be less than or equal to
    slink:VkPhysicalDeviceMultiviewProperties::pname:maxMultiviewInstanceIndex
endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_EXT_sample_locations[]
  * [[VUID-{refpage}-sampleLocationsEnable-02689]]
    If the bound graphics pipeline was created with
    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
    set to ename:VK_TRUE and the current subpass has a depth/stencil
    attachment, then that attachment must: have been created with the
    ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit set
  * [[VUID-{refpage}-None-06666]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT dynamic state enabled then
    flink:vkCmdSetSampleLocationsEXT must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08626]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetSampleLocationsEnableEXT in the current
    command buffer set pname:sampleLocationsEnable to ename:VK_TRUE, then
    flink:vkCmdSetSampleLocationsEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_sample_locations[]
ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
  * [[VUID-{refpage}-None-07840]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_CULL_MODE dynamic state enabled then
    flink:vkCmdSetCullMode must: have been called in the current command
    buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08627]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetCullMode must: have been called in the current command
    buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07841]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_FRONT_FACE dynamic state enabled then
    flink:vkCmdSetFrontFace must: have been called in the current command
    buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08628]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetFrontFace must: have been called in the current command
    buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07843]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE dynamic state enabled then
    flink:vkCmdSetDepthTestEnable must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08629]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetDepthTestEnable must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07844]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE dynamic state enabled then
    flink:vkCmdSetDepthWriteEnable must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08630]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetDepthWriteEnable must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07845]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DEPTH_COMPARE_OP dynamic state enabled then
    flink:vkCmdSetDepthCompareOp must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08631]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetDepthTestEnable in the current command
    buffer set pname:depthTestEnable to ename:VK_TRUE, then
    flink:vkCmdSetDepthCompareOp must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07846]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE dynamic state enabled
    then flink:vkCmdSetDepthBoundsTestEnable must: have been called in the
    current command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08632]]
    If a shader object is bound to any graphics stage, and the
    <<features-depthBounds, pname:depthBounds>> feature is enabled, and the
    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
    command buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    the flink:vkCmdSetDepthBoundsTestEnable must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07847]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE dynamic state enabled then
    flink:vkCmdSetStencilTestEnable must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08633]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetStencilTestEnable must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07848]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_STENCIL_OP dynamic state enabled then
    flink:vkCmdSetStencilOp must: have been called in the current command
    buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08634]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetStencilTestEnable in the current command
    buffer set pname:stencilTestEnable to ename:VK_TRUE, then
    flink:vkCmdSetStencilOp must: have been called in the current command
    buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-viewportCount-03417]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but
    not the ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled,
    then flink:vkCmdSetViewportWithCount must: have been called in the
    current command buffer prior to this drawing command, and the
    pname:viewportCount parameter of fname:vkCmdSetViewportWithCount must:
    match the sname:VkPipelineViewportStateCreateInfo::pname:scissorCount of
    the pipeline
  * [[VUID-{refpage}-scissorCount-03418]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic state enabled, but not
    the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled,
    then flink:vkCmdSetScissorWithCount must: have been called in the
    current command buffer prior to this drawing command, and the
    pname:scissorCount parameter of fname:vkCmdSetScissorWithCount must:
    match the sname:VkPipelineViewportStateCreateInfo::pname:viewportCount
    of the pipeline
  * [[VUID-{refpage}-viewportCount-03419]]
    If the bound graphics pipeline state was created with both the
    ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT and
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic states enabled then
    both flink:vkCmdSetViewportWithCount and flink:vkCmdSetScissorWithCount
    must: have been called in the current command buffer prior to this
    drawing command, and the pname:viewportCount parameter of
    fname:vkCmdSetViewportWithCount must: match the pname:scissorCount
    parameter of fname:vkCmdSetScissorWithCount
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08635]]
    If a shader object is bound to any graphics stage, then both
    flink:vkCmdSetViewportWithCount and flink:vkCmdSetScissorWithCount must:
    have been called in the current command buffer prior to this drawing
    command, and the pname:viewportCount parameter of
    fname:vkCmdSetViewportWithCount must: match the pname:scissorCount
    parameter of fname:vkCmdSetScissorWithCount
endif::VK_EXT_shader_object[]
ifdef::VK_NV_clip_space_w_scaling[]
  * [[VUID-{refpage}-viewportCount-04137]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but
    not the ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state
    enabled, then the bound graphics pipeline must: have been created with
    slink:VkPipelineViewportWScalingStateCreateInfoNV::pname:viewportCount
    greater or equal to the pname:viewportCount parameter in the last call
    to flink:vkCmdSetViewportWithCount
  * [[VUID-{refpage}-viewportCount-04138]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and
    ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic states enabled then
    the pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportWScalingNV must: be greater than or equal to the
    pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportWithCount
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-09232]]
    If the `apiext:VK_NV_clip_space_w_scaling` extension is enabled, and a
    shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetViewportWScalingEnableNV in the current command buffer
    set pname:viewportWScalingEnable to ename:VK_TRUE, then
    flink:vkCmdSetViewportWScalingNV must: have been called in the current
    command buffer prior to this drawing command
  * [[VUID-{refpage}-None-08636]]
    If the `apiext:VK_NV_clip_space_w_scaling` extension is enabled, and a
    shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetViewportWScalingEnableNV in the current command buffer
    set pname:viewportWScalingEnable to ename:VK_TRUE, then the
    pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportWScalingNV must: be greater than or equal to the
    pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportWithCount
endif::VK_EXT_shader_object[]
endif::VK_NV_clip_space_w_scaling[]
ifdef::VK_NV_shading_rate_image[]
  * [[VUID-{refpage}-viewportCount-04139]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but
    not the ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic
    state enabled, then the bound graphics pipeline must: have been created
    with
    slink:VkPipelineViewportShadingRateImageStateCreateInfoNV::pname:viewportCount
    greater or equal to the pname:viewportCount parameter in the last call
    to flink:vkCmdSetViewportWithCount
  * [[VUID-{refpage}-viewportCount-04140]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and
    ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV dynamic states
    enabled then the pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportShadingRatePaletteNV must: be greater than or
    equal to the pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportWithCount
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-shadingRateImage-09233]]
    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
    enabled, and a shader object is bound to any graphics stage, and the
    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
    command buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetCoarseSampleOrderNV must: have been called in the current
    command buffer prior to this drawing command
  * [[VUID-{refpage}-shadingRateImage-09234]]
    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
    enabled, and a shader object is bound to any graphics stage, and the
    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
    command buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and
    the most recent call to flink:vkCmdSetShadingRateImageEnableNV in the
    current command buffer set pname:shadingRateImageEnable to
    ename:VK_TRUE, then flink:vkCmdSetViewportShadingRatePaletteNV must:
    have been called in the current command buffer prior to this drawing
    command
  * [[VUID-{refpage}-None-08637]]
    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
    enabled, and a shader object is bound to any graphics stage, and the
    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
    command buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and
    the most recent call to flink:vkCmdSetShadingRateImageEnableNV in the
    current command buffer set pname:shadingRateImageEnable to
    ename:VK_TRUE, then the pname:viewportCount parameter in the last call
    to flink:vkCmdSetViewportShadingRatePaletteNV must: be greater than or
    equal to the pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportWithCount
endif::VK_EXT_shader_object[]
endif::VK_NV_shading_rate_image[]
ifdef::VK_NV_viewport_swizzle[]
  * [[VUID-{refpage}-VkPipelineVieportCreateInfo-04141]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a
    slink:VkPipelineViewportSwizzleStateCreateInfoNV structure chained from
    slink:VkPipelineViewportStateCreateInfo, then the bound graphics
    pipeline must: have been created with
    slink:VkPipelineViewportSwizzleStateCreateInfoNV::pname:viewportCount
    greater or equal to the pname:viewportCount parameter in the last call
    to flink:vkCmdSetViewportWithCount
endif::VK_NV_viewport_swizzle[]
ifdef::VK_NV_scissor_exclusive[]
  * [[VUID-{refpage}-VkPipelineVieportCreateInfo-04142]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled and a
    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure
    chained from slink:VkPipelineViewportStateCreateInfo, then the bound
    graphics pipeline must: have been created with
    slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV::pname:exclusiveScissorCount
    greater or equal to the pname:viewportCount parameter in the last call
    to flink:vkCmdSetViewportWithCount
  * [[VUID-{refpage}-None-07878]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV dynamic state enabled
    then flink:vkCmdSetExclusiveScissorEnableNV must: have been called in
    the current command buffer prior to this drawing command
  * [[VUID-{refpage}-None-07879]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV dynamic state enabled then
    flink:vkCmdSetExclusiveScissorNV must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-exclusiveScissor-09235]]
    If the <<features-exclusiveScissor, pname:exclusiveScissor>> feature is
    enabled, and a shader object is bound to any graphics stage, then
    flink:vkCmdSetExclusiveScissorEnableNV must: have been called in the
    current command buffer prior to this drawing command
  * [[VUID-{refpage}-None-08638]]
    If the <<features-exclusiveScissor, pname:exclusiveScissor>> feature is
    enabled, and a shader object is bound to any graphics stage, and the
    most recent call to flink:vkCmdSetExclusiveScissorEnableNV in the
    current command buffer set any element of pname:pExclusiveScissorEnables
    to ename:VK_TRUE, then flink:vkCmdSetExclusiveScissorNV must: have been
    called in the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_NV_scissor_exclusive[]
endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
  * [[VUID-{refpage}-None-04876]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE dynamic state enabled
    then flink:vkCmdSetRasterizerDiscardEnable must: have been called in the
    current command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08639]]
    If a shader object is bound to any graphics stage, then
    flink:vkCmdSetRasterizerDiscardEnable must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-04877]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE dynamic state enabled then
    flink:vkCmdSetDepthBiasEnable must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08640]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetDepthBiasEnable must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state2[]
  * [[VUID-{refpage}-logicOp-04878]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_LOGIC_OP_EXT dynamic state enabled then
    flink:vkCmdSetLogicOpEXT must: have been called in the current command
    buffer prior to this drawing command and the pname:logicOp must: be a
    valid elink:VkLogicOp value
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08641]]
    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, and the most recent call to
    flink:vkCmdSetLogicOpEnableEXT set pname:logicOpEnable to ename:VK_TRUE,
    then flink:vkCmdSetLogicOpEXT must: have been called in the current
    command buffer prior to this drawing command and the pname:logicOp must:
    be a valid elink:VkLogicOp value
endif::VK_EXT_shader_object[]
endif::VK_EXT_extended_dynamic_state2[]
endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2[]
ifdef::VK_KHR_fragment_shading_rate[]
ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
  * [[VUID-{refpage}-primitiveFragmentShadingRateWithMultipleViewports-04552]]
    If the <<limits-primitiveFragmentShadingRateWithMultipleViewports,
    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
    supported, the bound graphics pipeline was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, and
    any of the shader stages of the bound graphics pipeline write to the
    code:PrimitiveShadingRateKHR built-in, then
    flink:vkCmdSetViewportWithCount must: have been called in the current
    command buffer prior to this drawing command, and the
    pname:viewportCount parameter of fname:vkCmdSetViewportWithCount must:
    be `1`
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-primitiveFragmentShadingRateWithMultipleViewports-08642]]
    If the <<limits-primitiveFragmentShadingRateWithMultipleViewports,
    pname:primitiveFragmentShadingRateWithMultipleViewports>> limit is not
    supported, and any shader object bound to a graphics stage writes to the
    code:PrimitiveShadingRateKHR built-in, then
    flink:vkCmdSetViewportWithCount must: have been called in the current
    command buffer prior to this drawing command, and the
    pname:viewportCount parameter of fname:vkCmdSetViewportWithCount must:
    be `1`
endif::VK_EXT_shader_object[]
endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
endif::VK_KHR_fragment_shading_rate[]
  * [[VUID-{refpage}-blendEnable-04727]]
    If rasterization is not disabled in the bound graphics pipeline, then
    for each color attachment in the subpass, if the corresponding image
    view's <<resources-image-view-format-features,format features>> do not
    contain ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
    pname:blendEnable member of the corresponding element of the
    pname:pAttachments member of pname:pColorBlendState must: be
    ename:VK_FALSE
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08643]]
    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then for each color attachment in the render pass, if
    the corresponding image view's
    <<resources-image-view-format-features,format features>> do not contain
    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the
    corresponding member of pname:pColorBlendEnables in the most recent call
    to fname:vkCmdSetColorBlendEnableEXT in the current command buffer that
    affected that attachment index must: have been ename:VK_FALSE
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07284]]
    If rasterization is not disabled in the bound graphics pipeline,
ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
    and none of the following is enabled:
ifdef::VK_AMD_mixed_attachment_samples[]
  ** the `apiext:VK_AMD_mixed_attachment_samples` extension
endif::VK_AMD_mixed_attachment_samples[]
ifdef::VK_NV_framebuffer_mixed_samples[]
  ** the `apiext:VK_NV_framebuffer_mixed_samples` extension
endif::VK_NV_framebuffer_mixed_samples[]
ifdef::VK_EXT_multisampled_render_to_single_sampled[]
  ** the <<features-multisampledRenderToSingleSampled,
     pname:multisampledRenderToSingleSampled>> feature
endif::VK_EXT_multisampled_render_to_single_sampled[]
endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]

+
then pname:rasterizationSamples for the currently bound graphics pipeline
must: be the same as the current subpass color and/or depth/stencil
attachments
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08644]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE,
ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]
    and none of the following is enabled:
ifdef::VK_AMD_mixed_attachment_samples[]
  ** the `apiext:VK_AMD_mixed_attachment_samples` extension
endif::VK_AMD_mixed_attachment_samples[]
ifdef::VK_NV_framebuffer_mixed_samples[]
  ** the `apiext:VK_NV_framebuffer_mixed_samples` extension
endif::VK_NV_framebuffer_mixed_samples[]
ifdef::VK_EXT_multisampled_render_to_single_sampled[]
  ** the <<features-multisampledRenderToSingleSampled,
     pname:multisampledRenderToSingleSampled>> feature
endif::VK_EXT_multisampled_render_to_single_sampled[]
endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples,VK_EXT_multisampled_render_to_single_sampled[]

+
then the most recent call to flink:vkCmdSetRasterizationSamplesEXT in the
current command buffer must: have set pname:rasterizationSamples to be the
same as the number of samples for the current render pass color and/or
depth/stencil attachments
endif::VK_EXT_shader_object[]
ifdef::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08876]]
    If a shader object is bound to any graphics stage, the current render
    pass instance must: have been begun with flink:vkCmdBeginRendering
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-imageView-06172]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the pname:imageView member of
    pname:pDepthAttachment is not dlink:VK_NULL_HANDLE, and the pname:layout
    member of pname:pDepthAttachment is
    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command
    must: not write any values to the depth attachment
  * [[VUID-{refpage}-imageView-06173]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the pname:imageView member of
    pname:pStencilAttachment is not dlink:VK_NULL_HANDLE, and the
    pname:layout member of pname:pStencilAttachment is
    ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command
    must: not write any values to the stencil attachment
ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
  * [[VUID-{refpage}-imageView-06174]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the pname:imageView member of
    pname:pDepthAttachment is not dlink:VK_NULL_HANDLE, and the pname:layout
    member of pname:pDepthAttachment is
    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this
    command must: not write any values to the depth attachment
  * [[VUID-{refpage}-imageView-06175]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the pname:imageView member of
    pname:pStencilAttachment is not dlink:VK_NULL_HANDLE, and the
    pname:layout member of pname:pStencilAttachment is
    ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this
    command must: not write any values to the stencil attachment
endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
ifdef::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
  * [[VUID-{refpage}-imageView-06176]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the pname:imageView member of
    pname:pDepthAttachment is not dlink:VK_NULL_HANDLE, and the pname:layout
    member of pname:pDepthAttachment is
    ename:VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must: not
    write any values to the depth attachment
  * [[VUID-{refpage}-imageView-06177]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the pname:imageView member of
    pname:pStencilAttachment is not dlink:VK_NULL_HANDLE, and the
    pname:layout member of pname:pStencilAttachment is
    ename:VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must: not
    write any values to the stencil attachment
endif::VK_VERSION_1_2,VK_KHR_separate_depth_stencil_layouts[]
  * [[VUID-{refpage}-viewMask-06178]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the currently bound graphics pipeline must:
    have been created with a
    slink:VkPipelineRenderingCreateInfo::pname:viewMask equal to
    slink:VkRenderingInfo::pname:viewMask
  * [[VUID-{refpage}-colorAttachmentCount-06179]]
    If
ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
    the <<features-dynamicRenderingUnusedAttachments,
    pname:dynamicRenderingUnusedAttachments>> feature is not enabled and
endif::VK_EXT_dynamic_rendering_unused_attachments[]
    the current render pass instance was begun with
    flink:vkCmdBeginRendering, the currently bound graphics pipeline must:
    have been created with a
    slink:VkPipelineRenderingCreateInfo::pname:colorAttachmentCount equal to
    slink:VkRenderingInfo::pname:colorAttachmentCount
  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08910]]
    If
ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
    the <<features-dynamicRenderingUnusedAttachments,
    pname:dynamicRenderingUnusedAttachments>> feature is not enabled, and
endif::VK_EXT_dynamic_rendering_unused_attachments[]
    the current render pass instance was begun with
    flink:vkCmdBeginRendering and
    slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`, then
    each element of the slink:VkRenderingInfo::pname:pColorAttachments array
    with a pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
    created with a elink:VkFormat equal to the corresponding element of
    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used
    to create the currently bound graphics pipeline
  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08912]]
    If
ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
    the <<features-dynamicRenderingUnusedAttachments,
    pname:dynamicRenderingUnusedAttachments>> feature is not enabled, and
endif::VK_EXT_dynamic_rendering_unused_attachments[]
    the current render pass instance was begun with
    flink:vkCmdBeginRendering and
    slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`, then
    each element of the slink:VkRenderingInfo::pname:pColorAttachments array
    with a pname:imageView equal to dlink:VK_NULL_HANDLE must: have the
    corresponding element of
    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used
    to create the currently bound pipeline equal to
    ename:VK_FORMAT_UNDEFINED
ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08911]]
    If the <<features-dynamicRenderingUnusedAttachments,
    pname:dynamicRenderingUnusedAttachments>> feature is enabled, and the
    current render pass instance was begun with flink:vkCmdBeginRendering
    and slink:VkRenderingInfo::pname:colorAttachmentCount greater than `0`,
    then each element of the slink:VkRenderingInfo::pname:pColorAttachments
    array with a pname:imageView not equal to dlink:VK_NULL_HANDLE must:
    have been created with a elink:VkFormat equal to the corresponding
    element of
    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used
    to create the currently bound graphics pipeline, or the corresponding
    element of
    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats, if
    it exists, must: be ename:VK_FORMAT_UNDEFINED
endif::VK_EXT_dynamic_rendering_unused_attachments[]
ifdef::VK_ANDROID_external_format_resolve[]
  * [[VUID-{refpage}-colorAttachmentCount-09362]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, with a
    slink:VkRenderingInfo::pname:colorAttachmentCount equal to `1`,
ifdef::VK_EXT_shader_object[]
    there is no shader object bound to any graphics stage,
endif::VK_EXT_shader_object[]
    and a color attachment with a resolve mode of
    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, each element
    of the slink:VkRenderingInfo::pname:pColorAttachments array with a
    pname:resolveImageView not equal to dlink:VK_NULL_HANDLE must: have been
    created with an image created with a
    slink:VkExternalFormatANDROID::pname:externalFormat value equal to the
    slink:VkExternalFormatANDROID::pname:externalFormat value used to create
    the currently bound graphics pipeline
  * [[VUID-{refpage}-None-09363]]
    If
ifdef::VK_EXT_shader_object[]
    there is no shader object bound to any graphics stage,
endif::VK_EXT_shader_object[]
    the current render pass instance was begun with
    flink:vkCmdBeginRendering and a
    slink:VkRenderingInfo::pname:colorAttachmentCount equal to `1`, and a
    color attachment with a resolve mode of
    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, each element
    of the slink:VkRenderingInfo::pname:pColorAttachments array with a
    pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
    created with an image created with a
    slink:VkExternalFormatANDROID::pname:externalFormat value equal to the
    slink:VkExternalFormatANDROID::pname:externalFormat value used to create
    the currently bound graphics pipeline
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-09364]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering,
ifdef::VK_EXT_shader_object[]
    there is no shader object bound to any graphics stage,
endif::VK_EXT_shader_object[]
    and the currently bound graphics pipeline was created with a non-zero
    slink:VkExternalFormatANDROID::pname:externalFormat value and with the
    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled,
    then flink:vkCmdSetColorBlendEnableEXT must: have set the blend enable
    to ename:VK_FALSE prior to this drawing command
  * [[VUID-{refpage}-None-09365]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering,
ifdef::VK_EXT_shader_object[]
    there is no shader object bound to any graphics stage,
endif::VK_EXT_shader_object[]
    and the currently bound graphics pipeline was created with a non-zero
    slink:VkExternalFormatANDROID::pname:externalFormat value and with the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled,
    then flink:vkCmdSetRasterizationSamplesEXT must: have set
    pname:rasterizationSamples to ename:VK_SAMPLE_COUNT_1_BIT prior to this
    drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-09366]]
    If there is a shader object bound to any graphics stage, and the current
    render pass includes a color attachment that uses the
    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID resolve mode,
    then flink:vkCmdSetColorBlendEnableEXT must: have set blend enable to
    ename:VK_FALSE prior to this drawing command
  * [[VUID-{refpage}-rasterizationSamples-09367]]
    If there is a shader object bound to any graphics stage, and the current
    render pass includes a color attachment that uses the
    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID resolve mode,
    then flink:vkCmdSetRasterizationSamplesEXT must: have set
    pname:rasterizationSamples to ename:VK_SAMPLE_COUNT_1_BIT prior to this
    drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_KHR_fragment_shading_rate[]
  * [[VUID-{refpage}-None-09368]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering,
ifdef::VK_EXT_shader_object[]
    there is no shader object bound to any graphics stage,
endif::VK_EXT_shader_object[]
    and the currently bound graphics pipeline was created with a non-zero
    slink:VkExternalFormatANDROID::pname:externalFormat value and with the
    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled,
    then flink:vkCmdSetFragmentShadingRateKHR must: have set
    pname:pFragmentSize->width to `1` prior to this drawing command
  * [[VUID-{refpage}-None-09369]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering,
ifdef::VK_EXT_shader_object[]
    there is no shader object bound to any graphics stage,
endif::VK_EXT_shader_object[]
    and the currently bound graphics pipeline was created with a non-zero
    slink:VkExternalFormatANDROID::pname:externalFormat value and with the
    ename:VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR dynamic state enabled,
    then flink:vkCmdSetFragmentShadingRateKHR must: have set
    pname:pFragmentSize->height to `1` prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-pFragmentSize-09370]]
    If there is a shader object bound to any graphics stage, and the current
    render pass includes a color attachment that uses the
    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID resolve mode,
    then flink:vkCmdSetFragmentShadingRateKHR must: have set
    pname:pFragmentSize->width to `1` prior to this drawing command
  * [[VUID-{refpage}-pFragmentSize-09371]]
    If there is a shader object bound to any graphics stage, and the current
    render pass includes a color attachment that uses the
    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID resolve mode,
    then flink:vkCmdSetFragmentShadingRateKHR must: have set
    pname:pFragmentSize->height to `1` prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_KHR_fragment_shading_rate[]
endif::VK_ANDROID_external_format_resolve[]
ifdef::VK_EXT_color_write_enable[]
  * [[VUID-{refpage}-None-07749]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then
    flink:vkCmdSetColorWriteEnableEXT must: have been called in the current
    command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08646]]
    If the <<features-colorWriteEnable, pname:colorWriteEnable>> feature is
    enabled on the device, and a shader object is bound to the
    ename:VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to
    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
    pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetColorWriteEnableEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-attachmentCount-07750]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT dynamic state enabled then
    the pname:attachmentCount parameter of fname:vkCmdSetColorWriteEnableEXT
    must: be greater than or equal to the
    sname:VkPipelineColorBlendStateCreateInfo::pname:attachmentCount of the
    currently bound graphics pipeline
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08647]]
    If the <<features-colorWriteEnable, pname:colorWriteEnable>> feature is
    enabled on the device, and a shader object is bound to the
    ename:VK_SHADER_STAGE_FRAGMENT_BIT stage, and the most recent call to
    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
    pname:rasterizerDiscardEnable to ename:VK_FALSE, then the
    pname:attachmentCount parameter of most recent call to
    fname:vkCmdSetColorWriteEnableEXT in the current command buffer must: be
    greater than or equal to the number of color attachments in the current
    render pass instance
endif::VK_EXT_shader_object[]
endif::VK_EXT_color_write_enable[]
ifdef::VK_EXT_discard_rectangles[]
  * [[VUID-{refpage}-None-07751]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled then
    flink:vkCmdSetDiscardRectangleEXT must: have been called in the current
    command buffer prior to this drawing command for each discard rectangle
    in
    slink:VkPipelineDiscardRectangleStateCreateInfoEXT::pname:discardRectangleCount
  * [[VUID-{refpage}-None-07880]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT dynamic state
    enabled then flink:vkCmdSetDiscardRectangleEnableEXT must: have been
    called in the current command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-rasterizerDiscardEnable-09236]]
    If the `apiext:VK_EXT_discard_rectangles` extension is enabled, and a
    shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
    set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most recent
    call to flink:vkCmdSetDiscardRectangleEnableEXT in the current command
    buffer set pname:discardRectangleEnable to ename:VK_TRUE, then
    flink:vkCmdSetDiscardRectangleEXT must: have been called in the current
    command buffer prior to this drawing command
  * [[VUID-{refpage}-None-08648]]
    If the `apiext:VK_EXT_discard_rectangles` extension is enabled, and a
    shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
    set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetDiscardRectangleEnableEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-07881]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT dynamic state enabled
    then flink:vkCmdSetDiscardRectangleModeEXT must: have been called in the
    current command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08649]]
    If the `apiext:VK_EXT_discard_rectangles` extension is enabled, and a
    shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
    set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most recent
    call to flink:vkCmdSetDiscardRectangleEnableEXT in the current command
    buffer set pname:discardRectangleEnable to ename:VK_TRUE, then
    flink:vkCmdSetDiscardRectangleModeEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_discard_rectangles[]
  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08913]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering,
ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
    the
    <<features-dynamicRenderingUnusedAttachments,pname:dynamicRenderingUnusedAttachments>>
    feature is not enabled,
endif::VK_EXT_dynamic_rendering_unused_attachments[]
    and slink:VkRenderingInfo::pname:pDepthAttachment->imageView was
    dlink:VK_NULL_HANDLE, the value of
    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat used to
    create the currently bound graphics pipeline must: be equal to
    ename:VK_FORMAT_UNDEFINED
  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08914]]
    If current render pass instance was begun with
    flink:vkCmdBeginRendering,
ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
    the
    <<features-dynamicRenderingUnusedAttachments,pname:dynamicRenderingUnusedAttachments>>
    feature is not enabled,
endif::VK_EXT_dynamic_rendering_unused_attachments[]
    and slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
    dlink:VK_NULL_HANDLE, the value of
    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat used to
    create the currently bound graphics pipeline must: be equal to the
    elink:VkFormat used to create
    slink:VkRenderingInfo::pname:pDepthAttachment->imageView
ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08915]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the
    <<features-dynamicRenderingUnusedAttachments,
    pname:dynamicRenderingUnusedAttachments>> feature is enabled,
    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
    dlink:VK_NULL_HANDLE, and the value of
    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat used to
    create the currently bound graphics pipeline was not equal to the
    elink:VkFormat used to create
    slink:VkRenderingInfo::pname:pDepthAttachment->imageView, the value of
    the format must: be ename:VK_FORMAT_UNDEFINED
endif::VK_EXT_dynamic_rendering_unused_attachments[]
  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08916]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering,
ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
    the
    <<features-dynamicRenderingUnusedAttachments,pname:dynamicRenderingUnusedAttachments>>
    feature is not enabled,
endif::VK_EXT_dynamic_rendering_unused_attachments[]
    and slink:VkRenderingInfo::pname:pStencilAttachment->imageView was
    dlink:VK_NULL_HANDLE, the value of
    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat used
    to create the currently bound graphics pipeline must: be equal to
    ename:VK_FORMAT_UNDEFINED
  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08917]]
    If current render pass instance was begun with
    flink:vkCmdBeginRendering,
ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
    the
    <<features-dynamicRenderingUnusedAttachments,pname:dynamicRenderingUnusedAttachments>>
    feature is not enabled,
endif::VK_EXT_dynamic_rendering_unused_attachments[]
    and slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
    dlink:VK_NULL_HANDLE, the value of
    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat used
    to create the currently bound graphics pipeline must: be equal to the
    elink:VkFormat used to create
    slink:VkRenderingInfo::pname:pStencilAttachment->imageView
ifdef::VK_EXT_dynamic_rendering_unused_attachments[]
  * [[VUID-{refpage}-dynamicRenderingUnusedAttachments-08918]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the
    <<features-dynamicRenderingUnusedAttachments,
    pname:dynamicRenderingUnusedAttachments>> feature is enabled,
    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
    dlink:VK_NULL_HANDLE, and the value of
    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat used
    to create the currently bound graphics pipeline was not equal to the
    elink:VkFormat used to create
    slink:VkRenderingInfo::pname:pStencilAttachment->imageView, the value of
    the format must: be ename:VK_FORMAT_UNDEFINED
endif::VK_EXT_dynamic_rendering_unused_attachments[]
ifdef::VK_KHR_fragment_shading_rate[]
  * [[VUID-{refpage}-imageView-06183]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering and
    slink:VkRenderingFragmentShadingRateAttachmentInfoKHR::pname:imageView
    was not dlink:VK_NULL_HANDLE, the currently bound graphics pipeline
    must: have been created with
    ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
endif::VK_KHR_fragment_shading_rate[]
ifdef::VK_EXT_fragment_density_map[]
  * [[VUID-{refpage}-imageView-06184]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering and
    slink:VkRenderingFragmentDensityMapAttachmentInfoEXT::pname:imageView
    was not dlink:VK_NULL_HANDLE, the currently bound graphics pipeline
    must: have been created with
    ename:VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT
endif::VK_EXT_fragment_density_map[]
ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
  * [[VUID-{refpage}-colorAttachmentCount-06185]]
    If the currently bound pipeline was created with a
    slink:VkAttachmentSampleCountInfoAMD or
    slink:VkAttachmentSampleCountInfoNV structure, and the current render
    pass instance was begun with flink:vkCmdBeginRendering with a
    slink:VkRenderingInfo::pname:colorAttachmentCount parameter greater than
    `0`, then each element of the
    slink:VkRenderingInfo::pname:pColorAttachments array with a
    pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
    created with a sample count equal to the corresponding element of the
    pname:pColorAttachmentSamples member of
    slink:VkAttachmentSampleCountInfoAMD or
    slink:VkAttachmentSampleCountInfoNV used to create the currently bound
    graphics pipeline
  * [[VUID-{refpage}-pDepthAttachment-06186]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the currently bound pipeline was created with
    a slink:VkAttachmentSampleCountInfoAMD or
    slink:VkAttachmentSampleCountInfoNV structure, and
    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
    dlink:VK_NULL_HANDLE, the value of the
    pname:depthStencilAttachmentSamples member of
    slink:VkAttachmentSampleCountInfoAMD or
    slink:VkAttachmentSampleCountInfoNV used to create the currently bound
    graphics pipeline must: be equal to the sample count used to create
    slink:VkRenderingInfo::pname:pDepthAttachment->imageView
  * [[VUID-{refpage}-pStencilAttachment-06187]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the currently bound pipeline was created with
    a slink:VkAttachmentSampleCountInfoAMD or
    slink:VkAttachmentSampleCountInfoNV structure, and
    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
    dlink:VK_NULL_HANDLE, the value of the
    pname:depthStencilAttachmentSamples member of
    slink:VkAttachmentSampleCountInfoAMD or
    slink:VkAttachmentSampleCountInfoNV used to create the currently bound
    graphics pipeline must: be equal to the sample count used to create
    slink:VkRenderingInfo::pname:pStencilAttachment->imageView
endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07285]]
    If
ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
    the currently bound pipeline was created without a
ifdef::VK_AMD_mixed_attachment_samples[]
    slink:VkAttachmentSampleCountInfoAMD
endif::VK_AMD_mixed_attachment_samples[]
ifdef::VK_AMD_mixed_attachment_samples+VK_NV_framebuffer_mixed_samples[or]
ifdef::VK_NV_framebuffer_mixed_samples[]
    slink:VkAttachmentSampleCountInfoNV
endif::VK_NV_framebuffer_mixed_samples[]
    structure, and
endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
ifdef::VK_EXT_multisampled_render_to_single_sampled[]
    the <<features-multisampledRenderToSingleSampled,
    pname:multisampledRenderToSingleSampled>> feature is not enabled, and
endif::VK_EXT_multisampled_render_to_single_sampled[]
    the current render pass instance was begun with
    flink:vkCmdBeginRendering with a
    slink:VkRenderingInfo::pname:colorAttachmentCount parameter greater than
    `0`, then each element of the
    slink:VkRenderingInfo::pname:pColorAttachments array with a
    pname:imageView not equal to dlink:VK_NULL_HANDLE must: have been
    created with a sample count equal to the value of
    pname:rasterizationSamples for the currently bound graphics pipeline
  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07286]]
    If
ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
    the currently bound pipeline was created without a
ifdef::VK_AMD_mixed_attachment_samples[]
    slink:VkAttachmentSampleCountInfoAMD
endif::VK_AMD_mixed_attachment_samples[]
ifdef::VK_AMD_mixed_attachment_samples+VK_NV_framebuffer_mixed_samples[or]
ifdef::VK_NV_framebuffer_mixed_samples[]
    slink:VkAttachmentSampleCountInfoNV
endif::VK_NV_framebuffer_mixed_samples[]
    structure, and
endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
ifdef::VK_EXT_multisampled_render_to_single_sampled[]
    the <<features-multisampledRenderToSingleSampled,
    pname:multisampledRenderToSingleSampled>> feature is not enabled, and
endif::VK_EXT_multisampled_render_to_single_sampled[]
    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
    dlink:VK_NULL_HANDLE, the value of pname:rasterizationSamples for the
    currently bound graphics pipeline must: be equal to the sample count
    used to create slink:VkRenderingInfo::pname:pDepthAttachment->imageView
  * [[VUID-{refpage}-multisampledRenderToSingleSampled-07287]]
    If
ifdef::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
    the currently bound pipeline was created without a
ifdef::VK_AMD_mixed_attachment_samples[]
    slink:VkAttachmentSampleCountInfoAMD
endif::VK_AMD_mixed_attachment_samples[]
ifdef::VK_AMD_mixed_attachment_samples+VK_NV_framebuffer_mixed_samples[or]
ifdef::VK_NV_framebuffer_mixed_samples[]
    slink:VkAttachmentSampleCountInfoNV
endif::VK_NV_framebuffer_mixed_samples[]
    structure, and
endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[]
ifdef::VK_EXT_multisampled_render_to_single_sampled[]
    the <<features-multisampledRenderToSingleSampled,
    pname:multisampledRenderToSingleSampled>> feature is not enabled, and
endif::VK_EXT_multisampled_render_to_single_sampled[]
    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
    dlink:VK_NULL_HANDLE, the value of pname:rasterizationSamples for the
    currently bound graphics pipeline must: be equal to the sample count
    used to create
    slink:VkRenderingInfo::pname:pStencilAttachment->imageView
ifdef::VK_EXT_multisampled_render_to_single_sampled[]
  * [[VUID-{refpage}-pNext-07935]]
    If this command has been called inside a render pass instance started
    with flink:vkCmdBeginRendering, and the pname:pNext chain of
    slink:VkRenderingInfo includes a
    slink:VkMultisampledRenderToSingleSampledInfoEXT structure with
    pname:multisampledRenderToSingleSampledEnable equal to ename:VK_TRUE,
    then the value of pname:rasterizationSamples for the currently bound
    graphics pipeline must: be equal to
    slink:VkMultisampledRenderToSingleSampledInfoEXT::pname:rasterizationSamples
endif::VK_EXT_multisampled_render_to_single_sampled[]
  * [[VUID-{refpage}-renderPass-06198]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, the currently bound pipeline must: have been
    created with a slink:VkGraphicsPipelineCreateInfo::pname:renderPass
    equal to dlink:VK_NULL_HANDLE
  * [[VUID-{refpage}-pColorAttachments-08963]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, there is a graphics pipeline bound with a
    fragment shader that statically writes to a color attachment, the color
    write mask is not zero, color writes are enabled, and the corresponding
    element of the slink:VkRenderingInfo::pname:pColorAttachments->imageView
    was not dlink:VK_NULL_HANDLE, then the corresponding element of
    slink:VkPipelineRenderingCreateInfo::pname:pColorAttachmentFormats used
    to create the pipeline must: not be ename:VK_FORMAT_UNDEFINED
  * [[VUID-{refpage}-pDepthAttachment-08964]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, there is a graphics pipeline bound, depth
    test is enabled, depth write is enabled, and the
    slink:VkRenderingInfo::pname:pDepthAttachment->imageView was not
    dlink:VK_NULL_HANDLE, then the
    slink:VkPipelineRenderingCreateInfo::pname:depthAttachmentFormat used to
    create the pipeline must: not be ename:VK_FORMAT_UNDEFINED
  * [[VUID-{refpage}-pStencilAttachment-08965]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering, there is a graphics pipeline bound, stencil
    test is enabled and the
    slink:VkRenderingInfo::pname:pStencilAttachment->imageView was not
    dlink:VK_NULL_HANDLE, then the
    slink:VkPipelineRenderingCreateInfo::pname:stencilAttachmentFormat used
    to create the pipeline must: not be ename:VK_FORMAT_UNDEFINED
endif::VK_VERSION_1_3,VK_KHR_dynamic_rendering[]
ifdef::VK_EXT_primitives_generated_query[]
  * [[VUID-{refpage}-primitivesGeneratedQueryWithRasterizerDiscard-06708]]
    If the <<features-primitivesGeneratedQueryWithRasterizerDiscard,
    pname:primitivesGeneratedQueryWithRasterizerDiscard>> feature is not
    enabled and the ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is
    active, <<primsrast-discard,rasterization discard>> must: not be enabled
ifdef::VK_EXT_transform_feedback[]
  * [[VUID-{refpage}-primitivesGeneratedQueryWithNonZeroStreams-06709]]
    If the <<features-primitivesGeneratedQueryWithNonZeroStreams,
    pname:primitivesGeneratedQueryWithNonZeroStreams>> feature is not
    enabled and the ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is
    active, the bound graphics pipeline must: not have been created with a
    non-zero value in
    sname:VkPipelineRasterizationStateStreamCreateInfoEXT::pname:rasterizationStream
endif::VK_EXT_transform_feedback[]
endif::VK_EXT_primitives_generated_query[]
ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07619]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT dynamic state
    enabled then flink:vkCmdSetTessellationDomainOriginEXT must: have been
    called in the current command buffer prior to this drawing command
  * [[VUID-{refpage}-None-07620]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT dynamic state enabled then
    flink:vkCmdSetDepthClampEnableEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-09237]]
    If a shader object is bound to the
    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT stage, then
    flink:vkCmdSetTessellationDomainOriginEXT must: have been called in the
    current command buffer prior to this drawing command
  * [[VUID-{refpage}-None-08650]]
    If the <<features-depthClamp, pname:depthClamp>> feature is enabled, and
    a shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
    set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetDepthClampEnableEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07621]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_POLYGON_MODE_EXT dynamic state enabled then
    flink:vkCmdSetPolygonModeEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08651]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetPolygonModeEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07622]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT dynamic state enabled
    then flink:vkCmdSetRasterizationSamplesEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08652]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetRasterizationSamplesEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07623]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT dynamic state enabled then
    flink:vkCmdSetSampleMaskEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08653]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetSampleMaskEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07624]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state
    enabled then flink:vkCmdSetAlphaToCoverageEnableEXT must: have been
    called in the current command buffer prior to this drawing command
  * [[VUID-{refpage}-alphaToCoverageEnable-08919]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT dynamic state
    enabled, and pname:alphaToCoverageEnable was ename:VK_TRUE in the last
    call to flink:vkCmdSetAlphaToCoverageEnableEXT, then the
    <<interfaces-fragmentoutput, Fragment Output Interface>> must: contain a
    variable for the alpha code:Component word in code:Location 0 at
    code:Index 0
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08654]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetAlphaToCoverageEnableEXT must: have been called in the
    current command buffer prior to this drawing command
  * [[VUID-{refpage}-alphaToCoverageEnable-08920]]
    If a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetAlphaToCoverageEnableEXT in the current command
    buffer set pname:alphaToCoverageEnable to ename:VK_TRUE, then the
    <<interfaces-fragmentoutput, Fragment Output Interface>> must: contain a
    variable for the alpha code:Component word in code:Location 0 at
    code:Index 0
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07625]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic state enabled
    then flink:vkCmdSetAlphaToOneEnableEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08655]]
    If the <<features-alphaToOne, pname:alphaToOne>> feature is enabled, and
    a shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
    set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetAlphaToOneEnableEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07626]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT dynamic state enabled then
    flink:vkCmdSetLogicOpEnableEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08656]]
    If the <<features-logicOp, pname:logicOp>> feature is enabled, and a
    shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT stage,
    and the most recent call to flink:vkCmdSetRasterizerDiscardEnable in the
    current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then flink:vkCmdSetLogicOpEnableEXT must: have been
    called in the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07627]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then
    flink:vkCmdSetColorBlendEnableEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08657]]
    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then flink:vkCmdSetColorBlendEnableEXT must: have been
    called in the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07628]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled
    then flink:vkCmdSetColorBlendEquationEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08658]]
    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, and the most recent call to
    flink:vkCmdSetColorBlendEnableEXT for any attachment set that
    attachment's value in pname:pColorBlendEnables to ename:VK_TRUE, then
    flink:vkCmdSetColorBlendEquationEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07629]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then
    flink:vkCmdSetColorWriteMaskEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08659]]
    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then flink:vkCmdSetColorWriteMaskEXT must: have been
    called in the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_transform_feedback[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07630]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT dynamic state enabled
    then flink:vkCmdSetRasterizationStreamEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08660]]
    If the <<features-geometryStreams, pname:geometryStreams>> feature is
    enabled, and a shader object is bound to the
    ename:VK_SHADER_STAGE_GEOMETRY_BIT stage, then
    flink:vkCmdSetRasterizationStreamEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_transform_feedback[]
ifdef::VK_EXT_conservative_rasterization[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07631]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state
    enabled then flink:vkCmdSetConservativeRasterizationModeEXT must: have
    been called in the current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08661]]
    If the `apiext:VK_EXT_conservative_rasterization` extension is enabled,
    and a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetConservativeRasterizationModeEXT must: have been called in
    the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07632]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT dynamic
    state enabled then flink:vkCmdSetExtraPrimitiveOverestimationSizeEXT
    must: have been called in the current command buffer prior to this
    drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08662]]
    If the `apiext:VK_EXT_conservative_rasterization` extension is enabled,
    and a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetConservativeRasterizationModeEXT in the
    current command buffer set pname:conservativeRasterizationMode to
    ename:VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, then
    flink:vkCmdSetExtraPrimitiveOverestimationSizeEXT must: have been called
    in the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_conservative_rasterization[]
ifdef::VK_EXT_depth_clip_enable[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07633]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT dynamic state enabled then
    flink:vkCmdSetDepthClipEnableEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08663]]
    If the <<features-depthClipEnable, pname:depthClipEnable>> feature is
    enabled, and a shader object is bound to any graphics stage, then
    flink:vkCmdSetDepthClipEnableEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_depth_clip_enable[]
ifdef::VK_EXT_sample_locations[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07634]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT dynamic state enabled
    then flink:vkCmdSetSampleLocationsEnableEXT must: have been called in
    the current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08664]]
    If the `apiext:VK_EXT_sample_locations` extension is enabled, and a
    shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
    set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetSampleLocationsEnableEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_sample_locations[]
ifdef::VK_EXT_blend_operation_advanced[]
  * [[VUID-{refpage}-None-07635]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled
    then flink:vkCmdSetColorBlendAdvancedEXT must: have been called in the
    current command buffer prior to this drawing command
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-rasterizerDiscardEnable-09416]]
    If the `apiext:VK_EXT_blend_operation_advanced` extension is enabled,
    and a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then at least one of flink:vkCmdSetColorBlendEquationEXT
    and flink:vkCmdSetColorBlendAdvancedEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_blend_operation_advanced[]
ifdef::VK_EXT_provoking_vertex[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07636]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT dynamic state enabled
    then flink:vkCmdSetProvokingVertexModeEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08665]]
    If the `apiext:VK_EXT_provoking_vertex` extension is enabled, and a
    shader object is bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage,
    and the most recent call to flink:vkCmdSetRasterizerDiscardEnable in the
    current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then flink:vkCmdSetProvokingVertexModeEXT must: have
    been called in the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_provoking_vertex[]
ifdef::VK_EXT_line_rasterization[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07637]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic state enabled
    then flink:vkCmdSetLineRasterizationModeEXT must: have been called in
    the current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08666]]
    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
    shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
    set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most recent
    call to flink:vkCmdSetPolygonModeEXT in the current command buffer set
    pname:polygonMode to ename:VK_POLYGON_MODE_LINE, then
    flink:vkCmdSetLineRasterizationModeEXT must: have been called in the
    current command buffer prior to this drawing command
  * [[VUID-{refpage}-None-08667]]
    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
    shader object is bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage,
    and the most recent call to flink:vkCmdSetRasterizerDiscardEnable in the
    current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, and the most recent call to
    flink:vkCmdSetPrimitiveTopology in the current command buffer set
    pname:primitiveTopology to any line topology, then
    flink:vkCmdSetLineRasterizationModeEXT must: have been called in the
    current command buffer prior to this drawing command
  * [[VUID-{refpage}-None-08668]]
    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
    shader object that outputs line primitives is bound to the
    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
    ename:VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to
    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
    pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetLineRasterizationModeEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07638]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT dynamic state enabled
    then flink:vkCmdSetLineStippleEnableEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08669]]
    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
    shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
    set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most recent
    call to flink:vkCmdSetPolygonModeEXT in the current command buffer set
    pname:polygonMode to ename:VK_POLYGON_MODE_LINE, then
    flink:vkCmdSetLineStippleEnableEXT must: have been called in the current
    command buffer prior to this drawing command
  * [[VUID-{refpage}-None-08670]]
    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
    shader object is bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage,
    and the most recent call to flink:vkCmdSetRasterizerDiscardEnable in the
    current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, and the most recent call to
    flink:vkCmdSetPrimitiveTopology in the current command buffer set
    pname:primitiveTopology to any line topology, then
    flink:vkCmdSetLineStippleEnableEXT must: have been called in the current
    command buffer prior to this drawing command
  * [[VUID-{refpage}-None-08671]]
    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
    shader object that outputs line primitives is bound to the
    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
    ename:VK_SHADER_STAGE_GEOMETRY_BIT stage, and the most recent call to
    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
    pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetLineStippleEnableEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07849]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_EXT dynamic state enabled then
    flink:vkCmdSetLineStippleEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08672]]
    If the `apiext:VK_EXT_line_rasterization` extension is enabled, and a
    shader object is bound to any graphics stage, and the most recent call
    to flink:vkCmdSetRasterizerDiscardEnable in the current command buffer
    set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most recent
    call to flink:vkCmdSetLineStippleEnableEXT in the current command buffer
    set pname:stippledLineEnable to ename:VK_TRUE, then
    flink:vkCmdSetLineStippleEXT must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_line_rasterization[]
ifdef::VK_EXT_depth_clip_control[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07639]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT dynamic state
    enabled then flink:vkCmdSetDepthClipNegativeOneToOneEXT must: have been
    called in the current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08673]]
    If the <<features-depthClipControl, pname:depthClipControl>> feature is
    enabled, and a shader object is bound to any graphics stage, then
    flink:vkCmdSetDepthClipNegativeOneToOneEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_EXT_depth_clip_control[]
ifdef::VK_NV_clip_space_w_scaling[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07640]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV dynamic state
    enabled then flink:vkCmdSetViewportWScalingEnableNV must: have been
    called in the current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08674]]
    If the `apiext:VK_NV_clip_space_w_scaling` extension is enabled, and a
    shader object is bound to any graphics stage, then
    flink:vkCmdSetViewportWScalingEnableNV must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_NV_clip_space_w_scaling[]
ifdef::VK_NV_viewport_swizzle[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07641]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state enabled then
    flink:vkCmdSetViewportSwizzleNV must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08675]]
    If the `apiext:VK_NV_viewport_swizzle` extension is enabled, and a
    shader object is bound to any graphics stage, then
    flink:vkCmdSetViewportSwizzleNV must: have been called in the current
    command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_NV_viewport_swizzle[]
ifdef::VK_NV_fragment_coverage_to_color[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07642]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV dynamic state enabled
    then flink:vkCmdSetCoverageToColorEnableNV must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08676]]
    If the `apiext:VK_NV_fragment_coverage_to_color` extension is enabled,
    and a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then flink:vkCmdSetCoverageToColorEnableNV must: have
    been called in the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07643]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV dynamic state
    enabled then flink:vkCmdSetCoverageToColorLocationNV must: have been
    called in the current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08677]]
    If the `apiext:VK_NV_fragment_coverage_to_color` extension is enabled,
    and a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, and the most recent call to
    flink:vkCmdSetCoverageToColorEnableNV in the current command buffer set
    pname:coverageToColorEnable to ename:VK_TRUE, then
    flink:vkCmdSetCoverageToColorLocationNV must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_NV_fragment_coverage_to_color[]
ifdef::VK_NV_framebuffer_mixed_samples[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07644]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV dynamic state enabled
    then flink:vkCmdSetCoverageModulationModeNV must: have been called in
    the current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08678]]
    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
    and a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetCoverageModulationModeNV must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07645]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV dynamic state
    enabled then flink:vkCmdSetCoverageModulationTableEnableNV must: have
    been called in the current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08679]]
    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
    and a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetCoverageModulationModeNV in the current
    command buffer set coverageModulationMode to any value other than
    ename:VK_COVERAGE_MODULATION_MODE_NONE_NV, then
    flink:vkCmdSetCoverageModulationTableEnableNV must: have been called in
    the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07646]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV dynamic state
    enabled then flink:vkCmdSetCoverageModulationTableNV must: have been
    called in the current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08680]]
    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
    and a shader object is bound to any graphics stage, and the most recent
    call to flink:vkCmdSetRasterizerDiscardEnable in the current command
    buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, and the most
    recent call to flink:vkCmdSetCoverageModulationTableEnableNV in the
    current command buffer set pname:coverageModulationTableEnable to
    ename:VK_TRUE, then flink:vkCmdSetCoverageModulationTableNV must: have
    been called in the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_NV_framebuffer_mixed_samples[]
ifdef::VK_NV_shading_rate_image[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07647]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV dynamic state
    enabled then flink:vkCmdSetShadingRateImageEnableNV must: have been
    called in the current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-pipelineFragmentShadingRate-09238]]
    If the <<features-pipelineFragmentShadingRate,
    pname:pipelineFragmentShadingRate>> feature is enabled, and a shader
    object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT stage, and the
    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
    command buffer set rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetFragmentShadingRateKHR must: have been called in the
    current command buffer prior to this drawing command
  * [[VUID-{refpage}-None-08681]]
    If the <<features-shadingRateImage, pname:shadingRateImage>> feature is
    enabled, and a shader object is bound to any graphics stage, and the
    most recent call to flink:vkCmdSetRasterizerDiscardEnable in the current
    command buffer set pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetShadingRateImageEnableNV must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_NV_shading_rate_image[]
ifdef::VK_NV_representative_fragment_test[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07648]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV dynamic
    state enabled then flink:vkCmdSetRepresentativeFragmentTestEnableNV
    must: have been called in the current command buffer prior to this
    drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08682]]
    If the <<features-representativeFragmentTest,
    pname:representativeFragmentTest>> feature is enabled, and a shader
    object is bound to any graphics stage, and the most recent call to
    flink:vkCmdSetRasterizerDiscardEnable in the current command buffer set
    pname:rasterizerDiscardEnable to ename:VK_FALSE, then
    flink:vkCmdSetRepresentativeFragmentTestEnableNV must: have been called
    in the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_NV_representative_fragment_test[]
ifdef::VK_NV_coverage_reduction_mode[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-None-07649]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV dynamic state enabled
    then flink:vkCmdSetCoverageReductionModeNV must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08683]]
    If the <<features-coverageReductionMode, pname:coverageReductionMode>>
    feature is enabled, and a shader object is bound to any graphics stage,
    and the most recent call to flink:vkCmdSetRasterizerDiscardEnable in the
    current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then flink:vkCmdSetCoverageReductionModeNV must: have
    been called in the current command buffer prior to this drawing command
endif::VK_EXT_shader_object[]
endif::VK_NV_coverage_reduction_mode[]
  * [[VUID-{refpage}-pColorBlendEnables-07470]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT state enabled and the last
    call to flink:vkCmdSetColorBlendEnableEXT set pname:pColorBlendEnables
    for any attachment to ename:VK_TRUE, then for those attachments in the
    subpass the corresponding image view's
    <<resources-image-view-format-features,format features>> must: contain
    ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
  * [[VUID-{refpage}-rasterizationSamples-07471]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and the
    current subpass does not use any color and/or depth/stencil attachments,
    then the pname:rasterizationSamples in the last call to
    flink:vkCmdSetRasterizationSamplesEXT must: follow the rules for a
    <<renderpass-noattachments, zero-attachment subpass>>
  * [[VUID-{refpage}-samples-07472]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state enabled and the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then
    the pname:samples parameter in the last call to
    flink:vkCmdSetSampleMaskEXT must: be greater or equal to the
    slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples
    parameter used to create the bound graphics pipeline
  * [[VUID-{refpage}-samples-07473]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_MASK_EXT state and
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, then
    the pname:samples parameter in the last call to
    flink:vkCmdSetSampleMaskEXT must: be greater or equal to the
    pname:rasterizationSamples parameter in the last call to
    flink:vkCmdSetRasterizationSamplesEXT
  * [[VUID-{refpage}-rasterizationSamples-07474]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and
    neither the `apiext:VK_AMD_mixed_attachment_samples` nor the
    `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, then
    the pname:rasterizationSamples in the last call to
    flink:vkCmdSetRasterizationSamplesEXT must: be the same as the current
    subpass color and/or depth/stencil attachments
ifdef::VK_EXT_multisampled_render_to_single_sampled[]
  * [[VUID-{refpage}-None-09211]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled,
ifdef::VK_EXT_shader_object[]
    or a shader object is bound to any graphics stage,
endif::VK_EXT_shader_object[]
    and the current render pass instance includes a
    slink:VkMultisampledRenderToSingleSampledInfoEXT structure with
    pname:multisampledRenderToSingleSampledEnable equal to ename:VK_TRUE,
    then the pname:rasterizationSamples in the last call to
    flink:vkCmdSetRasterizationSamplesEXT must: be the same as the
    pname:rasterizationSamples member of that structure
endif::VK_EXT_multisampled_render_to_single_sampled[]
  * [[VUID-{refpage}-firstAttachment-07476]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic state enabled then
    flink:vkCmdSetColorBlendEnableEXT must: have been called in the current
    command buffer prior to this drawing command, and the attachments
    specified by the pname:firstAttachment and pname:attachmentCount
    parameters of fname:vkCmdSetColorBlendEnableEXT calls must: specify an
    enable for all active color attachments in the current subpass
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-rasterizerDiscardEnable-09417]]
    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then flink:vkCmdSetColorBlendEnableEXT must: have been
    called in the current command buffer prior to this drawing command, and
    the attachments specified by the pname:firstAttachment and
    pname:attachmentCount parameters of fname:vkCmdSetColorBlendEnableEXT
    calls must: specify an enable for all active color attachments in the
    current subpass
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-firstAttachment-07477]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT dynamic state enabled
    then flink:vkCmdSetColorBlendEquationEXT must: have been called in the
    current command buffer prior to this drawing command, and the
    attachments specified by the pname:firstAttachment and
    pname:attachmentCount parameters of fname:vkCmdSetColorBlendEquationEXT
    calls must: specify the blend equations for all active color attachments
    in the current subpass where blending is enabled
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-rasterizerDiscardEnable-09418]]
    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then flink:vkCmdSetColorBlendEquationEXT must: have been
    called in the current command buffer prior to this drawing command, and
    the attachments specified by the pname:firstAttachment and
    pname:attachmentCount parameters of fname:vkCmdSetColorBlendEquationEXT
    calls must: specify the blend equations for all active color attachments
    in the current subpass where blending is enabled
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-firstAttachment-07478]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT dynamic state enabled then
    flink:vkCmdSetColorWriteMaskEXT must: have been called in the current
    command buffer prior to this drawing command, and the attachments
    specified by the pname:firstAttachment and pname:attachmentCount
    parameters of fname:vkCmdSetColorWriteMaskEXT calls must: specify the
    color write mask for all active color attachments in the current subpass
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-rasterizerDiscardEnable-09419]]
    If a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then flink:vkCmdSetColorWriteMaskEXT must: have been
    called in the current command buffer prior to this drawing command, and
    the attachments specified by the pname:firstAttachment and
    pname:attachmentCount parameters of fname:vkCmdSetColorWriteMaskEXT
    calls must: specify the color write mask for all active color
    attachments in the current subpass
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_blend_operation_advanced[]
  * [[VUID-{refpage}-firstAttachment-07479]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT dynamic state enabled
    then flink:vkCmdSetColorBlendAdvancedEXT must: have been called in the
    current command buffer prior to this drawing command, and the
    attachments specified by the pname:firstAttachment and
    pname:attachmentCount parameters of fname:vkCmdSetColorBlendAdvancedEXT
    calls must: specify the advanced blend equations for all active color
    attachments in the current subpass where blending is enabled
  * [[VUID-{refpage}-advancedBlendMaxColorAttachments-07480]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT and
    ename:VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT dynamic states enabled and
    the last calls to flink:vkCmdSetColorBlendEnableEXT and
    flink:vkCmdSetColorBlendAdvancedEXT have enabled advanced blending, then
    the number of active color attachments in the current subpass must: not
    exceed <<limits-advancedBlendMaxColorAttachments,
    pname:advancedBlendMaxColorAttachments>>
endif::VK_EXT_blend_operation_advanced[]
ifdef::VK_EXT_transform_feedback[]
  * [[VUID-{refpage}-primitivesGeneratedQueryWithNonZeroStreams-07481]]
    If the <<features-primitivesGeneratedQueryWithNonZeroStreams,
    pname:primitivesGeneratedQueryWithNonZeroStreams>> feature is not
    enabled and the ename:VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT query is
    active, and the bound graphics pipeline was created with
    ename:VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT state enabled, the last
    call to flink:vkCmdSetRasterizationStreamEXT must: have set the
    pname:rasterizationStream to zero
endif::VK_EXT_transform_feedback[]
ifdef::VK_EXT_sample_locations[]
  * [[VUID-{refpage}-sampleLocationsPerPixel-07482]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state disabled, then
    the pname:sampleLocationsPerPixel member of pname:pSampleLocationsInfo
    in the last call to flink:vkCmdSetSampleLocationsEXT must: equal the
    pname:rasterizationSamples member of the
    slink:VkPipelineMultisampleStateCreateInfo structure the bound graphics
    pipeline has been created with
  * [[VUID-{refpage}-sampleLocationsPerPixel-07483]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, then the
    pname:sampleLocationsPerPixel member of pname:pSampleLocationsInfo in
    the last call to flink:vkCmdSetSampleLocationsEXT must: equal the
    pname:rasterizationSamples parameter of the last call to
    flink:vkCmdSetRasterizationSamplesEXT
  * [[VUID-{refpage}-sampleLocationsEnable-07484]]
    If
ifdef::VK_EXT_shader_object[]
    a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, or
endif::VK_EXT_shader_object[]
    the bound graphics pipeline was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and
    pname:sampleLocationsEnable was ename:VK_TRUE in the last call to
    flink:vkCmdSetSampleLocationsEnableEXT, and the current subpass has a
    depth/stencil attachment, then that attachment must: have been created
    with the ename:VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
    bit set
  * [[VUID-{refpage}-sampleLocationsEnable-07485]]
    If
ifdef::VK_EXT_shader_object[]
    a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, or
endif::VK_EXT_shader_object[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if
    pname:sampleLocationsEnable was ename:VK_TRUE in the last call to
    flink:vkCmdSetSampleLocationsEnableEXT, then the
    pname:sampleLocationsInfo.sampleLocationGridSize.width in the last call
    to flink:vkCmdSetSampleLocationsEXT must: evenly divide
    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.width as
    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
    pname:samples parameter equaling pname:rasterizationSamples
  * [[VUID-{refpage}-sampleLocationsEnable-07486]]
    If
ifdef::VK_EXT_shader_object[]
    a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, or
endif::VK_EXT_shader_object[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state enabled and the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if
    pname:sampleLocationsEnable was ename:VK_TRUE in the last call to
    flink:vkCmdSetSampleLocationsEnableEXT, then the
    pname:sampleLocationsInfo.sampleLocationGridSize.height in the last call
    to flink:vkCmdSetSampleLocationsEXT must: evenly divide
    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.height as
    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
    pname:samples parameter equaling pname:rasterizationSamples
  * [[VUID-{refpage}-sampleLocationsEnable-07487]]
    If
ifdef::VK_EXT_shader_object[]
    a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, or
endif::VK_EXT_shader_object[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, and if
    pname:sampleLocationsEnable was ename:VK_TRUE in the last call to
    flink:vkCmdSetSampleLocationsEnableEXT, the fragment shader code must:
    not statically use the extended instruction code:InterpolateAtSample
  * [[VUID-{refpage}-sampleLocationsEnable-07936]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, the
    pname:sampleLocationsEnable member of a
    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
    in the bound graphics pipeline is ename:VK_TRUE or
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, then,
    pname:sampleLocationsInfo.sampleLocationGridSize.width must: evenly
    divide
    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.width as
    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
    pname:samples parameter equaling the value of pname:rasterizationSamples
    in the last call to flink:vkCmdSetRasterizationSamplesEXT
  * [[VUID-{refpage}-sampleLocationsEnable-07937]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, the
    pname:sampleLocationsEnable member of a
    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
    in the bound graphics pipeline is ename:VK_TRUE or
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, then,
    pname:sampleLocationsInfo.sampleLocationGridSize.height must: evenly
    divide
    slink:VkMultisamplePropertiesEXT::pname:sampleLocationGridSize.height as
    returned by flink:vkGetPhysicalDeviceMultisamplePropertiesEXT with a
    pname:samples parameter equaling the value of pname:rasterizationSamples
    in the last call to flink:vkCmdSetRasterizationSamplesEXT
  * [[VUID-{refpage}-sampleLocationsEnable-07938]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT state disabled and the
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, the
    pname:sampleLocationsEnable member of a
    slink:VkPipelineSampleLocationsStateCreateInfoEXT::pname:sampleLocationsEnable
    in the bound graphics pipeline is ename:VK_TRUE or
    ename:VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT state enabled, then,
    pname:sampleLocationsInfo.sampleLocationsPerPixel must: equal
    pname:rasterizationSamples in the last call to
    flink:vkCmdSetRasterizationSamplesEXT
endif::VK_EXT_sample_locations[]
ifdef::VK_NV_framebuffer_mixed_samples[]
  * [[VUID-{refpage}-coverageModulationTableEnable-07488]]
    If
ifdef::VK_EXT_shader_object[]
    a shader object is bound to any graphics stage or
endif::VK_EXT_shader_object[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV state
    enabled, and the last call to
    flink:vkCmdSetCoverageModulationTableEnableNV set
    pname:coverageModulationTableEnable to ename:VK_TRUE, then the
    pname:coverageModulationTableCount parameter in the last call to
    flink:vkCmdSetCoverageModulationTableNV must: equal the current
    pname:rasterizationSamples divided by the number of color samples in the
    current subpass
  * [[VUID-{refpage}-rasterizationSamples-07489]]
    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
    and if current subpass has a depth/stencil attachment and depth test,
    stencil test, or depth bounds test are enabled in the currently bound
    pipeline state, then the current pname:rasterizationSamples must: be the
    same as the sample count of the depth/stencil attachment
endif::VK_NV_framebuffer_mixed_samples[]
ifdef::VK_NV_fragment_coverage_to_color[]
  * [[VUID-{refpage}-coverageToColorEnable-07490]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV state enabled and the
    last call to flink:vkCmdSetCoverageToColorEnableNV set the
    pname:coverageToColorEnable to ename:VK_TRUE, then the current subpass
    must: have a color attachment at the location selected by the last call
    to flink:vkCmdSetCoverageToColorLocationNV
    pname:coverageToColorLocation, with a elink:VkFormat of
    ename:VK_FORMAT_R8_UINT, ename:VK_FORMAT_R8_SINT,
    ename:VK_FORMAT_R16_UINT, ename:VK_FORMAT_R16_SINT,
    ename:VK_FORMAT_R32_UINT, or ename:VK_FORMAT_R32_SINT
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-rasterizerDiscardEnable-09420]]
    If the `apiext:VK_NV_fragment_coverage_to_color` extension is enabled,
    and a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, and the last call to
    flink:vkCmdSetCoverageToColorEnableNV set the
    pname:coverageToColorEnable to ename:VK_TRUE, then the current subpass
    must: have a color attachment at the location selected by the last call
    to flink:vkCmdSetCoverageToColorLocationNV
    pname:coverageToColorLocation, with a elink:VkFormat of
    ename:VK_FORMAT_R8_UINT, ename:VK_FORMAT_R8_SINT,
    ename:VK_FORMAT_R16_UINT, ename:VK_FORMAT_R16_SINT,
    ename:VK_FORMAT_R32_UINT, or ename:VK_FORMAT_R32_SINT
endif::VK_EXT_shader_object[]
ifdef::VK_NV_coverage_reduction_mode[]
  * [[VUID-{refpage}-coverageReductionMode-07491]]
    If this `apiext:VK_NV_coverage_reduction_mode` extension is enabled, the
    bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV and
    ename:VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT states enabled, the
    current coverage reduction mode pname:coverageReductionMode, then the
    current pname:rasterizationSamples, and the sample counts for the color
    and depth/stencil attachments (if the subpass has them) must: be a valid
    combination returned by
    flink:vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV
endif::VK_NV_coverage_reduction_mode[]
endif::VK_NV_fragment_coverage_to_color[]
ifdef::VK_NV_viewport_swizzle[]
  * [[VUID-{refpage}-viewportCount-07492]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT dynamic state enabled, but
    not the ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic state
    enabled, then the bound graphics pipeline must: have been created with
    slink:VkPipelineViewportSwizzleStateCreateInfoNV::pname:viewportCount
    greater or equal to the pname:viewportCount parameter in the last call
    to flink:vkCmdSetViewportWithCount
  * [[VUID-{refpage}-viewportCount-07493]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT and
    ename:VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV dynamic states enabled then
    the pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportSwizzleNV must: be greater than or equal to the
    pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportWithCount
  * [[VUID-{refpage}-viewportCount-09421]]
    If the `apiext:VK_NV_viewport_swizzle` extension is enabled, and a
    shader object is bound to any graphics stage, then the
    pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportSwizzleNV must: be greater than or equal to the
    pname:viewportCount parameter in the last call to
    flink:vkCmdSetViewportWithCount
endif::VK_NV_viewport_swizzle[]
ifdef::VK_NV_framebuffer_mixed_samples[]
  * [[VUID-{refpage}-rasterizationSamples-07494]]
    If the `apiext:VK_NV_framebuffer_mixed_samples` extension is enabled,
    and if the current subpass has any color attachments and
    pname:rasterizationSamples of the last call to
    flink:vkCmdSetRasterizationSamplesEXT is greater than the number of
    color samples, then the pipeline pname:sampleShadingEnable must: be
    ename:VK_FALSE
endif::VK_NV_framebuffer_mixed_samples[]
ifdef::VK_EXT_line_rasterization[]
  * [[VUID-{refpage}-stippledLineEnable-07495]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or
    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states
    enabled, and if the current pname:stippledLineEnable state is
    ename:VK_TRUE and the current pname:lineRasterizationMode state is
    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the
    <<features-stippledRectangularLines, pname:stippledRectangularLines>>
    feature must: be enabled
  * [[VUID-{refpage}-stippledLineEnable-07496]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or
    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states
    enabled, and if the current pname:stippledLineEnable state is
    ename:VK_TRUE and the current pname:lineRasterizationMode state is
    ename:VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the
    <<features-stippledBresenhamLines, pname:stippledBresenhamLines>>
    feature must: be enabled
  * [[VUID-{refpage}-stippledLineEnable-07497]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or
    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states
    enabled, and if the current pname:stippledLineEnable state is
    ename:VK_TRUE and the current pname:lineRasterizationMode state is
    ename:VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the
    <<features-stippledSmoothLines, pname:stippledSmoothLines>> feature
    must: be enabled
  * [[VUID-{refpage}-stippledLineEnable-07498]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT or
    ename:VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT dynamic states
    enabled, and if the current pname:stippledLineEnable state is
    ename:VK_TRUE and the current pname:lineRasterizationMode state is
    ename:VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, then the
    <<features-stippledRectangularLines, pname:stippledRectangularLines>>
    feature must: be enabled and
    slink:VkPhysicalDeviceLimits::pname:strictLines must: be ename:VK_TRUE
endif::VK_EXT_line_rasterization[]
ifdef::VK_EXT_conservative_rasterization[]
  * [[VUID-{refpage}-conservativePointAndLineRasterization-07499]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT dynamic state
    enabled, <<limits-conservativePointAndLineRasterization,
    pname:conservativePointAndLineRasterization>> is not supported, and the
    effective primitive topology output by the last pre-rasterization shader
    stage is a line or point, then the pname:conservativeRasterizationMode
    set by the last call to flink:vkCmdSetConservativeRasterizationModeEXT
    must: be ename:VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
endif::VK_EXT_conservative_rasterization[]
endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
ifdef::VK_EXT_mesh_shader[]
  * [[VUID-{refpage}-stage-07073]]
    If the currently bound pipeline was created with the
    slink:VkPipelineShaderStageCreateInfo::pname:stage member of an element
    of slink:VkGraphicsPipelineCreateInfo::pname:pStages set to
    ename:VK_SHADER_STAGE_VERTEX_BIT,
    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT or
    ename:VK_SHADER_STAGE_GEOMETRY_BIT, then <<queries-mesh-shader, Mesh
    Shader Queries>> must: not be active
endif::VK_EXT_mesh_shader[]
ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
  * [[VUID-{refpage}-None-08877]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT dynamic state
    flink:vkCmdSetAttachmentFeedbackLoopEnableEXT must: have been called in
    the current command buffer prior to this drawing command
endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
ifdef::VK_NV_inherited_viewport_scissor[]
  * [[VUID-{refpage}-None-07850]]
    If dynamic state was inherited from
    slink:VkCommandBufferInheritanceViewportScissorInfoNV, it must: be set
    in the current command buffer prior to this drawing command
endif::VK_NV_inherited_viewport_scissor[]
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08684]]
    If there is no bound graphics pipeline, fname:vkCmdBindShadersEXT must:
    have been called in the current command buffer with pname:pStages with
    an element of ename:VK_SHADER_STAGE_VERTEX_BIT
  * [[VUID-{refpage}-None-08685]]
    If there is no bound graphics pipeline, and the
    <<features-tessellationShader, pname:tessellationShader>> feature is
    enabled, fname:vkCmdBindShadersEXT must: have been called in the current
    command buffer with pname:pStages with an element of
    ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT
  * [[VUID-{refpage}-None-08686]]
    If there is no bound graphics pipeline, and the
    <<features-tessellationShader, pname:tessellationShader>> feature is
    enabled, fname:vkCmdBindShadersEXT must: have been called in the current
    command buffer with pname:pStages with an element of
    ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
  * [[VUID-{refpage}-None-08687]]
    If there is no bound graphics pipeline, and the
    <<features-geometryShader, pname:geometryShader>> feature is enabled,
    fname:vkCmdBindShadersEXT must: have been called in the current command
    buffer with pname:pStages with an element of
    ename:VK_SHADER_STAGE_GEOMETRY_BIT
  * [[VUID-{refpage}-None-08688]]
    If there is no bound graphics pipeline, fname:vkCmdBindShadersEXT must:
    have been called in the current command buffer with pname:pStages with
    an element of ename:VK_SHADER_STAGE_FRAGMENT_BIT
ifdef::VK_EXT_mesh_shader[]
  * [[VUID-{refpage}-None-08689]]
    If there is no bound graphics pipeline, and the <<features-taskShader,
    pname:taskShader>> feature is enabled, fname:vkCmdBindShadersEXT must:
    have been called in the current command buffer with pname:pStages with
    an element of ename:VK_SHADER_STAGE_TASK_BIT_EXT
  * [[VUID-{refpage}-None-08690]]
    If there is no bound graphics pipeline, and the <<features-meshShader,
    pname:meshShader>> feature is enabled, fname:vkCmdBindShadersEXT must:
    have been called in the current command buffer with pname:pStages with
    an element of ename:VK_SHADER_STAGE_MESH_BIT_EXT
  * [[VUID-{refpage}-None-08693]]
    If there is no bound graphics pipeline, and at least one of the
    <<features-taskShader, pname:taskShader>> and <<features-meshShader,
    pname:meshShader>> features is enabled, one of the
    ename:VK_SHADER_STAGE_VERTEX_BIT or ename:VK_SHADER_STAGE_MESH_BIT_EXT
    stages must: have a valid sname:VkShaderEXT bound, and the other must:
    have no sname:VkShaderEXT bound
  * [[VUID-{refpage}-None-08694]]
    If there is no bound graphics pipeline, and both the
    <<features-taskShader, pname:taskShader>> and <<features-meshShader,
    pname:meshShader>> features are enabled, and a valid sname:VkShaderEXT
    is bound the to the ename:VK_SHADER_STAGE_MESH_BIT_EXT stage, and that
    sname:VkShaderEXT was created without the
    ename:VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, a valid
    sname:VkShaderEXT must: be bound to the
    ename:VK_SHADER_STAGE_TASK_BIT_EXT stage
  * [[VUID-{refpage}-None-08695]]
    If there is no bound graphics pipeline, and both the
    <<features-taskShader, pname:taskShader>> and <<features-meshShader,
    pname:meshShader>> features are enabled, and a valid sname:VkShaderEXT
    is bound the to the ename:VK_SHADER_STAGE_MESH_BIT_EXT stage, and that
    sname:VkShaderEXT was created with the
    ename:VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT flag, there must: be no
    sname:VkShaderEXT bound to the ename:VK_SHADER_STAGE_TASK_BIT_EXT stage
  * [[VUID-{refpage}-None-08696]]
    If there is no bound graphics pipeline, and a valid sname:VkShaderEXT is
    bound to the ename:VK_SHADER_STAGE_VERTEX_BIT stage, there must: be no
    sname:VkShaderEXT bound to either the ename:VK_SHADER_STAGE_TASK_BIT_EXT
    stage or the ename:VK_SHADER_STAGE_MESH_BIT_EXT stage
endif::VK_EXT_mesh_shader[]
  * [[VUID-{refpage}-None-08698]]
    If any graphics shader is bound which was created with the
    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, then all shaders created
    with the ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag in the same
    flink:vkCreateShadersEXT call must: also be bound
  * [[VUID-{refpage}-None-08699]]
    If any graphics shader is bound which was created with the
    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag, any stages in between
    stages whose shaders which did not create a shader with the
    ename:VK_SHADER_CREATE_LINK_STAGE_BIT_EXT flag as part of the same
    flink:vkCreateShadersEXT call must: not have any sname:VkShaderEXT bound
  * [[VUID-{refpage}-None-08878]]
    All bound graphics shader objects must: have been created with identical
    or identically defined push constant ranges
  * [[VUID-{refpage}-None-08879]]
    All bound graphics shader objects must: have been created with identical
    or identically defined arrays of descriptor set layouts
ifdef::VK_ANDROID_external_format_resolve[]
  * [[VUID-{refpage}-colorAttachmentCount-09372]]
    If the current render pass instance was begun with
    flink:vkCmdBeginRendering and a
    slink:VkRenderingInfo::pname:colorAttachmentCount equal to `1`, a color
    attachment with a resolve mode of
    ename:VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, and a fragment
    shader is bound, it must: not declare the code:DepthReplacing or
    code:StencilRefReplacingEXT execution modes
endif::VK_ANDROID_external_format_resolve[]
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_attachment_feedback_loop_dynamic_state[]
  * [[VUID-{refpage}-None-08880]]
    If the <<features-attachmentFeedbackLoopDynamicState,
    attachmentFeedbackLoopDynamicState>> feature is enabled on the device,
    and a shader object is bound to the ename:VK_SHADER_STAGE_FRAGMENT_BIT
    stage, and the most recent call to flink:vkCmdSetRasterizerDiscardEnable
    in the current command buffer set pname:rasterizerDiscardEnable to
    ename:VK_FALSE, then flink:vkCmdSetAttachmentFeedbackLoopEnableEXT must:
    have been called in the current command buffer prior to this drawing
    command
endif::VK_EXT_attachment_feedback_loop_dynamic_state[]
ifdef::VK_EXT_shader_tile_image[]
  * [[VUID-{refpage}-pDynamicStates-08715]]
    If the bound graphics pipeline state includes a fragment shader stage,
    was created with ename:VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE set in
    slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, and the
    fragment shader declares the code:EarlyFragmentTests execution mode and
    uses code:OpDepthAttachmentReadEXT, the pname:depthWriteEnable parameter
    in the last call to flink:vkCmdSetDepthWriteEnable must: be
    ename:VK_FALSE
  * [[VUID-{refpage}-pDynamicStates-08716]]
    If the bound graphics pipeline state includes a fragment shader stage,
    was created with ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK set in
    slink:VkPipelineDynamicStateCreateInfo::pname:pDynamicStates, and the
    fragment shader declares the code:EarlyFragmentTests execution mode and
    uses code:OpStencilAttachmentReadEXT, the pname:writeMask parameter in
    the last call to flink:vkCmdSetStencilWriteMask must: be `0`
endif::VK_EXT_shader_tile_image[]
ifdef::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-09116]]
    If
ifdef::VK_EXT_shader_object[]
    a shader object is bound to any graphics stage
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state3+VK_EXT_shader_object[or]
ifdef::VK_EXT_extended_dynamic_state3[]
    the currently bound graphics pipeline was created with
    ename:VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT,
endif::VK_EXT_extended_dynamic_state3[]
    and the format of any color attachment is
    ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of the
    pname:pColorWriteMasks parameter of flink:vkCmdSetColorWriteMaskEXT
    must: either include all of ename:VK_COLOR_COMPONENT_R_BIT,
    ename:VK_COLOR_COMPONENT_G_BIT, and ename:VK_COLOR_COMPONENT_B_BIT, or
    none of them
endif::VK_EXT_extended_dynamic_state3,VK_EXT_shader_object[]
  * [[VUID-{refpage}-maxFragmentDualSrcAttachments-09239]]
    If <<framebuffer-blending,blending>> is enabled for any attachment where
    either the source or destination blend factors for that attachment
    <<framebuffer-dsb, use the secondary color input>>, the maximum value of
    code:Location for any output attachment <<shaders-staticuse, statically
    used>> in the code:Fragment {ExecutionModel} executed by this command
    must: be less than <<limits-maxFragmentDualSrcAttachments,
    pname:maxFragmentDualSrcAttachments>>
// Common Valid Usage
