-
Notifications
You must be signed in to change notification settings - Fork 453
/
VK_EXT_shader_subgroup_ballot.txt
103 lines (81 loc) · 4.09 KB
/
VK_EXT_shader_subgroup_ballot.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// Copyright (c) 2016-2020 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 the
{spirv}/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
=== 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-subgroupballot,SubgroupBallotKHR>>
=== Version History
* Revision 1, 2016-11-28 (Daniel Koch)
- Initial draft