15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    KHR_shader_subgroup
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_KHR_shader_subgroup
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Daniel Koch, NVIDIA Corportation
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ciContributors
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ci    Neil Henning, Codeplay
165bd8deadSopenharmony_ci    Contributors to GL_KHR_shader_subgroup (GLSL)
175bd8deadSopenharmony_ci    James Glanville, Imagination
185bd8deadSopenharmony_ci    Jan-Harald Fredriksen, Arm
195bd8deadSopenharmony_ci    Graeme Leese, Broadcom
205bd8deadSopenharmony_ci    Jesse Hall, Google
215bd8deadSopenharmony_ci
225bd8deadSopenharmony_ciStatus
235bd8deadSopenharmony_ci
245bd8deadSopenharmony_ci    Complete
255bd8deadSopenharmony_ci    Approved by the OpenGL Working Group on 2019-05-29
265bd8deadSopenharmony_ci    Approved by the OpenGL ES Working Group on 2019-05-29
275bd8deadSopenharmony_ci    Approved by the Khronos Promoters on 2019-07-26
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ciVersion
305bd8deadSopenharmony_ci
315bd8deadSopenharmony_ci    Last Modified:  2019-07-26
325bd8deadSopenharmony_ci    Revision:       8
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ciNumber
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ci    ARB Extension #196
375bd8deadSopenharmony_ci    OpenGL ES Extension #321
385bd8deadSopenharmony_ci
395bd8deadSopenharmony_ciDependencies
405bd8deadSopenharmony_ci
415bd8deadSopenharmony_ci    This extension is written against the OpenGL 4.6 Specification
425bd8deadSopenharmony_ci    (Core Profile), dated July 30, 2017.
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ci    This extension requires OpenGL 4.3 or OpenGL ES 3.1.
455bd8deadSopenharmony_ci
465bd8deadSopenharmony_ci    This extension requires the KHR_shader_subgroup GLSL extension.
475bd8deadSopenharmony_ci
485bd8deadSopenharmony_ci    This extension interacts with ARB_gl_spirv and OpenGL 4.6.
495bd8deadSopenharmony_ci
505bd8deadSopenharmony_ci    This extension interacts with ARB_spirv_extensions and OpenGL 4.6.
515bd8deadSopenharmony_ci
525bd8deadSopenharmony_ci    This extension interacts with OpenGL ES 3.x.
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ci    This extension interacts with ARB_shader_draw_parameters and
555bd8deadSopenharmony_ci    SPV_KHR_shader_draw_parameters.
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ci    This extension interacts with SPV_KHR_storage_buffer_storage_class.
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci    This extension requires SPIR-V 1.3 when SPIR-V is supported in OpenGL.
605bd8deadSopenharmony_ci
615bd8deadSopenharmony_ciOverview
625bd8deadSopenharmony_ci
635bd8deadSopenharmony_ci    This extension enables support for the KHR_shader_subgroup shading
645bd8deadSopenharmony_ci    language extension in OpenGL and OpenGL ES.
655bd8deadSopenharmony_ci
665bd8deadSopenharmony_ci    The extension adds API queries to be able to query
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ci      - the size of subgroups in this implementation (SUBGROUP_SIZE_KHR)
695bd8deadSopenharmony_ci      - which shader stages support subgroup operations
705bd8deadSopenharmony_ci        (SUBGROUP_SUPPORTED_STAGES_KHR)
715bd8deadSopenharmony_ci      - which subgroup features are supported (SUBGROUP_SUPPORTED_FEATURES_KHR)
725bd8deadSopenharmony_ci      - whether quad subgroup operations are supported in all
735bd8deadSopenharmony_ci        stages supporting subgroup operations (SUBGROUP_QUAD_ALL_STAGES_KHR)
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ci    In OpenGL implementations supporting SPIR-V, this extension enables the
765bd8deadSopenharmony_ci    minimal subset of SPIR-V 1.3 which is required to support the subgroup
775bd8deadSopenharmony_ci    features that are supported by the implementation.
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci    In OpenGL ES implementations, this extension does NOT add support for
805bd8deadSopenharmony_ci    SPIR-V or for any of the built-in shading language functions (8.18)
815bd8deadSopenharmony_ci    that have genDType (double) prototypes.
825bd8deadSopenharmony_ci
835bd8deadSopenharmony_ciNew Procedures and Functions
845bd8deadSopenharmony_ci
855bd8deadSopenharmony_ci    None
865bd8deadSopenharmony_ci
875bd8deadSopenharmony_ciNew Tokens
885bd8deadSopenharmony_ci
895bd8deadSopenharmony_ci    Accepted as the <pname> argument for GetIntegerv and
905bd8deadSopenharmony_ci    GetInteger64v:
915bd8deadSopenharmony_ci
925bd8deadSopenharmony_ci        SUBGROUP_SIZE_KHR                           0x9532
935bd8deadSopenharmony_ci        SUBGROUP_SUPPORTED_STAGES_KHR               0x9533
945bd8deadSopenharmony_ci        SUBGROUP_SUPPORTED_FEATURES_KHR             0x9534
955bd8deadSopenharmony_ci
965bd8deadSopenharmony_ci    Accepted as the <pname> argument for GetBooleanv:
975bd8deadSopenharmony_ci
985bd8deadSopenharmony_ci        SUBGROUP_QUAD_ALL_STAGES_KHR                0x9535
995bd8deadSopenharmony_ci
1005bd8deadSopenharmony_ci    Returned as a bitfield in the <data> argument when GetIntegerv
1015bd8deadSopenharmony_ci    is queried with a <pname> of SUBGROUP_SUPPORTED_STAGES_KHR
1025bd8deadSopenharmony_ci
1035bd8deadSopenharmony_ci        (existing tokens)
1045bd8deadSopenharmony_ci        VERTEX_SHADER_BIT
1055bd8deadSopenharmony_ci        TESS_CONTROL_SHADER_BIT
1065bd8deadSopenharmony_ci        TESS_EVALUATION_SHADER_BIT
1075bd8deadSopenharmony_ci        GEOMETRY_SHADER_BIT
1085bd8deadSopenharmony_ci        FRAGMENT_SHADER_BIT
1095bd8deadSopenharmony_ci        COMPUTE_SHADER_BIT
1105bd8deadSopenharmony_ci
1115bd8deadSopenharmony_ci    Returned as bitfield in the <data> argument when GetIntegerv
1125bd8deadSopenharmony_ci    is queried with a <pname> of SUBGROUP_SUPPORTED_FEATURES_KHR:
1135bd8deadSopenharmony_ci
1145bd8deadSopenharmony_ci        SUBGROUP_FEATURE_BASIC_BIT_KHR              0x00000001
1155bd8deadSopenharmony_ci        SUBGROUP_FEATURE_VOTE_BIT_KHR               0x00000002
1165bd8deadSopenharmony_ci        SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR         0x00000004
1175bd8deadSopenharmony_ci        SUBGROUP_FEATURE_BALLOT_BIT_KHR             0x00000008
1185bd8deadSopenharmony_ci        SUBGROUP_FEATURE_SHUFFLE_BIT_KHR            0x00000010
1195bd8deadSopenharmony_ci        SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR   0x00000020
1205bd8deadSopenharmony_ci        SUBGROUP_FEATURE_CLUSTERED_BIT_KHR          0x00000040
1215bd8deadSopenharmony_ci        SUBGROUP_FEATURE_QUAD_BIT_KHR               0x00000080
1225bd8deadSopenharmony_ci
1235bd8deadSopenharmony_ci
1245bd8deadSopenharmony_ciModifications to the OpenGL 4.6 Specification (Core Profile)
1255bd8deadSopenharmony_ci
1265bd8deadSopenharmony_ciAdd a new Chapter SG, "Subgroups"
1275bd8deadSopenharmony_ci
1285bd8deadSopenharmony_ci    A subgroup is a set of invocations that can synchronize and share data
1295bd8deadSopenharmony_ci    with each other efficiently. An invocation group is partitioned into
1305bd8deadSopenharmony_ci    one or more subgroups.
1315bd8deadSopenharmony_ci
1325bd8deadSopenharmony_ci    Subgroup operations are divided into various categories as described
1335bd8deadSopenharmony_ci    by SUBGROUP_SUPPORTED_FEATURES_KHR.
1345bd8deadSopenharmony_ci
1355bd8deadSopenharmony_ci    SG.1 Subgroup Operations
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ci    Subgroup operations are divided into a number of categories as
1385bd8deadSopenharmony_ci    described in this section.
1395bd8deadSopenharmony_ci
1405bd8deadSopenharmony_ci    SG.1.1 Basic Subgroup Operations
1415bd8deadSopenharmony_ci
1425bd8deadSopenharmony_ci    The basic subgroup operations allow two classes of functionality within
1435bd8deadSopenharmony_ci    shaders - elect and barrier. Invocations within a subgroup can choose a
1445bd8deadSopenharmony_ci    single invocation to perform some task for the subgroup as a whole using
1455bd8deadSopenharmony_ci    elect. Invocations within a subgroup can perform a subgroup barrier to
1465bd8deadSopenharmony_ci    ensure the ordering of execution or memory accesses within a subgroup.
1475bd8deadSopenharmony_ci    Barriers can be performed on buffer memory accesses, shared memory
1485bd8deadSopenharmony_ci    accesses, and image memory accesses to ensure that any results written are
1495bd8deadSopenharmony_ci    visible by other invocations within the subgroup. A _subgroupBarrier_ can
1505bd8deadSopenharmony_ci    also be used to perform a full execution control barrier. A full execution
1515bd8deadSopenharmony_ci    control barrier will ensure that each active invocation within the
1525bd8deadSopenharmony_ci    subgroup reaches a point of execution before any are allowed to continue.
1535bd8deadSopenharmony_ci
1545bd8deadSopenharmony_ci    SG.1.2 Vote Subgroup Operations
1555bd8deadSopenharmony_ci
1565bd8deadSopenharmony_ci    The vote subgroup operations allow invocations within a subgroup to
1575bd8deadSopenharmony_ci    compare values across a subgroup. The types of votes enabled are:
1585bd8deadSopenharmony_ci
1595bd8deadSopenharmony_ci    * Do all active subgroup invocations agree that an expression is true?
1605bd8deadSopenharmony_ci    * Do any active subgroup invocations evaluate an expression to true?
1615bd8deadSopenharmony_ci    * Do all active subgroup invocations have the same value of an expression?
1625bd8deadSopenharmony_ci
1635bd8deadSopenharmony_ci    Note:
1645bd8deadSopenharmony_ci    These operations are useful in combination with control flow in that
1655bd8deadSopenharmony_ci    they allow for developers to check whether conditions match across the
1665bd8deadSopenharmony_ci    subgroup and choose potentially faster code-paths in these cases.
1675bd8deadSopenharmony_ci
1685bd8deadSopenharmony_ci    SG.1.3 Arithmetic Subgroup Operations
1695bd8deadSopenharmony_ci
1705bd8deadSopenharmony_ci    The arithmetic subgroup operations allow invocations to perform scan
1715bd8deadSopenharmony_ci    and reduction operations across a subgroup. For reduction operations,
1725bd8deadSopenharmony_ci    each invocation in a subgroup will obtain the same result of these
1735bd8deadSopenharmony_ci    arithmetic operations applied across the subgroup. For scan operations,
1745bd8deadSopenharmony_ci    each invocation in the subgroup will perform an inclusive or exclusive
1755bd8deadSopenharmony_ci    scan, cumulatively applying the operation across the invocations in a
1765bd8deadSopenharmony_ci    subgroup in an implementation-defined order. The operations supported
1775bd8deadSopenharmony_ci    are add, mul, min, max, and, or, xor.
1785bd8deadSopenharmony_ci
1795bd8deadSopenharmony_ci    SG.1.4 Ballot Subgroup Operations
1805bd8deadSopenharmony_ci
1815bd8deadSopenharmony_ci    The ballot subgroup operations allow invocations to perform more
1825bd8deadSopenharmony_ci    complex votes across the subgroup. The ballot functionality allows
1835bd8deadSopenharmony_ci    all invocations within a subgroup to provide a boolean value and get
1845bd8deadSopenharmony_ci    as a result what each invocation provided as their boolean value. The
1855bd8deadSopenharmony_ci    broadcast functionality allows values to be broadcast from an
1865bd8deadSopenharmony_ci    invocation to all other invocations within the subgroup, given that
1875bd8deadSopenharmony_ci    the invocation to be broadcast from is known at shader compilation
1885bd8deadSopenharmony_ci    time.
1895bd8deadSopenharmony_ci
1905bd8deadSopenharmony_ci    SG.1.5 Shuffle Subgroup Operations
1915bd8deadSopenharmony_ci
1925bd8deadSopenharmony_ci    The shuffle subgroup operations allow invocations to read values from
1935bd8deadSopenharmony_ci    other invocations within a subgroup.
1945bd8deadSopenharmony_ci
1955bd8deadSopenharmony_ci    SG.1.6 Shuffle Relative Subgroup Operations
1965bd8deadSopenharmony_ci
1975bd8deadSopenharmony_ci    The shuffle relative subgroup operations allow invocations to read
1985bd8deadSopenharmony_ci    values from other invocations within the subgroup relative to the
1995bd8deadSopenharmony_ci    current invocation in the group. The relative operations supported
2005bd8deadSopenharmony_ci    allow data to be shifted up and down through the invocations within
2015bd8deadSopenharmony_ci    a subgroup.
2025bd8deadSopenharmony_ci
2035bd8deadSopenharmony_ci    SG.1.7 Clustered Subgroup Operations
2045bd8deadSopenharmony_ci
2055bd8deadSopenharmony_ci    The clustered subgroup operations allow invocations to perform
2065bd8deadSopenharmony_ci    arithmetic operations among partitions of a subgroup, such that the
2075bd8deadSopenharmony_ci    operation is only performed within the subgroup invocations within a
2085bd8deadSopenharmony_ci    partition. The partitions for clustered subgroup operations are
2095bd8deadSopenharmony_ci    consecutive power-of-two size groups of invocations and the cluster size
2105bd8deadSopenharmony_ci    must be known at compilation time. The operations supported are
2115bd8deadSopenharmony_ci    add, mul, min, max, and, or, xor.
2125bd8deadSopenharmony_ci
2135bd8deadSopenharmony_ci    SG.1.8 Quad Subgroup Operations
2145bd8deadSopenharmony_ci
2155bd8deadSopenharmony_ci    The quad subgroup operations allow clusters of 4 invocations (a quad),
2165bd8deadSopenharmony_ci    to share data efficiently with each other. For fragment shaders, if the
2175bd8deadSopenharmony_ci    value of SUBGROUP_SIZE_KHR is at least 4, each quad corresponds to one
2185bd8deadSopenharmony_ci    of the groups of four shader invocations used for derivatives. The order
2195bd8deadSopenharmony_ci    in which the fragments appear within the quad is implementation-defined.
2205bd8deadSopenharmony_ci
2215bd8deadSopenharmony_ci    Note:
2225bd8deadSopenharmony_ci    In OpenGL and OpenGL ES, the order of invocations within a quad may
2235bd8deadSopenharmony_ci    depend on the rendering orientation and whether rendering to a framebuffer
2245bd8deadSopenharmony_ci    object or to the default framebuffer (window).
2255bd8deadSopenharmony_ci
2265bd8deadSopenharmony_ci    This language supersedes the quad arrangement described in the GLSL
2275bd8deadSopenharmony_ci    KHR_shader_subgroup document.
2285bd8deadSopenharmony_ci
2295bd8deadSopenharmony_ci    SG.2 Subgroup Queries
2305bd8deadSopenharmony_ci
2315bd8deadSopenharmony_ci    SG.2.1 Subgroup Size
2325bd8deadSopenharmony_ci
2335bd8deadSopenharmony_ci    The subgroup size is the maximum number of invocations in a subgroup.
2345bd8deadSopenharmony_ci    This is an implementation-dependent value which can be obtained by
2355bd8deadSopenharmony_ci    calling GetIntegerv with a <pname> of SUBGROUP_SIZE_KHR. This value
2365bd8deadSopenharmony_ci    is also provided in the gl_SubgroupSize built-in shading language
2375bd8deadSopenharmony_ci    variable.  The subgroup size must be at least 1, and must be a power
2385bd8deadSopenharmony_ci    of 2. The maximum number of invocations an implementation can support
2395bd8deadSopenharmony_ci    per subgroup is 128.
2405bd8deadSopenharmony_ci
2415bd8deadSopenharmony_ci    SG.2.2 Subgroup Supported Stages
2425bd8deadSopenharmony_ci
2435bd8deadSopenharmony_ci    Subgroup operations may not be supported in all shader stages. To
2445bd8deadSopenharmony_ci    determine which shader stages support the subgroup operations, call
2455bd8deadSopenharmony_ci    GetIntegerv with a <pname> of SUBGROUP_SUPPORTED_STAGES_KHR. On
2465bd8deadSopenharmony_ci    return, <data> will contain the bitwise OR of the *_SHADER_BIT flags
2475bd8deadSopenharmony_ci    indicating which of the vertex, tessellation control, tessellation
2485bd8deadSopenharmony_ci    evaluation, geometry, fragment, and compute shader stages support
2495bd8deadSopenharmony_ci    subgroup operations.  All implementations must support at least
2505bd8deadSopenharmony_ci    COMPUTE_SHADER_BIT.
2515bd8deadSopenharmony_ci
2525bd8deadSopenharmony_ci    SG.2.3 Subgroup Supported Operations
2535bd8deadSopenharmony_ci
2545bd8deadSopenharmony_ci    To determine which subgroup operations are supported by an
2555bd8deadSopenharmony_ci    implementation, call GetIntegerv with a <pname> of
2565bd8deadSopenharmony_ci    SUBGROUP_SUPPORTED_FEATURES_KHR. On return, <data> will
2575bd8deadSopenharmony_ci    contain the bitwise OR of the SUBGROUP_FEATURE_*_BIT_KHR
2585bd8deadSopenharmony_ci    flags indicating which subgroup operations are supported by the
2595bd8deadSopenharmony_ci    implementation. Possible values include:
2605bd8deadSopenharmony_ci
2615bd8deadSopenharmony_ci    * SUBGROUP_FEATURE_BASIC_BIT_KHR indicates the GL supports shaders
2625bd8deadSopenharmony_ci      with the KHR_shader_subgroup_basic extension enabled. See SG.1.1.
2635bd8deadSopenharmony_ci
2645bd8deadSopenharmony_ci    * SUBGROUP_FEATURE_VOTE_BIT_KHR indicates the GL supports shaders
2655bd8deadSopenharmony_ci      with the KHR_shader_subgroup_vote extension enabled. See SG.1.2.
2665bd8deadSopenharmony_ci
2675bd8deadSopenharmony_ci    * SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR indicates the GL supports
2685bd8deadSopenharmony_ci      shaders with the KHR_shader_subgroup_arithmetic extension enabled.
2695bd8deadSopenharmony_ci      See SG.1.3.
2705bd8deadSopenharmony_ci
2715bd8deadSopenharmony_ci    * SUBGROUP_FEATURE_BALLOT_BIT_KHR indicates the GL supports
2725bd8deadSopenharmony_ci      shaders with the KHR_shader_subgroup_ballot extension enabled.
2735bd8deadSopenharmony_ci      See SG.1.4.
2745bd8deadSopenharmony_ci
2755bd8deadSopenharmony_ci    * SUBGROUP_FEATURE_SHUFFLE_BIT_KHR indicates the GL supports
2765bd8deadSopenharmony_ci      shaders with the KHR_shader_subgroup_shuffle extension enabled.
2775bd8deadSopenharmony_ci      See SG.1.5.
2785bd8deadSopenharmony_ci
2795bd8deadSopenharmony_ci    * SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR indicates the GL
2805bd8deadSopenharmony_ci      supports shaders with the KHR_shader_subgroup_shuffle_relative
2815bd8deadSopenharmony_ci      extension enabled. See SG.1.6.
2825bd8deadSopenharmony_ci
2835bd8deadSopenharmony_ci    * SUBGROUP_FEATURE_CLUSTERED_BIT_KHR indicates the GL supports
2845bd8deadSopenharmony_ci      shaders with the KHR_shader_subgroup_clustered extension enabled.
2855bd8deadSopenharmony_ci      See SG.1.7.
2865bd8deadSopenharmony_ci
2875bd8deadSopenharmony_ci    * SUBGROUP_FEATURE_QUAD_BIT_KHR indicates the GL supports shaders
2885bd8deadSopenharmony_ci      with the GL_KHR_shader_subgroup_quad extension enabled. See SG.1.8.
2895bd8deadSopenharmony_ci
2905bd8deadSopenharmony_ci    All implementations must support SUBGROUP_FEATURE_BASIC_BIT_KHR.
2915bd8deadSopenharmony_ci
2925bd8deadSopenharmony_ci    SG.2.4 Subgroup Quads Support
2935bd8deadSopenharmony_ci
2945bd8deadSopenharmony_ci    To determine whether subgroup quad operations (See SG.1.8) are
2955bd8deadSopenharmony_ci    available in all stages, call GetBooleanv with a <pname> of
2965bd8deadSopenharmony_ci    SUBGROUP_QUAD_ALL_STAGES_KHR. On return, <data> will be TRUE
2975bd8deadSopenharmony_ci    if subgroup quad operations are supported in all shader stages
2985bd8deadSopenharmony_ci    which support subgroup operations. FALSE is returned if subgroup quad
2995bd8deadSopenharmony_ci    operations are not supported, or if they are restricted to fragment
3005bd8deadSopenharmony_ci    and compute stages.
3015bd8deadSopenharmony_ci
3025bd8deadSopenharmony_ciModifications to Appendix C of the OpenGL 4.6 (Core Profile) Specification
3035bd8deadSopenharmony_ci(The OpenGL SPIR-V Execution Environment)
3045bd8deadSopenharmony_ci
3055bd8deadSopenharmony_ci    Modifications to section C.1 (Required Versions and Formats) [p661]
3065bd8deadSopenharmony_ci
3075bd8deadSopenharmony_ci      Replace the first sentence with the following:
3085bd8deadSopenharmony_ci
3095bd8deadSopenharmony_ci        "Implementations must support the 1.0 and 1.3 versions of SPIR-V
3105bd8deadSopenharmony_ci        and the 1.0 version of the SPIR-V Extended Instructions
3115bd8deadSopenharmony_ci        for the OpenGL Shading Language (see section 1.3.4)."
3125bd8deadSopenharmony_ci
3135bd8deadSopenharmony_ci    Modifications to section C.2 (Valid SPIR-V Built-In Variable
3145bd8deadSopenharmony_ci    Decorations) [661]
3155bd8deadSopenharmony_ci
3165bd8deadSopenharmony_ci      Add the following rows to Table C.1 (Built-in Variable Decorations)
3175bd8deadSopenharmony_ci
3185bd8deadSopenharmony_ci        NumSubgroups            (if SUBGROUP_FEATURE_BASIC_BIT_KHR is supported)
3195bd8deadSopenharmony_ci        SubgroupId              (if SUBGROUP_FEATURE_BASIC_BIT_KHR is supported)
3205bd8deadSopenharmony_ci        SubgroupSize            (if SUBGROUP_FEATURE_BASIC_BIT_KHR is supported)
3215bd8deadSopenharmony_ci        SubgroupLocalInvocationId (if SUBGROUP_FEATURE_BASIC_BIT_KHR is supported)
3225bd8deadSopenharmony_ci        SubgroupEqMask          (if SUBGROUP_FEATURE_BALLOT_BIT_KHR is supported)
3235bd8deadSopenharmony_ci        SubgroupGeMask          (if SUBGROUP_FEATURE_BALLOT_BIT_KHR is supported)
3245bd8deadSopenharmony_ci        SubgroupGtMask          (if SUBGROUP_FEATURE_BALLOT_BIT_KHR is supported)
3255bd8deadSopenharmony_ci        SubgroupLeMask          (if SUBGROUP_FEATURE_BALLOT_BIT_KHR is supported)
3265bd8deadSopenharmony_ci        SubgroupLtMask          (if SUBGROUP_FEATURE_BALLOT_BIT_KHR is supported)
3275bd8deadSopenharmony_ci
3285bd8deadSopenharmony_ci    Additions to section C.3 (Valid SPIR-V Capabilities):
3295bd8deadSopenharmony_ci
3305bd8deadSopenharmony_ci    Add the following rows to Table C.2 (Valid SPIR-V Capabilities):
3315bd8deadSopenharmony_ci
3325bd8deadSopenharmony_ci        GroupNonUniform                (if SUBGROUP_FEATURE_BASIC_BIT_KHR is supported)
3335bd8deadSopenharmony_ci        GroupNonUniformVote            (if SUBGROUP_FEATURE_VOTE_BIT_KHR is supported)
3345bd8deadSopenharmony_ci        GroupNonUniformArithmetic      (if SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR is supported)
3355bd8deadSopenharmony_ci        GroupNonUniformBallot          (if SUBGROUP_FEATURE_BALLOT_BIT_KHR is supported)
3365bd8deadSopenharmony_ci        GroupNonUniformShuffle         (if SUBGROUP_FEATURE_SHUFFLE_BIT_KHR is supported)
3375bd8deadSopenharmony_ci        GroupNonUniformShuffleRelative (if SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR is supported)
3385bd8deadSopenharmony_ci        GroupNonUniformClustered       (if SUBGROUP_FEATURE_CLUSTERED_BIT_KHR is supported)
3395bd8deadSopenharmony_ci        GroupNonUniformQuad            (if SUBGROUP_FEATURE_QUAD_BIT_KHR is supported)
3405bd8deadSopenharmony_ci
3415bd8deadSopenharmony_ci    Additions to section C.4 (Validation Rules):
3425bd8deadSopenharmony_ci
3435bd8deadSopenharmony_ci      Make the following changes to the validation rules:
3445bd8deadSopenharmony_ci
3455bd8deadSopenharmony_ci        Add *Subgroup* to the list of acceptable scopes for memory.
3465bd8deadSopenharmony_ci
3475bd8deadSopenharmony_ci      Add:
3485bd8deadSopenharmony_ci
3495bd8deadSopenharmony_ci        *Scope* for *Non Uniform Group Operations* must be limited to:
3505bd8deadSopenharmony_ci          - *Subgroup*
3515bd8deadSopenharmony_ci
3525bd8deadSopenharmony_ci        * If OpControlBarrier is used in fragment, vertex, tessellation
3535bd8deadSopenharmony_ci           evaluation, or geometry stages, the execution Scope must be
3545bd8deadSopenharmony_ci           *Subgroup*.
3555bd8deadSopenharmony_ci
3565bd8deadSopenharmony_ci        * "`Result Type`" for *Non Uniform Group Operations* must be
3575bd8deadSopenharmony_ci          limited to 32-bit float, 32-bit integer, boolean, or vectors
3585bd8deadSopenharmony_ci          of these types. If the Float64 capability is enabled, double
3595bd8deadSopenharmony_ci          and vectors of double types are also permitted.
3605bd8deadSopenharmony_ci
3615bd8deadSopenharmony_ci        * If OpGroupNonUniformBallotBitCount is used, the group operation
3625bd8deadSopenharmony_ci          must be one of:
3635bd8deadSopenharmony_ci          - *Reduce*
3645bd8deadSopenharmony_ci          - *InclusiveScan*
3655bd8deadSopenharmony_ci          - *ExclusiveScan*
3665bd8deadSopenharmony_ci
3675bd8deadSopenharmony_ci      Add the following restrictions (disallowing SPIR-V 1.1, 1.2, and
3685bd8deadSopenharmony_ci      1.3 features not related to subgroups);
3695bd8deadSopenharmony_ci
3705bd8deadSopenharmony_ci        * The *LocalSizeId* Execution Mode must not be used.
3715bd8deadSopenharmony_ci
3725bd8deadSopenharmony_ci        [[If SPV_KHR_storage_buffer_storage_class is not supported]]
3735bd8deadSopenharmony_ci        * The *StorageBuffer* Storage Class must not be used.
3745bd8deadSopenharmony_ci
3755bd8deadSopenharmony_ci        * The *DependencyInfinite* and *DependencyLength* Loop Control
3765bd8deadSopenharmony_ci          masks must not be used.
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ci        [[If SPV_KHR_shader_draw_parameters or OpenGL 4.6 is not supported]]
3795bd8deadSopenharmony_ci        * The *DrawParameters* Capability must not be used.
3805bd8deadSopenharmony_ci
3815bd8deadSopenharmony_ci        * The *StorageBuffer16BitAccess*, *UniformAndStorageBuffer16BitAccess*,
3825bd8deadSopenharmony_ci          *StoragePushConstant16*, *StorageInputOutput16* Capabilities must
3835bd8deadSopenharmony_ci          not be used.
3845bd8deadSopenharmony_ci
3855bd8deadSopenharmony_ci        * The *DeviceGroup*, *MultiView*, *VariablePointersStorageBuffer*, and
3865bd8deadSopenharmony_ci          *VariablePointers* Capabilities must not be used.
3875bd8deadSopenharmony_ci
3885bd8deadSopenharmony_ci        * The *OpModuleProcessed*, *OpDecorateId*, and *OpExecutionModeId*
3895bd8deadSopenharmony_ci          Instructions must not be used.
3905bd8deadSopenharmony_ci
3915bd8deadSopenharmony_ciModifications to the OpenGL Shading Language Specification, Version 4.60
3925bd8deadSopenharmony_ci
3935bd8deadSopenharmony_ci    See the separate KHR_shader_subgroup GLSL document.
3945bd8deadSopenharmony_ci    https://github.com/KhronosGroup/GLSL/blob/master/extensions/khr/GL_KHR_shader_subgroup.txt
3955bd8deadSopenharmony_ci
3965bd8deadSopenharmony_ciDependencies on ARB_gl_spirv and OpenGL 4.6
3975bd8deadSopenharmony_ci
3985bd8deadSopenharmony_ci    If ARB_gl_spirv or OpenGL 4.6 are not supported, ignore all
3995bd8deadSopenharmony_ci    references to SPIR-V functionality.
4005bd8deadSopenharmony_ci
4015bd8deadSopenharmony_ciDependencies on ARB_spirv_extensions and OpenGL 4.6
4025bd8deadSopenharmony_ci
4035bd8deadSopenharmony_ci    If ARB_spirv_extensions or OpenGL 4.6 are not supported, ignore
4045bd8deadSopenharmony_ci    references to the ability to advertise additional SPIR-V extensions.
4055bd8deadSopenharmony_ci
4065bd8deadSopenharmony_ciDependencies on OpenGL ES 3.x
4075bd8deadSopenharmony_ci
4085bd8deadSopenharmony_ci    If implemented in OpenGL ES, ignore all references to SPIR-V and to
4095bd8deadSopenharmony_ci    GLSL built-in functions which utilize the genDType (double) types.
4105bd8deadSopenharmony_ci
4115bd8deadSopenharmony_ciDependencies on ARB_shader_draw_parameters and SPV_KHR_shader_draw_parameters
4125bd8deadSopenharmony_ci
4135bd8deadSopenharmony_ci    If neither OpenGL 4.6, nor ARB_shader_draw_parameters and
4145bd8deadSopenharmony_ci    SPV_KHR_shader_draw_parameters are supported, the *DrawParameters*
4155bd8deadSopenharmony_ci    Capability is not supported.
4165bd8deadSopenharmony_ci
4175bd8deadSopenharmony_ciDependencies on SPV_KHR_storage_buffer_storage_class
4185bd8deadSopenharmony_ci
4195bd8deadSopenharmony_ci    If SPV_KHR_storage_buffer_storage_class is not supported, the
4205bd8deadSopenharmony_ci    *StorageBuffer* Storage Class must not be used.
4215bd8deadSopenharmony_ci
4225bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications
4235bd8deadSopenharmony_ci
4245bd8deadSopenharmony_ci    None
4255bd8deadSopenharmony_ci
4265bd8deadSopenharmony_ciErrors
4275bd8deadSopenharmony_ci
4285bd8deadSopenharmony_ci    None
4295bd8deadSopenharmony_ci
4305bd8deadSopenharmony_ciNew State
4315bd8deadSopenharmony_ci
4325bd8deadSopenharmony_ci    None
4335bd8deadSopenharmony_ci
4345bd8deadSopenharmony_ciNew Implementation Dependent State
4355bd8deadSopenharmony_ci
4365bd8deadSopenharmony_ci    Additions to table 2.53 - Implementation Dependent Values
4375bd8deadSopenharmony_ci
4385bd8deadSopenharmony_ci                                                    Minimum
4395bd8deadSopenharmony_ci    Get Value                Type  Get Command      Value   Description                   Sec.
4405bd8deadSopenharmony_ci    ---------                ----- ---------------  ------- ------------------------      ------
4415bd8deadSopenharmony_ci    SUBGROUP_SIZE_KHR        Z+    GetIntegerv      1       No. of invocations in         SG.2.1
4425bd8deadSopenharmony_ci                                                            each subgroup
4435bd8deadSopenharmony_ci
4445bd8deadSopenharmony_ci    SUBGROUP_SUPPORTED_      E     GetIntegerv      Sec     Bitfield of stages that       SG.2.2
4455bd8deadSopenharmony_ci      STAGES_KHR                                    SG.2.2  subgroups are supported in
4465bd8deadSopenharmony_ci
4475bd8deadSopenharmony_ci    SUBGROUP_SUPPORTED_      E     GetIntegerv      Sec     Bitfield of subgroup          SG.2.3
4485bd8deadSopenharmony_ci      FEATURES_KHR                                  SG.2.3  operations supported
4495bd8deadSopenharmony_ci
4505bd8deadSopenharmony_ci    SUBGROUP_QUAD_           B     GetBooleanv      -       Quad subgroups supported      SG.2.4
4515bd8deadSopenharmony_ci      ALL_STAGES_KHR                                        in all stages
4525bd8deadSopenharmony_ci
4535bd8deadSopenharmony_ciIssues
4545bd8deadSopenharmony_ci
4555bd8deadSopenharmony_ci    1. What should we name this extension?
4565bd8deadSopenharmony_ci
4575bd8deadSopenharmony_ci       DISCUSSION. We will use the same name as the GLSL extension
4585bd8deadSopenharmony_ci       in order to minimize confusion. This has been done for other
4595bd8deadSopenharmony_ci       extensions and people seem to have figured it out. Other
4605bd8deadSopenharmony_ci       options considered: KHR_subgroups, KHR_shader_subgroup_operations,
4615bd8deadSopenharmony_ci       KHR_subgroup_operations.
4625bd8deadSopenharmony_ci
4635bd8deadSopenharmony_ci       RESOLVED: use KHR_shader_subgroup to match the GLSL extension.
4645bd8deadSopenharmony_ci
4655bd8deadSopenharmony_ci    2. What should happen if subgroup operations are attempted on
4665bd8deadSopenharmony_ci       unsupported stages?
4675bd8deadSopenharmony_ci
4685bd8deadSopenharmony_ci       DISCUSSION: There are basically two options
4695bd8deadSopenharmony_ci         A. compile or link-time error?
4705bd8deadSopenharmony_ci         B. draw time invalid_op error?
4715bd8deadSopenharmony_ci       Seems like Option (A) would be more user friendly, and there doesn't
4725bd8deadSopenharmony_ci       seem to be much point in requiring an implementation to
4735bd8deadSopenharmony_ci       support compiling the functionality in stages they won't work in.
4745bd8deadSopenharmony_ci       Typically this should be detectable by an implementation at compile
4755bd8deadSopenharmony_ci       time since this will just require them to reject shaders with
4765bd8deadSopenharmony_ci       #extension GL_KHR_shader_subgroup* in shader stages that they don't
4775bd8deadSopenharmony_ci       support. However, for SPIR-V implementations, this may happen at
4785bd8deadSopenharmony_ci       lowering time, so it may happen at either compile or link-time.
4795bd8deadSopenharmony_ci
4805bd8deadSopenharmony_ci       RESOLVED: Compile or link-time error.
4815bd8deadSopenharmony_ci
4825bd8deadSopenharmony_ci    3. How should we enable SPIR-V support for this extension?
4835bd8deadSopenharmony_ci
4845bd8deadSopenharmony_ci       DISCUSSION: Options could include:
4855bd8deadSopenharmony_ci         A. add support for SPIR-V 1.1, 1.2, and 1.3.
4865bd8deadSopenharmony_ci         B. add support for only the subgroups capabilities from SPIR-V 1.3.
4875bd8deadSopenharmony_ci
4885bd8deadSopenharmony_ci       Doing option (A) seems like a weird way of submarining support
4895bd8deadSopenharmony_ci       for new versions of SPIR-V into OpenGL, and it seems like there
4905bd8deadSopenharmony_ci       should be a separate extension for that.
4915bd8deadSopenharmony_ci       If option (B) is selected, we need to be sure to disallow other
4925bd8deadSopenharmony_ci       new capabilities that are added in SPIR-V 1.1, 1.2, and 1.3
4935bd8deadSopenharmony_ci
4945bd8deadSopenharmony_ci       RESOLVED: (B) only add support for subgroup capabilities from SPIR-V
4955bd8deadSopenharmony_ci       1.3. If a future GL core version incorporates this extension it should
4965bd8deadSopenharmony_ci       add support for all of SPIR-V 1.3.
4975bd8deadSopenharmony_ci
4985bd8deadSopenharmony_ci    4. What functionality of SPIR-V 1.1, 1.2, and 1.3 needs to be disallowed?
4995bd8deadSopenharmony_ci
5005bd8deadSopenharmony_ci       RESOLVED:
5015bd8deadSopenharmony_ci       Additions that aren't gated by specific capabilities and are disallowed
5025bd8deadSopenharmony_ci       are the following:
5035bd8deadSopenharmony_ci
5045bd8deadSopenharmony_ci         LocalSizeId (1.2)
5055bd8deadSopenharmony_ci         DependencyInfinite (1.1)
5065bd8deadSopenharmony_ci         DependencyLength (1.1)
5075bd8deadSopenharmony_ci         OpModuleProcessed (1.1)
5085bd8deadSopenharmony_ci         OpDecorateId (1.2)
5095bd8deadSopenharmony_ci         OpExecutionModeId (1.2)
5105bd8deadSopenharmony_ci
5115bd8deadSopenharmony_ci       Additions that are gated by graphics-compatible capabilities not
5125bd8deadSopenharmony_ci       being enabled by this extension (but could be enabled by other
5135bd8deadSopenharmony_ci       extensions):
5145bd8deadSopenharmony_ci
5155bd8deadSopenharmony_ci       Capabilities                                 Enabling extension
5165bd8deadSopenharmony_ci
5175bd8deadSopenharmony_ci         StorageBuffer (1.3)                        SPV_KHR_storage_buffer_storage_class
5185bd8deadSopenharmony_ci
5195bd8deadSopenharmony_ci         DrawParameters (1.3)                       SPV_KHR_shader_draw_parameters
5205bd8deadSopenharmony_ci           - BaseVertex
5215bd8deadSopenharmony_ci           - BaseInstance
5225bd8deadSopenharmony_ci           - DrawIndex
5235bd8deadSopenharmony_ci
5245bd8deadSopenharmony_ci         DeviceGroup (1.3)                          SPV_KHR_device_group
5255bd8deadSopenharmony_ci           - DeviceIndex
5265bd8deadSopenharmony_ci
5275bd8deadSopenharmony_ci         MultiView (1.3)                            SPV_KHR_multiview
5285bd8deadSopenharmony_ci           - ViewIndex
5295bd8deadSopenharmony_ci
5305bd8deadSopenharmony_ci         StorageBuffer16BitAccess (1.3)             SPV_KHR_16bit_storage
5315bd8deadSopenharmony_ci         StorageUniformBufferBlock16 (1.3)          SPV_KHR_16bit_storage
5325bd8deadSopenharmony_ci         UniformAndStorageBuffer16BitAccess (1.3)   SPV_KHR_16bit_storage
5335bd8deadSopenharmony_ci         StorageUniform16 (1.3)                     SPV_KHR_16bit_storage
5345bd8deadSopenharmony_ci         StoragePushConstant16 (1.3)                SPV_KHR_16bit_storage
5355bd8deadSopenharmony_ci         StorageInputOutput16 (1.3)                 SPV_KHR_16bit_storage
5365bd8deadSopenharmony_ci
5375bd8deadSopenharmony_ci         VariablePointersStorageBuffer (1.3)        SPV_KHR_variable_pointers
5385bd8deadSopenharmony_ci         VariablePointers (1.3)                     SPV_KHR_variable_pointers
5395bd8deadSopenharmony_ci
5405bd8deadSopenharmony_ci    5. Given Issues (3) and (4) what exactly are the additional SPIR-V
5415bd8deadSopenharmony_ci       requirements are being added by this extension?
5425bd8deadSopenharmony_ci
5435bd8deadSopenharmony_ci       RESOLVED: We add support for the following from SPIR-V 1.3:
5445bd8deadSopenharmony_ci
5455bd8deadSopenharmony_ci       Capabilities (3.31)                  Enabling API Feature
5465bd8deadSopenharmony_ci
5475bd8deadSopenharmony_ci         GroupNonUniform                    SUBGROUP_FEATURE_BASIC_BIT_KHR
5485bd8deadSopenharmony_ci         GroupNonUniformVote                SUBGROUP_FEATURE_VOTE_BIT_KHR
5495bd8deadSopenharmony_ci         GroupNonUniformArithmetic          SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR
5505bd8deadSopenharmony_ci         GroupNonUniformBallot              SUBGROUP_FEATURE_BALLOT_BIT_KHR
5515bd8deadSopenharmony_ci         GroupNonUniformShuffle             SUBGROUP_FEATURE_SHUFFLE_BIT_KHR
5525bd8deadSopenharmony_ci         GroupNonUniformShuffleRelative     SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR
5535bd8deadSopenharmony_ci         GroupNonUniformClustered           SUBGROUP_FEATURE_CLUSTERED_BIT_KHR
5545bd8deadSopenharmony_ci         GroupNonUniformQuad                SUBGROUP_FEATURE_QUAD_BIT_KHR
5555bd8deadSopenharmony_ci
5565bd8deadSopenharmony_ci       Builtins (3.21)              Enabling Capability
5575bd8deadSopenharmony_ci
5585bd8deadSopenharmony_ci         SubgroupSize               GroupNonUniform
5595bd8deadSopenharmony_ci         NumSubgroups               GroupNonUniform
5605bd8deadSopenharmony_ci         SubgroupId                 GroupNonUniform
5615bd8deadSopenharmony_ci         SubgroupLocalInvocationId  GroupNonUniform
5625bd8deadSopenharmony_ci         SubgroupEqMask             GroupNonUniformBallot
5635bd8deadSopenharmony_ci         SubgroupGeMask             GroupNonUniformBallot
5645bd8deadSopenharmony_ci         SubgroupGtMask             GroupNonUniformBallot
5655bd8deadSopenharmony_ci         SubgroupLeMask             GroupNonUniformBallot
5665bd8deadSopenharmony_ci         SubgroupLtMask             GroupNonUniformBallot
5675bd8deadSopenharmony_ci
5685bd8deadSopenharmony_ci       Group Operations         Enabling Capability
5695bd8deadSopenharmony_ci       (3.28)
5705bd8deadSopenharmony_ci
5715bd8deadSopenharmony_ci         Reduce                 GroupNonUniformArithmetic, GroupNonUniformBallot
5725bd8deadSopenharmony_ci         InclusiveScan          GroupNonUniformArithmetic, GroupNonUniformBallot
5735bd8deadSopenharmony_ci         ExclusiveScan          GroupNonUniformArithmetic, GroupNonUniformBallot
5745bd8deadSopenharmony_ci         ClusteredReduce        GroupNonUniformClustered
5755bd8deadSopenharmony_ci
5765bd8deadSopenharmony_ci       Non-Uniform Instructions             Enabling Capability
5775bd8deadSopenharmony_ci       (3.32.24)
5785bd8deadSopenharmony_ci
5795bd8deadSopenharmony_ci         OpGroupNonUniformElect             GroupNonUniform
5805bd8deadSopenharmony_ci         OpGroupNonUniformAll               GroupNonUniformVote
5815bd8deadSopenharmony_ci         OpGroupNonUniformAny               GroupNonUniformVote
5825bd8deadSopenharmony_ci         OpGroupNonUniformAllEqual          GroupNonUniformVote
5835bd8deadSopenharmony_ci         OpGroupNonUniformBroadcast         GroupNonUniformBallot
5845bd8deadSopenharmony_ci         OpGroupNonUniformBroadcastFirst    GroupNonUniformBallot
5855bd8deadSopenharmony_ci         OpGroupNonUniformBallot            GroupNonUniformBallot
5865bd8deadSopenharmony_ci         OpGroupNonUniformInverseBallot     GroupNonUniformBallot
5875bd8deadSopenharmony_ci         OpGroupNonUniformBallotBitExtract  GroupNonUniformBallot
5885bd8deadSopenharmony_ci         OpGroupNonUniformBallotBitCount    GroupNonUniformBallot
5895bd8deadSopenharmony_ci         OpGroupNonUniformBallotFindLSB     GroupNonUniformBallot
5905bd8deadSopenharmony_ci         OpGroupNonUniformBallotFindMSB     GroupNonUniformBallot
5915bd8deadSopenharmony_ci         OpGroupNonUniformShuffle           GroupNonUniformShuffle
5925bd8deadSopenharmony_ci         OpGroupNonUniformShuffleXor        GroupNonUniformShuffle
5935bd8deadSopenharmony_ci         OpGroupNonUniformShuffleUp         GroupNonUniformShuffle
5945bd8deadSopenharmony_ci         OpGroupNonUniformShuffleDown       GroupNonUniformShuffle
5955bd8deadSopenharmony_ci         OpGroupNonUniformIAdd              GroupNonUniformArithmetic, GroupNonUniformClustered
5965bd8deadSopenharmony_ci         OpGroupNonUniformFAdd              GroupNonUniformArithmetic, GroupNonUniformClustered
5975bd8deadSopenharmony_ci         OpGroupNonUniformIMul              GroupNonUniformArithmetic, GroupNonUniformClustered
5985bd8deadSopenharmony_ci         OpGroupNonUniformFMul              GroupNonUniformArithmetic, GroupNonUniformClustered
5995bd8deadSopenharmony_ci         OpGroupNonUniformSMin              GroupNonUniformArithmetic, GroupNonUniformClustered
6005bd8deadSopenharmony_ci         OpGroupNonUniformUMin              GroupNonUniformArithmetic, GroupNonUniformClustered
6015bd8deadSopenharmony_ci         OpGroupNonUniformFMin              GroupNonUniformArithmetic, GroupNonUniformClustered
6025bd8deadSopenharmony_ci         OpGroupNonUniformSMax              GroupNonUniformArithmetic, GroupNonUniformClustered
6035bd8deadSopenharmony_ci         OpGroupNonUniformUMax              GroupNonUniformArithmetic, GroupNonUniformClustered
6045bd8deadSopenharmony_ci         OpGroupNonUniformFMax              GroupNonUniformArithmetic, GroupNonUniformClustered
6055bd8deadSopenharmony_ci         OpGroupNonUniformBitwiseAnd        GroupNonUniformArithmetic, GroupNonUniformClustered
6065bd8deadSopenharmony_ci         OpGroupNonUniformBitwiseOr         GroupNonUniformArithmetic, GroupNonUniformClustered
6075bd8deadSopenharmony_ci         OpGroupNonUniformBitwiseXor        GroupNonUniformArithmetic, GroupNonUniformClustered
6085bd8deadSopenharmony_ci         OpGroupNonUniformLogicalAnd        GroupNonUniformArithmetic, GroupNonUniformClustered
6095bd8deadSopenharmony_ci         OpGroupNonUniformLogicalOr         GroupNonUniformArithmetic, GroupNonUniformClustered
6105bd8deadSopenharmony_ci         OpGroupNonUniformLogicalXor        GroupNonUniformArithmetic, GroupNonUniformClustered
6115bd8deadSopenharmony_ci         OpGroupNonUniformQuadBroadcast     GroupNonUniformQuad
6125bd8deadSopenharmony_ci         OpGroupNonUniformQuadSwap          GroupNonUniformQuad
6135bd8deadSopenharmony_ci
6145bd8deadSopenharmony_ci       *Subgroup* as an acceptable memory scope.
6155bd8deadSopenharmony_ci
6165bd8deadSopenharmony_ci       OpControlBarrier in fragment, vertex, tessellation evaluation, tessellation
6175bd8deadSopenharmony_ci       control, and geometry stages with the *Subgroup* execution Scope.
6185bd8deadSopenharmony_ci
6195bd8deadSopenharmony_ci
6205bd8deadSopenharmony_ciRevision History
6215bd8deadSopenharmony_ci
6225bd8deadSopenharmony_ci    Rev.  Date          Author     Changes
6235bd8deadSopenharmony_ci    ----  -----------   --------   -------------------------------------------
6245bd8deadSopenharmony_ci     8    2019-07-26    dgkoch     Update status and assign extension numbers
6255bd8deadSopenharmony_ci     7    2019-05-22    dgkoch     Resync language with Vulkan spec. Address feedback
6265bd8deadSopenharmony_ci                                   from Graeme. Relax quad ordering definition.
6275bd8deadSopenharmony_ci     6    2019-03-28    dgkoch     rename to KHR_shader_subgroup, update some issues
6285bd8deadSopenharmony_ci     5    2018-05-30    dgkoch     Address feedback from Graeme and Jesse.
6295bd8deadSopenharmony_ci     4    2018-05-28    dgkoch     change ALLSTAGES -> ALL_STAGES, fix typos
6305bd8deadSopenharmony_ci     3    2018-05-23    dgkoch     Add overview and interactions, add SPIR-V 1.3
6315bd8deadSopenharmony_ci                                   restrictions, Issues 4 and 5.
6325bd8deadSopenharmony_ci     2    2018-04-26    dgkoch     Various updates to match latest vulkan spec
6335bd8deadSopenharmony_ci                                   Assign tokens. Add SPIR-V support.
6345bd8deadSopenharmony_ci     1    2018-01-19    dgkoch     Initial revision.
6355bd8deadSopenharmony_ci
636