| include::meta/VK_EXT_shader_subgroup_ballot.txt[] |
| |
| *Last Modified Date*:: |
| 2016-11-28 |
| *IP Status*:: |
| No known IP claims. |
| *Interactions and External Dependencies*:: |
| - This extension requires the |
| https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_shader_ballot.html[+SPV_KHR_shader_ballot+] |
| SPIR-V extension. |
| - This extension requires the |
| https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_ballot.txt[+GL_ARB_shader_ballot+] |
| extension for GLSL source languages. |
| *Contributors*:: |
| - Jeff Bolz, NVIDIA |
| - Neil Henning, Codeplay |
| - Daniel Koch, NVIDIA Corporation |
| |
| 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. |
| |
| === New Object Types |
| |
| None. |
| |
| === New Enum Constants |
| |
| None. |
| |
| === New Enums |
| |
| None. |
| |
| === New Structures |
| |
| None. |
| |
| === New Functions |
| |
| None. |
| |
| === 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-subgroupballot,SubgroupBallotKHR>> |
| |
| === Issues |
| |
| None. |
| |
| === Version History |
| |
| * Revision 1, 2016-11-28 (Daniel Koch) |
| - Initial draft |