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

// Common Valid Usage
// Common to VkPipelineStageFlagBits parameters
  * [[VUID-{refpage}-pipelineStage-04074]]
    pname:pipelineStage must: be a
    <<synchronization-pipeline-stages-supported,valid stage>> for the queue
    family that was used to create the command pool that pname:commandBuffer
    was allocated from
  * [[VUID-{refpage}-pipelineStage-04075]]
    If the <<features-geometryShader,geometry shaders>> feature is not
    enabled, pname:pipelineStage must: not be
    ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
  * [[VUID-{refpage}-pipelineStage-04076]]
    If the <<features-tessellationShader,tessellation shaders>> feature is
    not enabled, pname:pipelineStage must: not be
    ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
    ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
ifdef::VK_EXT_conditional_rendering[]
  * [[VUID-{refpage}-pipelineStage-04077]]
    If the <<features-conditionalRendering,conditional rendering>> feature
    is not enabled, pname:pipelineStage must: not be
    ename:VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
endif::VK_EXT_conditional_rendering[]
ifdef::VK_EXT_fragment_density_map[]
  * [[VUID-{refpage}-pipelineStage-04078]]
    If the <<features-fragmentDensityMap,fragment density map>> feature is
    not enabled, pname:pipelineStage must: not be
    ename:VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
endif::VK_EXT_fragment_density_map[]
ifdef::VK_EXT_transform_feedback[]
  * [[VUID-{refpage}-pipelineStage-04079]]
    If the <<features-transformFeedback,transform feedback>> feature is not
    enabled, pname:pipelineStage must: not be
    ename:VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
endif::VK_EXT_transform_feedback[]
ifdef::VK_NV_mesh_shader[]
  * [[VUID-{refpage}-pipelineStage-04080]]
    If the <<features-meshShader,mesh shaders>> feature is not enabled,
    pname:pipelineStage must: not be
    ename:VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV or
    ename:VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV
endif::VK_NV_mesh_shader[]
ifdef::VK_NV_shading_rate_image[]
  * [[VUID-{refpage}-pipelineStage-04081]]
    If the <<features-shadingRateImage,shading rate image>> feature is not
    enabled, pname:pipelineStage must: not be
    ename:VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
endif::VK_NV_shading_rate_image[]
// Common Valid Usage
