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