| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Vulkan.Extensions.VK_AMDX_shader_enqueue
Description
Name
VK_AMDX_shader_enqueue - device extension
VK_AMDX_shader_enqueue
- Name String
VK_AMDX_shader_enqueue
- Extension Type
- Device extension
- Registered Extension Number
- 135
- Revision
- 1
- Ratification Status
- Not ratified
- Extension and Version Dependencies
- VK_KHR_get_physical_device_properties2
and
VK_KHR_synchronization2
and
VK_KHR_pipeline_library
and
VK_KHR_spirv_1_4
- __This is a provisional extension and must be used with caution. See the description of provisional header files for enablement and stability details.__
- Contact
- Extension Proposal
- VK_AMDX_shader_enqueue
Other Extension Metadata
- Last Modified Date
- 2021-07-22
- Interactions and External Dependencies
- This extension requires SPV_AMDX_shader_enqueue.
- Provisional
- __This extension is provisional and should not be used in production applications. The functionality may change in ways that break backwards compatibility between revisions, and before final release.__
- Contributors
- Tobias Hector, AMD
- Matthaeus Chajdas, AMD
- Maciej Jesionowski, AMD
- Robert Martin, AMD
- Qun Lin, AMD
- Rex Xu, AMD
- Dominik Witczak, AMD
- Karthik Srinivasan, AMD
- Nicolai Haehnle, AMD
- Stuart Smith, AMD
Description
This extension adds the ability for developers to enqueue compute shader workgroups from other compute shaders.
New Commands
cmdDispatchGraphIndirectAMDXcmdDispatchGraphIndirectCountAMDXcmdInitializeGraphScratchMemoryAMDXcreateExecutionGraphPipelinesAMDXgetExecutionGraphPipelineNodeIndexAMDXgetExecutionGraphPipelineScratchSizeAMDX
New Structures
DispatchGraphInfoAMDXExecutionGraphPipelineCreateInfoAMDXExecutionGraphPipelineScratchSizeAMDXExtending
PhysicalDeviceFeatures2,DeviceCreateInfo:Extending
PhysicalDeviceProperties2:Extending
PipelineShaderStageCreateInfo:
New Unions
New Enum Constants
AMDX_SHADER_ENQUEUE_SPEC_VERSIONSHADER_INDEX_UNUSED_AMDXExtending
BufferUsageFlagBits:Extending
PipelineBindPoint:Extending
StructureType:
If VK_KHR_maintenance5 is supported:
Version History
Revision 1, 2021-07-22 (Tobias Hector)
- Initial revision
See Also
SHADER_INDEX_UNUSED_AMDX,
DeviceOrHostAddressConstAMDX, DispatchGraphCountInfoAMDX,
DispatchGraphInfoAMDX, ExecutionGraphPipelineCreateInfoAMDX,
ExecutionGraphPipelineScratchSizeAMDX,
PhysicalDeviceShaderEnqueueFeaturesAMDX,
PhysicalDeviceShaderEnqueuePropertiesAMDX,
PipelineShaderStageNodeCreateInfoAMDX, cmdDispatchGraphAMDX,
cmdDispatchGraphIndirectAMDX, cmdDispatchGraphIndirectCountAMDX,
cmdInitializeGraphScratchMemoryAMDX,
createExecutionGraphPipelinesAMDX,
getExecutionGraphPipelineNodeIndexAMDX,
getExecutionGraphPipelineScratchSizeAMDX
Document Notes
For more information, see the Vulkan Specification
This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.
Synopsis
- getExecutionGraphPipelineScratchSizeAMDX :: forall io. MonadIO io => Device -> ("executionGraph" ::: Pipeline) -> io ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
- getExecutionGraphPipelineNodeIndexAMDX :: forall io. MonadIO io => Device -> ("executionGraph" ::: Pipeline) -> ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX) -> io ("nodeIndex" ::: Word32)
- createExecutionGraphPipelinesAMDX :: forall io. MonadIO io => Device -> PipelineCache -> ("createInfos" ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)) -> ("allocator" ::: Maybe AllocationCallbacks) -> io (Result, "pipelines" ::: Vector Pipeline)
- cmdInitializeGraphScratchMemoryAMDX :: forall io. MonadIO io => CommandBuffer -> ("scratch" ::: DeviceAddress) -> io ()
- cmdDispatchGraphAMDX :: forall io. MonadIO io => CommandBuffer -> ("scratch" ::: DeviceAddress) -> DispatchGraphCountInfoAMDX -> io ()
- cmdDispatchGraphIndirectAMDX :: forall io. MonadIO io => CommandBuffer -> ("scratch" ::: DeviceAddress) -> DispatchGraphCountInfoAMDX -> io ()
- cmdDispatchGraphIndirectCountAMDX :: forall io. MonadIO io => CommandBuffer -> ("scratch" ::: DeviceAddress) -> ("countInfo" ::: DeviceAddress) -> io ()
- data PhysicalDeviceShaderEnqueuePropertiesAMDX = PhysicalDeviceShaderEnqueuePropertiesAMDX {}
- data PhysicalDeviceShaderEnqueueFeaturesAMDX = PhysicalDeviceShaderEnqueueFeaturesAMDX {}
- data ExecutionGraphPipelineCreateInfoAMDX (es :: [Type]) = ExecutionGraphPipelineCreateInfoAMDX {}
- data PipelineShaderStageNodeCreateInfoAMDX = PipelineShaderStageNodeCreateInfoAMDX {
- name :: Maybe ByteString
- index :: Word32
- data ExecutionGraphPipelineScratchSizeAMDX = ExecutionGraphPipelineScratchSizeAMDX {
- size :: DeviceSize
- data DispatchGraphInfoAMDX = DispatchGraphInfoAMDX {}
- data DispatchGraphCountInfoAMDX = DispatchGraphCountInfoAMDX {}
- data DeviceOrHostAddressConstAMDX
- type BufferUsageFlags2KHR = BufferUsageFlagBits2KHR
- newtype BufferUsageFlagBits2KHR where
- BufferUsageFlagBits2KHR Flags64
- pattern BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX :: BufferUsageFlagBits2KHR
- type AMDX_SHADER_ENQUEUE_SPEC_VERSION = 1
- pattern AMDX_SHADER_ENQUEUE_SPEC_VERSION :: forall a. Integral a => a
- type AMDX_SHADER_ENQUEUE_EXTENSION_NAME = "VK_AMDX_shader_enqueue"
- pattern AMDX_SHADER_ENQUEUE_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
- data PipelineLibraryCreateInfoKHR = PipelineLibraryCreateInfoKHR {}
- type SHADER_INDEX_UNUSED_AMDX = 4294967295
- pattern SHADER_INDEX_UNUSED_AMDX :: Word32
Documentation
getExecutionGraphPipelineScratchSizeAMDX Source #
Arguments
| :: forall io. MonadIO io | |
| => Device |
|
| -> ("executionGraph" ::: Pipeline) |
|
| -> io ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) |
vkGetExecutionGraphPipelineScratchSizeAMDX - Query scratch space required to dispatch an execution graph
Description
After this function returns, information about the scratch space
required will be returned in pSizeInfo.
Return Codes
See Also
VK_AMDX_shader_enqueue,
Device, ExecutionGraphPipelineScratchSizeAMDX,
Pipeline
getExecutionGraphPipelineNodeIndexAMDX Source #
Arguments
| :: forall io. MonadIO io | |
| => Device |
|
| -> ("executionGraph" ::: Pipeline) |
|
| -> ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX) |
|
| -> io ("nodeIndex" ::: Word32) |
vkGetExecutionGraphPipelineNodeIndexAMDX - Query internal id of a node in an execution graph
Description
Once this function returns, the contents of pNodeIndex contain the
internal node index of the identified node.
Valid Usage
-
pNodeInfo->indexmust not beSHADER_INDEX_UNUSED_AMDX -
There must be a node in
executionGraphwith a shader name and index equal topNodeInfo->pNameandpNodeInfo->index
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
executionGraphmust be a validPipelinehandle -
pNodeInfomust be a valid pointer to a validPipelineShaderStageNodeCreateInfoAMDXstructure -
pNodeIndexmust be a valid pointer to auint32_tvalue -
executionGraphmust have been created, allocated, or retrieved fromdevice
Return Codes
See Also
VK_AMDX_shader_enqueue,
Device, Pipeline,
PipelineShaderStageNodeCreateInfoAMDX
createExecutionGraphPipelinesAMDX Source #
Arguments
| :: forall io. MonadIO io | |
| => Device |
|
| -> PipelineCache |
|
| -> ("createInfos" ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)) |
|
| -> ("allocator" ::: Maybe AllocationCallbacks) |
|
| -> io (Result, "pipelines" ::: Vector Pipeline) |
vkCreateExecutionGraphPipelinesAMDX - Creates a new execution graph pipeline object
Description
The implementation will create a pipeline in each element of
pPipelines from the corresponding element of pCreateInfos. If
creation of any pipeline fails, that pipeline will be set to
NULL_HANDLE.
If creation fails for a pipeline create info with a
ExecutionGraphPipelineCreateInfoAMDX::flags value that included
PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT,
all pipelines at a greater index all automatically fail.
Valid Usage
- The shaderEnqueue feature must be enabled
- If the
flagsmember of any element ofpCreateInfoscontains thePIPELINE_CREATE_DERIVATIVE_BITflag, and thebasePipelineIndexmember of that same element is not-1,basePipelineIndexmust be less than the index intopCreateInfosthat corresponds to that element - If the
flagsmember of any element ofpCreateInfoscontains thePIPELINE_CREATE_DERIVATIVE_BITflag, the base pipeline must have been created with thePIPELINE_CREATE_ALLOW_DERIVATIVES_BITflag set - If
pipelineCachewas created withPIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, host access topipelineCachemust be externally synchronized
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
If
pipelineCacheis notNULL_HANDLE,pipelineCachemust be a validPipelineCachehandle -
pCreateInfosmust be a valid pointer to an array ofcreateInfoCountvalidExecutionGraphPipelineCreateInfoAMDXstructures - If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure -
pPipelinesmust be a valid pointer to an array ofcreateInfoCountPipelinehandles -
createInfoCountmust be greater than0 - If
pipelineCacheis a valid handle, it must have been created, allocated, or retrieved fromdevice
Return Codes
See Also
VK_AMDX_shader_enqueue,
AllocationCallbacks,
Device, ExecutionGraphPipelineCreateInfoAMDX,
Pipeline, PipelineCache
cmdInitializeGraphScratchMemoryAMDX Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> ("scratch" ::: DeviceAddress) |
|
| -> io () |
vkCmdInitializeGraphScratchMemoryAMDX - Initialize scratch memory for an execution graph
Description
This command must be called before using scratch to dispatch the
currently bound execution graph pipeline.
Execution of this command may modify any memory locations in the range
[scratch,scratch + size), where size is the value returned in
ExecutionGraphPipelineScratchSizeAMDX::size by
ExecutionGraphPipelineScratchSizeAMDX for the currently bound
execution graph pipeline. Accesses to this memory range are performed in
the
PIPELINE_STAGE_2_COMPUTE_SHADER_BIT
pipeline stage with the
ACCESS_2_SHADER_STORAGE_READ_BIT and
ACCESS_2_SHADER_STORAGE_WRITE_BIT
access flags.
If any portion of scratch is modified by any command other than
cmdDispatchGraphAMDX, cmdDispatchGraphIndirectAMDX,
cmdDispatchGraphIndirectCountAMDX, or
cmdInitializeGraphScratchMemoryAMDX with the same execution graph, it
must be reinitialized for the execution graph again before dispatching
against it.
Valid Usage
-
scratchmust be the device address of an allocated memory range at least as large as the value ofExecutionGraphPipelineScratchSizeAMDX::sizereturned byExecutionGraphPipelineScratchSizeAMDXfor the currently bound execution graph pipeline.
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state -
The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - This command must only be called outside of a render pass instance
- This command must only be called outside of a video coding scope
-
commandBuffermust be a primaryCommandBuffer
Host Synchronization
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary | Outside | Outside | Graphics Compute | Action |
See Also
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> ("scratch" ::: DeviceAddress) |
|
| -> DispatchGraphCountInfoAMDX |
|
| -> io () |
vkCmdDispatchGraphAMDX - Dispatch an execution graph
Description
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.
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 + size), where size is the value returned in
ExecutionGraphPipelineScratchSizeAMDX::size by
ExecutionGraphPipelineScratchSizeAMDX for the currently bound
execution graph pipeline Accesses to this memory range are performed in
the
PIPELINE_STAGE_2_COMPUTE_SHADER_BIT
pipeline stage with the
ACCESS_2_SHADER_STORAGE_READ_BIT and
ACCESS_2_SHADER_STORAGE_WRITE_BIT
access flags.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT - If a
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aImageViewTypeand format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned bygetPhysicalDeviceImageFormatProperties2 - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned bygetPhysicalDeviceImageFormatProperties2 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT - If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - Any
Imagecreated with aImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - For any
ImageViewbeing written as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - For any
ImageViewbeing read as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For any
BufferViewbeing written as a storage texel buffer where the image format field of theOpTypeImageisUnknown, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - Any
BufferViewbeing read as a storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For each set n that is
statically used by
a bound shader,
a descriptor set must have been bound to n at the same pipeline
bind point, with a
PipelineLayoutthat is compatible for set n, with thePipelineLayoutorDescriptorSetLayoutarray that was used to create the currentPipelineorShaderEXT, as described in ??? - For each push constant that
is statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - If the
maintenance4
feature is not enabled, then for each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the descriptors used by
the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - If the descriptors used by
the
Pipelinebound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT, the boundPipelinemust have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If a descriptor is
dynamically used with a
Pipelinecreated withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If a descriptor is
dynamically used with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If the
shaderObject
is enabled, either a valid pipeline must be bound to the pipeline
bind point used by this command, or a valid combination of valid and
NULL_HANDLEshader objects must be bound to every supported shader stage corresponding to the pipeline bind point used by this command - 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 not
specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If any stage of
the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound 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 - If any stage of
the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound 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 - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the numeric type of the image view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORM_KHRis 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 - If a
ImageViewcreated with the formatFORMAT_A8_UNORM_KHRis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - If a
BufferViewis 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 - If a
ImageViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
ImageViewwith aFormatthat 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 - If a
BufferViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
BufferViewwith aFormatthat 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 - If the
sparseImageInt64Atomics
feature is not enabled,
Imageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command - If the
sparseImageInt64Atomics
feature is not enabled,
Bufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command - If
OpImageWeightedSampleQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM - If
OpImageWeightedSampleQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM - If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMor 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 - If
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If any
command other than
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format. - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
-
commandBuffermust not be a protected command buffer -
commandBuffermust be a primary command buffer -
scratchmust be the device address of an allocated memory range at least as large as the value ofExecutionGraphPipelineScratchSizeAMDX::sizereturned byExecutionGraphPipelineScratchSizeAMDXfor the currently bound execution graph pipeline -
scratchmust be a device address within aBuffercreated with theBUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDXorBUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDXflag - Device memory in the
range [
scratch,scratchExecutionGraphPipelineScratchSizeAMDX::size) must have been initialized withcmdInitializeGraphScratchMemoryAMDXusing the currently bound execution graph pipeline, and not modified after that by anything other than another execution graph dispatch command -
Execution of this command must not cause a node to be dispatched
with a larger number of workgroups than that specified by either a
MaxNumWorkgroupsAMDXdecoration in the dispatched node or maxComputeWorkGroupCount - Execution of this command must not cause any shader to initialize more than maxExecutionGraphShaderPayloadCount output payloads
- Execution of
this command must not cause any shader that declares
NodeMaxPayloadsAMDXto initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to eachNodeMaxPayloadsAMDXdecoration separately -
pCountInfo->infosmust be a host pointer to a memory allocation at least as large as the product ofcountandstride - Host memory locations at
indexes in the range [
infos,infos+ (count*stride)), at a granularity ofstridemust contain validDispatchGraphInfoAMDXstructures in the first 24 bytes - For each
DispatchGraphInfoAMDXstructure inpCountInfo->infos,payloadsmust be a host pointer to a memory allocation at least as large as the product ofpayloadCountandpayloadStride - For each
DispatchGraphInfoAMDXstructure inpCountInfo->infos,nodeIndexmust be a valid node index in the currently bound execution graph pipeline, as returned bygetExecutionGraphPipelineNodeIndexAMDX - For each
DispatchGraphInfoAMDXstructure 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
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pCountInfomust be a valid pointer to a validDispatchGraphCountInfoAMDXstructure -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - This command must only be called outside of a render pass instance
- This command must only be called outside of a video coding scope
-
commandBuffermust be a primaryCommandBuffer
Host Synchronization
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary | Outside | Outside | Graphics Compute | Action |
See Also
VK_AMDX_shader_enqueue,
CommandBuffer,
DeviceAddress,
DispatchGraphCountInfoAMDX
cmdDispatchGraphIndirectAMDX Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> ("scratch" ::: DeviceAddress) |
|
| -> DispatchGraphCountInfoAMDX |
|
| -> io () |
vkCmdDispatchGraphIndirectAMDX - Dispatch an execution graph with node and payload parameters read on the device
Description
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.
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
PIPELINE_STAGE_2_COMPUTE_SHADER_BIT
pipeline stage with the
ACCESS_2_SHADER_STORAGE_READ_BIT
access flag.
Execution of this command may modify any memory locations in the range
[scratch,scratch + size), where size is the value returned in
ExecutionGraphPipelineScratchSizeAMDX::size by
ExecutionGraphPipelineScratchSizeAMDX for the currently bound
execution graph pipeline. Accesses to this memory range are performed in
the
PIPELINE_STAGE_2_COMPUTE_SHADER_BIT
pipeline stage with the
ACCESS_2_SHADER_STORAGE_READ_BIT and
ACCESS_2_SHADER_STORAGE_WRITE_BIT
access flags.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT - If a
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aImageViewTypeand format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned bygetPhysicalDeviceImageFormatProperties2 - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned bygetPhysicalDeviceImageFormatProperties2 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT -
If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - Any
Imagecreated with aImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - For any
ImageViewbeing written as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - For any
ImageViewbeing read as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For any
BufferViewbeing written as a storage texel buffer where the image format field of theOpTypeImageisUnknown, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - Any
BufferViewbeing read as a storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For each set n
that is statically used by
a bound shader,
a descriptor set must have been bound to n at the same pipeline
bind point, with a
PipelineLayoutthat is compatible for set n, with thePipelineLayoutorDescriptorSetLayoutarray that was used to create the currentPipelineorShaderEXT, as described in ??? - For each push
constant that is statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - If the
maintenance4
feature is not enabled, then for each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - Descriptors in each
bound descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the descriptors
used by the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in
bound descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in
bound descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - If the descriptors
used by the
Pipelinebound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT, the boundPipelinemust have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If a descriptor is
dynamically used with a
Pipelinecreated withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If a descriptor is
dynamically used with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If the
shaderObject
is enabled, either a valid pipeline must be bound to the pipeline
bind point used by this command, or a valid combination of valid and
NULL_HANDLEshader objects must be bound to every supported shader stage corresponding to the pipeline bind point used by this command - 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 not specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If any
stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound 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 - If any
stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound 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 - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the numeric type of the image view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORM_KHRis 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 - If a
ImageViewcreated with the formatFORMAT_A8_UNORM_KHRis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - If a
BufferViewis 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 - If a
ImageViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
ImageViewwith aFormatthat 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 - If a
BufferViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
BufferViewwith aFormatthat 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 -
If the
sparseImageInt64Atomics
feature is not enabled,
Imageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
If the
sparseImageInt64Atomics
feature is not enabled,
Bufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
If
OpImageWeightedSampleQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM -
If
OpImageWeightedSampleQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM -
If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If
OpImageBlockMatchSADQCOMor 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 -
If
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM -
If any command other than
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM -
If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format. -
If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
-
commandBuffermust not be a protected command buffer -
commandBuffermust be a primary command buffer -
scratchmust be the device address of an allocated memory range at least as large as the value ofExecutionGraphPipelineScratchSizeAMDX::sizereturned byExecutionGraphPipelineScratchSizeAMDXfor the currently bound execution graph pipeline -
scratchmust be a device address within aBuffercreated with theBUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDXorBUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDXflag - Device memory in
the range [
scratch,scratchExecutionGraphPipelineScratchSizeAMDX::size) must have been initialized withcmdInitializeGraphScratchMemoryAMDXusing the currently bound execution graph pipeline, and not modified after that by anything other than another execution graph dispatch command -
Execution of this command must not cause a node to be dispatched
with a larger number of workgroups than that specified by either a
MaxNumWorkgroupsAMDXdecoration in the dispatched node or maxComputeWorkGroupCount - Execution of this command must not cause any shader to initialize more than maxExecutionGraphShaderPayloadCount output payloads
-
Execution of this command must not cause any shader that declares
NodeMaxPayloadsAMDXto initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to eachNodeMaxPayloadsAMDXdecoration separately -
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 -
pCountInfo->infosmust be a device address within aBuffercreated with theBUFFER_USAGE_INDIRECT_BUFFER_BITflag -
pCountInfo->infosmust be a multiple of executionGraphDispatchAddressAlignment - Device memory
locations at indexes in the range [
infos,infos+ (count*stride)), at a granularity ofstridemust contain validDispatchGraphInfoAMDXstructures in the first 24 bytes when this command is executed on the device - For each
DispatchGraphInfoAMDXstructure 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 - For each
DispatchGraphInfoAMDXstructure inpCountInfo->infos,payloadsmust be a device address within aBuffercreated with theBUFFER_USAGE_INDIRECT_BUFFER_BITflag - For each
DispatchGraphInfoAMDXstructure inpCountInfo->infos,payloadsmust be a multiple of executionGraphDispatchAddressAlignment - For each
DispatchGraphInfoAMDXstructure inpCountInfo->infos,nodeIndexmust be a valid node index in the currently bound execution graph pipeline, as returned bygetExecutionGraphPipelineNodeIndexAMDXwhen this command is executed on the device - For each
DispatchGraphInfoAMDXstructure 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
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pCountInfomust be a valid pointer to a validDispatchGraphCountInfoAMDXstructure -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - This command must only be called outside of a render pass instance
- This command must only be called outside of a video coding scope
-
commandBuffermust be a primaryCommandBuffer
Host Synchronization
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary | Outside | Outside | Graphics Compute | Action |
See Also
VK_AMDX_shader_enqueue,
CommandBuffer,
DeviceAddress,
DispatchGraphCountInfoAMDX
cmdDispatchGraphIndirectCountAMDX Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> ("scratch" ::: DeviceAddress) |
|
| -> ("countInfo" ::: DeviceAddress) |
|
| -> io () |
vkCmdDispatchGraphIndirectCountAMDX - Dispatch an execution graph with all parameters read on the device
Description
When this command is executed, the nodes specified in countInfo are
executed. Nodes executed as part of this command are not implicitly
synchronized in any way against each other once they are dispatched.
For this command, all pointers in substructures are treated as device
pointers and read during device execution of this command. The
allocation and contents of these pointers only needs to be valid during
device execution. All of these addresses will be read in the
PIPELINE_STAGE_2_COMPUTE_SHADER_BIT
pipeline stage with the
ACCESS_2_SHADER_STORAGE_READ_BIT
access flag.
Execution of this command may modify any memory locations in the range
[scratch,scratch + size), where size is the value returned in
ExecutionGraphPipelineScratchSizeAMDX::size by
ExecutionGraphPipelineScratchSizeAMDX for the currently bound
execution graph pipeline. Accesses to this memory range are performed in
the
PIPELINE_STAGE_2_COMPUTE_SHADER_BIT
pipeline stage with the
ACCESS_2_SHADER_STORAGE_READ_BIT and
ACCESS_2_SHADER_STORAGE_WRITE_BIT
access flags.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT - If a
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aImageViewTypeand format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned bygetPhysicalDeviceImageFormatProperties2 -
Any
ImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned bygetPhysicalDeviceImageFormatProperties2 - If
the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT -
If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - Any
Imagecreated with aImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - For any
ImageViewbeing written as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - For any
ImageViewbeing read as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For any
BufferViewbeing written as a storage texel buffer where the image format field of theOpTypeImageisUnknown, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - Any
BufferViewbeing read as a storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For each set
n that is statically used by
a bound shader,
a descriptor set must have been bound to n at the same pipeline
bind point, with a
PipelineLayoutthat is compatible for set n, with thePipelineLayoutorDescriptorSetLayoutarray that was used to create the currentPipelineorShaderEXT, as described in ??? - For each push
constant that is statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - If the
maintenance4
feature is not enabled, then for each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - Descriptors in
each bound descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the
descriptors used by the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in
bound descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in
bound descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - If the
descriptors used by the
Pipelinebound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT, the boundPipelinemust have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If a
descriptor is dynamically used with a
Pipelinecreated withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If a
descriptor is dynamically used with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If the
shaderObject
is enabled, either a valid pipeline must be bound to the pipeline
bind point used by this command, or a valid combination of valid and
NULL_HANDLEshader objects must be bound to every supported shader stage corresponding to the pipeline bind point used by this command - 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 not specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If
any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound 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 - If
any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound 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 - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the numeric type of the image view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORM_KHRis 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 - If a
ImageViewcreated with the formatFORMAT_A8_UNORM_KHRis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - If a
BufferViewis 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 - If a
ImageViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
ImageViewwith aFormatthat 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 - If a
BufferViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
BufferViewwith aFormatthat 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 -
If the
sparseImageInt64Atomics
feature is not enabled,
Imageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
If the
sparseImageInt64Atomics
feature is not enabled,
Bufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
If
OpImageWeightedSampleQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM -
If
OpImageWeightedSampleQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM -
If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM -
If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If
OpImageBlockMatchSADQCOMor 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 -
If
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM -
If any command other than
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM -
If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format. -
If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
-
commandBuffermust not be a protected command buffer -
commandBuffermust be a primary command buffer -
scratchmust be the device address of an allocated memory range at least as large as the value ofExecutionGraphPipelineScratchSizeAMDX::sizereturned byExecutionGraphPipelineScratchSizeAMDXfor the currently bound execution graph pipeline -
scratchmust be a device address within aBuffercreated with theBUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDXorBUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDXflag - Device
memory in the range [
scratch,scratchExecutionGraphPipelineScratchSizeAMDX::size) must have been initialized withcmdInitializeGraphScratchMemoryAMDXusing the currently bound execution graph pipeline, and not modified after that by anything other than another execution graph dispatch command -
Execution of this command must not cause a node to be dispatched
with a larger number of workgroups than that specified by either a
MaxNumWorkgroupsAMDXdecoration in the dispatched node or maxComputeWorkGroupCount - Execution of this command must not cause any shader to initialize more than maxExecutionGraphShaderPayloadCount output payloads
-
Execution of this command must not cause any shader that declares
NodeMaxPayloadsAMDXto initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to eachNodeMaxPayloadsAMDXdecoration separately -
countInfomust be a device pointer to a memory allocation containing a validDispatchGraphCountInfoAMDXstructure when this command is executed on the device -
countInfomust be a device address within aBuffercreated with theBUFFER_USAGE_INDIRECT_BUFFER_BITflag -
countInfomust be a multiple of executionGraphDispatchAddressAlignment -
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 -
countInfo->infosmust be a device address within aBuffercreated with theBUFFER_USAGE_INDIRECT_BUFFER_BITflag -
countInfo->infosmust be a multiple of executionGraphDispatchAddressAlignment - Device memory
locations at indexes in the range [
infos,infos+ (count*stride)), at a granularity ofstridemust contain validDispatchGraphInfoAMDXstructures in the first 24 bytes when this command is executed on the device - For each
DispatchGraphInfoAMDXstructure 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 - For each
DispatchGraphInfoAMDXstructure incountInfo->infos,payloadsmust be a device address within aBuffercreated with theBUFFER_USAGE_INDIRECT_BUFFER_BITflag - For each
DispatchGraphInfoAMDXstructure incountInfo->infos,payloadsmust be a multiple of executionGraphDispatchAddressAlignment - For each
DispatchGraphInfoAMDXstructure incountInfo->infos,nodeIndexmust be a valid node index in the currently bound execution graph pipeline, as returned bygetExecutionGraphPipelineNodeIndexAMDXwhen this command is executed on the device - For each
DispatchGraphInfoAMDXstructure 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
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - This command must only be called outside of a render pass instance
- This command must only be called outside of a video coding scope
-
commandBuffermust be a primaryCommandBuffer
Host Synchronization
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary | Outside | Outside | Graphics Compute | Action |
See Also
data PhysicalDeviceShaderEnqueuePropertiesAMDX Source #
VkPhysicalDeviceShaderEnqueuePropertiesAMDX - Structure describing shader enqueue limits of an implementation
Members
The members of the PhysicalDeviceShaderEnqueuePropertiesAMDX structure
describe the following limits:
Description
If the PhysicalDeviceShaderEnqueuePropertiesAMDX structure is included
in the pNext chain of the
PhysicalDeviceProperties2
structure passed to
getPhysicalDeviceProperties2,
it is filled in with each corresponding implementation-dependent
property.
Valid Usage (Implicit)
See Also
Constructors
| PhysicalDeviceShaderEnqueuePropertiesAMDX | |
Fields
| |
Instances
data PhysicalDeviceShaderEnqueueFeaturesAMDX Source #
VkPhysicalDeviceShaderEnqueueFeaturesAMDX - Structure describing whether shader enqueue within execution graphs are supported by the implementation
Members
This structure describes the following feature:
Description
If the PhysicalDeviceShaderEnqueueFeaturesAMDX structure is included
in the pNext chain of the
PhysicalDeviceFeatures2
structure passed to
getPhysicalDeviceFeatures2,
it is filled in to indicate whether each corresponding feature is
supported. PhysicalDeviceShaderEnqueueFeaturesAMDX can also be used
in the pNext chain of DeviceCreateInfo to
selectively enable these features.
Valid Usage (Implicit)
See Also
Constructors
| PhysicalDeviceShaderEnqueueFeaturesAMDX | |
Fields
| |
Instances
data ExecutionGraphPipelineCreateInfoAMDX (es :: [Type]) Source #
VkExecutionGraphPipelineCreateInfoAMDX - Structure specifying parameters of a newly created execution graph pipeline
Description
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
PipelineShaderStageNodeCreateInfoAMDX structure in its pNext chain.
In addition to the shader name and index, an internal "node index" is
also generated for each node, which can be queried with
getExecutionGraphPipelineNodeIndexAMDX, and is used exclusively for
initial dispatch of an execution graph.
Valid Usage
- If
flagscontains thePIPELINE_CREATE_DERIVATIVE_BITflag, andbasePipelineIndexis -1,basePipelineHandlemust be a valid execution graphPipelinehandle
- If
flagscontains thePIPELINE_CREATE_DERIVATIVE_BITflag, andbasePipelineHandleisNULL_HANDLE,basePipelineIndexmust be a valid index into the calling command’spCreateInfosparameter - If
flagscontains thePIPELINE_CREATE_DERIVATIVE_BITflag,basePipelineIndexmust be -1 orbasePipelineHandlemust beNULL_HANDLE - If a push
constant block is declared in a shader, a push constant range in
layoutmust match both the shader stage and range - If a
resource variables
is declared in a shader, a descriptor slot in
layoutmust match the shader stage - If a
resource variables
is declared in a shader, and the descriptor type is not
DESCRIPTOR_TYPE_MUTABLE_EXT, a descriptor slot inlayoutmust match the descriptor type - If a
resource variables
is declared in a shader as an array, a descriptor slot in
layoutmust match the descriptor count -
flagsmust not includePIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR -
flagsmust not includePIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR -
flagsmust not includePIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR -
flagsmust not includePIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR -
flagsmust not includePIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR -
flagsmust not includePIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR -
flagsmust not includePIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR -
flagsmust not includePIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV - If
flagsincludesPIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then the ::deviceGeneratedComputePipelines feature must be enabled - If
flagsincludesPIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV, then thepNextchain must include a pointer to a valid instance ofComputePipelineIndirectBufferInfoNVspecifying the address where the pipeline’s metadata will be saved -
If the
pipelineCreationCacheControl
feature is not enabled,
flagsmust not includePIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BITorPIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT - The
stagemember of any element ofpStagesmust beSHADER_STAGE_COMPUTE_BIT - The
shader code for the entry point identified by each element of
pStagesand the rest of the state identified by this structure must adhere to the pipeline linking rules described in the Shader Interfaces chapter -
layoutmust be consistent with the layout of the shaders specified inpStages - If
pLibraryInfois notNULL, each element of itspLibrariesmember must have been created with alayoutthat is compatible with thelayoutin this pipeline - The
number of resources in
layoutaccessible to each shader stage that is used by the pipeline must be less than or equal toPhysicalDeviceLimits::maxPerStageResources - If
pLibraryInfois notNULL, each element ofpLibraryInfo->librariesmust be either a compute pipeline or an execution graph pipeline - There
must be no two nodes in the pipeline that share both the same
shader name and index, as specified by
PipelineShaderStageNodeCreateInfoAMDX - There must be no two nodes in the pipeline that share the same shader name and have input payload declarations with different sizes
- There must be no two nodes in the pipeline that share the same name but have different execution models
-
There must be no two nodes in the pipeline that share the same
name where one includes
CoalescedInputCountAMDXand the other does not -
There must be no two nodes in the pipeline that share the same
name where one includes
StaticNumWorkgroupsAMDXand the other does not -
If an output payload declared in any shader in the pipeline has a
PayloadNodeNameAMDXdecoration 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
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX
- Each
pNextmember of any structure (including this one) in thepNextchain must be eitherNULLor a pointer to a valid instance ofPipelineCompilerControlCreateInfoAMDorPipelineCreationFeedbackCreateInfo - The
sTypevalue of each struct in thepNextchain must be unique -
flagsmust be a valid combination ofPipelineCreateFlagBitsvalues - If
stageCountis not0, andpStagesis notNULL,pStagesmust be a valid pointer to an array ofstageCountvalidPipelineShaderStageCreateInfostructures -
If
pLibraryInfois notNULL,pLibraryInfomust be a valid pointer to a validPipelineLibraryCreateInfoKHRstructure -
layoutmust be a validPipelineLayouthandle - Both of
basePipelineHandle, andlayoutthat are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the sameDevice
See Also
VK_AMDX_shader_enqueue,
Pipeline,
PipelineCreateFlags,
PipelineLayout,
PipelineLibraryCreateInfoKHR,
PipelineShaderStageCreateInfo,
StructureType,
createExecutionGraphPipelinesAMDX
Constructors
| ExecutionGraphPipelineCreateInfoAMDX | |
Fields
| |
Instances
data PipelineShaderStageNodeCreateInfoAMDX Source #
VkPipelineShaderStageNodeCreateInfoAMDX - Structure specifying the shader name and index with an execution graph
Description
When included in the pNext chain of a
PipelineShaderStageCreateInfo 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.
Valid Usage (Implicit)
See Also
VK_AMDX_shader_enqueue,
StructureType,
getExecutionGraphPipelineNodeIndexAMDX
Constructors
| PipelineShaderStageNodeCreateInfoAMDX | |
Fields
| |
Instances
data ExecutionGraphPipelineScratchSizeAMDX Source #
VkExecutionGraphPipelineScratchSizeAMDX - Structure describing the scratch space required to dispatch an execution graph
Valid Usage (Implicit)
See Also
VK_AMDX_shader_enqueue,
DeviceSize,
StructureType,
getExecutionGraphPipelineScratchSizeAMDX
Constructors
| ExecutionGraphPipelineScratchSizeAMDX | |
Fields
| |
Instances
data DispatchGraphInfoAMDX Source #
VkDispatchGraphInfoAMDX - Structure specifying node parameters for execution graph dispatch
Description
Whether payloads is consumed as a device or host pointer is defined by
the command this structure is used in.
Valid Usage
See Also
VK_AMDX_shader_enqueue,
DeviceOrHostAddressConstAMDX, DispatchGraphCountInfoAMDX
Constructors
| DispatchGraphInfoAMDX | |
Fields
| |
Instances
| Show DispatchGraphInfoAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue Methods showsPrec :: Int -> DispatchGraphInfoAMDX -> ShowS # show :: DispatchGraphInfoAMDX -> String # showList :: [DispatchGraphInfoAMDX] -> ShowS # | |
| ToCStruct DispatchGraphInfoAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue Methods withCStruct :: DispatchGraphInfoAMDX -> (Ptr DispatchGraphInfoAMDX -> IO b) -> IO b Source # pokeCStruct :: Ptr DispatchGraphInfoAMDX -> DispatchGraphInfoAMDX -> IO b -> IO b Source # withZeroCStruct :: (Ptr DispatchGraphInfoAMDX -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr DispatchGraphInfoAMDX -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero DispatchGraphInfoAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue Methods | |
data DispatchGraphCountInfoAMDX Source #
VkDispatchGraphCountInfoAMDX - Structure specifying count parameters for execution graph dispatch
Description
Whether infos is consumed as a device or host pointer is defined by
the command this structure is used in.
See Also
VK_AMDX_shader_enqueue,
DeviceOrHostAddressConstAMDX, cmdDispatchGraphAMDX,
cmdDispatchGraphIndirectAMDX, cmdDispatchGraphIndirectCountAMDX
Constructors
| DispatchGraphCountInfoAMDX | |
Fields
| |
Instances
| Show DispatchGraphCountInfoAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue Methods showsPrec :: Int -> DispatchGraphCountInfoAMDX -> ShowS # show :: DispatchGraphCountInfoAMDX -> String # showList :: [DispatchGraphCountInfoAMDX] -> ShowS # | |
| ToCStruct DispatchGraphCountInfoAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue Methods withCStruct :: DispatchGraphCountInfoAMDX -> (Ptr DispatchGraphCountInfoAMDX -> IO b) -> IO b Source # pokeCStruct :: Ptr DispatchGraphCountInfoAMDX -> DispatchGraphCountInfoAMDX -> IO b -> IO b Source # withZeroCStruct :: (Ptr DispatchGraphCountInfoAMDX -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr DispatchGraphCountInfoAMDX -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero DispatchGraphCountInfoAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue Methods | |
data DeviceOrHostAddressConstAMDX Source #
Constructors
| DeviceAddressConstAMDX DeviceAddress | |
| HostAddressConstAMDX (Ptr ()) |
Instances
| Show DeviceOrHostAddressConstAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue Methods showsPrec :: Int -> DeviceOrHostAddressConstAMDX -> ShowS # show :: DeviceOrHostAddressConstAMDX -> String # showList :: [DeviceOrHostAddressConstAMDX] -> ShowS # | |
| ToCStruct DeviceOrHostAddressConstAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue Methods withCStruct :: DeviceOrHostAddressConstAMDX -> (Ptr DeviceOrHostAddressConstAMDX -> IO b) -> IO b Source # pokeCStruct :: Ptr DeviceOrHostAddressConstAMDX -> DeviceOrHostAddressConstAMDX -> IO b -> IO b Source # withZeroCStruct :: (Ptr DeviceOrHostAddressConstAMDX -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr DeviceOrHostAddressConstAMDX -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero DeviceOrHostAddressConstAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue Methods | |
newtype BufferUsageFlagBits2KHR Source #
VkBufferUsageFlagBits2KHR - Bitmask controlling how a pipeline is created
See Also
Constructors
| BufferUsageFlagBits2KHR Flags64 |
Bundled Patterns
Instances
type AMDX_SHADER_ENQUEUE_SPEC_VERSION = 1 Source #
pattern AMDX_SHADER_ENQUEUE_SPEC_VERSION :: forall a. Integral a => a Source #
type AMDX_SHADER_ENQUEUE_EXTENSION_NAME = "VK_AMDX_shader_enqueue" Source #
pattern AMDX_SHADER_ENQUEUE_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #
data PipelineLibraryCreateInfoKHR Source #
VkPipelineLibraryCreateInfoKHR - Structure specifying pipeline libraries to use when creating a pipeline
Valid Usage
- Each element
of
pLibrariesmust have been created withPIPELINE_CREATE_LIBRARY_BIT_KHR
- If any
library in
pLibrarieswas created with a shader stage withPipelineShaderStageModuleIdentifierCreateInfoEXTandidentifierSizenot equal to 0, the pipeline must be created with thePIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BITflag set - If any
element of
pLibrarieswas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, all elements must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If
pipelineis being created withPIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT, every element ofpLibrariesmust have been created withPIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT - If
pipelineis being created withoutPIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT, every element ofpLibrariesmust have been created withoutPIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT - If
pipelineis being created withPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT, every element ofpLibrariesmust have been created withPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT - If
pipelineis being created withoutPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT, every element ofpLibrariesmust have been created withoutPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR
- If
libraryCountis not0,pLibrariesmust be a valid pointer to an array oflibraryCountvalidPipelinehandles
See Also
VK_KHR_pipeline_library,
ExecutionGraphPipelineCreateInfoAMDX,
Pipeline,
RayTracingPipelineCreateInfoKHR,
StructureType
Constructors
| PipelineLibraryCreateInfoKHR | |
Instances
| Show PipelineLibraryCreateInfoKHR Source # | |
Defined in Vulkan.Extensions.VK_KHR_pipeline_library Methods showsPrec :: Int -> PipelineLibraryCreateInfoKHR -> ShowS # show :: PipelineLibraryCreateInfoKHR -> String # showList :: [PipelineLibraryCreateInfoKHR] -> ShowS # | |
| FromCStruct PipelineLibraryCreateInfoKHR Source # | |
Defined in Vulkan.Extensions.VK_KHR_pipeline_library | |
| ToCStruct PipelineLibraryCreateInfoKHR Source # | |
Defined in Vulkan.Extensions.VK_KHR_pipeline_library Methods withCStruct :: PipelineLibraryCreateInfoKHR -> (Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b Source # pokeCStruct :: Ptr PipelineLibraryCreateInfoKHR -> PipelineLibraryCreateInfoKHR -> IO b -> IO b Source # withZeroCStruct :: (Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr PipelineLibraryCreateInfoKHR -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero PipelineLibraryCreateInfoKHR Source # | |
Defined in Vulkan.Extensions.VK_KHR_pipeline_library Methods | |
type SHADER_INDEX_UNUSED_AMDX = 4294967295 Source #
pattern SHADER_INDEX_UNUSED_AMDX :: Word32 Source #