| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Vulkan.Extensions.VK_NV_device_generated_commands_compute
Description
Name
VK_NV_device_generated_commands_compute - device extension
VK_NV_device_generated_commands_compute
- Name String
VK_NV_device_generated_commands_compute
- Extension Type
- Device extension
- Registered Extension Number
- 429
- Revision
- 2
- Ratification Status
- Not ratified
- Extension and Version Dependencies
- VK_NV_device_generated_commands
- Contact
Other Extension Metadata
- Last Modified Date
- 2023-07-21
- Contributors
- Vikram Kushwaha, NVIDIA
- Jeff Bolz, NVIDIA
- Christoph Kubisch, NVIDIA
- Piers Daniell, NVIDIA
- Daniel Koch, NVIDIA
- Hans-Kristian Arntzen, Valve
- Mike Blumenkrantz, VALVE
Description
This extension allows the device to generate commands for binding compute pipelines, setting push constants and launching compute dispatches.
New Commands
New Structures
PipelineIndirectDeviceAddressInfoNVExtending
ComputePipelineCreateInfo:Extending
PhysicalDeviceFeatures2,DeviceCreateInfo:
New Enum Constants
NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSIONExtending
DescriptorSetLayoutCreateFlagBits:Extending
IndirectCommandsTokenTypeNV:Extending
StructureType:
Version History
Revision 2, 2023-07-21 (Vikram Kushwaha)
- Rename vkCmdUpdatePipelineIndirectBuffer to vkCmdUpdatePipelineIndirectBufferNV
Revision 1, 2023-06-09 (Vikram Kushwaha)
- First Revision
See Also
No cross-references are available
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
- cmdUpdatePipelineIndirectBufferNV :: MonadIO io => CommandBuffer -> PipelineBindPoint -> Pipeline -> io ()
- getPipelineIndirectMemoryRequirementsNV :: forall (a :: [Type]) (b :: [Type]) io. (Extendss ComputePipelineCreateInfo a, PokeChain a, Extendss MemoryRequirements2 b, PokeChain b, PeekChain b, MonadIO io) => Device -> ComputePipelineCreateInfo a -> io (MemoryRequirements2 b)
- getPipelineIndirectDeviceAddressNV :: MonadIO io => Device -> PipelineIndirectDeviceAddressInfoNV -> io DeviceAddress
- data ComputePipelineIndirectBufferInfoNV = ComputePipelineIndirectBufferInfoNV {}
- data PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV = PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV {}
- data PipelineIndirectDeviceAddressInfoNV = PipelineIndirectDeviceAddressInfoNV {}
- data BindPipelineIndirectCommandNV = BindPipelineIndirectCommandNV {}
- type NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION = 2
- pattern NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION :: Integral a => a
- type NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME = "VK_NV_device_generated_commands_compute"
- pattern NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME :: (Eq a, IsString a) => a
- newtype IndirectCommandsTokenTypeNV where
- IndirectCommandsTokenTypeNV Int32
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_DATA_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV :: IndirectCommandsTokenTypeNV
Documentation
cmdUpdatePipelineIndirectBufferNV Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> PipelineBindPoint |
|
| -> Pipeline |
|
| -> io () |
vkCmdUpdatePipelineIndirectBufferNV - Update the indirect compute pipeline’s metadata
Description
cmdUpdatePipelineIndirectBufferNV is only allowed outside of a render
pass. This command is treated as a “transfer” operation for the purposes
of synchronization barriers. The writes to the address must be
synchronized using stages
PIPELINE_STAGE_2_COPY_BIT and
PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
and with access masks
ACCESS_MEMORY_WRITE_BIT and
ACCESS_COMMAND_PREPROCESS_READ_BIT_NV
respectively before using the results in preprocessing.
Valid Usage
-
pipelineBindPointmust bePIPELINE_BIND_POINT_COMPUTE
-
pipelinemust have been created withPIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NVflag set -
pipelinemust have been created withComputePipelineIndirectBufferInfoNVstructure specifying a valid address where its metadata will be saved - The ::deviceGeneratedComputePipelines feature must be enabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pipelineBindPointmust be a validPipelineBindPointvalue -
pipelinemust be a validPipelinehandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, orQUEUE_TRANSFER_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
- Both of
commandBuffer, andpipelinemust have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- 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 Secondary | Outside | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_TRANSFER_BIT | Action |
Conditional Rendering
vkCmdUpdatePipelineIndirectBufferNV is not affected by conditional rendering
See Also
VK_NV_device_generated_commands_compute,
CommandBuffer, Pipeline,
PipelineBindPoint
getPipelineIndirectMemoryRequirementsNV Source #
Arguments
| :: forall (a :: [Type]) (b :: [Type]) io. (Extendss ComputePipelineCreateInfo a, PokeChain a, Extendss MemoryRequirements2 b, PokeChain b, PeekChain b, MonadIO io) | |
| => Device |
|
| -> ComputePipelineCreateInfo a |
|
| -> io (MemoryRequirements2 b) |
vkGetPipelineIndirectMemoryRequirementsNV - Get the memory requirements for the compute indirect pipeline
Description
If pCreateInfo->pNext chain includes a pointer to a
ComputePipelineIndirectBufferInfoNV structure, then the contents of
that structure are ignored.
Valid Usage
- The ::deviceGeneratedComputePipelines feature must be enabled
-
pCreateInfo->flagsmust includePIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
pCreateInfomust be a valid pointer to a validComputePipelineCreateInfostructure -
pMemoryRequirementsmust be a valid pointer to aMemoryRequirements2structure
See Also
VK_NV_device_generated_commands_compute,
ComputePipelineCreateInfo,
Device,
MemoryRequirements2
getPipelineIndirectDeviceAddressNV Source #
Arguments
| :: MonadIO io | |
| => Device |
|
| -> PipelineIndirectDeviceAddressInfoNV |
|
| -> io DeviceAddress |
vkGetPipelineIndirectDeviceAddressNV - Get pipeline’s 64-bit device address
Valid Usage
- The ::deviceGeneratedComputePipelines feature must be enabled
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
pInfomust be a valid pointer to a validPipelineIndirectDeviceAddressInfoNVstructure
See Also
VK_NV_device_generated_commands_compute,
Device, PipelineIndirectDeviceAddressInfoNV
data ComputePipelineIndirectBufferInfoNV Source #
VkComputePipelineIndirectBufferInfoNV - Structure describing the device address where pipeline’s metadata will be saved
Description
If pipelineDeviceAddressCaptureReplay is zero, no specific address is
requested. If pipelineDeviceAddressCaptureReplay is not zero, then it
must be an address retrieved from an identically created pipeline on
the same implementation. The pipeline metadata must also be placed on
an identically created buffer and at the same offset using the
cmdUpdatePipelineIndirectBufferNV command.
Valid Usage
- The ::deviceGeneratedComputePipelines feature must be enabled
- The
pipeline creation flags in
ComputePipelineCreateInfo::flagsmust includePIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV -
deviceAddressmust be aligned to theMemoryRequirements2::memoryRequirements.alignment, as returned bygetPipelineIndirectMemoryRequirementsNV -
deviceAddressmust have been allocated from a buffer that was created with both theBUFFER_USAGE_TRANSFER_DST_BITandBUFFER_USAGE_INDIRECT_BUFFER_BITusage flags set -
sizemust be greater than or equal to theMemoryRequirements2::memoryRequirements.size, as returned bygetPipelineIndirectMemoryRequirementsNV -
If
pipelineDeviceAddressCaptureReplayis non-zero then the ::deviceGeneratedComputeCaptureReplay feature must be enabled -
If
pipelineDeviceAddressCaptureReplayis non-zero then that address must have been allocated with flagMEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BITset -
If
pipelineDeviceAddressCaptureReplayis non-zero, thepipelinemust have been recreated for replay -
pipelineDeviceAddressCaptureReplaymust satisfy thealignmentandsizerequirements similar todeviceAddress
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV
-
deviceAddressmust be a validDeviceAddressvalue -
If
pipelineDeviceAddressCaptureReplayis not0,pipelineDeviceAddressCaptureReplaymust be a validDeviceAddressvalue
See Also
VK_NV_device_generated_commands_compute,
DeviceAddress,
DeviceSize,
StructureType
Constructors
| ComputePipelineIndirectBufferInfoNV | |
Fields
| |
Instances
data PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV Source #
VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV - Structure describing the device-generated compute features that can be supported by an implementation
Members
This structure describes the following features:
Description
If the PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV
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. If the application wishes to use a
Device with any features described by
PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV, it must add
an instance of the structure, with the desired feature members set to
TRUE, to the pNext chain of
DeviceCreateInfo when creating the
Device.
Valid Usage (Implicit)
See Also
VK_NV_device_generated_commands_compute,
Bool32,
StructureType
Constructors
| PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV | |
Fields
| |
Instances
data PipelineIndirectDeviceAddressInfoNV Source #
VkPipelineIndirectDeviceAddressInfoNV - Structure specifying the pipeline to query an address for
Valid Usage
-
The provided
pipelineBindPointmust be of typePIPELINE_BIND_POINT_COMPUTE
-
pipelinemust have been created with flagPIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NVset -
pipelinemust have been created with aComputePipelineIndirectBufferInfoNVstructure specifying a valid address where its metadata will be saved
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV
-
pNextmust beNULL -
pipelineBindPointmust be a validPipelineBindPointvalue -
pipelinemust be a validPipelinehandle
See Also
VK_NV_device_generated_commands_compute,
Pipeline,
PipelineBindPoint,
StructureType,
getPipelineIndirectDeviceAddressNV
Constructors
| PipelineIndirectDeviceAddressInfoNV | |
Fields
| |
Instances
data BindPipelineIndirectCommandNV Source #
VkBindPipelineIndirectCommandNV - Structure specifying input data for the compute pipeline dispatch token
Valid Usage
- The ::deviceGeneratedComputePipelines feature must be enabled
- The referenced
pipeline must have been created with
PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV - The referenced
pipeline must have been updated with
cmdUpdatePipelineIndirectBufferNV - The referenced
pipeline’s address must have been queried with
getPipelineIndirectDeviceAddressNV
Valid Usage (Implicit)
-
pipelineAddressmust be a validDeviceAddressvalue
See Also
Constructors
| BindPipelineIndirectCommandNV | |
Fields
| |
Instances
pattern NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION :: Integral a => a Source #
type NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME = "VK_NV_device_generated_commands_compute" Source #
pattern NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME :: (Eq a, IsString a) => a Source #
newtype IndirectCommandsTokenTypeNV Source #
VkIndirectCommandsTokenTypeNV - Enum specifying token commands
Description
'
Supported Indirect Command Tokens
See Also
VK_NV_device_generated_commands,
IndirectCommandsLayoutTokenNV
Constructors
| IndirectCommandsTokenTypeNV Int32 |
Bundled Patterns