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