blob: c6804562a0dcf43abf8a7bfb1a2fd6887202e6a3 [file] [log] [blame]
// Copyright (c) 2019-2020 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0
[[device-generated-commands]]
= Device-Generated Commands
This chapter discusses the generation of command buffer content on the
device, for which these principle steps are to be taken:
* Define via sname:VkIndirectCommandsLayoutNV the sequence of commands
which should be generated.
* Optionally make use of <<graphics-shadergroups, device-bindable Shader
Groups>>.
* Retrieve device addresses by flink:vkGetBufferDeviceAddressEXT for
setting buffers on the device.
* Fill one or more sname:VkBuffer with the appropriate content that gets
interpreted by sname:VkIndirectCommandsLayoutNV.
* Create a `preprocess` sname:VkBuffer using the allocation information
from flink:vkGetGeneratedCommandsMemoryRequirementsNV.
* Optionally preprocess the input data using
flink:vkCmdPreprocessGeneratedCommandsNV in a separate action.
* Generate and execute the actual commands via
flink:vkCmdExecuteGeneratedCommandsNV passing all required data.
flink:vkCmdPreprocessGeneratedCommandsNV executes in a separate logical
pipeline from either graphics or compute.
When preprocessing commands in a separate step they must: be explicitly
synchronized against the command execution.
When not preprocessing, the preprocessing is automatically synchronized
against the command execution.
include::indirectcommands.txt[]
include::generation.txt[]