Registered Extension Number

65

Revision

1

Extension and Version Dependencies

  • Requires Vulkan 1.0

Deprecation state

Other Extension Metadata

Last Modified Date

2016-11-28

IP Status

No known IP claims.

Interactions and External Dependencies
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:

  • SubgroupEqMaskKHR, which contains the subgroup mask of the current subgroup invocation,

  • SubgroupGeMaskKHR, which contains the subgroup mask of the invocations greater than or equal to the current invocation,

  • SubgroupGtMaskKHR, which contains the subgroup mask of the invocations greater than the current invocation,

  • SubgroupLeMaskKHR, which contains the subgroup mask of the invocations less than or equal to the current invocation,

  • SubgroupLtMaskKHR, which contains the subgroup mask of the invocations less than the current invocation,

  • SubgroupLocalInvocationId, which contains the index of an invocation within a subgroup, and

  • SubgroupSize, which contains the maximum number of invocations in a subgroup.

Additionally, this extension provides access to the new SPIR-V instructions:

  • OpSubgroupBallotKHR,

  • OpSubgroupFirstInvocationKHR, and

  • 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;SubgroupEqMaskKHR,

  • in uint64_t gl_SubGroupGeMaskARB;SubgroupGeMaskKHR,

  • in uint64_t gl_SubGroupGtMaskARB;SubgroupGtMaskKHR,

  • in uint64_t gl_SubGroupLeMaskARB;SubgroupLeMaskKHR,

  • in uint64_t gl_SubGroupLtMaskARB;SubgroupLtMaskKHR,

  • in uint gl_SubGroupInvocationARB;SubgroupLocalInvocationId,

  • uniform uint gl_SubGroupSizeARB;SubgroupSize,

  • ballotARB() → OpSubgroupBallotKHR,

  • readFirstInvocationARB() → OpSubgroupFirstInvocationKHR, and

  • readInvocationARB() → OpSubgroupReadInvocationKHR.

New Object Types

None.

New Enum Constants

None.

New Enums

None.

New Structures

None.

New Functions

None.

New SPIR-V Capabilities

Deprecated by Vulkan 1.2

Most of the functionality in this extension is superseded by the core Vulkan 1.1 subgroup operations. However, Vulkan 1.1 required the OpGroupNonUniformBroadcast "Id" to be constant. This restriction was removed in Vulkan 1.2 with the addition of the subgroupBroadcastDynamicId feature.

Issues

None.

Version History

  • Revision 1, 2016-11-28 (Daniel Koch)

    • Initial draft

See Also

No cross-references are available

Document Notes

For more information, see the Vulkan Specification

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

Copyright (c) 2014-2020 Khronos Group. This work is licensed under a Creative Commons Attribution 4.0 International License.