// Copyright 2016-2021 The Khronos Group Inc. // // SPDX-License-Identifier: CC-BY-4.0 include::{generated}/meta/{refprefix}VK_EXT_shader_subgroup_ballot.txt[] === Other Extension Metadata *Last Modified Date*:: 2016-11-28 *IP Status*:: No known IP claims. *Interactions and External Dependencies*:: - This extension requires {spirv}/KHR/SPV_KHR_shader_ballot.html[`SPV_KHR_shader_ballot`] - This extension provides API support for https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_ballot.txt[`GL_ARB_shader_ballot`] *Contributors*:: - Jeff Bolz, NVIDIA - Neil Henning, Codeplay - Daniel Koch, NVIDIA Corporation === Description This extension adds support for the following SPIR-V extension in Vulkan: * `SPV_KHR_shader_ballot` This extension provides the ability for a group of invocations, which execute in parallel, to do limited forms of cross-invocation communication via a group broadcast of a invocation value, or broadcast of a bitarray representing a predicate value from each invocation in the group. This extension provides access to a number of additional built-in shader variables in Vulkan: * code:SubgroupEqMaskKHR, containing the subgroup mask of the current subgroup invocation, * code:SubgroupGeMaskKHR, containing the subgroup mask of the invocations greater than or equal to the current invocation, * code:SubgroupGtMaskKHR, containing the subgroup mask of the invocations greater than the current invocation, * code:SubgroupLeMaskKHR, containing the subgroup mask of the invocations less than or equal to the current invocation, * code:SubgroupLtMaskKHR, containing the subgroup mask of the invocations less than the current invocation, * code:SubgroupLocalInvocationId, containing the index of an invocation within a subgroup, and * code:SubgroupSize, containing the maximum number of invocations in a subgroup. Additionally, this extension provides access to the new SPIR-V instructions: * code:OpSubgroupBallotKHR, * code:OpSubgroupFirstInvocationKHR, and * code:OpSubgroupReadInvocationKHR, When using GLSL source-based shader languages, the following variables and shader functions from GL_ARB_shader_ballot can map to these SPIR-V built-in decorations and instructions: * `in uint64_t gl_SubGroupEqMaskARB;` -> code:SubgroupEqMaskKHR, * `in uint64_t gl_SubGroupGeMaskARB;` -> code:SubgroupGeMaskKHR, * `in uint64_t gl_SubGroupGtMaskARB;` -> code:SubgroupGtMaskKHR, * `in uint64_t gl_SubGroupLeMaskARB;` -> code:SubgroupLeMaskKHR, * `in uint64_t gl_SubGroupLtMaskARB;` -> code:SubgroupLtMaskKHR, * `in uint gl_SubGroupInvocationARB;` -> code:SubgroupLocalInvocationId, * `uniform uint gl_SubGroupSizeARB;` -> code:SubgroupSize, * code:ballotARB() -> code:OpSubgroupBallotKHR, * code:readFirstInvocationARB() -> code:OpSubgroupFirstInvocationKHR, and * code:readInvocationARB() -> code:OpSubgroupReadInvocationKHR. === Deprecated by Vulkan 1.2 Most of the functionality in this extension is superseded by the core Vulkan 1.1 <>. However, Vulkan 1.1 required the code:OpGroupNonUniformBroadcast "`Id`" to be constant. This restriction was removed in Vulkan 1.2 with the addition of the <> feature. include::{generated}/interfaces/VK_EXT_shader_subgroup_ballot.txt[] === New Built-In Variables * <> * <> * <> * <> * <> * <> * <> === New SPIR-V Capabilities * <> === Version History * Revision 1, 2016-11-28 (Daniel Koch) - Initial draft