Dispatching commands (commands with Dispatch
in the name) provoke
work in a compute pipeline.
Dispatching commands are recorded into a command buffer and when executed by
a queue, will produce work which executes according to the currently bound
compute pipeline.
A compute pipeline must be bound to a command buffer before any dispatch
commands are recorded in that command buffer.
To record a dispatch, call:
void vkCmdDispatch( VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z);
commandBuffer
is the command buffer into which the command will be
recorded.
x
is the number of local workgroups to dispatch in the X
dimension.
y
is the number of local workgroups to dispatch in the Y
dimension.
z
is the number of local workgroups to dispatch in the Z
dimension.
When the command is executed, a global workgroup consisting of x × y × z local workgroups is assembled.
To record an indirect command dispatch, call:
void vkCmdDispatchIndirect( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
commandBuffer
is the command buffer into which the command will be
recorded.
buffer
is the buffer containing dispatch parameters.
offset
is the byte offset into buffer
where parameters
begin.
vkCmdDispatchIndirect
behaves similarly to vkCmdDispatch
except
that the parameters are read by the device from a buffer during execution.
The parameters of the dispatch are encoded in a
VkDispatchIndirectCommand
structure taken from buffer
starting
at offset
.
The VkDispatchIndirectCommand
structure is defined as:
typedef struct VkDispatchIndirectCommand { uint32_t x; uint32_t y; uint32_t z; } VkDispatchIndirectCommand;
x
is the number of local workgroups to dispatch in the X
dimension.
y
is the number of local workgroups to dispatch in the Y
dimension.
z
is the number of local workgroups to dispatch in the Z
dimension.
The members of VkDispatchIndirectCommand
structure have the same
meaning as the similarly named parameters of vkCmdDispatch
.