1e5c31af7Sopenharmony_ci// Copyright 2015-2021 The Khronos Group, Inc.
2e5c31af7Sopenharmony_ci//
3e5c31af7Sopenharmony_ci// SPDX-License-Identifier: CC-BY-4.0
4e5c31af7Sopenharmony_ci
5e5c31af7Sopenharmony_ci[[dispatch]]
6e5c31af7Sopenharmony_ci= Dispatching Commands
7e5c31af7Sopenharmony_ci
8e5c31af7Sopenharmony_ci_Dispatching commands_ (commands with ftext:Dispatch in the name) provoke
9e5c31af7Sopenharmony_ciwork in a compute pipeline.
10e5c31af7Sopenharmony_ciDispatching commands are recorded into a command buffer and when executed by
11e5c31af7Sopenharmony_cia queue, will produce work which executes according to the bound compute
12e5c31af7Sopenharmony_cipipeline.
13e5c31af7Sopenharmony_ciA compute pipeline must: be bound to a command buffer before any dispatching
14e5c31af7Sopenharmony_cicommands are recorded in that command buffer.
15e5c31af7Sopenharmony_ci
16e5c31af7Sopenharmony_ci[open,refpage='vkCmdDispatch',desc='Dispatch compute work items',type='protos']
17e5c31af7Sopenharmony_ci--
18e5c31af7Sopenharmony_ci:refpage: vkCmdDispatch
19e5c31af7Sopenharmony_ci
20e5c31af7Sopenharmony_ciTo record a dispatch, call:
21e5c31af7Sopenharmony_ci
22e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCmdDispatch.txt[]
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ci  * pname:commandBuffer is the command buffer into which the command will be
25e5c31af7Sopenharmony_ci    recorded.
26e5c31af7Sopenharmony_ci  * pname:groupCountX is the number of local workgroups to dispatch in the X
27e5c31af7Sopenharmony_ci    dimension.
28e5c31af7Sopenharmony_ci  * pname:groupCountY is the number of local workgroups to dispatch in the Y
29e5c31af7Sopenharmony_ci    dimension.
30e5c31af7Sopenharmony_ci  * pname:groupCountZ is the number of local workgroups to dispatch in the Z
31e5c31af7Sopenharmony_ci    dimension.
32e5c31af7Sopenharmony_ci
33e5c31af7Sopenharmony_ciWhen the command is executed, a global workgroup consisting of
34e5c31af7Sopenharmony_ci[eq]#pname:groupCountX {times} pname:groupCountY {times} pname:groupCountZ#
35e5c31af7Sopenharmony_cilocal workgroups is assembled.
36e5c31af7Sopenharmony_ci
37e5c31af7Sopenharmony_ci.Valid Usage
38e5c31af7Sopenharmony_ci****
39e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/draw_dispatch_common.txt[]
40e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
41e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatch-groupCountX-00386]]
42e5c31af7Sopenharmony_ci    pname:groupCountX must: be less than or equal to
43e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
44e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatch-groupCountY-00387]]
45e5c31af7Sopenharmony_ci    pname:groupCountY must: be less than or equal to
46e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
47e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatch-groupCountZ-00388]]
48e5c31af7Sopenharmony_ci    pname:groupCountZ must: be less than or equal to
49e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
50e5c31af7Sopenharmony_ci****
51e5c31af7Sopenharmony_ci
52e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCmdDispatch.txt[]
53e5c31af7Sopenharmony_ci--
54e5c31af7Sopenharmony_ci
55e5c31af7Sopenharmony_ci[open,refpage='vkCmdDispatchIndirect',desc='Dispatch compute work items with indirect parameters',type='protos']
56e5c31af7Sopenharmony_ci--
57e5c31af7Sopenharmony_ci:refpage: vkCmdDispatchIndirect
58e5c31af7Sopenharmony_ci
59e5c31af7Sopenharmony_ciTo record an indirect dispatching command, call:
60e5c31af7Sopenharmony_ci
61e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCmdDispatchIndirect.txt[]
62e5c31af7Sopenharmony_ci
63e5c31af7Sopenharmony_ci  * pname:commandBuffer is the command buffer into which the command will be
64e5c31af7Sopenharmony_ci    recorded.
65e5c31af7Sopenharmony_ci  * pname:buffer is the buffer containing dispatch parameters.
66e5c31af7Sopenharmony_ci  * pname:offset is the byte offset into pname:buffer where parameters
67e5c31af7Sopenharmony_ci    begin.
68e5c31af7Sopenharmony_ci
69e5c31af7Sopenharmony_cifname:vkCmdDispatchIndirect behaves similarly to flink:vkCmdDispatch except
70e5c31af7Sopenharmony_cithat the parameters are read by the device from a buffer during execution.
71e5c31af7Sopenharmony_ciThe parameters of the dispatch are encoded in a
72e5c31af7Sopenharmony_cislink:VkDispatchIndirectCommand structure taken from pname:buffer starting
73e5c31af7Sopenharmony_ciat pname:offset.
74e5c31af7Sopenharmony_ci
75e5c31af7Sopenharmony_ci.Valid Usage
76e5c31af7Sopenharmony_ci****
77e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/draw_dispatch_common.txt[]
78e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/draw_dispatch_indirect_common.txt[]
79e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatchIndirect-offset-00407]]
80e5c31af7Sopenharmony_ci    The sum of pname:offset and the size of sname:VkDispatchIndirectCommand
81e5c31af7Sopenharmony_ci    must: be less than or equal to the size of pname:buffer
82e5c31af7Sopenharmony_ci****
83e5c31af7Sopenharmony_ci
84e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCmdDispatchIndirect.txt[]
85e5c31af7Sopenharmony_ci--
86e5c31af7Sopenharmony_ci
87e5c31af7Sopenharmony_ci[open,refpage='VkDispatchIndirectCommand',desc='Structure specifying a indirect dispatching command',type='structs',xrefs='vkCmdDispatchIndirect']
88e5c31af7Sopenharmony_ci--
89e5c31af7Sopenharmony_ciThe sname:VkDispatchIndirectCommand structure is defined as:
90e5c31af7Sopenharmony_ci
91e5c31af7Sopenharmony_ciinclude::{generated}/api/structs/VkDispatchIndirectCommand.txt[]
92e5c31af7Sopenharmony_ci
93e5c31af7Sopenharmony_ci  * pname:x is the number of local workgroups to dispatch in the X
94e5c31af7Sopenharmony_ci    dimension.
95e5c31af7Sopenharmony_ci  * pname:y is the number of local workgroups to dispatch in the Y
96e5c31af7Sopenharmony_ci    dimension.
97e5c31af7Sopenharmony_ci  * pname:z is the number of local workgroups to dispatch in the Z
98e5c31af7Sopenharmony_ci    dimension.
99e5c31af7Sopenharmony_ci
100e5c31af7Sopenharmony_ciThe members of sname:VkDispatchIndirectCommand have the same meaning as the
101e5c31af7Sopenharmony_cicorresponding parameters of flink:vkCmdDispatch.
102e5c31af7Sopenharmony_ci
103e5c31af7Sopenharmony_ci.Valid Usage
104e5c31af7Sopenharmony_ci****
105e5c31af7Sopenharmony_ci  * [[VUID-VkDispatchIndirectCommand-x-00417]]
106e5c31af7Sopenharmony_ci    pname:x must: be less than or equal to
107e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
108e5c31af7Sopenharmony_ci  * [[VUID-VkDispatchIndirectCommand-y-00418]]
109e5c31af7Sopenharmony_ci    pname:y must: be less than or equal to
110e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
111e5c31af7Sopenharmony_ci  * [[VUID-VkDispatchIndirectCommand-z-00419]]
112e5c31af7Sopenharmony_ci    pname:z must: be less than or equal to
113e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
114e5c31af7Sopenharmony_ci****
115e5c31af7Sopenharmony_ci
116e5c31af7Sopenharmony_ciinclude::{generated}/validity/structs/VkDispatchIndirectCommand.txt[]
117e5c31af7Sopenharmony_ci--
118e5c31af7Sopenharmony_ci
119e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1,VK_KHR_device_group[]
120e5c31af7Sopenharmony_ci[open,refpage='vkCmdDispatchBase',desc='Dispatch compute work items with non-zero base values for the workgroup IDs',type='protos']
121e5c31af7Sopenharmony_ci--
122e5c31af7Sopenharmony_ci:refpage: vkCmdDispatchBase
123e5c31af7Sopenharmony_ci
124e5c31af7Sopenharmony_ciTo record a dispatch using non-zero base values for the components of
125e5c31af7Sopenharmony_cicode:WorkgroupId, call:
126e5c31af7Sopenharmony_ci
127e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
128e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCmdDispatchBase.txt[]
129e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
130e5c31af7Sopenharmony_ci
131e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1+VK_KHR_device_group[or the equivalent command]
132e5c31af7Sopenharmony_ci
133e5c31af7Sopenharmony_ciifdef::VK_KHR_device_group[]
134e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCmdDispatchBaseKHR.txt[]
135e5c31af7Sopenharmony_ciendif::VK_KHR_device_group[]
136e5c31af7Sopenharmony_ci
137e5c31af7Sopenharmony_ci  * pname:commandBuffer is the command buffer into which the command will be
138e5c31af7Sopenharmony_ci    recorded.
139e5c31af7Sopenharmony_ci  * pname:baseGroupX is the start value for the X component of
140e5c31af7Sopenharmony_ci    code:WorkgroupId.
141e5c31af7Sopenharmony_ci  * pname:baseGroupY is the start value for the Y component of
142e5c31af7Sopenharmony_ci    code:WorkgroupId.
143e5c31af7Sopenharmony_ci  * pname:baseGroupZ is the start value for the Z component of
144e5c31af7Sopenharmony_ci    code:WorkgroupId.
145e5c31af7Sopenharmony_ci  * pname:groupCountX is the number of local workgroups to dispatch in the X
146e5c31af7Sopenharmony_ci    dimension.
147e5c31af7Sopenharmony_ci  * pname:groupCountY is the number of local workgroups to dispatch in the Y
148e5c31af7Sopenharmony_ci    dimension.
149e5c31af7Sopenharmony_ci  * pname:groupCountZ is the number of local workgroups to dispatch in the Z
150e5c31af7Sopenharmony_ci    dimension.
151e5c31af7Sopenharmony_ci
152e5c31af7Sopenharmony_ciWhen the command is executed, a global workgroup consisting of
153e5c31af7Sopenharmony_ci[eq]#pname:groupCountX {times} pname:groupCountY {times} pname:groupCountZ#
154e5c31af7Sopenharmony_cilocal workgroups is assembled, with code:WorkgroupId values ranging from
155e5c31af7Sopenharmony_ci[eq]#[ptext:baseGroup*, ptext:baseGroup* {plus} ptext:groupCount*)# in each
156e5c31af7Sopenharmony_cicomponent.
157e5c31af7Sopenharmony_ciflink:vkCmdDispatch is equivalent to
158e5c31af7Sopenharmony_ci`vkCmdDispatchBase(0,0,0,groupCountX,groupCountY,groupCountZ)`.
159e5c31af7Sopenharmony_ci
160e5c31af7Sopenharmony_ci.Valid Usage
161e5c31af7Sopenharmony_ci****
162e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/draw_dispatch_common.txt[]
163e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/draw_dispatch_nonindirect_common.txt[]
164e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatchBase-baseGroupX-00421]]
165e5c31af7Sopenharmony_ci    pname:baseGroupX must: be less than
166e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
167e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatchBase-baseGroupX-00422]]
168e5c31af7Sopenharmony_ci    pname:baseGroupY must: be less than
169e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
170e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatchBase-baseGroupZ-00423]]
171e5c31af7Sopenharmony_ci    pname:baseGroupZ must: be less than
172e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
173e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatchBase-groupCountX-00424]]
174e5c31af7Sopenharmony_ci    pname:groupCountX must: be less than or equal to
175e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0] minus
176e5c31af7Sopenharmony_ci    pname:baseGroupX
177e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatchBase-groupCountY-00425]]
178e5c31af7Sopenharmony_ci    pname:groupCountY must: be less than or equal to
179e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1] minus
180e5c31af7Sopenharmony_ci    pname:baseGroupY
181e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatchBase-groupCountZ-00426]]
182e5c31af7Sopenharmony_ci    pname:groupCountZ must: be less than or equal to
183e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2] minus
184e5c31af7Sopenharmony_ci    pname:baseGroupZ
185e5c31af7Sopenharmony_ci  * [[VUID-vkCmdDispatchBase-baseGroupX-00427]]
186e5c31af7Sopenharmony_ci    If any of pname:baseGroupX, pname:baseGroupY, or pname:baseGroupZ are
187e5c31af7Sopenharmony_ci    not zero, then the bound compute pipeline must: have been created with
188e5c31af7Sopenharmony_ci    the ename:VK_PIPELINE_CREATE_DISPATCH_BASE flag
189e5c31af7Sopenharmony_ci****
190e5c31af7Sopenharmony_ci
191e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCmdDispatchBase.txt[]
192e5c31af7Sopenharmony_ci--
193e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1,VK_KHR_device_group[]
194e5c31af7Sopenharmony_ci
195e5c31af7Sopenharmony_ciifdef::VK_HUAWEI_subpass_shading[]
196e5c31af7Sopenharmony_ci[open,refpage='vkCmdSubpassShadingHUAWEI',desc='Dispatch compute work items',type='protos']
197e5c31af7Sopenharmony_ci--
198e5c31af7Sopenharmony_ci:refpage: vkCmdSubpassShadingHUAWEI
199e5c31af7Sopenharmony_ci
200e5c31af7Sopenharmony_ciA subpass shading dispatches a compute pipeline work with the work dimension
201e5c31af7Sopenharmony_ciof render area of the calling subpass and work groups are partitioned by
202e5c31af7Sopenharmony_cispecified work group size.
203e5c31af7Sopenharmony_ciSubpass operations like subpassLoad and subpassLoadMS are allowed to be
204e5c31af7Sopenharmony_ciused.
205e5c31af7Sopenharmony_ci
206e5c31af7Sopenharmony_ciTo record a subpass shading, call:
207e5c31af7Sopenharmony_ci
208e5c31af7Sopenharmony_ciinclude::{generated}/api/protos/vkCmdSubpassShadingHUAWEI.txt[]
209e5c31af7Sopenharmony_ci
210e5c31af7Sopenharmony_ci  * pname:commandBuffer is the command buffer into which the command will be
211e5c31af7Sopenharmony_ci    recorded.
212e5c31af7Sopenharmony_ci
213e5c31af7Sopenharmony_ciWhen the command is executed, a global workgroup consisting of ceil (render
214e5c31af7Sopenharmony_ciarea size / local workgroup size) local workgroups is assembled.
215e5c31af7Sopenharmony_ci
216e5c31af7Sopenharmony_ci.Valid Usage
217e5c31af7Sopenharmony_ci****
218e5c31af7Sopenharmony_ciinclude::{chapters}/commonvalidity/draw_dispatch_common.txt[]
219e5c31af7Sopenharmony_ci  * [[VUID-vkCmdSubpassShadingHUAWEI-None-04931]]
220e5c31af7Sopenharmony_ci    This command must be called in a subpass with bind point
221e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI.
222e5c31af7Sopenharmony_ci    No draw commands can be called in the same subpass.
223e5c31af7Sopenharmony_ci    Only one flink:vkCmdSubpassShadingHUAWEI command can be called in a
224e5c31af7Sopenharmony_ci    subpass
225e5c31af7Sopenharmony_ci****
226e5c31af7Sopenharmony_ci
227e5c31af7Sopenharmony_ciinclude::{generated}/validity/protos/vkCmdSubpassShadingHUAWEI.txt[]
228e5c31af7Sopenharmony_ci--
229e5c31af7Sopenharmony_ciendif::VK_HUAWEI_subpass_shading[]
230