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:?             Constant:
0:?               1.000000
0:?               2.000000
0:?               3.000000
0:?               4.000000
0:3        false case
0:?         Sequence
0:9          Branch: Return with expression
0:?             Constant:
0:?               4.000000
0:?               3.000000
0:?               2.000000
0:?               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:?             Constant:
0:?               1.000000
0:?               2.000000
0:?               3.000000
0:?               4.000000
0:3        false case
0:?         Sequence
0:9          Branch: Return with expression
0:?             Constant:
0:?               4.000000
0:?               3.000000
0:?               2.000000
0:?               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): 80007
// 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
              26:    7(fvec4) Undef
                              ReturnValue 26
                              FunctionEnd
