Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
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
cmdDispatchGraphIndirectAMDX
cmdDispatchGraphIndirectCountAMDX
cmdInitializeGraphScratchMemoryAMDX
createExecutionGraphPipelinesAMDX
getExecutionGraphPipelineNodeIndexAMDX
getExecutionGraphPipelineScratchSizeAMDX
New Structures
DispatchGraphInfoAMDX
ExecutionGraphPipelineCreateInfoAMDX
ExecutionGraphPipelineScratchSizeAMDX
Extending
PhysicalDeviceFeatures2
,DeviceCreateInfo
:Extending
PhysicalDeviceProperties2
:Extending
PipelineShaderStageCreateInfo
:
New Unions
New Enum Constants
AMDX_SHADER_ENQUEUE_SPEC_VERSION
SHADER_INDEX_UNUSED_AMDX
Extending
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 #
:: 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 #
:: 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->index
must not beSHADER_INDEX_UNUSED_AMDX
-
There must be a node in
executionGraph
with a shader name and index equal topNodeInfo->pName
andpNodeInfo->index
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
executionGraph
must be a validPipeline
handle -
pNodeInfo
must be a valid pointer to a validPipelineShaderStageNodeCreateInfoAMDX
structure -
pNodeIndex
must be a valid pointer to auint32_t
value -
executionGraph
must have been created, allocated, or retrieved fromdevice
Return Codes
See Also
VK_AMDX_shader_enqueue,
Device
, Pipeline
,
PipelineShaderStageNodeCreateInfoAMDX
createExecutionGraphPipelinesAMDX Source #
:: 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
flags
member of any element ofpCreateInfos
contains thePIPELINE_CREATE_DERIVATIVE_BIT
flag, and thebasePipelineIndex
member of that same element is not-1
,basePipelineIndex
must be less than the index intopCreateInfos
that corresponds to that element - If the
flags
member of any element ofpCreateInfos
contains thePIPELINE_CREATE_DERIVATIVE_BIT
flag, the base pipeline must have been created with thePIPELINE_CREATE_ALLOW_DERIVATIVES_BIT
flag set - If
pipelineCache
was created withPIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT
, host access topipelineCache
must be externally synchronized
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
If
pipelineCache
is notNULL_HANDLE
,pipelineCache
must be a validPipelineCache
handle -
pCreateInfos
must be a valid pointer to an array ofcreateInfoCount
validExecutionGraphPipelineCreateInfoAMDX
structures - If
pAllocator
is notNULL
,pAllocator
must be a valid pointer to a validAllocationCallbacks
structure -
pPipelines
must be a valid pointer to an array ofcreateInfoCount
Pipeline
handles -
createInfoCount
must be greater than0
- If
pipelineCache
is 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 #
:: 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
-
scratch
must be the device address of an allocated memory range at least as large as the value ofExecutionGraphPipelineScratchSizeAMDX
::size
returned byExecutionGraphPipelineScratchSizeAMDX
for the currently bound execution graph pipeline.
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
commandBuffer
must be in the recording state -
The
CommandPool
thatcommandBuffer
was 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
-
commandBuffer
must be a primaryCommandBuffer
Host Synchronization
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
Sampler
created withmagFilter
orminFilter
equal toFILTER_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Sampler
created withmipmapMode
equal toSAMPLER_MIPMAP_MODE_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
ImageView
is sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
- If a
ImageView
is 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_BUFFER
descriptor 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
ImageView
is sampled withFILTER_CUBIC_EXT
as 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
ImageView
is sampled withFILTER_CUBIC_EXT
as a result of this command, it must not have aImageViewType
ofIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
, orIMAGE_VIEW_TYPE_CUBE_ARRAY
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must have aImageViewType
and format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubic
returned bygetPhysicalDeviceImageFormatProperties2
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
with a reduction mode of eitherSAMPLER_REDUCTION_MODE_MIN
orSAMPLER_REDUCTION_MODE_MAX
as a result of this command must have aImageViewType
and format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubicMinmax
returned bygetPhysicalDeviceImageFormatProperties2
- If the
cubicRangeClamp
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must not have aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
- Any
ImageView
being sampled with aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
as a result of this command must sample withFILTER_CUBIC_EXT
- If the
selectableCubicWeights
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must haveSamplerCubicWeightsCreateInfoQCOM
::cubicWeights
equal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
- Any
Image
created with aImageCreateInfo
::flags
containingIMAGE_CREATE_CORNER_SAMPLED_BIT_NV
sampled as a result of this command must only be sampled using aSamplerAddressMode
ofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
- For any
ImageView
being written as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- For any
ImageView
being read as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
- For any
BufferView
being written as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- Any
BufferView
being read as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
then 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
PipelineLayout
that is compatible for set n, with thePipelineLayout
orDescriptorSetLayout
array that was used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets
, must be valid if they are statically used by thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If the descriptors used by
the
Pipeline
bound to the pipeline bind point were specified viacmdBindDescriptorSets
, the boundPipeline
must 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 thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT
, must be valid if they are dynamically used by anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command - If the descriptors used by
the
Pipeline
bound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT
, the boundPipeline
must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If a descriptor is
dynamically used with a
Pipeline
created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
, the descriptor memory must be resident - If a descriptor is
dynamically used with a
ShaderEXT
created with aDescriptorSetLayout
that 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_HANDLE
shader 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
Pipeline
object bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used to sample from anyImage
with aImageView
of the typeIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
,IMAGE_VIEW_TYPE_1D_ARRAY
,IMAGE_VIEW_TYPE_2D_ARRAY
orIMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
foruniformBuffers
, 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
ShaderEXT
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 - If any stage of
the
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
forstorageBuffers
, 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
ShaderEXT
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 - If
commandBuffer
is 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
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*
orOpImageSparseSample*
instructions - If
a bound shader
accesses a
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must not use theConstOffset
andOffset
operands - If a
ImageView
is accessed as a result of this command, then the image view’sviewType
must match theDim
operand of theOpTypeImage
as described in ??? - If a
ImageView
is accessed as a result of this command, then the numeric type of the image view’sformat
and theSampled
Type
operand of theOpTypeImage
must match - If a
ImageView
created with a format other thanFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the image view’s format - If a
ImageView
created with the formatFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have four components - If a
BufferView
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the buffer view’s format - If a
ImageView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
ImageView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If a
BufferView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
BufferView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If the
sparseImageInt64Atomics
feature is not enabled,
Image
objects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If the
sparseImageInt64Atomics
feature is not enabled,
Buffer
objects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If
OpImageWeightedSampleQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
- If
OpImageWeightedSampleQCOM
uses aImageView
as 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
OpImageBoxFilterQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
- If
OpImageBlockMatchSSDQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - If
OpImageWeightedSampleQCOM
,OpImageBoxFilterQCOM
,OpImageBlockMatchWindowSSDQCOM
,OpImageBlockMatchWindowSADQCOM
,OpImageBlockMatchGatherSSDQCOM
,OpImageBlockMatchGatherSADQCOM
,OpImageBlockMatchSSDQCOM
, orOpImageBlockMatchSADQCOM
uses aSampler
as 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format must be a single-component format. - If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
read 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
-
commandBuffer
must not be a protected command buffer -
commandBuffer
must be a primary command buffer -
scratch
must be the device address of an allocated memory range at least as large as the value ofExecutionGraphPipelineScratchSizeAMDX
::size
returned byExecutionGraphPipelineScratchSizeAMDX
for the currently bound execution graph pipeline -
scratch
must be a device address within aBuffer
created with theBUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
orBUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
flag - Device memory in the
range [
scratch
,scratch
ExecutionGraphPipelineScratchSizeAMDX
::size
) must have been initialized withcmdInitializeGraphScratchMemoryAMDX
using 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
MaxNumWorkgroupsAMDX
decoration 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
NodeMaxPayloadsAMDX
to initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to eachNodeMaxPayloadsAMDX
decoration separately -
pCountInfo->infos
must be a host pointer to a memory allocation at least as large as the product ofcount
andstride
- Host memory locations at
indexes in the range [
infos
,infos
+ (count
*stride
)), at a granularity ofstride
must contain validDispatchGraphInfoAMDX
structures in the first 24 bytes - For each
DispatchGraphInfoAMDX
structure inpCountInfo->infos
,payloads
must be a host pointer to a memory allocation at least as large as the product ofpayloadCount
andpayloadStride
- For each
DispatchGraphInfoAMDX
structure inpCountInfo->infos
,nodeIndex
must be a valid node index in the currently bound execution graph pipeline, as returned bygetExecutionGraphPipelineNodeIndexAMDX
- For each
DispatchGraphInfoAMDX
structure inpCountInfo->infos
, host memory locations at indexes in the range [payloads
,payloads
+ (payloadCount
*payloadStride
)), at a granularity ofpayloadStride
must contain a payload matching the size of the input payload expected by the node innodeIndex
in the first bytes
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pCountInfo
must be a valid pointer to a validDispatchGraphCountInfoAMDX
structure -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
commandBuffer
must be a primaryCommandBuffer
Host Synchronization
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: 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
Sampler
created withmagFilter
orminFilter
equal toFILTER_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Sampler
created withmipmapMode
equal toSAMPLER_MIPMAP_MODE_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
ImageView
is sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
- If a
ImageView
is 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_BUFFER
descriptor 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
ImageView
is sampled withFILTER_CUBIC_EXT
as 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
ImageView
is sampled withFILTER_CUBIC_EXT
as a result of this command, it must not have aImageViewType
ofIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
, orIMAGE_VIEW_TYPE_CUBE_ARRAY
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must have aImageViewType
and format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubic
returned bygetPhysicalDeviceImageFormatProperties2
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
with a reduction mode of eitherSAMPLER_REDUCTION_MODE_MIN
orSAMPLER_REDUCTION_MODE_MAX
as a result of this command must have aImageViewType
and format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubicMinmax
returned bygetPhysicalDeviceImageFormatProperties2
- If the
cubicRangeClamp
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must not have aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
- Any
ImageView
being sampled with aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
as a result of this command must sample withFILTER_CUBIC_EXT
-
If the
selectableCubicWeights
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must haveSamplerCubicWeightsCreateInfoQCOM
::cubicWeights
equal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
- Any
Image
created with aImageCreateInfo
::flags
containingIMAGE_CREATE_CORNER_SAMPLED_BIT_NV
sampled as a result of this command must only be sampled using aSamplerAddressMode
ofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
- For any
ImageView
being written as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- For any
ImageView
being read as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
- For any
BufferView
being written as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- Any
BufferView
being read as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
then 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
PipelineLayout
that is compatible for set n, with thePipelineLayout
orDescriptorSetLayout
array that was used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, as described in ??? - Descriptors in each
bound descriptor set, specified via
cmdBindDescriptorSets
, must be valid if they are statically used by thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If the descriptors
used by the
Pipeline
bound to the pipeline bind point were specified viacmdBindDescriptorSets
, the boundPipeline
must 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 thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- Descriptors in
bound descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT
, must be valid if they are dynamically used by anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command - If the descriptors
used by the
Pipeline
bound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT
, the boundPipeline
must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If a descriptor is
dynamically used with a
Pipeline
created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
, the descriptor memory must be resident - If a descriptor is
dynamically used with a
ShaderEXT
created with aDescriptorSetLayout
that 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_HANDLE
shader 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
Pipeline
object bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used to sample from anyImage
with aImageView
of the typeIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
,IMAGE_VIEW_TYPE_1D_ARRAY
,IMAGE_VIEW_TYPE_2D_ARRAY
orIMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
foruniformBuffers
, 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
ShaderEXT
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 - If any
stage of the
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
forstorageBuffers
, 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
ShaderEXT
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 - If
commandBuffer
is 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
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*
orOpImageSparseSample*
instructions - If
a bound shader
accesses a
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must not use theConstOffset
andOffset
operands - If a
ImageView
is accessed as a result of this command, then the image view’sviewType
must match theDim
operand of theOpTypeImage
as described in ??? - If a
ImageView
is accessed as a result of this command, then the numeric type of the image view’sformat
and theSampled
Type
operand of theOpTypeImage
must match - If a
ImageView
created with a format other thanFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the image view’s format - If a
ImageView
created with the formatFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have four components - If a
BufferView
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the buffer view’s format - If a
ImageView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
ImageView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If a
BufferView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
BufferView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 -
If the
sparseImageInt64Atomics
feature is not enabled,
Image
objects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command -
If the
sparseImageInt64Atomics
feature is not enabled,
Buffer
objects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command -
If
OpImageWeightedSampleQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
-
If
OpImageWeightedSampleQCOM
uses aImageView
as 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
OpImageBoxFilterQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
-
If
OpImageBlockMatchSSDQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
-
If
OpImageBlockMatchSADQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
-
If
OpImageBlockMatchSADQCOM
or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation -
If
OpImageWeightedSampleQCOM
,OpImageBoxFilterQCOM
,OpImageBlockMatchWindowSSDQCOM
,OpImageBlockMatchWindowSADQCOM
,OpImageBlockMatchGatherSSDQCOM
,OpImageBlockMatchGatherSADQCOM
,OpImageBlockMatchSSDQCOM
, orOpImageBlockMatchSADQCOM
uses aSampler
as 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
-
If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
-
If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format must be a single-component format. -
If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
read 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
-
commandBuffer
must not be a protected command buffer -
commandBuffer
must be a primary command buffer -
scratch
must be the device address of an allocated memory range at least as large as the value ofExecutionGraphPipelineScratchSizeAMDX
::size
returned byExecutionGraphPipelineScratchSizeAMDX
for the currently bound execution graph pipeline -
scratch
must be a device address within aBuffer
created with theBUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
orBUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
flag - Device memory in
the range [
scratch
,scratch
ExecutionGraphPipelineScratchSizeAMDX
::size
) must have been initialized withcmdInitializeGraphScratchMemoryAMDX
using 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
MaxNumWorkgroupsAMDX
decoration 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
NodeMaxPayloadsAMDX
to initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to eachNodeMaxPayloadsAMDX
decoration separately -
pCountInfo->infos
must be a device pointer to a memory allocation at least as large as the product ofcount
andstride
when this command is executed on the device -
pCountInfo->infos
must be a device address within aBuffer
created with theBUFFER_USAGE_INDIRECT_BUFFER_BIT
flag -
pCountInfo->infos
must be a multiple of executionGraphDispatchAddressAlignment - Device memory
locations at indexes in the range [
infos
,infos
+ (count
*stride
)), at a granularity ofstride
must contain validDispatchGraphInfoAMDX
structures in the first 24 bytes when this command is executed on the device - For each
DispatchGraphInfoAMDX
structure inpCountInfo->infos
,payloads
must be a device pointer to a memory allocation at least as large as the product ofpayloadCount
andpayloadStride
when this command is executed on the device - For each
DispatchGraphInfoAMDX
structure inpCountInfo->infos
,payloads
must be a device address within aBuffer
created with theBUFFER_USAGE_INDIRECT_BUFFER_BIT
flag - For each
DispatchGraphInfoAMDX
structure inpCountInfo->infos
,payloads
must be a multiple of executionGraphDispatchAddressAlignment - For each
DispatchGraphInfoAMDX
structure inpCountInfo->infos
,nodeIndex
must be a valid node index in the currently bound execution graph pipeline, as returned bygetExecutionGraphPipelineNodeIndexAMDX
when this command is executed on the device - For each
DispatchGraphInfoAMDX
structure inpCountInfo->infos
, device memory locations at indexes in the range [payloads
,payloads
+ (payloadCount
*payloadStride
)), at a granularity ofpayloadStride
must contain a payload matching the size of the input payload expected by the node innodeIndex
in the first bytes when this command is executed on the device
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pCountInfo
must be a valid pointer to a validDispatchGraphCountInfoAMDX
structure -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
commandBuffer
must be a primaryCommandBuffer
Host Synchronization
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: 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
Sampler
created withmagFilter
orminFilter
equal toFILTER_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Sampler
created withmipmapMode
equal toSAMPLER_MIPMAP_MODE_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
ImageView
is sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
- If a
ImageView
is 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_BUFFER
descriptor 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
ImageView
is sampled withFILTER_CUBIC_EXT
as 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
ImageView
is sampled withFILTER_CUBIC_EXT
as a result of this command, it must not have aImageViewType
ofIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
, orIMAGE_VIEW_TYPE_CUBE_ARRAY
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must have aImageViewType
and format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubic
returned bygetPhysicalDeviceImageFormatProperties2
-
Any
ImageView
being sampled withFILTER_CUBIC_EXT
with a reduction mode of eitherSAMPLER_REDUCTION_MODE_MIN
orSAMPLER_REDUCTION_MODE_MAX
as a result of this command must have aImageViewType
and format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubicMinmax
returned bygetPhysicalDeviceImageFormatProperties2
- If
the
cubicRangeClamp
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must not have aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
- Any
ImageView
being sampled with aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
as a result of this command must sample withFILTER_CUBIC_EXT
-
If the
selectableCubicWeights
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must haveSamplerCubicWeightsCreateInfoQCOM
::cubicWeights
equal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
- Any
Image
created with aImageCreateInfo
::flags
containingIMAGE_CREATE_CORNER_SAMPLED_BIT_NV
sampled as a result of this command must only be sampled using aSamplerAddressMode
ofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
- For any
ImageView
being written as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- For any
ImageView
being read as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
- For any
BufferView
being written as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- Any
BufferView
being read as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
then 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
PipelineLayout
that is compatible for set n, with thePipelineLayout
orDescriptorSetLayout
array that was used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, as described in ??? - Descriptors in
each bound descriptor set, specified via
cmdBindDescriptorSets
, must be valid if they are statically used by thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If the
descriptors used by the
Pipeline
bound to the pipeline bind point were specified viacmdBindDescriptorSets
, the boundPipeline
must 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 thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- Descriptors in
bound descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT
, must be valid if they are dynamically used by anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command - If the
descriptors used by the
Pipeline
bound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT
, the boundPipeline
must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If a
descriptor is dynamically used with a
Pipeline
created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
, the descriptor memory must be resident - If a
descriptor is dynamically used with a
ShaderEXT
created with aDescriptorSetLayout
that 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_HANDLE
shader 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
Pipeline
object bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used to sample from anyImage
with aImageView
of the typeIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
,IMAGE_VIEW_TYPE_1D_ARRAY
,IMAGE_VIEW_TYPE_2D_ARRAY
orIMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
foruniformBuffers
, 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
ShaderEXT
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 - If
any stage of the
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
forstorageBuffers
, 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
ShaderEXT
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 - If
commandBuffer
is 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
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*
orOpImageSparseSample*
instructions - If
a bound shader
accesses a
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must not use theConstOffset
andOffset
operands - If a
ImageView
is accessed as a result of this command, then the image view’sviewType
must match theDim
operand of theOpTypeImage
as described in ??? - If a
ImageView
is accessed as a result of this command, then the numeric type of the image view’sformat
and theSampled
Type
operand of theOpTypeImage
must match - If a
ImageView
created with a format other thanFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the image view’s format - If a
ImageView
created with the formatFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have four components - If a
BufferView
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the buffer view’s format - If a
ImageView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
ImageView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If a
BufferView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
BufferView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 -
If the
sparseImageInt64Atomics
feature is not enabled,
Image
objects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command -
If the
sparseImageInt64Atomics
feature is not enabled,
Buffer
objects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command -
If
OpImageWeightedSampleQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
-
If
OpImageWeightedSampleQCOM
uses aImageView
as 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
OpImageBoxFilterQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
-
If
OpImageBlockMatchSSDQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
-
If
OpImageBlockMatchSADQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
-
If
OpImageBlockMatchSADQCOM
or OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation -
If
OpImageWeightedSampleQCOM
,OpImageBoxFilterQCOM
,OpImageBlockMatchWindowSSDQCOM
,OpImageBlockMatchWindowSADQCOM
,OpImageBlockMatchGatherSSDQCOM
,OpImageBlockMatchGatherSADQCOM
,OpImageBlockMatchSSDQCOM
, orOpImageBlockMatchSADQCOM
uses aSampler
as 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
-
If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
-
If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format must be a single-component format. -
If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
read 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
-
commandBuffer
must not be a protected command buffer -
commandBuffer
must be a primary command buffer -
scratch
must be the device address of an allocated memory range at least as large as the value ofExecutionGraphPipelineScratchSizeAMDX
::size
returned byExecutionGraphPipelineScratchSizeAMDX
for the currently bound execution graph pipeline -
scratch
must be a device address within aBuffer
created with theBUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
orBUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
flag - Device
memory in the range [
scratch
,scratch
ExecutionGraphPipelineScratchSizeAMDX
::size
) must have been initialized withcmdInitializeGraphScratchMemoryAMDX
using 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
MaxNumWorkgroupsAMDX
decoration 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
NodeMaxPayloadsAMDX
to initialize more output payloads than specified by the max number of payloads for that decoration. This requirement applies to eachNodeMaxPayloadsAMDX
decoration separately -
countInfo
must be a device pointer to a memory allocation containing a validDispatchGraphCountInfoAMDX
structure when this command is executed on the device -
countInfo
must be a device address within aBuffer
created with theBUFFER_USAGE_INDIRECT_BUFFER_BIT
flag -
countInfo
must be a multiple of executionGraphDispatchAddressAlignment -
countInfo->infos
must be a device pointer to a memory allocation at least as large as the product ofcount
andstride
when this command is executed on the device -
countInfo->infos
must be a device address within aBuffer
created with theBUFFER_USAGE_INDIRECT_BUFFER_BIT
flag -
countInfo->infos
must be a multiple of executionGraphDispatchAddressAlignment - Device memory
locations at indexes in the range [
infos
,infos
+ (count
*stride
)), at a granularity ofstride
must contain validDispatchGraphInfoAMDX
structures in the first 24 bytes when this command is executed on the device - For each
DispatchGraphInfoAMDX
structure incountInfo->infos
,payloads
must be a device pointer to a memory allocation at least as large as the product ofpayloadCount
andpayloadStride
when this command is executed on the device - For each
DispatchGraphInfoAMDX
structure incountInfo->infos
,payloads
must be a device address within aBuffer
created with theBUFFER_USAGE_INDIRECT_BUFFER_BIT
flag - For each
DispatchGraphInfoAMDX
structure incountInfo->infos
,payloads
must be a multiple of executionGraphDispatchAddressAlignment - For each
DispatchGraphInfoAMDX
structure incountInfo->infos
,nodeIndex
must be a valid node index in the currently bound execution graph pipeline, as returned bygetExecutionGraphPipelineNodeIndexAMDX
when this command is executed on the device - For each
DispatchGraphInfoAMDX
structure incountInfo->infos
, device memory locations at indexes in the range [payloads
,payloads
+ (payloadCount
*payloadStride
)), at a granularity ofpayloadStride
must contain a payload matching the size of the input payload expected by the node innodeIndex
in the first bytes when this command is executed on the device
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
commandBuffer
must be a primaryCommandBuffer
Host Synchronization
- Host access to the
CommandPool
thatcommandBuffer
was 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
PhysicalDeviceShaderEnqueuePropertiesAMDX | |
|
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
PhysicalDeviceShaderEnqueueFeaturesAMDX | |
|
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
flags
contains thePIPELINE_CREATE_DERIVATIVE_BIT
flag, andbasePipelineIndex
is -1,basePipelineHandle
must be a valid execution graphPipeline
handle
- If
flags
contains thePIPELINE_CREATE_DERIVATIVE_BIT
flag, andbasePipelineHandle
isNULL_HANDLE
,basePipelineIndex
must be a valid index into the calling command’spCreateInfos
parameter - If
flags
contains thePIPELINE_CREATE_DERIVATIVE_BIT
flag,basePipelineIndex
must be -1 orbasePipelineHandle
must beNULL_HANDLE
- If a push
constant block is declared in a shader, a push constant range in
layout
must match both the shader stage and range - If a
resource variables
is declared in a shader, a descriptor slot in
layout
must 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 inlayout
must match the descriptor type - If a
resource variables
is declared in a shader as an array, a descriptor slot in
layout
must match the descriptor count -
flags
must not includePIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR
-
flags
must not includePIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR
-
flags
must not includePIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR
-
flags
must not includePIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR
-
flags
must not includePIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR
-
flags
must not includePIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR
-
flags
must not includePIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR
-
flags
must not includePIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
- If
flags
includesPIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
, then the ::deviceGeneratedComputePipelines feature must be enabled - If
flags
includesPIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
, then thepNext
chain must include a pointer to a valid instance ofComputePipelineIndirectBufferInfoNV
specifying the address where the pipeline’s metadata will be saved -
If the
pipelineCreationCacheControl
feature is not enabled,
flags
must not includePIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT
orPIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT
- The
stage
member of any element ofpStages
must beSHADER_STAGE_COMPUTE_BIT
- The
shader code for the entry point identified by each element of
pStages
and the rest of the state identified by this structure must adhere to the pipeline linking rules described in the Shader Interfaces chapter -
layout
must be consistent with the layout of the shaders specified inpStages
- If
pLibraryInfo
is notNULL
, each element of itspLibraries
member must have been created with alayout
that is compatible with thelayout
in this pipeline - The
number of resources in
layout
accessible to each shader stage that is used by the pipeline must be less than or equal toPhysicalDeviceLimits
::maxPerStageResources
- If
pLibraryInfo
is notNULL
, each element ofpLibraryInfo->libraries
must 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
CoalescedInputCountAMDX
and the other does not -
There must be no two nodes in the pipeline that share the same
name where one includes
StaticNumWorkgroupsAMDX
and the other does not -
If an output payload declared in any shader in the pipeline has a
PayloadNodeNameAMDX
decoration with aNode
Name
that 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)
-
sType
must beSTRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX
- Each
pNext
member of any structure (including this one) in thepNext
chain must be eitherNULL
or a pointer to a valid instance ofPipelineCompilerControlCreateInfoAMD
orPipelineCreationFeedbackCreateInfo
- The
sType
value of each struct in thepNext
chain must be unique -
flags
must be a valid combination ofPipelineCreateFlagBits
values - If
stageCount
is not0
, andpStages
is notNULL
,pStages
must be a valid pointer to an array ofstageCount
validPipelineShaderStageCreateInfo
structures -
If
pLibraryInfo
is notNULL
,pLibraryInfo
must be a valid pointer to a validPipelineLibraryCreateInfoKHR
structure -
layout
must be a validPipelineLayout
handle - Both of
basePipelineHandle
, andlayout
that 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
ExecutionGraphPipelineCreateInfoAMDX | |
|
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
PipelineShaderStageNodeCreateInfoAMDX | |
|
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
ExecutionGraphPipelineScratchSizeAMDX | |
|
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
DispatchGraphInfoAMDX | |
|
Instances
Show DispatchGraphInfoAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue showsPrec :: Int -> DispatchGraphInfoAMDX -> ShowS # show :: DispatchGraphInfoAMDX -> String # showList :: [DispatchGraphInfoAMDX] -> ShowS # | |
ToCStruct DispatchGraphInfoAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue 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 |
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
DispatchGraphCountInfoAMDX | |
|
Instances
Show DispatchGraphCountInfoAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue showsPrec :: Int -> DispatchGraphCountInfoAMDX -> ShowS # show :: DispatchGraphCountInfoAMDX -> String # showList :: [DispatchGraphCountInfoAMDX] -> ShowS # | |
ToCStruct DispatchGraphCountInfoAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue 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 # | |
data DeviceOrHostAddressConstAMDX Source #
Instances
Show DeviceOrHostAddressConstAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue showsPrec :: Int -> DeviceOrHostAddressConstAMDX -> ShowS # show :: DeviceOrHostAddressConstAMDX -> String # showList :: [DeviceOrHostAddressConstAMDX] -> ShowS # | |
ToCStruct DeviceOrHostAddressConstAMDX Source # | |
Defined in Vulkan.Extensions.VK_AMDX_shader_enqueue 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 # | |
newtype BufferUsageFlagBits2KHR Source #
VkBufferUsageFlagBits2KHR - Bitmask controlling how a pipeline is created
See Also
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
pLibraries
must have been created withPIPELINE_CREATE_LIBRARY_BIT_KHR
- If any
library in
pLibraries
was created with a shader stage withPipelineShaderStageModuleIdentifierCreateInfoEXT
andidentifierSize
not equal to 0, the pipeline must be created with thePIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT
flag set - If any
element of
pLibraries
was created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
, all elements must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If
pipeline
is being created withPIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
, every element ofpLibraries
must have been created withPIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
- If
pipeline
is being created withoutPIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
, every element ofpLibraries
must have been created withoutPIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
- If
pipeline
is being created withPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
, every element ofpLibraries
must have been created withPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
- If
pipeline
is being created withoutPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
, every element ofpLibraries
must have been created withoutPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
Valid Usage (Implicit)
-
sType
must beSTRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR
- If
libraryCount
is not0
,pLibraries
must be a valid pointer to an array oflibraryCount
validPipeline
handles
See Also
VK_KHR_pipeline_library,
ExecutionGraphPipelineCreateInfoAMDX
,
Pipeline
,
RayTracingPipelineCreateInfoKHR
,
StructureType
Instances
type SHADER_INDEX_UNUSED_AMDX = 4294967295 Source #
pattern SHADER_INDEX_UNUSED_AMDX :: Word32 Source #