// Copyright 2020-2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_KHR_shader_subgroup_uniform_control_flow.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2020-08-27
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
  - Requires SPIR-V 1.3.
  - This extension requires
    {spirv}/KHR/SPV_KHR_subgroup_uniform_control_flow.html[`SPV_KHR_subgroup_uniform_control_flow`]
*Contributors*::
  - Alan Baker, Google
  - Jeff Bolz, NVIDIA

=== Description

This extension allows the use of the `SPV_KHR_subgroup_uniform_control_flow`
SPIR-V extension in shader modules.
`SPV_KHR_subgroup_uniform_control_flow` provides stronger guarantees that
diverged subgroups will reconverge.

Developers should utilize this extension if they use subgroup operations to
reduce the work performed by a uniform subgroup.
This extension will guarantee that uniform subgroup will reconverge in the
same manner as invocation groups (see "`Uniform Control Flow`" in the
<<spirv-spec,Khronos SPIR-V Specification>>).

include::{generated}/interfaces/VK_KHR_shader_subgroup_uniform_control_flow.txt[]

=== Version History

  * Revision 1, 2020-08-27 (Alan Baker)
    - Internal draft version
