| // 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, which contains the subgroup mask of the current |
| subgroup invocation, |
| * code:SubgroupGeMaskKHR, which contains the subgroup mask of the |
| invocations greater than or equal to the current invocation, |
| * code:SubgroupGtMaskKHR, which contains the subgroup mask of the |
| invocations greater than the current invocation, |
| * code:SubgroupLeMaskKHR, which contains the subgroup mask of the |
| invocations less than or equal to the current invocation, |
| * code:SubgroupLtMaskKHR, which contains the subgroup mask of the |
| invocations less than the current invocation, |
| * code:SubgroupLocalInvocationId, which contains the index of an |
| invocation within a subgroup, and |
| * code:SubgroupSize, which contains 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 <<VkPhysicalDeviceSubgroupProperties, subgroup operations>>. |
| 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 |
| <<features-subgroupBroadcastDynamicId,subgroupBroadcastDynamicId>> feature. |
| |
| include::{generated}/interfaces/VK_EXT_shader_subgroup_ballot.txt[] |
| |
| === New Built-In Variables |
| |
| * <<interfaces-builtin-variables-sgeq,code:SubgroupEqMaskKHR>> |
| * <<interfaces-builtin-variables-sgge,code:SubgroupGeMaskKHR>> |
| * <<interfaces-builtin-variables-sggt,code:SubgroupGtMaskKHR>> |
| * <<interfaces-builtin-variables-sgle,code:SubgroupLeMaskKHR>> |
| * <<interfaces-builtin-variables-sglt,code:SubgroupLtMaskKHR>> |
| * <<interfaces-builtin-variables-sgli,code:SubgroupLocalInvocationId>> |
| * <<interfaces-builtin-variables-sgs,code:SubgroupSize>> |
| |
| === New SPIR-V Capabilities |
| |
| * <<spirvenv-capabilities-table-SubgroupBallotKHR,SubgroupBallotKHR>> |
| |
| === Version History |
| |
| * Revision 1, 2016-11-28 (Daniel Koch) |
| - Initial draft |