| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Vulkan.Extensions.VK_NV_device_generated_commands
Synopsis
- cmdExecuteGeneratedCommandsNV :: forall io. MonadIO io => CommandBuffer -> ("isPreprocessed" ::: Bool) -> GeneratedCommandsInfoNV -> io ()
- cmdPreprocessGeneratedCommandsNV :: forall io. MonadIO io => CommandBuffer -> GeneratedCommandsInfoNV -> io ()
- cmdBindPipelineShaderGroupNV :: forall io. MonadIO io => CommandBuffer -> PipelineBindPoint -> Pipeline -> ("groupIndex" ::: Word32) -> io ()
- getGeneratedCommandsMemoryRequirementsNV :: forall a io. (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io) => Device -> GeneratedCommandsMemoryRequirementsInfoNV -> io (MemoryRequirements2 a)
- createIndirectCommandsLayoutNV :: forall io. MonadIO io => Device -> IndirectCommandsLayoutCreateInfoNV -> ("allocator" ::: Maybe AllocationCallbacks) -> io IndirectCommandsLayoutNV
- withIndirectCommandsLayoutNV :: forall io r. MonadIO io => Device -> IndirectCommandsLayoutCreateInfoNV -> Maybe AllocationCallbacks -> (io IndirectCommandsLayoutNV -> (IndirectCommandsLayoutNV -> io ()) -> r) -> r
- destroyIndirectCommandsLayoutNV :: forall io. MonadIO io => Device -> IndirectCommandsLayoutNV -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
- data PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = PhysicalDeviceDeviceGeneratedCommandsFeaturesNV {}
- data PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = PhysicalDeviceDeviceGeneratedCommandsPropertiesNV {
- maxGraphicsShaderGroupCount :: Word32
- maxIndirectSequenceCount :: Word32
- maxIndirectCommandsTokenCount :: Word32
- maxIndirectCommandsStreamCount :: Word32
- maxIndirectCommandsTokenOffset :: Word32
- maxIndirectCommandsStreamStride :: Word32
- minSequencesCountBufferOffsetAlignment :: Word32
- minSequencesIndexBufferOffsetAlignment :: Word32
- minIndirectCommandsBufferOffsetAlignment :: Word32
- data GraphicsShaderGroupCreateInfoNV = GraphicsShaderGroupCreateInfoNV {}
- data GraphicsPipelineShaderGroupsCreateInfoNV = GraphicsPipelineShaderGroupsCreateInfoNV {}
- data BindShaderGroupIndirectCommandNV = BindShaderGroupIndirectCommandNV {
- groupIndex :: Word32
- data BindIndexBufferIndirectCommandNV = BindIndexBufferIndirectCommandNV {}
- data BindVertexBufferIndirectCommandNV = BindVertexBufferIndirectCommandNV {
- bufferAddress :: DeviceAddress
- size :: Word32
- stride :: Word32
- data SetStateFlagsIndirectCommandNV = SetStateFlagsIndirectCommandNV {}
- data IndirectCommandsStreamNV = IndirectCommandsStreamNV {
- buffer :: Buffer
- offset :: DeviceSize
- data IndirectCommandsLayoutTokenNV = IndirectCommandsLayoutTokenNV {
- tokenType :: IndirectCommandsTokenTypeNV
- stream :: Word32
- offset :: Word32
- vertexBindingUnit :: Word32
- vertexDynamicStride :: Bool
- pushconstantPipelineLayout :: PipelineLayout
- pushconstantShaderStageFlags :: ShaderStageFlags
- pushconstantOffset :: Word32
- pushconstantSize :: Word32
- indirectStateFlags :: IndirectStateFlagsNV
- indexTypes :: Vector IndexType
- indexTypeValues :: Vector Word32
- data IndirectCommandsLayoutCreateInfoNV = IndirectCommandsLayoutCreateInfoNV {}
- data GeneratedCommandsInfoNV = GeneratedCommandsInfoNV {
- pipelineBindPoint :: PipelineBindPoint
- pipeline :: Pipeline
- indirectCommandsLayout :: IndirectCommandsLayoutNV
- streams :: Vector IndirectCommandsStreamNV
- sequencesCount :: Word32
- preprocessBuffer :: Buffer
- preprocessOffset :: DeviceSize
- preprocessSize :: DeviceSize
- sequencesCountBuffer :: Buffer
- sequencesCountOffset :: DeviceSize
- sequencesIndexBuffer :: Buffer
- sequencesIndexOffset :: DeviceSize
- data GeneratedCommandsMemoryRequirementsInfoNV = GeneratedCommandsMemoryRequirementsInfoNV {}
- newtype IndirectCommandsLayoutUsageFlagBitsNV where
- IndirectCommandsLayoutUsageFlagBitsNV Flags
- pattern INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV :: IndirectCommandsLayoutUsageFlagBitsNV
- pattern INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV :: IndirectCommandsLayoutUsageFlagBitsNV
- pattern INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV :: IndirectCommandsLayoutUsageFlagBitsNV
- type IndirectCommandsLayoutUsageFlagsNV = IndirectCommandsLayoutUsageFlagBitsNV
- newtype IndirectStateFlagBitsNV where
- type IndirectStateFlagsNV = IndirectStateFlagBitsNV
- newtype IndirectCommandsTokenTypeNV where
- IndirectCommandsTokenTypeNV Int32
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV :: IndirectCommandsTokenTypeNV
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV :: IndirectCommandsTokenTypeNV
- type NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 3
- pattern NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall a. Integral a => a
- type NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_NV_device_generated_commands"
- pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
- newtype IndirectCommandsLayoutNV = IndirectCommandsLayoutNV Word64
Documentation
cmdExecuteGeneratedCommandsNV Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> ("isPreprocessed" ::: Bool) |
|
| -> GeneratedCommandsInfoNV |
|
| -> io () |
vkCmdExecuteGeneratedCommandsNV - Performs the generation and execution of commands on the device
Valid Usage
- If a
ImageViewis sampled withFILTER_LINEARas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aImageViewTypeand format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned bygetPhysicalDeviceImageFormatProperties2 - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned bygetPhysicalDeviceImageFormatProperties2 - Any
Imagecreated with aImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - For each set n that is statically used by the
Pipelinebound to the pipeline bind point used by this command, a descriptor set must have been bound to n at the same pipeline bind point, with aPipelineLayoutthat is compatible for set n, with thePipelineLayoutused to create the currentPipeline, as described in ??? - For each push constant that is statically used by the
Pipelinebound to the pipeline bind point used by this command, a push constant value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants, with thePipelineLayoutused to create the currentPipeline, as described in ??? - Descriptors in each bound descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command - A valid pipeline must be bound to the pipeline bind point used by this command
- If the
Pipelineobject bound to the pipeline bind point used by this command requires any dynamic state, that state must have been set forcommandBuffer, and done so after any previously bound pipeline with the corresponding state not specified as dynamic - There must not have been any calls to dynamic state setting
commands for any state not specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If the
robust buffer access
feature is not enabled, and if the
Pipelineobject bound 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 the
robust buffer access
feature is not enabled, and if the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If
commandBufferis an unprotected command buffer, any resource accessed by thePipelineobject bound to the pipeline bind point used by this command must not be a protected resource - If a
ImageViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s format. - The current render pass must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index of the current render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - Every input attachment used by the current subpass must be bound to the pipeline via a descriptor set
- Image subresources used as attachments in the current render pass must not be accessed in any way other than as an attachment by this command
- If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If the bound graphics pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUEand the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNT_EXTdynamic state enabled, thencmdSetViewportWithCountEXTmust have been called in the current command buffer prior to this draw command, and theviewportCountparameter ofcmdSetViewportWithCountEXTmust match thePipelineViewportStateCreateInfo::scissorCountof the pipeline - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, thencmdSetScissorWithCountEXTmust have been called in the current command buffer prior to this draw command, and thescissorCountparameter ofcmdSetScissorWithCountEXTmust match thePipelineViewportStateCreateInfo::viewportCountof the pipeline - If the bound graphics pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXTandDYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic states enabled then bothcmdSetViewportWithCountEXTandcmdSetScissorWithCountEXTmust have been called in the current command buffer prior to this draw command, and theviewportCountparameter ofcmdSetViewportWithCountEXTmust match thescissorCountparameter ofcmdSetScissorWithCountEXT - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled and an instance ofPipelineViewportSwizzleStateCreateInfoNVchained fromVkPipelineVieportCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled and an instance ofPipelineViewportExclusiveScissorStateCreateInfoNVchained fromVkPipelineVieportCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXTdynamic state enabled thencmdSetPrimitiveTopologyEXTmust have been called in the current command buffer prior to this draw command, and theprimitiveTopologyparameter ofcmdSetPrimitiveTopologyEXTmust be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo::topologystate - All vertex input bindings accessed via vertex input variables
declared in the vertex shader entry point’s interface must have
either valid or
NULL_HANDLEbuffers bound - If the
nullDescriptor
feature is not enabled, all vertex input bindings accessed via
vertex input variables declared in the vertex shader entry point’s
interface must not be
NULL_HANDLE - For a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ???
commandBuffermust not be a protected command buffer- If
isPreprocessedisTRUEthencmdPreprocessGeneratedCommandsNVmust have already been executed on the device, using the samepGeneratedCommandsInfocontent as well as the content of the input buffers it references (all exceptGeneratedCommandsInfoNV::preprocessBuffer). FurthermorepGeneratedCommandsInfo`sindirectCommandsLayoutmust have been created with theINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NVbit set GeneratedCommandsInfoNV::pipelinemust match the current bound pipeline atGeneratedCommandsInfoNV::pipelineBindPoint- Transform feedback must not be active
- The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
commandBuffermust be a validCommandBufferhandle
pGeneratedCommandsInfomust be a valid pointer to a validGeneratedCommandsInfoNVstructurecommandBuffermust be in the recording state- The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - This command must only be called inside of a render pass instance
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 | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Inside | Graphics Compute |
See Also
cmdPreprocessGeneratedCommandsNV Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> GeneratedCommandsInfoNV |
|
| -> io () |
vkCmdPreprocessGeneratedCommandsNV - Performs preprocessing for generated commands
Valid Usage
commandBuffermust not be a protected command buffer
pGeneratedCommandsInfo`sindirectCommandsLayoutmust have been created with theINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NVbit set- The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
commandBuffermust be a validCommandBufferhandle
pGeneratedCommandsInfomust be a valid pointer to a validGeneratedCommandsInfoNVstructurecommandBuffermust be in the recording state- The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - This command must only be called outside of a render pass instance
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 | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Outside | Graphics Compute |
See Also
cmdBindPipelineShaderGroupNV Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> PipelineBindPoint |
|
| -> Pipeline |
|
| -> ("groupIndex" ::: Word32) |
|
| -> io () |
vkCmdBindPipelineShaderGroupNV - Bind a pipeline object
Valid Usage
groupIndexmust be0or less than the effectiveGraphicsPipelineShaderGroupsCreateInfoNV::groupCountincluding the referenced pipelines
- The
pipelineBindPointmust bePIPELINE_BIND_POINT_GRAPHICS - The same restrictions as
cmdBindPipelineapply as if the bound pipeline was created only with the Shader Group from thegroupIndexinformation - The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
commandBuffermust be a validCommandBufferhandle
pipelineBindPointmust be a validPipelineBindPointvaluepipelinemust be a validPipelinehandlecommandBuffermust be in the recording state- The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - 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 | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Both | Graphics Compute |
See Also
getGeneratedCommandsMemoryRequirementsNV Source #
Arguments
| :: forall a io. (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io) | |
| => Device |
|
| -> GeneratedCommandsMemoryRequirementsInfoNV |
|
| -> io (MemoryRequirements2 a) |
vkGetGeneratedCommandsMemoryRequirementsNV - Retrieve the buffer allocation requirements for generated commands
Valid Usage
- The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
devicemust be a validDevicehandle
pInfomust be a valid pointer to a validGeneratedCommandsMemoryRequirementsInfoNVstructurepMemoryRequirementsmust be a valid pointer to aMemoryRequirements2structure
See Also
Device,
GeneratedCommandsMemoryRequirementsInfoNV,
MemoryRequirements2
createIndirectCommandsLayoutNV Source #
Arguments
| :: forall io. MonadIO io | |
| => Device |
|
| -> IndirectCommandsLayoutCreateInfoNV |
|
| -> ("allocator" ::: Maybe AllocationCallbacks) |
|
| -> io IndirectCommandsLayoutNV |
vkCreateIndirectCommandsLayoutNV - Create an indirect command layout object
Valid Usage
- The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
devicemust be a validDevicehandle
pCreateInfomust be a valid pointer to a validIndirectCommandsLayoutCreateInfoNVstructure- If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure pIndirectCommandsLayoutmust be a valid pointer to aIndirectCommandsLayoutNVhandle
Return Codes
See Also
AllocationCallbacks,
Device, IndirectCommandsLayoutCreateInfoNV,
IndirectCommandsLayoutNV
withIndirectCommandsLayoutNV :: forall io r. MonadIO io => Device -> IndirectCommandsLayoutCreateInfoNV -> Maybe AllocationCallbacks -> (io IndirectCommandsLayoutNV -> (IndirectCommandsLayoutNV -> io ()) -> r) -> r Source #
A convenience wrapper to make a compatible pair of calls to
createIndirectCommandsLayoutNV and destroyIndirectCommandsLayoutNV
To ensure that destroyIndirectCommandsLayoutNV is always called: pass
bracket (or the allocate function from your
favourite resource management library) as the first argument.
To just extract the pair pass (,) as the first argument.
destroyIndirectCommandsLayoutNV Source #
Arguments
| :: forall io. MonadIO io | |
| => Device |
|
| -> IndirectCommandsLayoutNV |
|
| -> ("allocator" ::: Maybe AllocationCallbacks) |
|
| -> io () |
vkDestroyIndirectCommandsLayoutNV - Destroy an indirect commands layout
Valid Usage
- All submitted commands that refer to
indirectCommandsLayoutmust have completed execution
- If
AllocationCallbackswere provided whenindirectCommandsLayoutwas created, a compatible set of callbacks must be provided here - If no
AllocationCallbackswere provided whenindirectCommandsLayoutwas created,pAllocatormust beNULL - The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
devicemust be a validDevicehandle
- If
indirectCommandsLayoutis notNULL_HANDLE,indirectCommandsLayoutmust be a validIndirectCommandsLayoutNVhandle - If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure - If
indirectCommandsLayoutis a valid handle, it must have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
indirectCommandsLayoutmust be externally synchronized
See Also
data PhysicalDeviceDeviceGeneratedCommandsFeaturesNV Source #
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV - Structure describing the device-generated commands features that can be supported by an implementation
Members
The members of the PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
structure describe the following features:
Description
If the PhysicalDeviceDeviceGeneratedCommandsFeaturesNV structure is
included in the pNext chain of
PhysicalDeviceFeatures2,
it is filled with values indicating whether the feature is supported.
PhysicalDeviceDeviceGeneratedCommandsFeaturesNV can also be used in
the pNext chain of DeviceCreateInfo to enable
the features.
Valid Usage (Implicit)
See Also
Constructors
| PhysicalDeviceDeviceGeneratedCommandsFeaturesNV | |
Fields
| |
Instances
data PhysicalDeviceDeviceGeneratedCommandsPropertiesNV Source #
VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV - Structure describing push descriptor limits that can be supported by an implementation
Valid Usage (Implicit)
See Also
Constructors
Instances
data GraphicsShaderGroupCreateInfoNV Source #
VkGraphicsShaderGroupCreateInfoNV - Structure specifying override parameters for each shader group
Valid Usage
- For
stageCount, the same restrictions as inGraphicsPipelineCreateInfo::stageCountapply
- For
pStages, the same restrictions as inGraphicsPipelineCreateInfo::pStagesapply - For
pVertexInputState, the same restrictions as inGraphicsPipelineCreateInfo::pVertexInputStateapply - For
pTessellationState, the same restrictions as inGraphicsPipelineCreateInfo::pTessellationStateapply
Valid Usage (Implicit)
sTypemust beSTRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV
pNextmust beNULLpStagesmust be a valid pointer to an array ofstageCountvalidPipelineShaderStageCreateInfostructuresstageCountmust be greater than0
See Also
GraphicsPipelineShaderGroupsCreateInfoNV,
PipelineShaderStageCreateInfo,
PipelineTessellationStateCreateInfo,
PipelineVertexInputStateCreateInfo,
StructureType
Constructors
| GraphicsShaderGroupCreateInfoNV | |
Fields
| |
Instances
data GraphicsPipelineShaderGroupsCreateInfoNV Source #
VkGraphicsPipelineShaderGroupsCreateInfoNV - Structure specifying parameters of a newly created multi shader group pipeline
Description
When referencing shader groups by index, groups defined in the
referenced pipelines are treated as if they were defined as additional
entries in pGroups. They are appended in the order they appear in the
pPipelines array and in the pGroups array when those pipelines were
defined.
The application must maintain the lifetime of all such referenced pipelines based on the pipelines that make use of them.
Valid Usage
groupCountmust be at least1and as maximumPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxGraphicsShaderGroupCount
- The sum of
groupCountincluding those groups added from referencedpPipelinesmust also be as maximumPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxGraphicsShaderGroupCount - The state of the first element of
pGroupsmust match its equivalent within the parent’sGraphicsPipelineCreateInfo - Each element of
pGroupsmust in combination with the rest of the pipeline state yield a valid state configuration - All elements of
pGroupsmust use the same shader stage combinations unless any mesh shader stage is used, then either combination of task and mesh or just mesh shader is valid - Mesh and regular primitive shading stages cannot be mixed across
pGroups - Each element of the
pPipelinesmember oflibrariesmust have been created with identical state to the pipeline currently created except the state that can be overriden byGraphicsShaderGroupCreateInfoNV - The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
pGroupsmust be a valid pointer to an array ofgroupCountvalidGraphicsShaderGroupCreateInfoNVstructures- If
pipelineCountis not0,pPipelinesmust be a valid pointer to an array ofpipelineCountvalidPipelinehandles groupCountmust be greater than0
See Also
Constructors
| GraphicsPipelineShaderGroupsCreateInfoNV | |
Fields
| |
Instances
data BindShaderGroupIndirectCommandNV Source #
VkBindShaderGroupIndirectCommandNV - Structure specifying input data for a single shader group command token
Valid Usage
- The current bound graphics pipeline, as well as the pipelines it may
reference, must have been created with
PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
- The
indexmust be within range of the accessible shader groups of the current bound graphics pipeline. SeecmdBindPipelineShaderGroupNVfor further details
See Also
No cross-references are available
Constructors
| BindShaderGroupIndirectCommandNV | |
Fields
| |
Instances
data BindIndexBufferIndirectCommandNV Source #
VkBindIndexBufferIndirectCommandNV - Structure specifying input data for a single index buffer command token
Valid Usage
- The buffer’s usage flag from which the address was acquired must
have the
BUFFER_USAGE_INDEX_BUFFER_BITbit set
- The
bufferAddressmust be aligned to theindexTypeused - Each element of the buffer from which the address was acquired and
that is non-sparse must be bound completely and contiguously to a
single
DeviceMemoryobject
Valid Usage (Implicit)
indexTypemust be a validIndexTypevalue
See Also
Constructors
| BindIndexBufferIndirectCommandNV | |
Fields
| |
Instances
data BindVertexBufferIndirectCommandNV Source #
VkBindVertexBufferIndirectCommandNV - Structure specifying input data for a single vertex buffer command token
Valid Usage
- The buffer’s usage flag from which the address was acquired must
have the
BUFFER_USAGE_VERTEX_BUFFER_BITbit set
- Each element of the buffer from which the address was acquired and
that is non-sparse must be bound completely and contiguously to a
single
DeviceMemoryobject
See Also
Constructors
| BindVertexBufferIndirectCommandNV | |
Fields
| |
Instances
data SetStateFlagsIndirectCommandNV Source #
VkSetStateFlagsIndirectCommandNV - Structure specifying input data for a single state flag command token
See Also
No cross-references are available
Constructors
| SetStateFlagsIndirectCommandNV | |
Fields
| |
Instances
data IndirectCommandsStreamNV Source #
VkIndirectCommandsStreamNV - Structure specifying input streams for generated command tokens
Valid Usage
- The
buffer’s usage flag must have theBUFFER_USAGE_INDIRECT_BUFFER_BITbit set
- The
offsetmust be aligned toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::minIndirectCommandsBufferOffsetAlignment - If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject
Valid Usage (Implicit)
buffermust be a validBufferhandle
See Also
Constructors
| IndirectCommandsStreamNV | |
Fields
| |
Instances
data IndirectCommandsLayoutTokenNV Source #
VkIndirectCommandsLayoutTokenNV - Struct specifying the details of an indirect command layout token
Valid Usage
streammust be smaller thanIndirectCommandsLayoutCreateInfoNV::streamCount
offsetmust be less than or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectCommandsTokenOffset- If
tokenTypeisINDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV,vertexBindingUnitmust stay within device supported limits for the appropriate commands - If
tokenTypeisINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,pushconstantPipelineLayoutmust be valid - If
tokenTypeisINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,pushconstantOffsetmust be a multiple of4 - If
tokenTypeisINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,pushconstantSizemust be a multiple of4 - If
tokenTypeisINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,pushconstantOffsetmust be less thanPhysicalDeviceLimits::maxPushConstantsSize - If
tokenTypeisINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV,pushconstantSizemust be less than or equal toPhysicalDeviceLimits::maxPushConstantsSizeminuspushconstantOffset - If
tokenTypeisINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, for each byte in the range specified bypushconstantOffsetandpushconstantSizeand for each shader stage inpushconstantShaderStageFlags, there must be a push constant range inpushconstantPipelineLayoutthat includes that byte and that stage - If
tokenTypeisINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, for each byte in the range specified bypushconstantOffsetandpushconstantSizeand for each push constant range that overlaps that byte,pushconstantShaderStageFlagsmust include all stages in that push constant range’sPushConstantRange::pushconstantShaderStageFlags - If
tokenTypeisINDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV,indirectStateFlagsmust not be ´0´
Valid Usage (Implicit)
sTypemust beSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV
pNextmust beNULLtokenTypemust be a validIndirectCommandsTokenTypeNVvalue- If
pushconstantPipelineLayoutis notNULL_HANDLE,pushconstantPipelineLayoutmust be a validPipelineLayouthandle pushconstantShaderStageFlagsmust be a valid combination ofShaderStageFlagBitsvaluesindirectStateFlagsmust be a valid combination ofIndirectStateFlagBitsNVvalues- If
indexTypeCountis not0,pIndexTypesmust be a valid pointer to an array ofindexTypeCountvalidIndexTypevalues - If
indexTypeCountis not0,pIndexTypeValuesmust be a valid pointer to an array ofindexTypeCountuint32_tvalues
See Also
Bool32,
IndexType,
IndirectCommandsLayoutCreateInfoNV, IndirectCommandsTokenTypeNV,
IndirectStateFlagsNV, PipelineLayout,
ShaderStageFlags,
StructureType
Constructors
| IndirectCommandsLayoutTokenNV | |
Fields
| |
Instances
data IndirectCommandsLayoutCreateInfoNV Source #
VkIndirectCommandsLayoutCreateInfoNV - Structure specifying the parameters of a newly created indirect commands layout object
Description
The following code illustrates some of the flags:
void cmdProcessAllSequences(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sequencesCount, indexbuffer, indexbufferOffset)
{
for (s = 0; s < sequencesCount; s++)
{
sUsed = s;
if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV) {
sUsed = indexbuffer.load_uint32( sUsed * sizeof(uint32_t) + indexbufferOffset);
}
if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV) {
sUsed = incoherent_implementation_dependent_permutation[ sUsed ];
}
cmdProcessSequence( cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sUsed );
}
}Valid Usage
- The
pipelineBindPointmust bePIPELINE_BIND_POINT_GRAPHICS
tokenCountmust be greater than0and less than or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectCommandsTokenCount- If
pTokenscontains an entry ofINDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NVit must be the first element of the array and there must be only a single element of such token type - If
pTokenscontains an entry ofINDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NVthere must be only a single element of such token type - All state tokens in
pTokensmust occur prior work provoking tokens (INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV,INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV,INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV) - The content of
pTokensmust include one single work provoking token that is compatible with thepipelineBindPoint streamCountmust be greater than0and less or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectCommandsStreamCount- each element of
pStreamStridesmust be greater than `0`and less than or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectCommandsStreamStride. Furthermore the alignment of each token input must be ensured
Valid Usage (Implicit)
sTypemust beSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV
pNextmust beNULLflagsmust be a valid combination ofIndirectCommandsLayoutUsageFlagBitsNVvaluesflagsmust not be0pipelineBindPointmust be a validPipelineBindPointvaluepTokensmust be a valid pointer to an array oftokenCountvalidIndirectCommandsLayoutTokenNVstructurespStreamStridesmust be a valid pointer to an array ofstreamCountuint32_tvaluestokenCountmust be greater than0streamCountmust be greater than0
See Also
IndirectCommandsLayoutTokenNV, IndirectCommandsLayoutUsageFlagsNV,
PipelineBindPoint,
StructureType,
createIndirectCommandsLayoutNV
Constructors
| IndirectCommandsLayoutCreateInfoNV | |
Fields
| |
Instances
data GeneratedCommandsInfoNV Source #
VkGeneratedCommandsInfoNV - Structure specifying parameters for the generation of commands
Valid Usage
- The provided
pipelinemust match the pipeline bound at execution time
- If the
indirectCommandsLayoutuses a token ofINDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, then thepipelinemust have been created with multiple shader groups - If the
indirectCommandsLayoutuses a token ofINDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, then thepipelinemust have been created withPIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NVset inGraphicsPipelineCreateInfo::flags - If the
indirectCommandsLayoutuses a token ofINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, then thepipeline`sPipelineLayoutmust match theIndirectCommandsLayoutTokenNV::pushconstantPipelineLayout streamCountmust match theindirectCommandsLayout’sstreamCountsequencesCountmust be less or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectSequenceCountandGeneratedCommandsMemoryRequirementsInfoNV::maxSequencesCountthat was used to determine thepreprocessSizepreprocessBuffermust have theBUFFER_USAGE_INDIRECT_BUFFER_BITbit set in its usage flagpreprocessOffsetmust be aligned toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::minIndirectCommandsBufferOffsetAlignment- If
preprocessBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject preprocessSizemust be at least equal to the memory requirement`s size returned bygetGeneratedCommandsMemoryRequirementsNVusing the matching inputs (indirectCommandsLayout, …) as within this structuresequencesCountBuffercan be set if the actual used count of sequences is sourced from the provided buffer. In that case thesequencesCountserves as upper bound- If
sequencesCountBufferis notNULL_HANDLE, its usage flag must have theBUFFER_USAGE_INDIRECT_BUFFER_BITbit set - If
sequencesCountBufferis notNULL_HANDLE,sequencesCountOffsetmust be aligned toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::minSequencesCountBufferOffsetAlignment - If
sequencesCountBufferis notNULL_HANDLEand is non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject - If
indirectCommandsLayout’sINDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVis set,sequencesIndexBuffermust be set otherwise it must beNULL_HANDLE - If
sequencesIndexBufferis notNULL_HANDLE, its usage flag must have theBUFFER_USAGE_INDIRECT_BUFFER_BITbit set - If
sequencesIndexBufferis notNULL_HANDLE,sequencesIndexOffsetmust be aligned toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::minSequencesIndexBufferOffsetAlignment - If
sequencesIndexBufferis notNULL_HANDLEand is non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject
Valid Usage (Implicit)
sTypemust beSTRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV
pNextmust beNULLpipelineBindPointmust be a validPipelineBindPointvaluepipelinemust be a validPipelinehandleindirectCommandsLayoutmust be a validIndirectCommandsLayoutNVhandlepStreamsmust be a valid pointer to an array ofstreamCountvalidIndirectCommandsStreamNVstructurespreprocessBuffermust be a validBufferhandle- If
sequencesCountBufferis notNULL_HANDLE,sequencesCountBuffermust be a validBufferhandle - If
sequencesIndexBufferis notNULL_HANDLE,sequencesIndexBuffermust be a validBufferhandle streamCountmust be greater than0- Each of
indirectCommandsLayout,pipeline,preprocessBuffer,sequencesCountBuffer, andsequencesIndexBufferthat are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the sameDevice
See Also
Buffer,
DeviceSize,
IndirectCommandsLayoutNV,
IndirectCommandsStreamNV, Pipeline,
PipelineBindPoint,
StructureType,
cmdExecuteGeneratedCommandsNV, cmdPreprocessGeneratedCommandsNV
Constructors
| GeneratedCommandsInfoNV | |
Fields
| |
Instances
data GeneratedCommandsMemoryRequirementsInfoNV Source #
VkGeneratedCommandsMemoryRequirementsInfoNV - Structure specifying parameters for the reservation of preprocess buffer space
Valid Usage
maxSequencesCountmust be less or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV::maxIndirectSequenceCount
Valid Usage (Implicit)
pNextmust beNULLpipelineBindPointmust be a validPipelineBindPointvaluepipelinemust be a validPipelinehandleindirectCommandsLayoutmust be a validIndirectCommandsLayoutNVhandle- Both of
indirectCommandsLayout, andpipelinemust have been created, allocated, or retrieved from the sameDevice
See Also
IndirectCommandsLayoutNV,
Pipeline,
PipelineBindPoint,
StructureType,
getGeneratedCommandsMemoryRequirementsNV
Constructors
| GeneratedCommandsMemoryRequirementsInfoNV | |
Fields
| |
Instances
newtype IndirectCommandsLayoutUsageFlagBitsNV Source #
VkIndirectCommandsLayoutUsageFlagBitsNV - Bitmask specifying allowed usage of an indirect commands layout
See Also
Constructors
| IndirectCommandsLayoutUsageFlagBitsNV Flags |
Bundled Patterns
Instances
newtype IndirectStateFlagBitsNV Source #
VkIndirectStateFlagBitsNV - Bitmask specifiying state that can be altered on the device
See Also
Constructors
| IndirectStateFlagBitsNV Flags |
Bundled Patterns
| pattern INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV :: IndirectStateFlagBitsNV |
|
Instances
newtype IndirectCommandsTokenTypeNV Source #
VkIndirectCommandsTokenTypeNV - Enum specifying token commands
Description
'
Supported indirect command tokens
See Also
Constructors
| IndirectCommandsTokenTypeNV Int32 |
Bundled Patterns
Instances
pattern NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall a. Integral a => a Source #
type NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_NV_device_generated_commands" Source #
pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #
newtype IndirectCommandsLayoutNV Source #
VkIndirectCommandsLayoutNV - Opaque handle to an indirect commands layout object
See Also
GeneratedCommandsInfoNV,
GeneratedCommandsMemoryRequirementsInfoNV,
createIndirectCommandsLayoutNV,
destroyIndirectCommandsLayoutNV
Constructors
| IndirectCommandsLayoutNV Word64 |