blob: 3916336e5fc2095dffbd15988115588be4aad0f1 [file] [log] [blame]
[[device-generated-commands]]
= Device-Generated Commands
This chapter discusses the generation of command buffer content on the
device.
These principle steps are to be taken to generate commands on the device:
* Make resource bindings accessible for the device via registering in a
sname:VkObjectTableNVX.
* Define via sname:VkIndirectCommandsLayoutNVX the sequence of commands
which should be generated.
* Fill one or more sname:VkBuffer with the appropriate content that gets
interpreted by sname:VkIndirectCommandsLayoutNVX.
* Reserve command space via flink:vkCmdReserveSpaceForCommandsNVX in a
secondary sname:VkCommandBuffer where the generated commands should be
recorded.
* Generate the actual commands via flink:vkCmdProcessCommandsNVX passing
all required data.
Execution of such generated commands can either be triggered directly with
the generation process, or by executing the secondary sname:VkCommandBuffer
that was chosen as optional target.
The latter allows re-using generated commands as well.
Similar to sname:VkDescriptorSet, special care should: be taken for the
lifetime of resources referenced in sname:VkObjectTableNVX, which may be
accessed at either generation or execution time.
flink:vkCmdProcessCommandsNVX executes in a separate logical pipeline from
either graphics or compute.
When generating commands into a secondary command buffer, the command
generation must: be explicitly synchronized against the secondary command
buffer's execution.
When not using a secondary command buffer, the command generation is
automatically synchronized against the command execution.
== Features and Limitations
[open,refpage='vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX',desc='Returns device-generated commands related properties of a physical device',type='protos']
--
To query the support of related features and limitations, call:
include::../../api/protos/vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX.txt[]
* pname:physicalDevice is the handle to the physical device whose
properties will be queried.
* pname:pFeatures points to an instance of the
slink:VkDeviceGeneratedCommandsFeaturesNVX structure, that will be
filled with returned information.
* pname:pLimits points to an instance of the
slink:VkDeviceGeneratedCommandsLimitsNVX structure, that will be filled
with returned information.
include::../../validity/protos/vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX.txt[]
--
[open,refpage='VkDeviceGeneratedCommandsFeaturesNVX',desc='Structure specifying physical device support',type='structs']
--
The sname:VkDeviceGeneratedCommandsFeaturesNVX structure is defined as:
include::../../api/structs/VkDeviceGeneratedCommandsFeaturesNVX.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:computeBindingPointSupport specifies whether the
sname:VkObjectTableNVX supports entries with
ename:VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX bit set and
sname:VkIndirectCommandsLayoutNVX supports
ename:VK_PIPELINE_BIND_POINT_COMPUTE.
include::../../validity/structs/VkDeviceGeneratedCommandsFeaturesNVX.txt[]
--
[open,refpage='VkDeviceGeneratedCommandsLimitsNVX',desc='Structure specifying physical device limits',type='structs']
--
The sname:VkDeviceGeneratedCommandsLimitsNVX structure is defined as:
include::../../api/structs/VkDeviceGeneratedCommandsLimitsNVX.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:maxIndirectCommandsLayoutTokenCount the maximum number of tokens
in sname:VkIndirectCommandsLayoutNVX.
* pname:maxObjectEntryCounts the maximum number of entries per resource
type in sname:VkObjectTableNVX.
* pname:minSequenceCountBufferOffsetAlignment the minimum alignment for
memory addresses optionally used in fname:vkCmdProcessCommandsNVX.
* pname:minSequenceIndexBufferOffsetAlignment the minimum alignment for
memory addresses optionally used in fname:vkCmdProcessCommandsNVX.
* pname:minCommandsTokenBufferOffsetAlignment the minimum alignment for
memory addresses optionally used in fname:vkCmdProcessCommandsNVX.
include::../../validity/structs/VkDeviceGeneratedCommandsLimitsNVX.txt[]
--
include::objecttable.txt[]
include::indirectcommands.txt[]
include::generation.txt[]