hlsl.wavequery.comp
Shader version: 500
local_size = (32, 16, 1)
0:? Sequence
0:5  Function Definition: @CSMain( ( temp void)
0:5    Function Parameters: 
0:?     Sequence
0:6      move second child to first child ( temp uint)
0:6        indirect index (layout( row_major std430) buffer uint)
0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:6            Constant:
0:6              0 (const uint)
0:6          '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
0:6        Test condition and select ( temp uint): no shortcircuit
0:6          Condition
0:6          subgroupElect ( temp bool)
0:6          true case
0:6          '@gl_SubgroupSize' ( in uint unknown built-in variable)
0:6          false case
0:6          Constant:
0:6            0 (const uint)
0:5  Function Definition: CSMain( ( temp void)
0:5    Function Parameters: 
0:?     Sequence
0:5      Function Call: @CSMain( ( temp void)
0:?   Linker Objects
0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})


Linked compute stage:


Shader version: 500
local_size = (32, 16, 1)
0:? Sequence
0:5  Function Definition: @CSMain( ( temp void)
0:5    Function Parameters: 
0:?     Sequence
0:6      move second child to first child ( temp uint)
0:6        indirect index (layout( row_major std430) buffer uint)
0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:6            Constant:
0:6              0 (const uint)
0:6          '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
0:6        Test condition and select ( temp uint): no shortcircuit
0:6          Condition
0:6          subgroupElect ( temp bool)
0:6          true case
0:6          '@gl_SubgroupSize' ( in uint unknown built-in variable)
0:6          false case
0:6          Constant:
0:6            0 (const uint)
0:5  Function Definition: CSMain( ( temp void)
0:5    Function Parameters: 
0:?     Sequence
0:5      Function Call: @CSMain( ( temp void)
0:?   Linker Objects
0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})

// Module Version 10300
// Generated by (magic number): 80006
// Id's are bound by 28

                              Capability Shader
                              Capability GroupNonUniform
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint GLCompute 4  "CSMain" 16 21
                              ExecutionMode 4 LocalSize 32 16 1
                              Source HLSL 500
                              Name 4  "CSMain"
                              Name 6  "@CSMain("
                              Name 10  "data"
                              MemberName 10(data) 0  "@data"
                              Name 12  "data"
                              Name 16  "@gl_SubgroupInvocationID"
                              Name 21  "@gl_SubgroupSize"
                              Decorate 9 ArrayStride 4
                              MemberDecorate 10(data) 0 Offset 0
                              Decorate 10(data) BufferBlock
                              Decorate 12(data) DescriptorSet 0
                              Decorate 16(@gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
                              Decorate 21(@gl_SubgroupSize) BuiltIn SubgroupSize
               2:             TypeVoid
               3:             TypeFunction 2
               8:             TypeInt 32 0
               9:             TypeRuntimeArray 8(int)
        10(data):             TypeStruct 9
              11:             TypePointer Uniform 10(data)
        12(data):     11(ptr) Variable Uniform
              13:             TypeInt 32 1
              14:     13(int) Constant 0
              15:             TypePointer Input 8(int)
16(@gl_SubgroupInvocationID):     15(ptr) Variable Input
              18:             TypeBool
              19:      8(int) Constant 3
21(@gl_SubgroupSize):     15(ptr) Variable Input
              23:      8(int) Constant 0
              25:             TypePointer Uniform 8(int)
       4(CSMain):           2 Function None 3
               5:             Label
              27:           2 FunctionCall 6(@CSMain()
                              Return
                              FunctionEnd
     6(@CSMain():           2 Function None 3
               7:             Label
              17:      8(int) Load 16(@gl_SubgroupInvocationID)
              20:    18(bool) GroupNonUniformElect 19
              22:      8(int) Load 21(@gl_SubgroupSize)
              24:      8(int) Select 20 22 23
              26:     25(ptr) AccessChain 12(data) 14 17
                              Store 26 24
                              Return
                              FunctionEnd
