// 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
