vkCmdDispatchGraphIndirectCountAMDX(3)

# vkCmdDispatchGraphIndirectCountAMDX(3) Manual Page

## Name

vkCmdDispatchGraphIndirectCountAMDX - Dispatch an execution graph with all parameters read on the device

Loading… please wait.

## C Specification

To record an execution graph dispatch with all parameters read on device, call:

    // Provided by VK_AMDX_shader_enqueue
    void vkCmdDispatchGraphIndirectCountAMDX(
        VkCommandBuffer                             commandBuffer,
        VkDeviceAddress                             scratch,
        VkDeviceSize                                scratchSize,
        VkDeviceAddress                             countInfo);

## Parameters

- `commandBuffer` is the command buffer into which the command will be recorded.

- `scratch` is the address of scratch memory to be used.

- `scratchSize` is a range in bytes of scratch memory to be used.

- `countInfo` is a device address of a VkDispatchGraphCountInfoAMDX structure defining the nodes which will be initially executed.

## Description

When this command is executed, the nodes specified in `countInfo` are executed. Nodes executed as part of this command are not implicitly synchronized in any way against each other once they are dispatched.

For this command, all pointers in substructures are treated as device pointers and read during device execution of this command. The allocation and contents of these pointers only needs to be valid during device execution. All of these addresses will be read in the `VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT` pipeline stage with the `VK_ACCESS_2_SHADER_STORAGE_READ_BIT` access flag.

Execution of this command may modify any memory locations in the range [`scratch`,`scratch` + `scratchSize`). Accesses to this memory range are performed in the `VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT` pipeline stage with the `VK_ACCESS_2_SHADER_STORAGE_READ_BIT` and `VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT` access flags.

Valid Usage

- VUID-vkCmdDispatchGraphIndirectCountAMDX-magFilter-04553
  If a VkSampler created with `magFilter` or `minFilter` equal to `VK_FILTER_LINEAR`, `reductionMode` equal to `VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE`, and `compareEnable` equal to `VK_FALSE` is used to sample a VkImageView as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-magFilter-09598
  If a VkSampler created with `magFilter` or `minFilter` equal to `VK_FILTER_LINEAR` and `reductionMode` equal to either `VK_SAMPLER_REDUCTION_MODE_MIN` or `VK_SAMPLER_REDUCTION_MODE_MAX` is used to sample a VkImageView as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-mipmapMode-04770
  If a VkSampler created with `mipmapMode` equal to `VK_SAMPLER_MIPMAP_MODE_LINEAR`, `reductionMode` equal to `VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE`, and `compareEnable` equal to `VK_FALSE` is used to sample a VkImageView as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-mipmapMode-09599
  If a VkSampler created with `mipmapMode` equal to `VK_SAMPLER_MIPMAP_MODE_LINEAR` and `reductionMode` equal to either `VK_SAMPLER_REDUCTION_MODE_MIN` or `VK_SAMPLER_REDUCTION_MODE_MAX` is used to sample a VkImageView as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-unnormalizedCoordinates-09635
  If a VkSampler created with `unnormalizedCoordinates` equal to `VK_TRUE` is used to sample a VkImageView as a result of this command, then the image view’s `levelCount` and `layerCount` must be 1

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08609
  If a VkSampler created with `unnormalizedCoordinates` equal to `VK_TRUE` is used to sample a VkImageView as a result of this command, then the image view’s `viewType` must be `VK_IMAGE_VIEW_TYPE_1D` or `VK_IMAGE_VIEW_TYPE_2D`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08610
  If a VkSampler created with `unnormalizedCoordinates` equal to `VK_TRUE` is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions with `ImplicitLod`, `Dref` or `Proj` in their name

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08611
  If a VkSampler created with `unnormalizedCoordinates` equal to `VK_TRUE` is used to sample a VkImageView as a result of this command, then the sampler must not be used with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions that includes a LOD bias or any offset values

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-06479
  If a VkImageView is sampled with depth comparison, the image view’s format features must contain `VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-02691
  If a VkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-07888
  If a `VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER` descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain `VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-02692
  If a VkImageView is sampled with `VK_FILTER_CUBIC_EXT` as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-02693
  If the VK_EXT_filter_cubic extension is not enabled and any VkImageView is sampled with `VK_FILTER_CUBIC_EXT` as a result of this command, it must not have a VkImageViewType of `VK_IMAGE_VIEW_TYPE_3D`, `VK_IMAGE_VIEW_TYPE_CUBE`, or `VK_IMAGE_VIEW_TYPE_CUBE_ARRAY`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-filterCubic-02694
  Any VkImageView being sampled with `VK_FILTER_CUBIC_EXT` as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::`filterCubic` returned by vkGetPhysicalDeviceImageFormatProperties2

- VUID-vkCmdDispatchGraphIndirectCountAMDX-filterCubicMinmax-02695
  Any VkImageView being sampled with `VK_FILTER_CUBIC_EXT` with a reduction mode of either `VK_SAMPLER_REDUCTION_MODE_MIN` or `VK_SAMPLER_REDUCTION_MODE_MAX` as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::`filterCubicMinmax` returned by vkGetPhysicalDeviceImageFormatProperties2

- VUID-vkCmdDispatchGraphIndirectCountAMDX-cubicRangeClamp-09212
  If the `cubicRangeClamp` feature is not enabled, then any VkImageView being sampled with `VK_FILTER_CUBIC_EXT` as a result of this command must not have a VkSamplerReductionModeCreateInfo::`reductionMode` equal to `VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-reductionMode-09213
  Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::`reductionMode` equal to `VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM` as a result of this command must sample with `VK_FILTER_CUBIC_EXT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-selectableCubicWeights-09214
  If the `selectableCubicWeights` feature is not enabled, then any VkImageView being sampled with `VK_FILTER_CUBIC_EXT` as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::`cubicWeights` equal to `VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-flags-02696
  Any VkImage created with a VkImageCreateInfo::`flags` containing `VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV` sampled as a result of this command must only be sampled using a VkSamplerAddressMode of `VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeImage-07027
  For any VkImageView being written as a storage image where the image format field of the `OpTypeImage` is `Unknown`, the view’s format features must contain `VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeImage-07028
  For any VkImageView being read as a storage image where the image format field of the `OpTypeImage` is `Unknown`, the view’s format features must contain `VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeImage-07029
  For any VkBufferView being written as a storage texel buffer where the image format field of the `OpTypeImage` is `Unknown`, the view’s buffer features must contain `VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeImage-07030
  Any VkBufferView being read as a storage texel buffer where the image format field of the `OpTypeImage` is `Unknown` then the view’s buffer features must contain `VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08600
  For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in [descriptorsets-compatibility]

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08601
  For each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in [descriptorsets-compatibility]

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-10068
  For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command

- VUID-vkCmdDispatchGraphIndirectCountAMDX-maintenance4-08602
  If the `maintenance4` feature is not enabled, then for each push constant that is statically used by a bound shader, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout and VkPushConstantRange arrays used to create the current VkShaderEXT , as described in [descriptorsets-compatibility]

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08114
  Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was not created with `VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08115
  If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdBindDescriptorSets, the bound VkPipeline must have been created without `VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08116
  Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the VkPipeline bound to the pipeline bind point used by this command and the bound VkPipeline was created with `VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08604
  Descriptors in bound descriptor buffers, specified via vkCmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08117
  If the descriptors used by the VkPipeline bound to the pipeline bind point were specified via vkCmdSetDescriptorBufferOffsetsEXT, the bound VkPipeline must have been created with `VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08119
  If a descriptor is dynamically used with a VkPipeline created with `VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT`, the descriptor memory must be resident

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08605
  If a descriptor is dynamically used with a VkShaderEXT created with a `VkDescriptorSetLayout` that was created with `VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT`, the descriptor memory must be resident

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08606
  If the `shaderObject` feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08608
  If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the VkPipeline object bound to the pipeline bind point used by this command, since that pipeline was bound

- VUID-vkCmdDispatchGraphIndirectCountAMDX-uniformBuffers-06935
  If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either `VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS` or `VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2` for `uniformBuffers`, and the `robustBufferAccess` feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08612
  If the `robustBufferAccess` feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point

- VUID-vkCmdDispatchGraphIndirectCountAMDX-storageBuffers-06936
  If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either `VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS` or `VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2` for `storageBuffers`, and the `robustBufferAccess` feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08613
  If the `robustBufferAccess` feature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point

- VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-02707
  If `commandBuffer` is an unprotected command buffer and `protectedNoFault` is not supported, any resource accessed by bound shaders must not be a protected resource

- VUID-vkCmdDispatchGraphIndirectCountAMDX-viewType-07752
  If a VkImageView is accessed as a result of this command, then the image view’s `viewType` must match the `Dim` operand of the `OpTypeImage` as described in [spirvenv-image-dimensions]

- VUID-vkCmdDispatchGraphIndirectCountAMDX-format-07753
  If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’s `format` and the `Sampled` `Type` operand of the `OpTypeImage` must match

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWrite-08795
  If a VkImageView created with a format other than `VK_FORMAT_A8_UNORM` is accessed using `OpImageWrite` as a result of this command, then the `Type` of the `Texel` operand of that instruction must have at least as many components as the image view’s format

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWrite-08796
  If a VkImageView created with the format `VK_FORMAT_A8_UNORM` is accessed using `OpImageWrite` as a result of this command, then the `Type` of the `Texel` operand of that instruction must have four components

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWrite-04469
  If a VkBufferView is accessed using `OpImageWrite` as a result of this command, then the `Type` of the `Texel` operand of that instruction must have at least as many components as the buffer view’s format

- VUID-vkCmdDispatchGraphIndirectCountAMDX-SampledType-04470
  If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the `SampledType` of the `OpTypeImage` operand of that instruction must have a `Width` of 64

- VUID-vkCmdDispatchGraphIndirectCountAMDX-SampledType-04471
  If a VkImageView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the `SampledType` of the `OpTypeImage` operand of that instruction must have a `Width` of 32

- VUID-vkCmdDispatchGraphIndirectCountAMDX-SampledType-04472
  If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, the `SampledType` of the `OpTypeImage` operand of that instruction must have a `Width` of 64

- VUID-vkCmdDispatchGraphIndirectCountAMDX-SampledType-04473
  If a VkBufferView with a VkFormat that has a component width less than 64-bit is accessed as a result of this command, the `SampledType` of the `OpTypeImage` operand of that instruction must have a `Width` of 32

- VUID-vkCmdDispatchGraphIndirectCountAMDX-sparseImageInt64Atomics-04474
  If the `sparseImageInt64Atomics` feature is not enabled, VkImage objects created with the `VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT` flag must not be accessed by atomic instructions through an `OpTypeImage` with a `SampledType` with a `Width` of 64 by this command

- VUID-vkCmdDispatchGraphIndirectCountAMDX-sparseImageInt64Atomics-04475
  If the `sparseImageInt64Atomics` feature is not enabled, VkBuffer objects created with the `VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT` flag must not be accessed by atomic instructions through an `OpTypeImage` with a `SampledType` with a `Width` of 64 by this command

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWeightedSampleQCOM-06971
  If `OpImageWeightedSampleQCOM` is used to sample a VkImageView as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWeightedSampleQCOM-06972
  If `OpImageWeightedSampleQCOM` uses a VkImageView as a sample weight image as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBoxFilterQCOM-06973
  If `OpImageBoxFilterQCOM` is used to sample a VkImageView as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchSSDQCOM-06974
  If `OpImageBlockMatchSSDQCOM` is used to read from an VkImageView as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchSADQCOM-06975
  If `OpImageBlockMatchSADQCOM` is used to read from an VkImageView as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchSADQCOM-06976
  If `OpImageBlockMatchSADQCOM` or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWeightedSampleQCOM-06977
  If `OpImageWeightedSampleQCOM`, `OpImageBoxFilterQCOM`, `OpImageBlockMatchWindowSSDQCOM`, `OpImageBlockMatchWindowSADQCOM`, `OpImageBlockMatchGatherSSDQCOM`, `OpImageBlockMatchGatherSADQCOM`, `OpImageBlockMatchSSDQCOM`, or `OpImageBlockMatchSADQCOM` uses a VkSampler as a result of this command, then the sampler must have been created with `VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWeightedSampleQCOM-06978
  If any command other than `OpImageWeightedSampleQCOM`, `OpImageBoxFilterQCOM`, `OpImageBlockMatchWindowSSDQCOM`, `OpImageBlockMatchWindowSADQCOM`, `OpImageBlockMatchGatherSSDQCOM`, `OpImageBlockMatchGatherSADQCOM`, `OpImageBlockMatchSSDQCOM`, or `OpImageBlockMatchSADQCOM` uses a VkSampler as a result of this command, then the sampler must not have been created with `VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchWindow-09215
  If a `OpImageBlockMatchWindow*QCOM` or `OpImageBlockMatchGather*QCOM` instruction is used to read from an VkImageView as a result of this command, then the image view’s format features must contain `VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchWindow-09216
  If a `OpImageBlockMatchWindow*QCOM` or `OpImageBlockMatchGather*QCOM` instruction is used to read from an VkImageView as a result of this command, then the image view’s format must be a single-component format

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchWindow-09217
  If a `OpImageBlockMatchWindow*QCOM` or `OpImageBlockMatchGather*QCOM` read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-07288
  Any shader invocation executed by this command must terminate

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-09600
  If a descriptor with type equal to any of `VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM`, `VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM`, `VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE`, `VK_DESCRIPTOR_TYPE_STORAGE_IMAGE`, or `VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT` is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written

- VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-10746
  The `VkDeviceMemory` object allocated from a `VkMemoryHeap` with the `VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM` property that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object in `commandBuffer`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-10678
  If this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include `VK_SHADER_STAGE_VERTEX_BIT`, `VK_SHADER_STAGE_FRAGMENT_BIT`, and/or `VK_SHADER_STAGE_COMPUTE_BIT`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-10679
  If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the `VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT` layout

- VUID-vkCmdDispatchGraphIndirectCountAMDX-pDescription-09900
  If a `VK_DESCRIPTOR_TYPE_TENSOR_ARM` descriptor is accessed as a result of this command, then the underlying VkTensorARM object must have been created with a VkTensorCreateInfoARM::`pDescription` whose `usage` member contained `VK_TENSOR_USAGE_SHADER_BIT_ARM`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-dimensionCount-09905
  If a `VK_DESCRIPTOR_TYPE_TENSOR_ARM` descriptor is accessed as a result of this command, then the `Rank` of the `OpTypeTensorARM` of the tensor resource variable must be equal to the `dimensionCount` provided via VkTensorCreateInfoARM::`pDescription` when creating the underlying VkTensorARM object

- VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeTensorARM-09906
  If a `VK_DESCRIPTOR_TYPE_TENSOR_ARM` descriptor is accessed as a result of this command, then the element type of the `OpTypeTensorARM` of the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access

- VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-09181
  `commandBuffer` must not be a protected command buffer

- VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-09182
  `commandBuffer` must be a primary command buffer

- VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-10192
  `scratch` must be the device address of an allocated memory range at least as large as `scratchSize`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-scratchSize-10193
  `scratchSize` must be greater than or equal to VkExecutionGraphPipelineScratchSizeAMDX::`minSize` returned by vkGetExecutionGraphPipelineScratchSizeAMDX for the bound execution graph pipeline

- VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-09184
  `scratch` must be a device address within a VkBuffer created with the `VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX` or `VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX` flag

- VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-10194
  The device memory range [`scratch`,`scratch`
  `scratchSize`] must have been initialized with vkCmdInitializeGraphScratchMemoryAMDX using the bound execution graph pipeline, and not modified after that by anything other than another execution graph dispatch command

- VUID-vkCmdDispatchGraphIndirectCountAMDX-maxComputeWorkGroupCount-09186
  Execution of this command must not cause a node to be dispatched with a larger number of workgroups than that specified by either a `MaxNumWorkgroupsAMDX` decoration in the dispatched node or `maxComputeWorkGroupCount`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-maxExecutionGraphShaderPayloadCount-09187
  Execution of this command must not cause any shader to initialize more than `maxExecutionGraphShaderPayloadCount` output payloads

- VUID-vkCmdDispatchGraphIndirectCountAMDX-NodeMaxPayloadsAMDX-09188
  Execution of this command must not cause any shader that declares `NodeMaxPayloadsAMDX` to initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to each `NodeMaxPayloadsAMDX` decoration separately

- VUID-vkCmdDispatchGraphIndirectCountAMDX-None-10195
  If the bound execution graph pipeline includes draw nodes, this command must be called within a render pass instance that is compatible with the graphics pipeline used to create each of those nodes

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09159
  `countInfo` must be a device pointer to a memory allocation containing a valid VkDispatchGraphCountInfoAMDX structure when this command is executed on the device

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09160
  `countInfo` must be a device address within a VkBuffer created with the `VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT` flag

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09161
  `countInfo` must be a multiple of `executionGraphDispatchAddressAlignment`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09162
  `countInfo->infos` must be a device pointer to a memory allocation at least as large as the product of `count` and `stride` when this command is executed on the device

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09163
  `countInfo->infos` must be a device address within a VkBuffer created with the `VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT` flag

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09164
  `countInfo->infos` must be a multiple of `executionGraphDispatchAddressAlignment`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-infos-09165
  Device memory locations at indexes in the range [`infos`, `infos` + (`count`*`stride`)), at a granularity of `stride` must contain valid VkDispatchGraphInfoAMDX structures in the first 24 bytes when this command is executed on the device

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09166
  For each VkDispatchGraphInfoAMDX structure in `countInfo->infos`, `payloads` must be a device pointer to a memory allocation at least as large as the product of `payloadCount` and `payloadStride` when this command is executed on the device

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09167
  For each VkDispatchGraphInfoAMDX structure in `countInfo->infos`, `payloads` must be a device address within a VkBuffer created with the `VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT` flag

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09168
  For each VkDispatchGraphInfoAMDX structure in `countInfo->infos`, `payloads` must be a multiple of `executionGraphDispatchAddressAlignment`

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09169
  For each VkDispatchGraphInfoAMDX structure in `countInfo->infos`, `nodeIndex` must be a valid node index in the bound execution graph pipeline, as returned by vkGetExecutionGraphPipelineNodeIndexAMDX when this command is executed on the device

- VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09170
  For each VkDispatchGraphInfoAMDX structure in `countInfo->infos`, device memory locations at indexes in the range [`payloads`, `payloads` + (`payloadCount` * `payloadStride`)), at a granularity of `payloadStride` must contain a payload matching the size of the input payload expected by the node in `nodeIndex` in the first bytes when this command is executed on the device

Valid Usage (Implicit)

- VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-parameter
  `commandBuffer` must be a valid VkCommandBuffer handle

- VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-recording
  `commandBuffer` must be in the recording state

- VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-cmdpool
  The `VkCommandPool` that `commandBuffer` was allocated from must support graphics, or compute operations

- VUID-vkCmdDispatchGraphIndirectCountAMDX-videocoding
  This command must only be called outside of a video coding scope

- VUID-vkCmdDispatchGraphIndirectCountAMDX-bufferlevel
  `commandBuffer` must be a primary `VkCommandBuffer`

Host Synchronization

- Host access to the `VkCommandPool` that `commandBuffer` was allocated from must be externally synchronized

Command Properties

Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type
--- | --- | --- | --- | ---
Primary | Both | Outside | Graphics Compute | Action

## See Also

VK_AMDX_shader_enqueue, VkCommandBuffer, VkDeviceAddress, VkDeviceSize

## Document Notes

For more information, see the Vulkan Specification

This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.

## Copyright

Copyright 2014-2025 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0