Execution Graphs
Execution graphs provide a way for applications to dispatch multiple operations dynamically from a single initial command on the host. To achieve this, a new execution graph pipeline is provided, that links together multiple shaders or pipelines which each describe one or more operations that can be dispatched within the execution graph. Each linked pipeline or shader describes an execution node within the graph, which can be dispatched dynamically from another shader within the same graph. This allows applications to describe much richer execution topologies at a finer granularity than would typically be possible with API commands alone.
Pipeline Creation
To create execution graph pipelines, call:
// Provided by VK_AMDX_shader_enqueue
VkResult vkCreateExecutionGraphPipelinesAMDX(
VkDevice device,
VkPipelineCache pipelineCache,
uint32_t createInfoCount,
const VkExecutionGraphPipelineCreateInfoAMDX* pCreateInfos,
const VkAllocationCallbacks* pAllocator,
VkPipeline* pPipelines);
-
deviceis the logical device that creates the execution graph pipelines. -
pipelineCacheis either VK_NULL_HANDLE, indicating that pipeline caching is disabled; or the handle of a valid pipeline cache object, in which case use of that cache is enabled for the duration of the command. The implementation must not access this object outside of the duration of this command. -
createInfoCountis the length of thepCreateInfosandpPipelinesarrays. -
pCreateInfosis a pointer to an array of VkExecutionGraphPipelineCreateInfoAMDX structures. -
pAllocatorcontrols host memory allocation as described in the Memory Allocation chapter. -
pPipelinesis a pointer to an array of VkPipeline handles in which the resulting execution graph pipeline objects are returned.
Pipelines are created and returned as described for Multiple Pipeline Creation.
-
VUID-vkCreateExecutionGraphPipelinesAMDX-shaderEnqueue-09124
TheshaderEnqueuefeature must be enabled -
VUID-vkCreateExecutionGraphPipelinesAMDX-flags-09125
If theflagsmember of any element ofpCreateInfoscontains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and thebasePipelineIndexmember of that same element is not-1,basePipelineIndexmust be less than the index intopCreateInfosthat corresponds to that element -
VUID-vkCreateExecutionGraphPipelinesAMDX-flags-09126
If theflagsmember of any element ofpCreateInfoscontains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base pipeline must have been created with the VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set -
VUID-vkCreateExecutionGraphPipelinesAMDX-pipelineCache-09127
IfpipelineCachewas created with VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access topipelineCachemust be externally synchronized
-
VUID-vkCreateExecutionGraphPipelinesAMDX-pNext-09616
If VkPipelineBinaryInfoKHR::binaryCountis not0for any element ofpCreateInfos,pipelineCachemust be VK_NULL_HANDLE -
VUID-vkCreateExecutionGraphPipelinesAMDX-pNext-09617
If a VkPipelineCreateFlags2CreateInfoKHR structure with the VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR flag set is included in thepNextchain of any element ofpCreateInfos,pipelineCachemust be VK_NULL_HANDLE -
VUID-vkCreateExecutionGraphPipelinesAMDX-binaryCount-09620
If VkPipelineBinaryInfoKHR::binaryCountis not0for any element ofpCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT must not be set in theflagsof that element -
VUID-vkCreateExecutionGraphPipelinesAMDX-binaryCount-09621
If VkPipelineBinaryInfoKHR::binaryCountis not0for any element ofpCreateInfos, VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT must not be set in theflagsof that element -
VUID-vkCreateExecutionGraphPipelinesAMDX-binaryCount-09622
If VkPipelineBinaryInfoKHR::binaryCountis not0for any element ofpCreateInfos, VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT must not be set in theflagsof that element -
VUID-vkCreateExecutionGraphPipelinesAMDX-pCreateInfos-11414
If any element ofpCreateInfossets VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT and includes embedded sampler mappings, there must be less than (maxSamplerAllocationCount- (minSamplerHeapReservedRangeWithEmbedded/samplerDescriptorSize)) VkSampler objects currently created on the device -
VUID-vkCreateExecutionGraphPipelinesAMDX-pCreateInfos-11429
If any element ofpCreateInfossets VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT and includes embedded sampler mappings, this command must not cause the total number of unique embedded samplers in pipelines and shaders on this device to exceedmaxDescriptorHeapEmbeddedSamplers
-
VUID-vkCreateExecutionGraphPipelinesAMDX-device-parameter
devicemust be a valid VkDevice handle -
VUID-vkCreateExecutionGraphPipelinesAMDX-pipelineCache-parameter
IfpipelineCacheis not VK_NULL_HANDLE,pipelineCachemust be a valid VkPipelineCache handle -
VUID-vkCreateExecutionGraphPipelinesAMDX-pCreateInfos-parameter
pCreateInfosmust be a valid pointer to an array ofcreateInfoCountvalid VkExecutionGraphPipelineCreateInfoAMDX structures -
VUID-vkCreateExecutionGraphPipelinesAMDX-pAllocator-parameter
IfpAllocatoris notNULL,pAllocatormust be a valid pointer to a valid VkAllocationCallbacks structure -
VUID-vkCreateExecutionGraphPipelinesAMDX-pPipelines-parameter
pPipelinesmust be a valid pointer to an array ofcreateInfoCountVkPipeline handles -
VUID-vkCreateExecutionGraphPipelinesAMDX-createInfoCount-arraylength
createInfoCountmust be greater than0 -
VUID-vkCreateExecutionGraphPipelinesAMDX-pipelineCache-parent
IfpipelineCacheis a valid handle, it must have been created, allocated, or retrieved fromdevice
The VkExecutionGraphPipelineCreateInfoAMDX structure is defined as:
// Provided by VK_AMDX_shader_enqueue
typedef struct VkExecutionGraphPipelineCreateInfoAMDX {
VkStructureType sType;
const void* pNext;
VkPipelineCreateFlags flags;
uint32_t stageCount;
const VkPipelineShaderStageCreateInfo* pStages;
const VkPipelineLibraryCreateInfoKHR* pLibraryInfo;
VkPipelineLayout layout;
VkPipeline basePipelineHandle;
int32_t basePipelineIndex;
} VkExecutionGraphPipelineCreateInfoAMDX;
-
sTypeis a VkStructureType value identifying this structure. -
pNextisNULLor a pointer to a structure extending this structure. -
flagsis a bitmask of VkPipelineCreateFlagBits specifying how the pipeline will be generated. -
stageCountis the number of entries in thepStagesarray. -
pStagesis a pointer to an array ofstageCountVkPipelineShaderStageCreateInfo structures describing the set of the shader stages to be included in the execution graph pipeline. -
pLibraryInfois a pointer to a VkPipelineLibraryCreateInfoKHR structure defining pipeline libraries to include. -
layoutis the description of binding locations used by both the pipeline and descriptor sets used with the pipeline. The implementation must not access this object outside of the duration of the command this structure is passed to. -
basePipelineHandleis a pipeline to derive from -
basePipelineIndexis an index into thepCreateInfosparameter to use as a pipeline to derive from
The parameters basePipelineHandle and basePipelineIndex are
described in more detail in Pipeline Derivatives.
Each shader stage provided when creating an execution graph pipeline
(including those in libraries) is associated with a name and an index,
determined by the inclusion or omission of a
VkPipelineShaderStageNodeCreateInfoAMDX structure in its pNext
chain.
For any graphics pipeline libraries, only the name and index of the vertex
or mesh shader stage is linked directly to the graph as a node - other
shader stages in the pipeline will be executed after those shader stages as
normal.
Task shaders cannot be included in a graphics pipeline used for a draw node.
In addition to the shader name and index, an internal “node index” is also generated for each node, which can be queried with vkGetExecutionGraphPipelineNodeIndexAMDX, and is used exclusively for initial dispatch of an execution graph.
-
VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09497
If thepNextchain does not include a VkPipelineCreateFlags2CreateInfo structure,flagsmust be a valid combination of VkPipelineCreateFlagBits values -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07984
Ifflagscontains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, andbasePipelineIndexis -1,basePipelineHandlemust be a valid execution graphVkPipelinehandle -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07985
Ifflagscontains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, andbasePipelineHandleis VK_NULL_HANDLE,basePipelineIndexmust be a valid index into the calling command’spCreateInfosparameter -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07986
Ifflagscontains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag,basePipelineIndexmust be -1 orbasePipelineHandlemust be VK_NULL_HANDLE -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07987
If a push constant block is declared in a shader andlayoutis not VK_NULL_HANDLE, a push constant range inlayoutmust match the shader stage -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-10069
If a push constant block is declared in a shader andlayoutis not VK_NULL_HANDLE, the block must be contained inside the push constant range inlayoutthat matches the stage -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07988
If a resource variable is declared in a shader andlayoutis not VK_NULL_HANDLE, the corresponding descriptor set inlayoutmust match the shader stage -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07990
If a resource variable is declared in a shader,layoutis not VK_NULL_HANDLE, and the descriptor type is not VK_DESCRIPTOR_TYPE_MUTABLE_EXT, the corresponding descriptor set inlayoutmust match the descriptor type -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07991
If a resource variable is declared in a shader as an array andlayoutis not VK_NULL_HANDLE, the corresponding descriptor binding used to createlayoutmust have adescriptorCountthat is greater than or equal to the length of the array -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-10391
If a resource variables is declared in a shader as an array of descriptors, then the descriptor type of that variable must not be VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11798
If shader64BitIndexing feature is not enabled,flagsmust not contain VK_PIPELINE_CREATE_2_64_BIT_INDEXING_BIT_EXT -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-pipelineCreationCacheControl-02878
If thepipelineCreationCacheControlfeature is not enabled,flagsmust not include VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT nor VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-pipelineProtectedAccess-07368
If thepipelineProtectedAccessfeature is not enabled,flagsmust not include VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT nor VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07369
flagsmust not include both VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT and VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11311
If VkPipelineCreateFlags2CreateInfoKHR::flagsincludes VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT,layoutmust be VK_NULL_HANDLE -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11312
If VkPipelineCreateFlags2CreateInfoKHR::flagsincludes VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT, all shader variables in the shader resource interface with aDescriptorSetandBindingdecoration must have a mapping declared in VkShaderDescriptorSetAndBindingMappingInfoEXT::pMappings
-
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03365
flagsmust not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03366
flagsmust not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03367
flagsmust not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03368
flagsmust not include VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03369
flagsmust not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03370
flagsmust not include VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03576
flagsmust not include VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-04945
flagsmust not include VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-09007
If theVkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV::deviceGeneratedComputePipelinesfeature is not enabled,flagsmust not include VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-09008
Ifflagsincludes VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then thepNextchain must include a pointer to a valid instance of VkComputePipelineIndirectBufferInfoNV specifying the address where the pipeline’s metadata will be saved -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11007
Ifflagsincludes VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT, then theVkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT::deviceGeneratedCommandsfeature must be enabled -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-stage-09128
Thestagemember of any element ofpStagesmust be VK_SHADER_STAGE_COMPUTE_BIT -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-pStages-09129
The shader code for the entry point identified by each element ofpStagesand the rest of the state identified by this structure must adhere to the pipeline linking rules described in the Shader Interfaces chapter -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-09130
Iflayoutis not VK_NULL_HANDLE, it must be consistent with the layout of the shaders specified inpStages -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-09131
IfpLibraryInfois notNULLandlayoutis not VK_NULL_HANDLE, each element ofpLibraryInfo->pLibrariesmust have been created with alayoutthat is compatible with thelayoutin this pipeline -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-09132
Iflayoutis not VK_NULL_HANDLE, the number of resources inlayoutaccessible to each shader stage that is used by the pipeline must be less than or equal toVkPhysicalDeviceLimits::maxPerStageResources -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-09133
IfpLibraryInfois notNULL, each element ofpLibraryInfo->pLibrariesmust be either a compute pipeline, an execution graph pipeline, or a graphics pipeline -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-10181
IfpLibraryInfois notNULL, each element ofpLibraryInfo->pLibrariesthat is a compute pipeline or a graphics pipeline must have been created with VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX set -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-shaderMeshEnqueue-10182
If theshaderMeshEnqueuefeature is not enabled, andpLibraryInfo->pLibrariesis notNULL,pLibraryInfo->pLibrariesmust not contain any graphics pipelines -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-10183
Any element ofpLibraryInfo->pLibrariesidentifying a graphics pipeline must have been created with all possible state subsets -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09134
There must be no two nodes in the pipeline that share both the same shader name and index, as specified by VkPipelineShaderStageNodeCreateInfoAMDX -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09135
There must be no two nodes in the pipeline that share the same shader name and have input payload declarations with different sizes -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09136
There must be no two nodes in the pipeline that share the same name but have different execution models -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-CoalescedInputCountAMDX-09137
There must be no two nodes in the pipeline that share the same name where one includesCoalescedInputCountAMDXand the other does not -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-StaticNumWorkgroupsAMDX-09138
There must be no two nodes in the pipeline that share the same name where one includesStaticNumWorkgroupsAMDXand the other does not -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-PayloadNodeNameAMDX-09139
If an output payload declared in any shader in the pipeline has aPayloadNodeNameAMDXdecoration with aNodeNamethat matches the shader name of any other node in the graph, the size of the output payload must match the size of the input payload in the matching node -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-10184
Ifflagsdoes not include VK_PIPELINE_CREATE_LIBRARY_BIT_KHR, and an output payload declared in any shader in the pipeline does not have aPayloadNodeSparseArrayAMDXdecoration, there must be a node in the graph corresponding to every index from 0 to itsPayloadNodeArraySizeAMDXdecoration -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-12334
flagsmust not include VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT nor VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11271
If VkPipelineCreateFlags2CreateInfoKHR::flagsincludes VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT, all libraries linked to this pipeline must also have that flag set -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11272
If VkPipelineCreateFlags2CreateInfoKHR::flagsdoes not include VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT, all libraries linked to this pipeline must also not have that flag set -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-11363
If VkPipelineCreateFlags2CreateInfoKHR::flagsdoes not include VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT,layoutmust not be VK_NULL_HANDLE
-
VUID-VkExecutionGraphPipelineCreateInfoAMDX-sType-sType
sTypemust be VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-pNext-pNext
EachpNextmember of any structure (including this one) in thepNextchain must be eitherNULLor a pointer to a valid instance of VkPipelineCompilerControlCreateInfoAMD or VkPipelineCreationFeedbackCreateInfo -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-sType-unique
ThesTypevalue of each structure in thepNextchain must be unique -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-pStages-parameter
IfstageCountis not0, andpStagesis notNULL,pStagesmust be a valid pointer to an array ofstageCountvalid VkPipelineShaderStageCreateInfo structures -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-parameter
IfpLibraryInfois notNULL,pLibraryInfomust be a valid pointer to a valid VkPipelineLibraryCreateInfoKHR structure -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-parameter
Iflayoutis not VK_NULL_HANDLE,layoutmust be a valid VkPipelineLayout handle -
VUID-VkExecutionGraphPipelineCreateInfoAMDX-commonparent
Both ofbasePipelineHandle, andlayoutthat are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice
VK_SHADER_INDEX_UNUSED_AMDX is a special shader index used to indicate that the created node does not override the index. In this case, the shader index is determined through other means. It is defined as:
#define VK_SHADER_INDEX_UNUSED_AMDX (~0U)
The VkPipelineShaderStageNodeCreateInfoAMDX structure is defined as:
// Provided by VK_AMDX_shader_enqueue
typedef struct VkPipelineShaderStageNodeCreateInfoAMDX {
VkStructureType sType;
const void* pNext;
const char* pName;
uint32_t index;
} VkPipelineShaderStageNodeCreateInfoAMDX;
-
sTypeis a VkStructureType value identifying this structure. -
pNextisNULLor a pointer to a structure extending this structure. -
pNameis the shader name to use when creating a node in an execution graph. IfpNameisNULL, the name of the entry point specified in SPIR-V is used as the shader name. -
indexis the shader index to use when creating a node in an execution graph. Ifindexis VK_SHADER_INDEX_UNUSED_AMDX then the original index is used, either as specified by theShaderIndexAMDXexecution mode, or0if that too is not specified.
When included in the pNext chain of a
VkPipelineShaderStageCreateInfo structure, this structure specifies
the shader name and shader index of a node when creating an execution graph
pipeline.
If this structure is omitted, the shader name is set to the name of the
entry point in SPIR-V and the shader index is set to 0.
When dispatching a node from another shader, the name is fixed at pipeline creation, but the index can be set dynamically. By associating multiple shaders with the same name but different indexes, applications can dynamically select different nodes to execute. Applications must ensure each node has a unique name and index.
|
Shaders with the same name must be of the same type - e.g. a compute and graphics shader, or even two compute shaders where one is coalescing and the other is not, cannot share the same name. |
-
VUID-VkPipelineShaderStageNodeCreateInfoAMDX-sType-sType
sTypemust be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX -
VUID-VkPipelineShaderStageNodeCreateInfoAMDX-pName-parameter
IfpNameis notNULL,pNamemust be a null-terminated UTF-8 string
To query the internal node index for a particular node in an execution graph, call:
// Provided by VK_AMDX_shader_enqueue
VkResult vkGetExecutionGraphPipelineNodeIndexAMDX(
VkDevice device,
VkPipeline executionGraph,
const VkPipelineShaderStageNodeCreateInfoAMDX* pNodeInfo,
uint32_t* pNodeIndex);
-
deviceis the logical device thatexecutionGraphwas created on. -
executionGraphis the execution graph pipeline to query the internal node index for. -
pNodeInfois a pointer to a VkPipelineShaderStageNodeCreateInfoAMDX structure identifying the name and index of the node to query. -
pNodeIndexis the returned internal node index of the identified node.
Once this function returns, the contents of pNodeIndex contain the
internal node index of the identified node.
-
VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-09140
pNodeInfo->pNamemust not beNULL -
VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-09141
pNodeInfo->indexmust not be VK_SHADER_INDEX_UNUSED_AMDX -
VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-executionGraph-09142
There must be a node inexecutionGraphwith a shader name and index equal topNodeInfo->pNameandpNodeInfo->index
-
VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-device-parameter
devicemust be a valid VkDevice handle -
VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-executionGraph-parameter
executionGraphmust be a valid VkPipeline handle -
VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-parameter
pNodeInfomust be a valid pointer to a valid VkPipelineShaderStageNodeCreateInfoAMDX structure -
VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeIndex-parameter
pNodeIndexmust be a valid pointer to auint32_tvalue -
VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-executionGraph-parent
executionGraphmust have been created, allocated, or retrieved fromdevice
Initializing Scratch Memory
Implementations may need scratch memory to manage dispatch queues or similar when executing a pipeline graph, and this is explicitly managed by the application.
To query the scratch space required to dispatch an execution graph, call:
// Provided by VK_AMDX_shader_enqueue
VkResult vkGetExecutionGraphPipelineScratchSizeAMDX(
VkDevice device,
VkPipeline executionGraph,
VkExecutionGraphPipelineScratchSizeAMDX* pSizeInfo);
-
deviceis the logical device thatexecutionGraphwas created on. -
executionGraphis the execution graph pipeline to query the scratch space for. -
pSizeInfois a pointer to a VkExecutionGraphPipelineScratchSizeAMDX structure that will contain the required scratch size.
After this function returns, information about the scratch space required
will be returned in pSizeInfo.
-
VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-device-parameter
devicemust be a valid VkDevice handle -
VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-executionGraph-parameter
executionGraphmust be a valid VkPipeline handle -
VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-pSizeInfo-parameter
pSizeInfomust be a valid pointer to a VkExecutionGraphPipelineScratchSizeAMDX structure -
VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-executionGraph-parent
executionGraphmust have been created, allocated, or retrieved fromdevice
The VkExecutionGraphPipelineScratchSizeAMDX structure is defined as:
// Provided by VK_AMDX_shader_enqueue
typedef struct VkExecutionGraphPipelineScratchSizeAMDX {
VkStructureType sType;
void* pNext;
VkDeviceSize minSize;
VkDeviceSize maxSize;
VkDeviceSize sizeGranularity;
} VkExecutionGraphPipelineScratchSizeAMDX;
-
sTypeis a VkStructureType value identifying this structure. -
pNextisNULLor a pointer to a structure extending this structure. -
minSizeindicates the minimum scratch space required for dispatching the queried execution graph. -
maxSizeindicates the maximum scratch space that can be used for dispatching the queried execution graph. -
sizeGranularityindicates the granularity at which the scratch space can be increased fromminSize.
Applications can use any amount of scratch memory greater than
minSize for dispatching a graph, however only the values equal to
minSize + an integer multiple of sizeGranularity will be used.
Greater values may result in higher performance, up to maxSize which
indicates the most memory that an implementation can use effectively.
-
VUID-VkExecutionGraphPipelineScratchSizeAMDX-sType-sType
sTypemust be VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX
To initialize scratch memory for a particular execution graph, call:
// Provided by VK_AMDX_shader_enqueue
void vkCmdInitializeGraphScratchMemoryAMDX(
VkCommandBuffer commandBuffer,
VkPipeline executionGraph,
VkDeviceAddress scratch,
VkDeviceSize scratchSize);
-
commandBufferis the command buffer into which the command will be recorded. -
executionGraphis the execution graph pipeline to initialize the scratch memory for. -
scratchis the address of scratch memory to be initialized. -
scratchSizeis a range in bytes of scratch memory to be initialized.
This command must be called before using scratch to dispatch the
bound execution graph pipeline.
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.
If any portion of scratch is modified by any command other than
vkCmdDispatchGraphAMDX, vkCmdDispatchGraphIndirectAMDX,
vkCmdDispatchGraphIndirectCountAMDX, or
vkCmdInitializeGraphScratchMemoryAMDX with the same execution graph,
it must be reinitialized for the execution graph again before dispatching
against it.
-
VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratch-10185
scratchmust be the device address of an allocated memory range at least as large asscratchSize -
VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratchSize-10186
scratchSizemust be greater than or equal to VkExecutionGraphPipelineScratchSizeAMDX::minSizereturned by vkGetExecutionGraphPipelineScratchSizeAMDX for the bound execution graph pipeline -
VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratch-09144
scratchmust be a multiple of 64
-
VUID-vkCmdInitializeGraphScratchMemoryAMDX-commandBuffer-parameter
commandBuffermust be a valid VkCommandBuffer handle -
VUID-vkCmdInitializeGraphScratchMemoryAMDX-executionGraph-parameter
executionGraphmust be a valid VkPipeline handle -
VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratch-parameter
scratchmust be a validVkDeviceAddressvalue -
VUID-vkCmdInitializeGraphScratchMemoryAMDX-commandBuffer-recording
commandBuffermust be in the recording state -
VUID-vkCmdInitializeGraphScratchMemoryAMDX-commandBuffer-cmdpool
TheVkCommandPoolthatcommandBufferwas allocated from must support VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT operations -
VUID-vkCmdInitializeGraphScratchMemoryAMDX-suspended
This command must not be called between suspended render pass instances -
VUID-vkCmdInitializeGraphScratchMemoryAMDX-videocoding
This command must only be called outside of a video coding scope -
VUID-vkCmdInitializeGraphScratchMemoryAMDX-bufferlevel
commandBuffermust be a primaryVkCommandBuffer -
VUID-vkCmdInitializeGraphScratchMemoryAMDX-commonparent
Both ofcommandBuffer, andexecutionGraphmust have been created, allocated, or retrieved from the same VkDevice
-
Host access to the
VkCommandPoolthatcommandBufferwas allocated from must be externally synchronized
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
Primary |
Both |
Outside |
VK_QUEUE_COMPUTE_BIT |
Action |
vkCmdInitializeGraphScratchMemoryAMDX is not affected by conditional rendering
Dispatching a Graph
Initial dispatch of an execution graph is done from the host in the same way as any other command, and can be used in a similar way to compute dispatch commands, with indirect variants available.
To record an execution graph dispatch, call:
// Provided by VK_AMDX_shader_enqueue
void vkCmdDispatchGraphAMDX(
VkCommandBuffer commandBuffer,
VkDeviceAddress scratch,
VkDeviceSize scratchSize,
const VkDispatchGraphCountInfoAMDX* pCountInfo);
-
commandBufferis the command buffer into which the command will be recorded. -
scratchis the address of scratch memory to be used. -
scratchSizeis a range in bytes of scratch memory to be used. -
pCountInfois a host pointer to a VkDispatchGraphCountInfoAMDX structure defining the nodes which will be initially executed.
When this command is executed, the nodes specified in pCountInfo are
executed.
Nodes executed as part of this command are not implicitly synchronized in
any way against each other once they are dispatched.
There are no rasterization order guarantees between separately dispatched
graphics nodes, though individual primitives within a single dispatch do
adhere to rasterization order.
Draw calls executed before or after the execution graph also execute
relative to each graphics node with respect to rasterization order.
For this command, all device/host pointers in substructures are treated as host pointers and read only during host execution of this command. Once this command returns, no reference to the original pointers is retained.
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.
This command captures command buffer state for mesh nodes similarly to draw commands.
-
VUID-vkCmdDispatchGraphAMDX-magFilter-04553
If a VkSampler created withmagFilterorminFilterequal to VK_FILTER_LINEAR,reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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-vkCmdDispatchGraphAMDX-magFilter-09598
If a VkSampler created withmagFilterorminFilterequal to VK_FILTER_LINEAR andreductionModeequal 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-vkCmdDispatchGraphAMDX-mipmapMode-04770
If a VkSampler created withmipmapModeequal to VK_SAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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-vkCmdDispatchGraphAMDX-mipmapMode-09599
If a VkSampler created withmipmapModeequal to VK_SAMPLER_MIPMAP_MODE_LINEAR andreductionModeequal 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-vkCmdDispatchGraphAMDX-unnormalizedCoordinates-09635
If a VkSampler created withunnormalizedCoordinatesequal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’slevelCountandlayerCountmust be 1 -
VUID-vkCmdDispatchGraphAMDX-None-08609
If a VkSampler created withunnormalizedCoordinatesequal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’sviewTypemust be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D -
VUID-vkCmdDispatchGraphAMDX-None-08610
If a VkSampler created withunnormalizedCoordinatesequal 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-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name -
VUID-vkCmdDispatchGraphAMDX-None-08611
If a VkSampler created withunnormalizedCoordinatesequal 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-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values -
VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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::filterCubicreturned by vkGetPhysicalDeviceImageFormatProperties2 -
VUID-vkCmdDispatchGraphAMDX-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::filterCubicMinmaxreturned by vkGetPhysicalDeviceImageFormatProperties2 -
VUID-vkCmdDispatchGraphAMDX-cubicRangeClamp-09212
If thecubicRangeClampfeature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM -
VUID-vkCmdDispatchGraphAMDX-reductionMode-09213
Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT -
VUID-vkCmdDispatchGraphAMDX-selectableCubicWeights-09214
If theselectableCubicWeightsfeature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM -
VUID-vkCmdDispatchGraphAMDX-flags-02696
Any VkImage created with a VkImageCreateInfo::flagscontaining 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-vkCmdDispatchGraphAMDX-OpTypeImage-07027
For any VkImageView being written as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT -
VUID-vkCmdDispatchGraphAMDX-OpTypeImage-07028
For any VkImageView being read as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT -
VUID-vkCmdDispatchGraphAMDX-OpTypeImage-07029
For any VkBufferView being written as a storage texel buffer where the image format field of theOpTypeImageisUnknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT -
VUID-vkCmdDispatchGraphAMDX-OpTypeImage-07030
Any VkBufferView being read as a storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT -
VUID-vkCmdDispatchGraphAMDX-None-08600
If a a bound shader was created as a VkShaderEXT without the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline without the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a set n, 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 Pipeline Layout Compatibility -
VUID-vkCmdDispatchGraphAMDX-None-08601
If a a bound shader was created as a VkShaderEXT without the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline without the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a push constant value, that 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 -
VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-maintenance4-08602
If a a bound shader was created as a VkShaderEXT without the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline without the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a push constant value, that 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 -
VUID-vkCmdDispatchGraphAMDX-None-08114
Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity 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-vkCmdDispatchGraphAMDX-imageLayout-00344
If an image descriptor is accessed by a shader, the VkImageLayout must match the subresource accessible from the VkImageView as defined by the image layout matching rules -
VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-None-08605
If a descriptor is dynamically used with a VkShaderEXT created with aVkDescriptorSetLayoutthat was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident -
VUID-vkCmdDispatchGraphAMDX-None-08606
If theshaderObjectfeature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command -
VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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 foruniformBuffers, and therobustBufferAccessfeature 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-vkCmdDispatchGraphAMDX-None-08612
If therobustBufferAccessfeature 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-vkCmdDispatchGraphAMDX-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 forstorageBuffers, and therobustBufferAccessfeature 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-vkCmdDispatchGraphAMDX-None-08613
If therobustBufferAccessfeature 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-vkCmdDispatchGraphAMDX-commandBuffer-02707
IfcommandBufferis an unprotected command buffer andprotectedNoFaultis not supported, any resource accessed by bound shaders must not be a protected resource -
VUID-vkCmdDispatchGraphAMDX-viewType-07752
If a VkImageView is accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types -
VUID-vkCmdDispatchGraphAMDX-format-07753
If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match -
VUID-vkCmdDispatchGraphAMDX-OpImageWrite-08795
If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s format -
VUID-vkCmdDispatchGraphAMDX-OpImageWrite-08796
If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components -
VUID-vkCmdDispatchGraphAMDX-OpImageWrite-04469
If a VkBufferView is accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the buffer view’s format -
VUID-vkCmdDispatchGraphAMDX-SampledType-04470
If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 -
VUID-vkCmdDispatchGraphAMDX-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, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 -
VUID-vkCmdDispatchGraphAMDX-SampledType-04472
If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 -
VUID-vkCmdDispatchGraphAMDX-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, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 -
VUID-vkCmdDispatchGraphAMDX-sparseImageInt64Atomics-04474
If thesparseImageInt64Atomicsfeature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
VUID-vkCmdDispatchGraphAMDX-sparseImageInt64Atomics-04475
If thesparseImageInt64Atomicsfeature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
VUID-vkCmdDispatchGraphAMDX-OpImageSampleWeightedQCOM-06971
IfOpImageSampleWeightedQCOMis 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-vkCmdDispatchGraphAMDX-OpImageSampleWeightedQCOM-06972
IfOpImageSampleWeightedQCOMuses 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-vkCmdDispatchGraphAMDX-OpImageBoxFilterQCOM-06973
IfOpImageBoxFilterQCOMis 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-vkCmdDispatchGraphAMDX-OpImageBlockMatchSSDQCOM-06974
IfOpImageBlockMatchSSDQCOMis 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-vkCmdDispatchGraphAMDX-OpImageBlockMatchSADQCOM-06975
IfOpImageBlockMatchSADQCOMis 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-vkCmdDispatchGraphAMDX-OpImageBlockMatchSADQCOM-06976
IfOpImageBlockMatchSADQCOMor 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-vkCmdDispatchGraphAMDX-OpImageSampleWeightedQCOM-06977
IfOpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM -
VUID-vkCmdDispatchGraphAMDX-OpImageSampleWeightedQCOM-06978
If any command other thanOpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses 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-vkCmdDispatchGraphAMDX-OpImageBlockMatchWindow-09215
If aOpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction 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-vkCmdDispatchGraphAMDX-OpImageBlockMatchWindow-09216
If aOpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction 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-vkCmdDispatchGraphAMDX-OpImageBlockMatchWindow-09217
If aOpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation -
VUID-vkCmdDispatchGraphAMDX-None-07288
Any shader invocation executed by this command must terminate -
VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-commandBuffer-10746
TheVkDeviceMemoryobject allocated from aVkMemoryHeapwith 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 incommandBuffer -
VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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 the VK_TENSOR_USAGE_SHADER_BIT_ARM usage flag set -
VUID-vkCmdDispatchGraphAMDX-dimensionCount-09905
If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided via VkTensorCreateInfoARM::pDescriptionwhen creating the underlying VkTensorARM object -
VUID-vkCmdDispatchGraphAMDX-OpTypeTensorARM-09906
If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access -
VUID-vkCmdDispatchGraphAMDX-None-11297
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple ofbufferDescriptorAlignment -
VUID-vkCmdDispatchGraphAMDX-None-11298
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple ofimageDescriptorAlignment -
VUID-vkCmdDispatchGraphAMDX-None-11299
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple ofsamplerDescriptorAlignment -
VUID-vkCmdDispatchGraphAMDX-None-11397
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple oftensorDescriptorAlignment -
VUID-vkCmdDispatchGraphAMDX-None-11300
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 -
VUID-vkCmdDispatchGraphAMDX-None-11301
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validVkDeviceAddressbacked by physical memory at every offset specified by each mapping -
VUID-vkCmdDispatchGraphAMDX-None-11302
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validVkDeviceAddress -
VUID-vkCmdDispatchGraphAMDX-None-11304
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 -
VUID-vkCmdDispatchGraphAMDX-None-11305
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validVkDeviceAddressbacked by physical memory at every offset specified by each mapping -
VUID-vkCmdDispatchGraphAMDX-None-11306
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validVkDeviceAddress -
VUID-vkCmdDispatchGraphAMDX-None-11308
For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound -
VUID-vkCmdDispatchGraphAMDX-None-11309
If a bound shader was created as a VkShaderEXT with the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline with the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands -
VUID-vkCmdDispatchGraphAMDX-None-11372
If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, 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 foruniformBuffers, therobustBufferAccess2feature is not enabled, and therobustBufferAccessfeature is not enabled, that stage must not access values outside of the range of the descriptor specified via VkDeviceAddressRangeEXT when the descriptor was written -
VUID-vkCmdDispatchGraphAMDX-None-11373
If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, 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 forstorageBuffers, therobustBufferAccess2feature is not enabled, and therobustBufferAccessfeature is not enabled, that stage must not access values outside of the range of the descriptor specified by VkDeviceAddressRangeEXT when the descriptor was written -
VUID-vkCmdDispatchGraphAMDX-None-11374
If therobustBufferAccess2feature is not enabled, therobustBufferAccessfeature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified by VkDeviceAddressRangeEXT when the descriptor was written -
VUID-vkCmdDispatchGraphAMDX-pBindInfo-11375
If any bound shader uses an embedded sampler via a descriptor mapping, the value ofpBindInfo->reservedRangeSizeset for vkCmdBindSamplerHeapEXT must be greater than or equal tominSamplerHeapReservedRangeWithEmbedded -
VUID-vkCmdDispatchGraphAMDX-None-11376
If a bound shader was created as a VkShaderEXT with the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline with the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a push constant value, that value must have been set by vkCmdPushDataEXT -
VUID-vkCmdDispatchGraphAMDX-None-11398
If a bound shader was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds -
VUID-vkCmdDispatchGraphAMDX-None-11437
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with the VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphAMDX-None-11438
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with the VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphAMDX-None-11441
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned tominUniformBufferOffsetAlignment -
VUID-vkCmdDispatchGraphAMDX-None-11439
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with the VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphAMDX-None-11442
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned tominStorageBufferOffsetAlignment -
VUID-vkCmdDispatchGraphAMDX-None-11485
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from a VkAccelerationStructureKHR object via vkGetAccelerationStructureDeviceAddressKHR or handle retrieved from a VkAccelerationStructureNV object via vkGetAccelerationStructureHandleNV -
VUID-vkCmdDispatchGraphAMDX-index-11450
If a shader uses a sampler descriptor to sample an image as a result of this command, and that sampler descriptor uses a custom border color with an index defined by VkSamplerCustomBorderColorIndexCreateInfoEXT, the value of VkSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color -
VUID-vkCmdDispatchGraphAMDX-protectedNoFault-11455
IfprotectedNoFaultis not supported, a pipeline is bound to the pipeline bind point used by this command, or a shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without the VK_BUFFER_CREATE_PROTECTED_BIT create flag set -
VUID-vkCmdDispatchGraphAMDX-protectedNoFault-11456
IfprotectedNoFaultis not supported, a pipeline is bound to the pipeline bind point used by this command, or a shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without the VK_BUFFER_CREATE_PROTECTED_BIT create flag set -
VUID-vkCmdDispatchGraphAMDX-commandBuffer-09181
commandBuffermust not be a protected command buffer -
VUID-vkCmdDispatchGraphAMDX-commandBuffer-09182
commandBuffermust be a primary command buffer -
VUID-vkCmdDispatchGraphAMDX-scratch-10192
scratchmust be the device address of an allocated memory range at least as large asscratchSize -
VUID-vkCmdDispatchGraphAMDX-scratchSize-10193
scratchSizemust be greater than or equal to VkExecutionGraphPipelineScratchSizeAMDX::minSizereturned by vkGetExecutionGraphPipelineScratchSizeAMDX for the bound execution graph pipeline -
VUID-vkCmdDispatchGraphAMDX-scratch-09184
scratchmust 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 usage flags set -
VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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 aMaxNumWorkgroupsAMDXdecoration in the dispatched node ormaxComputeWorkGroupCount -
VUID-vkCmdDispatchGraphAMDX-maxExecutionGraphShaderPayloadCount-09187
Execution of this command must not cause any shader to initialize more thanmaxExecutionGraphShaderPayloadCountoutput payloads -
VUID-vkCmdDispatchGraphAMDX-NodeMaxPayloadsAMDX-09188
Execution of this command must not cause any shader that declaresNodeMaxPayloadsAMDXto initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to eachNodeMaxPayloadsAMDXdecoration separately -
VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-pCountInfo-09145
pCountInfo->infosmust be a host pointer to a memory allocation at least as large as the product ofcountandstride -
VUID-vkCmdDispatchGraphAMDX-infos-09146
Host memory locations at indexes in the range [infos,infos+ (count*stride)), at a granularity ofstridemust contain valid VkDispatchGraphInfoAMDX structures in the first 24 bytes -
VUID-vkCmdDispatchGraphAMDX-pCountInfo-09147
For each VkDispatchGraphInfoAMDX structure inpCountInfo->infos,payloadsmust be a host pointer to a memory allocation at least as large as the product ofpayloadCountandpayloadStride -
VUID-vkCmdDispatchGraphAMDX-pCountInfo-09148
For each VkDispatchGraphInfoAMDX structure inpCountInfo->infos,nodeIndexmust be a valid node index in the bound execution graph pipeline, as returned by vkGetExecutionGraphPipelineNodeIndexAMDX -
VUID-vkCmdDispatchGraphAMDX-pCountInfo-09149
For each VkDispatchGraphInfoAMDX structure inpCountInfo->infos, host memory locations at indexes in the range [payloads,payloads+ (payloadCount*payloadStride)), at a granularity ofpayloadStridemust contain a payload matching the size of the input payload expected by the node innodeIndexin the first bytes
-
VUID-vkCmdDispatchGraphAMDX-commandBuffer-parameter
commandBuffermust be a valid VkCommandBuffer handle -
VUID-vkCmdDispatchGraphAMDX-scratch-parameter
scratchmust be a validVkDeviceAddressvalue -
VUID-vkCmdDispatchGraphAMDX-pCountInfo-parameter
pCountInfomust be a valid pointer to a valid VkDispatchGraphCountInfoAMDX structure -
VUID-vkCmdDispatchGraphAMDX-commandBuffer-recording
commandBuffermust be in the recording state -
VUID-vkCmdDispatchGraphAMDX-commandBuffer-cmdpool
TheVkCommandPoolthatcommandBufferwas allocated from must support VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT operations -
VUID-vkCmdDispatchGraphAMDX-suspended
This command must not be called between suspended render pass instances -
VUID-vkCmdDispatchGraphAMDX-videocoding
This command must only be called outside of a video coding scope -
VUID-vkCmdDispatchGraphAMDX-bufferlevel
commandBuffermust be a primaryVkCommandBuffer
-
Host access to the
VkCommandPoolthatcommandBufferwas allocated from must be externally synchronized
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
Primary |
Both |
Outside |
VK_QUEUE_COMPUTE_BIT |
Action |
vkCmdDispatchGraphAMDX is affected by conditional rendering
To record an execution graph dispatch with node and payload parameters read on device, call:
// Provided by VK_AMDX_shader_enqueue
void vkCmdDispatchGraphIndirectAMDX(
VkCommandBuffer commandBuffer,
VkDeviceAddress scratch,
VkDeviceSize scratchSize,
const VkDispatchGraphCountInfoAMDX* pCountInfo);
-
commandBufferis the command buffer into which the command will be recorded. -
scratchis the address of scratch memory to be used. -
scratchSizeis a range in bytes of scratch memory to be used. -
pCountInfois a host pointer to a VkDispatchGraphCountInfoAMDX structure defining the nodes which will be initially executed.
When this command is executed, the nodes specified in pCountInfo are
executed.
Nodes executed as part of this command are not implicitly synchronized in
any way against each other once they are dispatched.
There are no rasterization order guarantees between separately dispatched
graphics nodes, though individual primitives within a single dispatch do
adhere to rasterization order.
Draw calls executed before or after the execution graph also execute
relative to each graphics node with respect to rasterization order.
For this command, all device/host 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.
This command captures command buffer state for mesh nodes similarly to draw commands.
-
VUID-vkCmdDispatchGraphIndirectAMDX-magFilter-04553
If a VkSampler created withmagFilterorminFilterequal to VK_FILTER_LINEAR,reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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-vkCmdDispatchGraphIndirectAMDX-magFilter-09598
If a VkSampler created withmagFilterorminFilterequal to VK_FILTER_LINEAR andreductionModeequal 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-vkCmdDispatchGraphIndirectAMDX-mipmapMode-04770
If a VkSampler created withmipmapModeequal to VK_SAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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-vkCmdDispatchGraphIndirectAMDX-mipmapMode-09599
If a VkSampler created withmipmapModeequal to VK_SAMPLER_MIPMAP_MODE_LINEAR andreductionModeequal 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-vkCmdDispatchGraphIndirectAMDX-unnormalizedCoordinates-09635
If a VkSampler created withunnormalizedCoordinatesequal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’slevelCountandlayerCountmust be 1 -
VUID-vkCmdDispatchGraphIndirectAMDX-None-08609
If a VkSampler created withunnormalizedCoordinatesequal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’sviewTypemust be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D -
VUID-vkCmdDispatchGraphIndirectAMDX-None-08610
If a VkSampler created withunnormalizedCoordinatesequal 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-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name -
VUID-vkCmdDispatchGraphIndirectAMDX-None-08611
If a VkSampler created withunnormalizedCoordinatesequal 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-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values -
VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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::filterCubicreturned by vkGetPhysicalDeviceImageFormatProperties2 -
VUID-vkCmdDispatchGraphIndirectAMDX-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::filterCubicMinmaxreturned by vkGetPhysicalDeviceImageFormatProperties2 -
VUID-vkCmdDispatchGraphIndirectAMDX-cubicRangeClamp-09212
If thecubicRangeClampfeature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM -
VUID-vkCmdDispatchGraphIndirectAMDX-reductionMode-09213
Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with VK_FILTER_CUBIC_EXT -
VUID-vkCmdDispatchGraphIndirectAMDX-selectableCubicWeights-09214
If theselectableCubicWeightsfeature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM -
VUID-vkCmdDispatchGraphIndirectAMDX-flags-02696
Any VkImage created with a VkImageCreateInfo::flagscontaining 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-vkCmdDispatchGraphIndirectAMDX-OpTypeImage-07027
For any VkImageView being written as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT -
VUID-vkCmdDispatchGraphIndirectAMDX-OpTypeImage-07028
For any VkImageView being read as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT -
VUID-vkCmdDispatchGraphIndirectAMDX-OpTypeImage-07029
For any VkBufferView being written as a storage texel buffer where the image format field of theOpTypeImageisUnknown, the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT -
VUID-vkCmdDispatchGraphIndirectAMDX-OpTypeImage-07030
Any VkBufferView being read as a storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT -
VUID-vkCmdDispatchGraphIndirectAMDX-None-08600
If a a bound shader was created as a VkShaderEXT without the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline without the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a set n, 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 Pipeline Layout Compatibility -
VUID-vkCmdDispatchGraphIndirectAMDX-None-08601
If a a bound shader was created as a VkShaderEXT without the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline without the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a push constant value, that 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 -
VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-maintenance4-08602
If a a bound shader was created as a VkShaderEXT without the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline without the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a push constant value, that 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 -
VUID-vkCmdDispatchGraphIndirectAMDX-None-08114
Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity 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-vkCmdDispatchGraphIndirectAMDX-imageLayout-00344
If an image descriptor is accessed by a shader, the VkImageLayout must match the subresource accessible from the VkImageView as defined by the image layout matching rules -
VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-None-08605
If a descriptor is dynamically used with a VkShaderEXT created with aVkDescriptorSetLayoutthat was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident -
VUID-vkCmdDispatchGraphIndirectAMDX-None-08606
If theshaderObjectfeature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command -
VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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 foruniformBuffers, and therobustBufferAccessfeature 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-vkCmdDispatchGraphIndirectAMDX-None-08612
If therobustBufferAccessfeature 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-vkCmdDispatchGraphIndirectAMDX-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 forstorageBuffers, and therobustBufferAccessfeature 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-vkCmdDispatchGraphIndirectAMDX-None-08613
If therobustBufferAccessfeature 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-vkCmdDispatchGraphIndirectAMDX-commandBuffer-02707
IfcommandBufferis an unprotected command buffer andprotectedNoFaultis not supported, any resource accessed by bound shaders must not be a protected resource -
VUID-vkCmdDispatchGraphIndirectAMDX-viewType-07752
If a VkImageView is accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types -
VUID-vkCmdDispatchGraphIndirectAMDX-format-07753
If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match -
VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWrite-08795
If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s format -
VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWrite-08796
If a VkImageView created with the format VK_FORMAT_A8_UNORM is accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components -
VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWrite-04469
If a VkBufferView is accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the buffer view’s format -
VUID-vkCmdDispatchGraphIndirectAMDX-SampledType-04470
If a VkImageView with a VkFormat that has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 -
VUID-vkCmdDispatchGraphIndirectAMDX-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, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 -
VUID-vkCmdDispatchGraphIndirectAMDX-SampledType-04472
If a VkBufferView with a VkFormat that has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 -
VUID-vkCmdDispatchGraphIndirectAMDX-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, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 -
VUID-vkCmdDispatchGraphIndirectAMDX-sparseImageInt64Atomics-04474
If thesparseImageInt64Atomicsfeature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
VUID-vkCmdDispatchGraphIndirectAMDX-sparseImageInt64Atomics-04475
If thesparseImageInt64Atomicsfeature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
VUID-vkCmdDispatchGraphIndirectAMDX-OpImageSampleWeightedQCOM-06971
IfOpImageSampleWeightedQCOMis 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-vkCmdDispatchGraphIndirectAMDX-OpImageSampleWeightedQCOM-06972
IfOpImageSampleWeightedQCOMuses 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-vkCmdDispatchGraphIndirectAMDX-OpImageBoxFilterQCOM-06973
IfOpImageBoxFilterQCOMis 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-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchSSDQCOM-06974
IfOpImageBlockMatchSSDQCOMis 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-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchSADQCOM-06975
IfOpImageBlockMatchSADQCOMis 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-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchSADQCOM-06976
IfOpImageBlockMatchSADQCOMor 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-vkCmdDispatchGraphIndirectAMDX-OpImageSampleWeightedQCOM-06977
IfOpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses a VkSampler as a result of this command, then the sampler must have been created with VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM -
VUID-vkCmdDispatchGraphIndirectAMDX-OpImageSampleWeightedQCOM-06978
If any command other thanOpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses 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-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchWindow-09215
If aOpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction 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-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchWindow-09216
If aOpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction 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-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchWindow-09217
If aOpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation -
VUID-vkCmdDispatchGraphIndirectAMDX-None-07288
Any shader invocation executed by this command must terminate -
VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-commandBuffer-10746
TheVkDeviceMemoryobject allocated from aVkMemoryHeapwith 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 incommandBuffer -
VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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 the VK_TENSOR_USAGE_SHADER_BIT_ARM usage flag set -
VUID-vkCmdDispatchGraphIndirectAMDX-dimensionCount-09905
If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided via VkTensorCreateInfoARM::pDescriptionwhen creating the underlying VkTensorARM object -
VUID-vkCmdDispatchGraphIndirectAMDX-OpTypeTensorARM-09906
If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11297
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple ofbufferDescriptorAlignment -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11298
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple ofimageDescriptorAlignment -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11299
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple ofsamplerDescriptorAlignment -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11397
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple oftensorDescriptorAlignment -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11300
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11301
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validVkDeviceAddressbacked by physical memory at every offset specified by each mapping -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11302
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validVkDeviceAddress -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11304
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11305
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validVkDeviceAddressbacked by physical memory at every offset specified by each mapping -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11306
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validVkDeviceAddress -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11308
For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11309
If a bound shader was created as a VkShaderEXT with the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline with the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11372
If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, 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 foruniformBuffers, therobustBufferAccess2feature is not enabled, and therobustBufferAccessfeature is not enabled, that stage must not access values outside of the range of the descriptor specified via VkDeviceAddressRangeEXT when the descriptor was written -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11373
If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, 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 forstorageBuffers, therobustBufferAccess2feature is not enabled, and therobustBufferAccessfeature is not enabled, that stage must not access values outside of the range of the descriptor specified by VkDeviceAddressRangeEXT when the descriptor was written -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11374
If therobustBufferAccess2feature is not enabled, therobustBufferAccessfeature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified by VkDeviceAddressRangeEXT when the descriptor was written -
VUID-vkCmdDispatchGraphIndirectAMDX-pBindInfo-11375
If any bound shader uses an embedded sampler via a descriptor mapping, the value ofpBindInfo->reservedRangeSizeset for vkCmdBindSamplerHeapEXT must be greater than or equal tominSamplerHeapReservedRangeWithEmbedded -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11376
If a bound shader was created as a VkShaderEXT with the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline with the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a push constant value, that value must have been set by vkCmdPushDataEXT -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11398
If a bound shader was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11437
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with the VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11438
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with the VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11441
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned tominUniformBufferOffsetAlignment -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11439
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with the VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11442
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned tominStorageBufferOffsetAlignment -
VUID-vkCmdDispatchGraphIndirectAMDX-None-11485
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from a VkAccelerationStructureKHR object via vkGetAccelerationStructureDeviceAddressKHR or handle retrieved from a VkAccelerationStructureNV object via vkGetAccelerationStructureHandleNV -
VUID-vkCmdDispatchGraphIndirectAMDX-index-11450
If a shader uses a sampler descriptor to sample an image as a result of this command, and that sampler descriptor uses a custom border color with an index defined by VkSamplerCustomBorderColorIndexCreateInfoEXT, the value of VkSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color -
VUID-vkCmdDispatchGraphIndirectAMDX-protectedNoFault-11455
IfprotectedNoFaultis not supported, a pipeline is bound to the pipeline bind point used by this command, or a shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without the VK_BUFFER_CREATE_PROTECTED_BIT create flag set -
VUID-vkCmdDispatchGraphIndirectAMDX-protectedNoFault-11456
IfprotectedNoFaultis not supported, a pipeline is bound to the pipeline bind point used by this command, or a shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without the VK_BUFFER_CREATE_PROTECTED_BIT create flag set -
VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-09181
commandBuffermust not be a protected command buffer -
VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-09182
commandBuffermust be a primary command buffer -
VUID-vkCmdDispatchGraphIndirectAMDX-scratch-10192
scratchmust be the device address of an allocated memory range at least as large asscratchSize -
VUID-vkCmdDispatchGraphIndirectAMDX-scratchSize-10193
scratchSizemust be greater than or equal to VkExecutionGraphPipelineScratchSizeAMDX::minSizereturned by vkGetExecutionGraphPipelineScratchSizeAMDX for the bound execution graph pipeline -
VUID-vkCmdDispatchGraphIndirectAMDX-scratch-09184
scratchmust 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 usage flags set -
VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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 aMaxNumWorkgroupsAMDXdecoration in the dispatched node ormaxComputeWorkGroupCount -
VUID-vkCmdDispatchGraphIndirectAMDX-maxExecutionGraphShaderPayloadCount-09187
Execution of this command must not cause any shader to initialize more thanmaxExecutionGraphShaderPayloadCountoutput payloads -
VUID-vkCmdDispatchGraphIndirectAMDX-NodeMaxPayloadsAMDX-09188
Execution of this command must not cause any shader that declaresNodeMaxPayloadsAMDXto initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to eachNodeMaxPayloadsAMDXdecoration separately -
VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09150
pCountInfo->infosmust be a device pointer to a memory allocation at least as large as the product ofcountandstridewhen this command is executed on the device -
VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09151
pCountInfo->infosmust be a device address within a VkBuffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09152
pCountInfo->infosmust be a multiple ofexecutionGraphDispatchAddressAlignment -
VUID-vkCmdDispatchGraphIndirectAMDX-infos-09153
Device memory locations at indexes in the range [infos,infos+ (count*stride)), at a granularity ofstridemust contain valid VkDispatchGraphInfoAMDX structures in the first 24 bytes when this command is executed on the device -
VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09154
For each VkDispatchGraphInfoAMDX structure inpCountInfo->infos,payloadsmust be a device pointer to a memory allocation at least as large as the product ofpayloadCountandpayloadStridewhen this command is executed on the device -
VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09155
For each VkDispatchGraphInfoAMDX structure inpCountInfo->infos,payloadsmust be a device address within a VkBuffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09156
For each VkDispatchGraphInfoAMDX structure inpCountInfo->infos,payloadsmust be a multiple ofexecutionGraphDispatchAddressAlignment -
VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09157
For each VkDispatchGraphInfoAMDX structure inpCountInfo->infos,nodeIndexmust be a valid node index in the bound execution graph pipeline, as returned by vkGetExecutionGraphPipelineNodeIndexAMDX when this command is executed on the device -
VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09158
For each VkDispatchGraphInfoAMDX structure inpCountInfo->infos, device memory locations at indexes in the range [payloads,payloads+ (payloadCount*payloadStride)), at a granularity ofpayloadStridemust contain a payload matching the size of the input payload expected by the node innodeIndexin the first bytes when this command is executed on the device
-
VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-parameter
commandBuffermust be a valid VkCommandBuffer handle -
VUID-vkCmdDispatchGraphIndirectAMDX-scratch-parameter
scratchmust be a validVkDeviceAddressvalue -
VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-parameter
pCountInfomust be a valid pointer to a valid VkDispatchGraphCountInfoAMDX structure -
VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-recording
commandBuffermust be in the recording state -
VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-cmdpool
TheVkCommandPoolthatcommandBufferwas allocated from must support VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT operations -
VUID-vkCmdDispatchGraphIndirectAMDX-suspended
This command must not be called between suspended render pass instances -
VUID-vkCmdDispatchGraphIndirectAMDX-videocoding
This command must only be called outside of a video coding scope -
VUID-vkCmdDispatchGraphIndirectAMDX-bufferlevel
commandBuffermust be a primaryVkCommandBuffer
-
Host access to the
VkCommandPoolthatcommandBufferwas allocated from must be externally synchronized
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
Primary |
Both |
Outside |
VK_QUEUE_COMPUTE_BIT |
Action |
vkCmdDispatchGraphIndirectAMDX is affected by conditional rendering
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);
-
commandBufferis the command buffer into which the command will be recorded. -
scratchis the address of scratch memory to be used. -
scratchSizeis a range in bytes of scratch memory to be used. -
countInfois a device address of a VkDispatchGraphCountInfoAMDX structure defining the nodes which will be initially executed.
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.
-
VUID-vkCmdDispatchGraphIndirectCountAMDX-magFilter-04553
If a VkSampler created withmagFilterorminFilterequal to VK_FILTER_LINEAR,reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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 withmagFilterorminFilterequal to VK_FILTER_LINEAR andreductionModeequal 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 withmipmapModeequal to VK_SAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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 withmipmapModeequal to VK_SAMPLER_MIPMAP_MODE_LINEAR andreductionModeequal 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 withunnormalizedCoordinatesequal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’slevelCountandlayerCountmust be 1 -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08609
If a VkSampler created withunnormalizedCoordinatesequal to VK_TRUE is used to sample a VkImageView as a result of this command, then the image view’sviewTypemust be VK_IMAGE_VIEW_TYPE_1D or VK_IMAGE_VIEW_TYPE_2D -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08610
If a VkSampler created withunnormalizedCoordinatesequal 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-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08611
If a VkSampler created withunnormalizedCoordinatesequal 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-VOpImageSample*orOpImageSparseSample*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::filterCubicreturned 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::filterCubicMinmaxreturned by vkGetPhysicalDeviceImageFormatProperties2 -
VUID-vkCmdDispatchGraphIndirectCountAMDX-cubicRangeClamp-09212
If thecubicRangeClampfeature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must not have a VkSamplerReductionModeCreateInfo::reductionModeequal to VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM -
VUID-vkCmdDispatchGraphIndirectCountAMDX-reductionMode-09213
Any VkImageView being sampled with a VkSamplerReductionModeCreateInfo::reductionModeequal 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 theselectableCubicWeightsfeature is not enabled, then any VkImageView being sampled with VK_FILTER_CUBIC_EXT as a result of this command must have VkSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal to VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM -
VUID-vkCmdDispatchGraphIndirectCountAMDX-flags-02696
Any VkImage created with a VkImageCreateInfo::flagscontaining 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 theOpTypeImageisUnknown, 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 theOpTypeImageisUnknown, 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 theOpTypeImageisUnknown, 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 theOpTypeImageisUnknownthen the view’s buffer features must contain VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08600
If a a bound shader was created as a VkShaderEXT without the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline without the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a set n, 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 Pipeline Layout Compatibility -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08601
If a a bound shader was created as a VkShaderEXT without the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline without the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a push constant value, that 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 -
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 a a bound shader was created as a VkShaderEXT without the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline without the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a push constant value, that 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 -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08114
Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity 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-imageLayout-00344
If an image descriptor is accessed by a shader, the VkImageLayout must match the subresource accessible from the VkImageView as defined by the image layout matching rules -
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 aVkDescriptorSetLayoutthat was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08606
If theshaderObjectfeature 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 foruniformBuffers, and therobustBufferAccessfeature 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 therobustBufferAccessfeature 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 forstorageBuffers, and therobustBufferAccessfeature 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 therobustBufferAccessfeature 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
IfcommandBufferis an unprotected command buffer andprotectedNoFaultis 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’sviewTypemust match theDimoperand of theOpTypeImageas described in Compatibility Between SPIR-V Image Dimensions and Vulkan ImageView Types -
VUID-vkCmdDispatchGraphIndirectCountAMDX-format-07753
If a VkImageView or VkBufferView is accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match -
VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWrite-08795
If a VkImageView created with a format other than VK_FORMAT_A8_UNORM is accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand 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 usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components -
VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWrite-04469
If a VkBufferView is accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand 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, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 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, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 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, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 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, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 -
VUID-vkCmdDispatchGraphIndirectCountAMDX-sparseImageInt64Atomics-04474
If thesparseImageInt64Atomicsfeature is not enabled, VkImage objects created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
VUID-vkCmdDispatchGraphIndirectCountAMDX-sparseImageInt64Atomics-04475
If thesparseImageInt64Atomicsfeature is not enabled, VkBuffer objects created with the VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageSampleWeightedQCOM-06971
IfOpImageSampleWeightedQCOMis 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-OpImageSampleWeightedQCOM-06972
IfOpImageSampleWeightedQCOMuses 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
IfOpImageBoxFilterQCOMis 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
IfOpImageBlockMatchSSDQCOMis 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
IfOpImageBlockMatchSADQCOMis 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
IfOpImageBlockMatchSADQCOMor 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-OpImageSampleWeightedQCOM-06977
IfOpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses 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-OpImageSampleWeightedQCOM-06978
If any command other thanOpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses 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 aOpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction 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 aOpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction 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 aOpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread 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
TheVkDeviceMemoryobject allocated from aVkMemoryHeapwith 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 incommandBuffer -
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 the VK_TENSOR_USAGE_SHADER_BIT_ARM usage flag set -
VUID-vkCmdDispatchGraphIndirectCountAMDX-dimensionCount-09905
If a VK_DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided via VkTensorCreateInfoARM::pDescriptionwhen 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 theOpTypeTensorARMof the tensor resource variable must be compatible with the VkFormat of the VkTensorViewARM used for the access -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11297
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple ofbufferDescriptorAlignment -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11298
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple ofimageDescriptorAlignment -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11299
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple ofsamplerDescriptorAlignment -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11397
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple oftensorDescriptorAlignment -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11300
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11301
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validVkDeviceAddressbacked by physical memory at every offset specified by each mapping -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11302
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validVkDeviceAddress -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11304
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11305
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validVkDeviceAddressbacked by physical memory at every offset specified by each mapping -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11306
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validVkDeviceAddress -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11308
For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11309
If a bound shader was created as a VkShaderEXT with the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline with the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11372
If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, 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 foruniformBuffers, therobustBufferAccess2feature is not enabled, and therobustBufferAccessfeature is not enabled, that stage must not access values outside of the range of the descriptor specified via VkDeviceAddressRangeEXT when the descriptor was written -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11373
If any stage of the VkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, 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 forstorageBuffers, therobustBufferAccess2feature is not enabled, and therobustBufferAccessfeature is not enabled, that stage must not access values outside of the range of the descriptor specified by VkDeviceAddressRangeEXT when the descriptor was written -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11374
If therobustBufferAccess2feature is not enabled, therobustBufferAccessfeature is not enabled, and any VkShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified by VkDeviceAddressRangeEXT when the descriptor was written -
VUID-vkCmdDispatchGraphIndirectCountAMDX-pBindInfo-11375
If any bound shader uses an embedded sampler via a descriptor mapping, the value ofpBindInfo->reservedRangeSizeset for vkCmdBindSamplerHeapEXT must be greater than or equal tominSamplerHeapReservedRangeWithEmbedded -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11376
If a bound shader was created as a VkShaderEXT with the VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline with the VK_PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a push constant value, that value must have been set by vkCmdPushDataEXT -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11398
If a bound shader was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11437
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with the VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11438
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with the VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11441
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned tominUniformBufferOffsetAlignment -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11439
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with the VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11442
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned tominStorageBufferOffsetAlignment -
VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11485
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from a VkAccelerationStructureKHR object via vkGetAccelerationStructureDeviceAddressKHR or handle retrieved from a VkAccelerationStructureNV object via vkGetAccelerationStructureHandleNV -
VUID-vkCmdDispatchGraphIndirectCountAMDX-index-11450
If a shader uses a sampler descriptor to sample an image as a result of this command, and that sampler descriptor uses a custom border color with an index defined by VkSamplerCustomBorderColorIndexCreateInfoEXT, the value of VkSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color -
VUID-vkCmdDispatchGraphIndirectCountAMDX-protectedNoFault-11455
IfprotectedNoFaultis not supported, a pipeline is bound to the pipeline bind point used by this command, or a shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without the VK_BUFFER_CREATE_PROTECTED_BIT create flag set -
VUID-vkCmdDispatchGraphIndirectCountAMDX-protectedNoFault-11456
IfprotectedNoFaultis not supported, a pipeline is bound to the pipeline bind point used by this command, or a shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT or VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without the VK_BUFFER_CREATE_PROTECTED_BIT create flag set -
VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-09181
commandBuffermust not be a protected command buffer -
VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-09182
commandBuffermust be a primary command buffer -
VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-10192
scratchmust be the device address of an allocated memory range at least as large asscratchSize -
VUID-vkCmdDispatchGraphIndirectCountAMDX-scratchSize-10193
scratchSizemust be greater than or equal to VkExecutionGraphPipelineScratchSizeAMDX::minSizereturned by vkGetExecutionGraphPipelineScratchSizeAMDX for the bound execution graph pipeline -
VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-09184
scratchmust 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 usage flags set -
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 aMaxNumWorkgroupsAMDXdecoration in the dispatched node ormaxComputeWorkGroupCount -
VUID-vkCmdDispatchGraphIndirectCountAMDX-maxExecutionGraphShaderPayloadCount-09187
Execution of this command must not cause any shader to initialize more thanmaxExecutionGraphShaderPayloadCountoutput payloads -
VUID-vkCmdDispatchGraphIndirectCountAMDX-NodeMaxPayloadsAMDX-09188
Execution of this command must not cause any shader that declaresNodeMaxPayloadsAMDXto initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to eachNodeMaxPayloadsAMDXdecoration 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
countInfomust 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
countInfomust be a device address within a VkBuffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09161
countInfomust be a multiple ofexecutionGraphDispatchAddressAlignment -
VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09162
countInfo->infosmust be a device pointer to a memory allocation at least as large as the product ofcountandstridewhen this command is executed on the device -
VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09163
countInfo->infosmust be a device address within a VkBuffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09164
countInfo->infosmust be a multiple ofexecutionGraphDispatchAddressAlignment -
VUID-vkCmdDispatchGraphIndirectCountAMDX-infos-09165
Device memory locations at indexes in the range [infos,infos+ (count*stride)), at a granularity ofstridemust 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 incountInfo->infos,payloadsmust be a device pointer to a memory allocation at least as large as the product ofpayloadCountandpayloadStridewhen this command is executed on the device -
VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09167
For each VkDispatchGraphInfoAMDX structure incountInfo->infos,payloadsmust be a device address within a VkBuffer created with the VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT usage flag set -
VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09168
For each VkDispatchGraphInfoAMDX structure incountInfo->infos,payloadsmust be a multiple ofexecutionGraphDispatchAddressAlignment -
VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09169
For each VkDispatchGraphInfoAMDX structure incountInfo->infos,nodeIndexmust 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 incountInfo->infos, device memory locations at indexes in the range [payloads,payloads+ (payloadCount*payloadStride)), at a granularity ofpayloadStridemust contain a payload matching the size of the input payload expected by the node innodeIndexin the first bytes when this command is executed on the device
-
VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-parameter
commandBuffermust be a valid VkCommandBuffer handle -
VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-parameter
scratchmust be a validVkDeviceAddressvalue -
VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-parameter
countInfomust be a validVkDeviceAddressvalue -
VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-recording
commandBuffermust be in the recording state -
VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-cmdpool
TheVkCommandPoolthatcommandBufferwas allocated from must support VK_QUEUE_COMPUTE_BIT, or VK_QUEUE_GRAPHICS_BIT operations -
VUID-vkCmdDispatchGraphIndirectCountAMDX-suspended
This command must not be called between suspended render pass instances -
VUID-vkCmdDispatchGraphIndirectCountAMDX-videocoding
This command must only be called outside of a video coding scope -
VUID-vkCmdDispatchGraphIndirectCountAMDX-bufferlevel
commandBuffermust be a primaryVkCommandBuffer
-
Host access to the
VkCommandPoolthatcommandBufferwas allocated from must be externally synchronized
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
Primary |
Both |
Outside |
VK_QUEUE_COMPUTE_BIT |
Action |
vkCmdDispatchGraphIndirectCountAMDX is affected by conditional rendering
The VkDeviceOrHostAddressConstAMDX union is defined as:
// Provided by VK_AMDX_shader_enqueue
typedef union VkDeviceOrHostAddressConstAMDX {
VkDeviceAddress deviceAddress;
const void* hostAddress;
} VkDeviceOrHostAddressConstAMDX;
-
deviceAddressis a buffer device address as returned by the vkGetBufferDeviceAddressKHR command. -
hostAddressis a const host memory address.
The VkDispatchGraphCountInfoAMDX structure is defined as:
// Provided by VK_AMDX_shader_enqueue
typedef struct VkDispatchGraphCountInfoAMDX {
uint32_t count;
VkDeviceOrHostAddressConstAMDX infos;
uint64_t stride;
} VkDispatchGraphCountInfoAMDX;
-
countis the number of dispatches to perform. -
infosis the device or host address of a flat array of VkDispatchGraphInfoAMDX structures -
strideis the byte stride between successive VkDispatchGraphInfoAMDX structures ininfos
Whether infos is consumed as a device or host pointer is defined by
the command this structure is used in.
The VkDispatchGraphInfoAMDX structure is defined as:
// Provided by VK_AMDX_shader_enqueue
typedef struct VkDispatchGraphInfoAMDX {
uint32_t nodeIndex;
uint32_t payloadCount;
VkDeviceOrHostAddressConstAMDX payloads;
uint64_t payloadStride;
} VkDispatchGraphInfoAMDX;
-
nodeIndexis the index of a node in an execution graph to be dispatched. -
payloadCountis the number of payloads to dispatch for the specified node. -
payloadsis a device or host address pointer to a flat array of payloads with size equal to the product ofpayloadCountandpayloadStride -
payloadStrideis the byte stride between successive payloads inpayloads
Whether payloads is consumed as a device or host pointer is defined by
the command this structure is used in.
-
VUID-VkDispatchGraphInfoAMDX-payloadCount-09171
payloadCountmust be no greater thanmaxExecutionGraphShaderPayloadCount
Shader Enqueue
Compute shaders in an execution graph can use the
OpInitializeNodePayloadsAMDX to initialize nodes for dispatch.
Any node payload initialized in this way will be enqueued for dispatch once
the shader is done writing to the payload.
As compilers may be conservative when making this determination, shaders
can further call OpFinalizeNodePayloadsAMDX to guarantee that the
payload is no longer being written.
The Node Name operand of the PayloadNodeNameAMDX decoration
on a payload identifies the shader name of the node to be enqueued, and the
Shader Index operand of OpInitializeNodePayloadsAMDX
identifies the shader index.
A node identified in this way is dispatched as described in the following
sections.
Compute Nodes
Compute shaders added as nodes to an execution graph are executed
differently based on the presence or absence of the
StaticNumWorkgroupsAMDX or CoalescingAMDX execution modes.
Dispatching a compute shader node that does not declare either the
StaticNumWorkgroupsAMDX or CoalescingAMDX execution mode will
execute a number of workgroups in each dimension specified by the first 12
bytes of the payload, interpreted as a VkDispatchIndirectCommand.
The same payload will be broadcast to each workgroup in the same dispatch.
Additional values in the payload are have no effect on execution.
Dispatching a compute shader node with the StaticNumWorkgroupsAMDX
execution mode will execute workgroups in each dimension according to the
x, y, and z size operands to the
StaticNumWorkgroupsAMDX execution mode.
The same payload will be broadcast to each workgroup in the same dispatch.
Any values in the payload have no effect on execution.
Dispatching a compute shader node with the CoalescingAMDX execution
mode will enqueue a single invocation for execution.
Implementations may combine multiple such dispatches into the same
workgroup, up to the size of the workgroup.
The number of invocations coalesced into a given workgroup in this way can
be queried via the CoalescedInputCountAMDX built-in.
Any values in the payload have no effect on execution.
Mesh Nodes
Graphics pipelines added as nodes to an execution graph are executed in a manner similar to a vkCmdDrawMeshTasksIndirectEXT, using the same payloads as compute shaders, but capturing some state from the command buffer.
When an execution graph dispatch is recorded into a command buffer, it captures the following dynamic state for use with draw nodes:
Other state is not captured, and graphics pipelines must not be created with other dynamic states when used as a library in an execution graph pipeline.