// Copyright 2019-2021 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.txt[] * [[VUID-{refpage}-renderPass-02684]] The current render pass must: be <> 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-02686]] Every input attachment used by the current subpass must: be bound to the pipeline via a descriptor set * [[VUID-{refpage}-None-04584]] Image subresources used as attachments in the current render pass must: not be accessed in any way other than as an attachment by this command, except for cases involving read-only access to depth/stencil attachments as described in the <> chapter 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 endif::VK_EXT_sample_locations[] ifdef::VK_EXT_extended_dynamic_state[] * [[VUID-{refpage}-viewportCount-03417]] If the bound graphics pipeline state was created with the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state enabled, but not the ename:VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT dynamic state enabled, then flink:vkCmdSetViewportWithCountEXT must: have been called in the current command buffer prior to this drawing command, and the pname:viewportCount parameter of fname:vkCmdSetViewportWithCountEXT 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_EXT dynamic state enabled, but not the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state enabled, then flink:vkCmdSetScissorWithCountEXT must: have been called in the current command buffer prior to this drawing command, and the pname:scissorCount parameter of fname:vkCmdSetScissorWithCountEXT 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_EXT and ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic states enabled then both flink:vkCmdSetViewportWithCountEXT and flink:vkCmdSetScissorWithCountEXT must: have been called in the current command buffer prior to this drawing command, and the pname:viewportCount parameter of fname:vkCmdSetViewportWithCountEXT must: match the pname:scissorCount parameter of fname:vkCmdSetScissorWithCountEXT 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_EXT 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:vkCmdSetViewportWithCountEXT * [[VUID-{refpage}-viewportCount-04138]] If the bound graphics pipeline state was created with the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT 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:vkCmdSetViewportWithCountEXT 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_EXT 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:vkCmdSetViewportWithCountEXT * [[VUID-{refpage}-viewportCount-04140]] If the bound graphics pipeline state was created with the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT 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:vkCmdSetViewportWithCountEXT 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_EXT dynamic state enabled and a slink:VkPipelineViewportSwizzleStateCreateInfoNV structure chained from pname:VkPipelineVieportCreateInfo, 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:vkCmdSetViewportWithCountEXT 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_EXT dynamic state enabled and a slink:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure chained from pname:VkPipelineVieportCreateInfo, 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:vkCmdSetViewportWithCountEXT endif::VK_NV_scissor_exclusive[] endif::VK_EXT_extended_dynamic_state[] ifdef::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_EXT dynamic state enabled then flink:vkCmdSetRasterizerDiscardEnableEXT must: have been called in the current command buffer prior to this drawing command * [[VUID-{refpage}-None-04877]] If the bound graphics pipeline state was created with the ename:VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT dynamic state enabled then flink:vkCmdSetDepthBiasEnableEXT must: have been called in the current command buffer prior to this drawing command * [[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 endif::VK_EXT_extended_dynamic_state2[] ifdef::VK_KHR_fragment_shading_rate+VK_EXT_extended_dynamic_state[] * [[VUID-{refpage}-primitiveFragmentShadingRateWithMultipleViewports-04552]] If the <> limit is not supported, the bound graphics pipeline was created with the ename:VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to the code:PrimitiveShadingRateKHR built-in, then flink:vkCmdSetViewportWithCountEXT must: have been called in the current command buffer prior to this drawing command, and the pname:viewportCount parameter of fname:vkCmdSetViewportWithCountEXT must: be `1` endif::VK_KHR_fragment_shading_rate+VK_EXT_extended_dynamic_state[] * [[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 <> 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 * [[VUID-{refpage}-rasterizationSamples-04740]] If rasterization is not disabled in the bound graphics pipeline, and neither the `apiext:VK_AMD_mixed_attachment_samples` nor the `apiext:VK_NV_framebuffer_mixed_samples` extensions are enabled, then slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples must: be the same as the current subpass color and/or depth/stencil attachments ifdef::VK_KHR_dynamic_rendering[] * [[VUID-{refpage}-imageView-06172]] If the current render pass instance was begun with flink:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, 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:vkCmdBeginRenderingKHR, the currently bound graphics pipeline must: have been created with a slink:VkPipelineRenderingCreateInfoKHR::pname:viewMask equal to slink:VkRenderingInfoKHR::pname:viewMask * [[VUID-{refpage}-colorAttachmentCount-06179]] If the current render pass instance was begun with flink:vkCmdBeginRenderingKHR, the currently bound graphics pipeline must: have been created with a slink:VkPipelineRenderingCreateInfoKHR::pname:colorAttachmentCount equal to slink:VkRenderingInfoKHR::pname:colorAttachmentCount * [[VUID-{refpage}-colorAttachmentCount-06180]] If the current render pass instance was begun with flink:vkCmdBeginRenderingKHR and slink:VkRenderingInfoKHR::pname:colorAttachmentCount greater than `0`, then each element of the slink:VkRenderingInfoKHR::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:VkPipelineRenderingCreateInfoKHR::pname:pColorAttachmentFormats used to create the currently bound graphics pipeline * [[VUID-{refpage}-pDepthAttachment-06181]] If the current render pass instance was begun with flink:vkCmdBeginRenderingKHR and slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView was not dlink:VK_NULL_HANDLE, the value of slink:VkPipelineRenderingCreateInfoKHR::pname:depthAttachmentFormat used to create the currently bound graphics pipeline must: be equal to the elink:VkFormat used to create slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView * [[VUID-{refpage}-pStencilAttachment-06182]] If the current render pass instance was begun with flink:vkCmdBeginRenderingKHR and slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView was not dlink:VK_NULL_HANDLE, the value of slink:VkPipelineRenderingCreateInfoKHR::pname:stencilAttachmentFormat used to create the currently bound graphics pipeline must: be equal to the elink:VkFormat used to create slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView ifdef::VK_KHR_fragment_shading_rate[] * [[VUID-{refpage}-imageView-06183]] If the current render pass instance was begun with flink:vkCmdBeginRenderingKHR 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:vkCmdBeginRenderingKHR 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:vkCmdBeginRenderingKHR with a slink:VkRenderingInfoKHR::pname:colorAttachmentCount parameter greater than `0`, then each element of the slink:VkRenderingInfoKHR::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:vkCmdBeginRenderingKHR, the currently bound pipeline was created with a slink:VkAttachmentSampleCountInfoAMD or slink:VkAttachmentSampleCountInfoNV structure, and slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname: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:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView * [[VUID-{refpage}-pStencilAttachment-06187]] If the current render pass instance was begun with flink:vkCmdBeginRenderingKHR, the currently bound pipeline was created with a slink:VkAttachmentSampleCountInfoAMD or slink:VkAttachmentSampleCountInfoNV structure, and slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname: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:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView * [[VUID-{refpage}-colorAttachmentCount-06188]] If the currently bound pipeline was created without a slink:VkAttachmentSampleCountInfoAMD or slink:VkAttachmentSampleCountInfoNV structure, and the current render pass instance was begun with flink:vkCmdBeginRenderingKHR with a slink:VkRenderingInfoKHR::pname:colorAttachmentCount parameter greater than `0`, then each element of the slink:VkRenderingInfoKHR::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 slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples used to create the currently bound graphics pipeline * [[VUID-{refpage}-pDepthAttachment-06189]] If the current render pass instance was begun with flink:vkCmdBeginRenderingKHR, the currently bound pipeline was created without a slink:VkAttachmentSampleCountInfoAMD or slink:VkAttachmentSampleCountInfoNV structure, and slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView was not dlink:VK_NULL_HANDLE, the value of slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples used to create the currently bound graphics pipeline must: be equal to the sample count used to create slink:VkRenderingInfoKHR::pname:pDepthAttachment->pname:imageView * [[VUID-{refpage}-pStencilAttachment-06190]] If the current render pass instance was begun with flink:vkCmdBeginRenderingKHR, the currently bound pipeline was created without a slink:VkAttachmentSampleCountInfoAMD or slink:VkAttachmentSampleCountInfoNV structure, and slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView was not dlink:VK_NULL_HANDLE, the value of slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples used to create the currently bound graphics pipeline must: be equal to the sample count used to create slink:VkRenderingInfoKHR::pname:pStencilAttachment->pname:imageView * [[VUID-{refpage}-renderPass-06198]] If the current render pass instance was begun with flink:vkCmdBeginRenderingKHR, the currently bound pipeline must: have been created with a slink:VkGraphicsPipelineCreateInfo::pname:renderPass equal to dlink:VK_NULL_HANDLE endif::VK_AMD_mixed_attachment_samples,VK_NV_framebuffer_mixed_samples[] endif::VK_KHR_dynamic_rendering[] // Common Valid Usage