hlsl.wavequery.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2  Function Definition: @PixelShaderFunction( ( temp 4-component vector of float)
0:2    Function Parameters: 
0:?     Sequence
0:3      Test condition and select ( temp void)
0:3        Condition
0:3        subgroupElect ( temp bool)
0:3        true case
0:?         Sequence
0:5          Branch: Return with expression
0:5            Constant:
0:5              1.000000
0:5              2.000000
0:5              3.000000
0:5              4.000000
0:3        false case
0:?         Sequence
0:9          Branch: Return with expression
0:9            Constant:
0:9              4.000000
0:9              3.000000
0:9              2.000000
0:9              1.000000
0:2  Function Definition: PixelShaderFunction( ( temp void)
0:2    Function Parameters: 
0:?     Sequence
0:2      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:2        Function Call: @PixelShaderFunction( ( temp 4-component vector of float)
0:?   Linker Objects
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)


Linked fragment stage:


Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2  Function Definition: @PixelShaderFunction( ( temp 4-component vector of float)
0:2    Function Parameters: 
0:?     Sequence
0:3      Test condition and select ( temp void)
0:3        Condition
0:3        subgroupElect ( temp bool)
0:3        true case
0:?         Sequence
0:5          Branch: Return with expression
0:5            Constant:
0:5              1.000000
0:5              2.000000
0:5              3.000000
0:5              4.000000
0:3        false case
0:?         Sequence
0:9          Branch: Return with expression
0:9            Constant:
0:9              4.000000
0:9              3.000000
0:9              2.000000
0:9              1.000000
0:2  Function Definition: PixelShaderFunction( ( temp void)
0:2    Function Parameters: 
0:?     Sequence
0:2      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:2        Function Call: @PixelShaderFunction( ( temp 4-component vector of float)
0:?   Linker Objects
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)

// Module Version 10300
// Generated by (magic number): 8000a
// Id's are bound by 30

                              Capability Shader
                              Capability GroupNonUniform
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "PixelShaderFunction" 28
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "PixelShaderFunction"
                              Name 9  "@PixelShaderFunction("
                              Name 28  "@entryPointOutput"
                              Decorate 28(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypeFunction 7(fvec4)
              11:             TypeBool
              12:             TypeInt 32 0
              13:     12(int) Constant 3
              17:    6(float) Constant 1065353216
              18:    6(float) Constant 1073741824
              19:    6(float) Constant 1077936128
              20:    6(float) Constant 1082130432
              21:    7(fvec4) ConstantComposite 17 18 19 20
              24:    7(fvec4) ConstantComposite 20 19 18 17
              27:             TypePointer Output 7(fvec4)
28(@entryPointOutput):     27(ptr) Variable Output
4(PixelShaderFunction):           2 Function None 3
               5:             Label
              29:    7(fvec4) FunctionCall 9(@PixelShaderFunction()
                              Store 28(@entryPointOutput) 29
                              Return
                              FunctionEnd
9(@PixelShaderFunction():    7(fvec4) Function None 8
              10:             Label
              14:    11(bool) GroupNonUniformElect 13
                              SelectionMerge 16 None
                              BranchConditional 14 15 23
              15:               Label
                                ReturnValue 21
              23:               Label
                                ReturnValue 24
              16:             Label
                              Unreachable
                              FunctionEnd
