Safe Haskell | None |
---|---|
Language | Haskell2010 |
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 #
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> ("isPreprocessed" ::: Bool) |
|
-> GeneratedCommandsInfoNV |
|
-> io () |
vkCmdExecuteGeneratedCommandsNV - Performs the generation and execution of commands on the device
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
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
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
- 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
- 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 each set n that is statically used by the
Pipeline
bound 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 aPipelineLayout
that is compatible for set n, with thePipelineLayout
used to create the currentPipeline
, as described in ??? - For each push constant that is statically used by the
Pipeline
bound to the pipeline bind point used by this command, a push constant value must have been set for the same pipeline bind point, with aPipelineLayout
that is compatible for push constants, with thePipelineLayout
used 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 thePipeline
bound 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
Pipeline
object 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
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 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 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 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 the
robust buffer access
feature is not enabled, and if the
Pipeline
object 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
Pipeline
object 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
commandBuffer
is an unprotected command buffer, any resource accessed by thePipeline
object bound to the pipeline bind point used by this command must not be a protected resource - If a
ImageView
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
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 image view’s format. - If a
ImageView
with aFormat
that has a 64-bit channel 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 channel 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 channel 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 channel 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. - The current render pass must be
compatible
with the
renderPass
member of theGraphicsPipelineCreateInfo
structure specified when creating thePipeline
bound toPIPELINE_BIND_POINT_GRAPHICS
- The subpass index of the current render pass must be equal to the
subpass
member of theGraphicsPipelineCreateInfo
structure specified when creating thePipeline
bound 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
::sampleLocationsEnable
set toTRUE
and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
bit set - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
dynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT
dynamic state enabled, thencmdSetViewportWithCountEXT
must have been called in the current command buffer prior to this draw command, and theviewportCount
parameter ofcmdSetViewportWithCountEXT
must match thePipelineViewportStateCreateInfo
::scissorCount
of the pipeline - If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
dynamic state enabled, thencmdSetScissorWithCountEXT
must have been called in the current command buffer prior to this draw command, and thescissorCount
parameter ofcmdSetScissorWithCountEXT
must match thePipelineViewportStateCreateInfo
::viewportCount
of the pipeline - If the bound graphics pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT
andDYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
dynamic states enabled then bothcmdSetViewportWithCountEXT
andcmdSetScissorWithCountEXT
must have been called in the current command buffer prior to this draw command, and theviewportCount
parameter ofcmdSetViewportWithCountEXT
must match thescissorCount
parameter ofcmdSetScissorWithCountEXT
- If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCountEXT
- If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
andDYNAMIC_STATE_VIEWPORT_W_SCALING_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportWScalingNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCountEXT
- If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCountEXT
- If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
andDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportShadingRatePaletteNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCountEXT
- If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
dynamic state enabled and an instance ofPipelineViewportSwizzleStateCreateInfoNV
chained fromVkPipelineVieportCreateInfo
, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCountEXT
- If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
dynamic state enabled and an instance ofPipelineViewportExclusiveScissorStateCreateInfoNV
chained fromVkPipelineVieportCreateInfo
, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV
::exclusiveScissorCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCountEXT
- If the bound graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT
dynamic state enabled thencmdSetPrimitiveTopologyEXT
must have been called in the current command buffer prior to this draw command, and theprimitiveTopology
parameter ofcmdSetPrimitiveTopologyEXT
must be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo
::topology
state - If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHR
built-in, thencmdSetViewportWithCountEXT
must have been called in the current command buffer prior to this draw command, and theviewportCount
parameter ofcmdSetViewportWithCountEXT
must be1
- All vertex input bindings accessed via vertex input variables
declared in the vertex shader entry point’s interface must have
either valid or
NULL_HANDLE
buffers 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 ???
commandBuffer
must not be a protected command buffer- If
isPreprocessed
isTRUE
thencmdPreprocessGeneratedCommandsNV
must have already been executed on the device, using the samepGeneratedCommandsInfo
content as well as the content of the input buffers it references (all exceptGeneratedCommandsInfoNV
::preprocessBuffer
). FurthermorepGeneratedCommandsInfo
`sindirectCommandsLayout
must have been created with theINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV
bit set GeneratedCommandsInfoNV
::pipeline
must match the current bound pipeline atGeneratedCommandsInfoNV
::pipelineBindPoint
- Transform feedback must not be active
- The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
commandBuffer
must be a validCommandBuffer
handle
pGeneratedCommandsInfo
must be a valid pointer to a validGeneratedCommandsInfoNV
structurecommandBuffer
must be in the recording state- The
CommandPool
thatcommandBuffer
was 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
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> GeneratedCommandsInfoNV |
|
-> io () |
vkCmdPreprocessGeneratedCommandsNV - Performs preprocessing for generated commands
Valid Usage
commandBuffer
must not be a protected command buffer
pGeneratedCommandsInfo
`sindirectCommandsLayout
must have been created with theINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV
bit set- The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
commandBuffer
must be a validCommandBuffer
handle
pGeneratedCommandsInfo
must be a valid pointer to a validGeneratedCommandsInfoNV
structurecommandBuffer
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
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> PipelineBindPoint |
|
-> Pipeline |
|
-> ("groupIndex" ::: Word32) |
|
-> io () |
vkCmdBindPipelineShaderGroupNV - Bind a pipeline object
Valid Usage
groupIndex
must be0
or less than the effectiveGraphicsPipelineShaderGroupsCreateInfoNV
::groupCount
including the referenced pipelines
- The
pipelineBindPoint
must bePIPELINE_BIND_POINT_GRAPHICS
- The same restrictions as
cmdBindPipeline
apply as if the bound pipeline was created only with the Shader Group from thegroupIndex
information - The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
commandBuffer
must be a validCommandBuffer
handle
pipelineBindPoint
must be a validPipelineBindPoint
valuepipeline
must be a validPipeline
handlecommandBuffer
must be in the recording state- The
CommandPool
thatcommandBuffer
was allocated from must support graphics, or compute operations - Both of
commandBuffer
, andpipeline
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: 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)
device
must be a validDevice
handle
pInfo
must be a valid pointer to a validGeneratedCommandsMemoryRequirementsInfoNV
structurepMemoryRequirements
must be a valid pointer to aMemoryRequirements2
structure
See Also
Device
,
GeneratedCommandsMemoryRequirementsInfoNV
,
MemoryRequirements2
createIndirectCommandsLayoutNV Source #
:: 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)
device
must be a validDevice
handle
pCreateInfo
must be a valid pointer to a validIndirectCommandsLayoutCreateInfoNV
structure- If
pAllocator
is notNULL
,pAllocator
must be a valid pointer to a validAllocationCallbacks
structure pIndirectCommandsLayout
must be a valid pointer to aIndirectCommandsLayoutNV
handle
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 #
:: forall io. MonadIO io | |
=> Device |
|
-> IndirectCommandsLayoutNV |
|
-> ("allocator" ::: Maybe AllocationCallbacks) |
|
-> io () |
vkDestroyIndirectCommandsLayoutNV - Destroy an indirect commands layout
Valid Usage
- All submitted commands that refer to
indirectCommandsLayout
must have completed execution
- If
AllocationCallbacks
were provided whenindirectCommandsLayout
was created, a compatible set of callbacks must be provided here - If no
AllocationCallbacks
were provided whenindirectCommandsLayout
was created,pAllocator
must beNULL
- The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
device
must be a validDevice
handle
- If
indirectCommandsLayout
is notNULL_HANDLE
,indirectCommandsLayout
must be a validIndirectCommandsLayoutNV
handle - If
pAllocator
is notNULL
,pAllocator
must be a valid pointer to a validAllocationCallbacks
structure - If
indirectCommandsLayout
is a valid handle, it must have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
indirectCommandsLayout
must 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
PhysicalDeviceDeviceGeneratedCommandsFeaturesNV | |
|
Instances
data PhysicalDeviceDeviceGeneratedCommandsPropertiesNV Source #
VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV - Structure describing push descriptor limits that can be supported by an implementation
Valid Usage (Implicit)
See Also
Instances
data GraphicsShaderGroupCreateInfoNV Source #
VkGraphicsShaderGroupCreateInfoNV - Structure specifying override parameters for each shader group
Valid Usage
- For
stageCount
, the same restrictions as inGraphicsPipelineCreateInfo
::stageCount
apply
- For
pStages
, the same restrictions as inGraphicsPipelineCreateInfo
::pStages
apply - For
pVertexInputState
, the same restrictions as inGraphicsPipelineCreateInfo
::pVertexInputState
apply - For
pTessellationState
, the same restrictions as inGraphicsPipelineCreateInfo
::pTessellationState
apply
Valid Usage (Implicit)
sType
must beSTRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV
pNext
must beNULL
pStages
must be a valid pointer to an array ofstageCount
validPipelineShaderStageCreateInfo
structuresstageCount
must be greater than0
See Also
GraphicsPipelineShaderGroupsCreateInfoNV
,
PipelineShaderStageCreateInfo
,
PipelineTessellationStateCreateInfo
,
PipelineVertexInputStateCreateInfo
,
StructureType
GraphicsShaderGroupCreateInfoNV | |
|
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
groupCount
must be at least1
and as maximumPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::maxGraphicsShaderGroupCount
- The sum of
groupCount
including those groups added from referencedpPipelines
must also be as maximumPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::maxGraphicsShaderGroupCount
- The state of the first element of
pGroups
must match its equivalent within the parent’sGraphicsPipelineCreateInfo
- Each element of
pGroups
must in combination with the rest of the pipeline state yield a valid state configuration - All elements of
pGroups
must 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
pPipelines
member oflibraries
must 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)
pGroups
must be a valid pointer to an array ofgroupCount
validGraphicsShaderGroupCreateInfoNV
structures- If
pipelineCount
is not0
,pPipelines
must be a valid pointer to an array ofpipelineCount
validPipeline
handles groupCount
must be greater than0
See Also
GraphicsPipelineShaderGroupsCreateInfoNV | |
|
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
index
must be within range of the accessible shader groups of the current bound graphics pipeline. SeecmdBindPipelineShaderGroupNV
for further details
See Also
No cross-references are available
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_BIT
bit set
- The
bufferAddress
must be aligned to theindexType
used - 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
DeviceMemory
object
Valid Usage (Implicit)
indexType
must be a validIndexType
value
See Also
BindIndexBufferIndirectCommandNV | |
|
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_BIT
bit 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
DeviceMemory
object
See Also
BindVertexBufferIndirectCommandNV | |
|
Instances
data SetStateFlagsIndirectCommandNV Source #
VkSetStateFlagsIndirectCommandNV - Structure specifying input data for a single state flag command token
See Also
No cross-references are available
SetStateFlagsIndirectCommandNV | |
|
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_BIT
bit set
- The
offset
must be aligned toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::minIndirectCommandsBufferOffsetAlignment
- If
buffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object
Valid Usage (Implicit)
buffer
must be a validBuffer
handle
See Also
IndirectCommandsStreamNV | |
|
Instances
data IndirectCommandsLayoutTokenNV Source #
VkIndirectCommandsLayoutTokenNV - Struct specifying the details of an indirect command layout token
Valid Usage
stream
must be smaller thanIndirectCommandsLayoutCreateInfoNV
::streamCount
offset
must be less than or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::maxIndirectCommandsTokenOffset
- If
tokenType
isINDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV
,vertexBindingUnit
must stay within device supported limits for the appropriate commands - If
tokenType
isINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
,pushconstantPipelineLayout
must be valid - If
tokenType
isINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
,pushconstantOffset
must be a multiple of4
- If
tokenType
isINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
,pushconstantSize
must be a multiple of4
- If
tokenType
isINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
,pushconstantOffset
must be less thanPhysicalDeviceLimits
::maxPushConstantsSize
- If
tokenType
isINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
,pushconstantSize
must be less than or equal toPhysicalDeviceLimits
::maxPushConstantsSize
minuspushconstantOffset
- If
tokenType
isINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
, for each byte in the range specified bypushconstantOffset
andpushconstantSize
and for each shader stage inpushconstantShaderStageFlags
, there must be a push constant range inpushconstantPipelineLayout
that includes that byte and that stage - If
tokenType
isINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
, for each byte in the range specified bypushconstantOffset
andpushconstantSize
and for each push constant range that overlaps that byte,pushconstantShaderStageFlags
must include all stages in that push constant range’sPushConstantRange
::pushconstantShaderStageFlags
- If
tokenType
isINDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV
,indirectStateFlags
must not be ´0´
Valid Usage (Implicit)
sType
must beSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV
pNext
must beNULL
tokenType
must be a validIndirectCommandsTokenTypeNV
value- If
pushconstantPipelineLayout
is notNULL_HANDLE
,pushconstantPipelineLayout
must be a validPipelineLayout
handle pushconstantShaderStageFlags
must be a valid combination ofShaderStageFlagBits
valuesindirectStateFlags
must be a valid combination ofIndirectStateFlagBitsNV
values- If
indexTypeCount
is not0
,pIndexTypes
must be a valid pointer to an array ofindexTypeCount
validIndexType
values - If
indexTypeCount
is not0
,pIndexTypeValues
must be a valid pointer to an array ofindexTypeCount
uint32_t
values
See Also
Bool32
,
IndexType
,
IndirectCommandsLayoutCreateInfoNV
, IndirectCommandsTokenTypeNV
,
IndirectStateFlagsNV
, PipelineLayout
,
ShaderStageFlags
,
StructureType
IndirectCommandsLayoutTokenNV | |
|
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
pipelineBindPoint
must bePIPELINE_BIND_POINT_GRAPHICS
tokenCount
must be greater than0
and less than or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::maxIndirectCommandsTokenCount
- If
pTokens
contains an entry ofINDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV
it must be the first element of the array and there must be only a single element of such token type - If
pTokens
contains an entry ofINDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV
there must be only a single element of such token type - All state tokens in
pTokens
must 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
pTokens
must include one single work provoking token that is compatible with thepipelineBindPoint
streamCount
must be greater than0
and less or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::maxIndirectCommandsStreamCount
- each element of
pStreamStrides
must be greater than `0`and less than or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::maxIndirectCommandsStreamStride
. Furthermore the alignment of each token input must be ensured
Valid Usage (Implicit)
sType
must beSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV
pNext
must beNULL
flags
must be a valid combination ofIndirectCommandsLayoutUsageFlagBitsNV
valuesflags
must not be0
pipelineBindPoint
must be a validPipelineBindPoint
valuepTokens
must be a valid pointer to an array oftokenCount
validIndirectCommandsLayoutTokenNV
structurespStreamStrides
must be a valid pointer to an array ofstreamCount
uint32_t
valuestokenCount
must be greater than0
streamCount
must be greater than0
See Also
IndirectCommandsLayoutTokenNV
, IndirectCommandsLayoutUsageFlagsNV
,
PipelineBindPoint
,
StructureType
,
createIndirectCommandsLayoutNV
IndirectCommandsLayoutCreateInfoNV | |
|
Instances
data GeneratedCommandsInfoNV Source #
VkGeneratedCommandsInfoNV - Structure specifying parameters for the generation of commands
Valid Usage
- The provided
pipeline
must match the pipeline bound at execution time
- If the
indirectCommandsLayout
uses a token ofINDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV
, then thepipeline
must have been created with multiple shader groups - If the
indirectCommandsLayout
uses a token ofINDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV
, then thepipeline
must have been created withPIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV
set inGraphicsPipelineCreateInfo
::flags
- If the
indirectCommandsLayout
uses a token ofINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
, then thepipeline
`sPipelineLayout
must match theIndirectCommandsLayoutTokenNV
::pushconstantPipelineLayout
streamCount
must match theindirectCommandsLayout
’sstreamCount
sequencesCount
must be less or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::maxIndirectSequenceCount
andGeneratedCommandsMemoryRequirementsInfoNV
::maxSequencesCount
that was used to determine thepreprocessSize
preprocessBuffer
must have theBUFFER_USAGE_INDIRECT_BUFFER_BIT
bit set in its usage flagpreprocessOffset
must be aligned toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::minIndirectCommandsBufferOffsetAlignment
- If
preprocessBuffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object preprocessSize
must be at least equal to the memory requirement`s size returned bygetGeneratedCommandsMemoryRequirementsNV
using the matching inputs (indirectCommandsLayout
, …) as within this structuresequencesCountBuffer
can be set if the actual used count of sequences is sourced from the provided buffer. In that case thesequencesCount
serves as upper bound- If
sequencesCountBuffer
is notNULL_HANDLE
, its usage flag must have theBUFFER_USAGE_INDIRECT_BUFFER_BIT
bit set - If
sequencesCountBuffer
is notNULL_HANDLE
,sequencesCountOffset
must be aligned toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::minSequencesCountBufferOffsetAlignment
- If
sequencesCountBuffer
is notNULL_HANDLE
and is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object - If
indirectCommandsLayout
’sINDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV
is set,sequencesIndexBuffer
must be set otherwise it must beNULL_HANDLE
- If
sequencesIndexBuffer
is notNULL_HANDLE
, its usage flag must have theBUFFER_USAGE_INDIRECT_BUFFER_BIT
bit set - If
sequencesIndexBuffer
is notNULL_HANDLE
,sequencesIndexOffset
must be aligned toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::minSequencesIndexBufferOffsetAlignment
- If
sequencesIndexBuffer
is notNULL_HANDLE
and is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object
Valid Usage (Implicit)
sType
must beSTRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV
pNext
must beNULL
pipelineBindPoint
must be a validPipelineBindPoint
valuepipeline
must be a validPipeline
handleindirectCommandsLayout
must be a validIndirectCommandsLayoutNV
handlepStreams
must be a valid pointer to an array ofstreamCount
validIndirectCommandsStreamNV
structurespreprocessBuffer
must be a validBuffer
handle- If
sequencesCountBuffer
is notNULL_HANDLE
,sequencesCountBuffer
must be a validBuffer
handle - If
sequencesIndexBuffer
is notNULL_HANDLE
,sequencesIndexBuffer
must be a validBuffer
handle streamCount
must be greater than0
- Each of
indirectCommandsLayout
,pipeline
,preprocessBuffer
,sequencesCountBuffer
, andsequencesIndexBuffer
that 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
GeneratedCommandsInfoNV | |
|
Instances
Show GeneratedCommandsInfoNV Source # | |
Defined in Vulkan.Extensions.VK_NV_device_generated_commands showsPrec :: Int -> GeneratedCommandsInfoNV -> ShowS # show :: GeneratedCommandsInfoNV -> String # showList :: [GeneratedCommandsInfoNV] -> ShowS # | |
FromCStruct GeneratedCommandsInfoNV Source # | |
ToCStruct GeneratedCommandsInfoNV Source # | |
Defined in Vulkan.Extensions.VK_NV_device_generated_commands withCStruct :: GeneratedCommandsInfoNV -> (Ptr GeneratedCommandsInfoNV -> IO b) -> IO b Source # pokeCStruct :: Ptr GeneratedCommandsInfoNV -> GeneratedCommandsInfoNV -> IO b -> IO b Source # withZeroCStruct :: (Ptr GeneratedCommandsInfoNV -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr GeneratedCommandsInfoNV -> IO b -> IO b Source # cStructSize :: Int Source # | |
Zero GeneratedCommandsInfoNV Source # | |
data GeneratedCommandsMemoryRequirementsInfoNV Source #
VkGeneratedCommandsMemoryRequirementsInfoNV - Structure specifying parameters for the reservation of preprocess buffer space
Valid Usage
maxSequencesCount
must be less or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesNV
::maxIndirectSequenceCount
Valid Usage (Implicit)
pNext
must beNULL
pipelineBindPoint
must be a validPipelineBindPoint
valuepipeline
must be a validPipeline
handleindirectCommandsLayout
must be a validIndirectCommandsLayoutNV
handle- Both of
indirectCommandsLayout
, andpipeline
must have been created, allocated, or retrieved from the sameDevice
See Also
IndirectCommandsLayoutNV
,
Pipeline
,
PipelineBindPoint
,
StructureType
,
getGeneratedCommandsMemoryRequirementsNV
GeneratedCommandsMemoryRequirementsInfoNV | |
|
Instances
newtype IndirectCommandsLayoutUsageFlagBitsNV Source #
VkIndirectCommandsLayoutUsageFlagBitsNV - Bitmask specifying allowed usage of an indirect commands layout
See Also
Instances
newtype IndirectStateFlagBitsNV Source #
VkIndirectStateFlagBitsNV - Bitmask specifiying state that can be altered on the device
See Also
pattern INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV :: IndirectStateFlagBitsNV |
|
Instances
newtype IndirectCommandsTokenTypeNV Source #
VkIndirectCommandsTokenTypeNV - Enum specifying token commands
Description
'
Supported indirect command tokens
See Also
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