# Chapter 27. Dispatching Commands

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.