hlsl.logical.binary.vec.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
0:10    Function Parameters: 
0:?     Sequence
0:11      Sequence
0:11        move second child to first child ( temp 4-component vector of bool)
0:11          'r00' ( temp 4-component vector of bool)
0:11          Negate conditional ( temp 4-component vector of bool)
0:11            b4a: direct index for structure ( uniform 4-component vector of bool)
0:11              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:11              Constant:
0:11                0 (const uint)
0:12      Sequence
0:12        move second child to first child ( temp 4-component vector of bool)
0:12          'r01' ( temp 4-component vector of bool)
0:12          logical-and ( temp 4-component vector of bool)
0:12            b4a: direct index for structure ( uniform 4-component vector of bool)
0:12              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:12              Constant:
0:12                0 (const uint)
0:12            b4b: direct index for structure ( uniform 4-component vector of bool)
0:12              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:12              Constant:
0:12                1 (const uint)
0:13      Sequence
0:13        move second child to first child ( temp 4-component vector of bool)
0:13          'r02' ( temp 4-component vector of bool)
0:13          logical-or ( temp 4-component vector of bool)
0:13            b4a: direct index for structure ( uniform 4-component vector of bool)
0:13              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:13              Constant:
0:13                0 (const uint)
0:13            b4b: direct index for structure ( uniform 4-component vector of bool)
0:13              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:13              Constant:
0:13                1 (const uint)
0:15      Sequence
0:15        move second child to first child ( temp 4-component vector of bool)
0:15          'r10' ( temp 4-component vector of bool)
0:15          logical-and ( temp 4-component vector of bool)
0:15            Construct bvec4 ( uniform 4-component vector of bool)
0:15              b1a: direct index for structure ( uniform bool)
0:15                'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:15                Constant:
0:15                  2 (const uint)
0:15            b4b: direct index for structure ( uniform 4-component vector of bool)
0:15              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:15              Constant:
0:15                1 (const uint)
0:16      Sequence
0:16        move second child to first child ( temp 4-component vector of bool)
0:16          'r11' ( temp 4-component vector of bool)
0:16          logical-or ( temp 4-component vector of bool)
0:16            Construct bvec4 ( uniform 4-component vector of bool)
0:16              b1a: direct index for structure ( uniform bool)
0:16                'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:16                Constant:
0:16                  2 (const uint)
0:16            b4b: direct index for structure ( uniform 4-component vector of bool)
0:16              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:16              Constant:
0:16                1 (const uint)
0:18      Sequence
0:18        move second child to first child ( temp 4-component vector of bool)
0:18          'r20' ( temp 4-component vector of bool)
0:18          logical-and ( temp 4-component vector of bool)
0:18            b4a: direct index for structure ( uniform 4-component vector of bool)
0:18              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:18              Constant:
0:18                0 (const uint)
0:18            Construct bvec4 ( uniform 4-component vector of bool)
0:18              b1b: direct index for structure ( uniform bool)
0:18                'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:18                Constant:
0:18                  3 (const uint)
0:19      Sequence
0:19        move second child to first child ( temp 4-component vector of bool)
0:19          'r21' ( temp 4-component vector of bool)
0:19          logical-or ( temp 4-component vector of bool)
0:19            b4a: direct index for structure ( uniform 4-component vector of bool)
0:19              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:19              Constant:
0:19                0 (const uint)
0:19            Construct bvec4 ( uniform 4-component vector of bool)
0:19              b1b: direct index for structure ( uniform bool)
0:19                'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:19                Constant:
0:19                  3 (const uint)
0:22      move second child to first child ( temp 4-component vector of float)
0:22        Color: direct index for structure ( temp 4-component vector of float)
0:22          'psout' ( temp structure{ temp 4-component vector of float Color})
0:22          Constant:
0:22            0 (const int)
0:22        Convert bool to float ( temp 4-component vector of float)
0:22          logical-or ( temp 4-component vector of bool)
0:22            logical-or ( temp 4-component vector of bool)
0:22              logical-or ( temp 4-component vector of bool)
0:22                logical-or ( temp 4-component vector of bool)
0:22                  logical-or ( temp 4-component vector of bool)
0:22                    logical-or ( temp 4-component vector of bool)
0:22                      'r00' ( temp 4-component vector of bool)
0:22                      'r01' ( temp 4-component vector of bool)
0:22                    'r02' ( temp 4-component vector of bool)
0:22                  'r10' ( temp 4-component vector of bool)
0:22                'r11' ( temp 4-component vector of bool)
0:22              'r20' ( temp 4-component vector of bool)
0:22            'r21' ( temp 4-component vector of bool)
0:23      Branch: Return with expression
0:23        'psout' ( temp structure{ temp 4-component vector of float Color})
0:10  Function Definition: main( ( temp void)
0:10    Function Parameters: 
0:?     Sequence
0:10      Sequence
0:10        move second child to first child ( temp 4-component vector of float)
0:?           '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:10          Color: direct index for structure ( temp 4-component vector of float)
0:10            Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:10            Constant:
0:10              0 (const int)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)


Linked fragment stage:


Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:10  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
0:10    Function Parameters: 
0:?     Sequence
0:11      Sequence
0:11        move second child to first child ( temp 4-component vector of bool)
0:11          'r00' ( temp 4-component vector of bool)
0:11          Negate conditional ( temp 4-component vector of bool)
0:11            b4a: direct index for structure ( uniform 4-component vector of bool)
0:11              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:11              Constant:
0:11                0 (const uint)
0:12      Sequence
0:12        move second child to first child ( temp 4-component vector of bool)
0:12          'r01' ( temp 4-component vector of bool)
0:12          logical-and ( temp 4-component vector of bool)
0:12            b4a: direct index for structure ( uniform 4-component vector of bool)
0:12              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:12              Constant:
0:12                0 (const uint)
0:12            b4b: direct index for structure ( uniform 4-component vector of bool)
0:12              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:12              Constant:
0:12                1 (const uint)
0:13      Sequence
0:13        move second child to first child ( temp 4-component vector of bool)
0:13          'r02' ( temp 4-component vector of bool)
0:13          logical-or ( temp 4-component vector of bool)
0:13            b4a: direct index for structure ( uniform 4-component vector of bool)
0:13              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:13              Constant:
0:13                0 (const uint)
0:13            b4b: direct index for structure ( uniform 4-component vector of bool)
0:13              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:13              Constant:
0:13                1 (const uint)
0:15      Sequence
0:15        move second child to first child ( temp 4-component vector of bool)
0:15          'r10' ( temp 4-component vector of bool)
0:15          logical-and ( temp 4-component vector of bool)
0:15            Construct bvec4 ( uniform 4-component vector of bool)
0:15              b1a: direct index for structure ( uniform bool)
0:15                'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:15                Constant:
0:15                  2 (const uint)
0:15            b4b: direct index for structure ( uniform 4-component vector of bool)
0:15              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:15              Constant:
0:15                1 (const uint)
0:16      Sequence
0:16        move second child to first child ( temp 4-component vector of bool)
0:16          'r11' ( temp 4-component vector of bool)
0:16          logical-or ( temp 4-component vector of bool)
0:16            Construct bvec4 ( uniform 4-component vector of bool)
0:16              b1a: direct index for structure ( uniform bool)
0:16                'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:16                Constant:
0:16                  2 (const uint)
0:16            b4b: direct index for structure ( uniform 4-component vector of bool)
0:16              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:16              Constant:
0:16                1 (const uint)
0:18      Sequence
0:18        move second child to first child ( temp 4-component vector of bool)
0:18          'r20' ( temp 4-component vector of bool)
0:18          logical-and ( temp 4-component vector of bool)
0:18            b4a: direct index for structure ( uniform 4-component vector of bool)
0:18              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:18              Constant:
0:18                0 (const uint)
0:18            Construct bvec4 ( uniform 4-component vector of bool)
0:18              b1b: direct index for structure ( uniform bool)
0:18                'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:18                Constant:
0:18                  3 (const uint)
0:19      Sequence
0:19        move second child to first child ( temp 4-component vector of bool)
0:19          'r21' ( temp 4-component vector of bool)
0:19          logical-or ( temp 4-component vector of bool)
0:19            b4a: direct index for structure ( uniform 4-component vector of bool)
0:19              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:19              Constant:
0:19                0 (const uint)
0:19            Construct bvec4 ( uniform 4-component vector of bool)
0:19              b1b: direct index for structure ( uniform bool)
0:19                'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:19                Constant:
0:19                  3 (const uint)
0:22      move second child to first child ( temp 4-component vector of float)
0:22        Color: direct index for structure ( temp 4-component vector of float)
0:22          'psout' ( temp structure{ temp 4-component vector of float Color})
0:22          Constant:
0:22            0 (const int)
0:22        Convert bool to float ( temp 4-component vector of float)
0:22          logical-or ( temp 4-component vector of bool)
0:22            logical-or ( temp 4-component vector of bool)
0:22              logical-or ( temp 4-component vector of bool)
0:22                logical-or ( temp 4-component vector of bool)
0:22                  logical-or ( temp 4-component vector of bool)
0:22                    logical-or ( temp 4-component vector of bool)
0:22                      'r00' ( temp 4-component vector of bool)
0:22                      'r01' ( temp 4-component vector of bool)
0:22                    'r02' ( temp 4-component vector of bool)
0:22                  'r10' ( temp 4-component vector of bool)
0:22                'r11' ( temp 4-component vector of bool)
0:22              'r20' ( temp 4-component vector of bool)
0:22            'r21' ( temp 4-component vector of bool)
0:23      Branch: Return with expression
0:23        'psout' ( temp structure{ temp 4-component vector of float Color})
0:10  Function Definition: main( ( temp void)
0:10    Function Parameters: 
0:?     Sequence
0:10      Sequence
0:10        move second child to first child ( temp 4-component vector of float)
0:?           '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:10          Color: direct index for structure ( temp 4-component vector of float)
0:10            Function Call: @main( ( temp structure{ temp 4-component vector of float Color})
0:10            Constant:
0:10              0 (const int)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of bool b4a,  uniform 4-component vector of bool b4b,  uniform bool b1a,  uniform bool b1b})
0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 112
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 8  "PS_OUTPUT"
                              MemberName 8(PS_OUTPUT) 0  "Color"
                              Name 10  "@main("
                              Name 15  "r00"
                              Name 18  "$Global"
                              MemberName 18($Global) 0  "b4a"
                              MemberName 18($Global) 1  "b4b"
                              MemberName 18($Global) 2  "b1a"
                              MemberName 18($Global) 3  "b1b"
                              Name 20  ""
                              Name 30  "r01"
                              Name 39  "r02"
                              Name 47  "r10"
                              Name 58  "r11"
                              Name 67  "r20"
                              Name 77  "r21"
                              Name 87  "psout"
                              Name 112  "@entryPointOutput.Color"
                              MemberDecorate 18($Global) 0 Offset 0
                              MemberDecorate 18($Global) 1 Offset 16
                              MemberDecorate 18($Global) 2 Offset 32
                              MemberDecorate 18($Global) 3 Offset 36
                              Decorate 18($Global) Block
                              Decorate 20 DescriptorSet 0
                              Decorate 20 Binding 0
                              Decorate 112(@entryPointOutput.Color) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
    8(PS_OUTPUT):             TypeStruct 7(fvec4)
               9:             TypeFunction 8(PS_OUTPUT)
              12:             TypeBool
              13:             TypeVector 12(bool) 4
              14:             TypePointer Function 13(bvec4)
              16:             TypeInt 32 0
              17:             TypeVector 16(int) 4
     18($Global):             TypeStruct 17(ivec4) 17(ivec4) 16(int) 16(int)
              19:             TypePointer Uniform 18($Global)
              20:     19(ptr) Variable Uniform
              21:             TypeInt 32 1
              22:     21(int) Constant 0
              23:             TypePointer Uniform 17(ivec4)
              26:     16(int) Constant 0
              27:   17(ivec4) ConstantComposite 26 26 26 26
              34:     21(int) Constant 1
              48:     21(int) Constant 2
              49:             TypePointer Uniform 16(int)
              71:     21(int) Constant 3
              86:             TypePointer Function 8(PS_OUTPUT)
             101:    6(float) Constant 0
             102:    6(float) Constant 1065353216
             103:    7(fvec4) ConstantComposite 101 101 101 101
             104:    7(fvec4) ConstantComposite 102 102 102 102
             106:             TypePointer Function 7(fvec4)
             111:             TypePointer Output 7(fvec4)
112(@entryPointOutput.Color):    111(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
             113:8(PS_OUTPUT) FunctionCall 10(@main()
             114:    7(fvec4) CompositeExtract 113 0
                              Store 112(@entryPointOutput.Color) 114
                              Return
                              FunctionEnd
      10(@main():8(PS_OUTPUT) Function None 9
              11:             Label
         15(r00):     14(ptr) Variable Function
         30(r01):     14(ptr) Variable Function
         39(r02):     14(ptr) Variable Function
         47(r10):     14(ptr) Variable Function
         58(r11):     14(ptr) Variable Function
         67(r20):     14(ptr) Variable Function
         77(r21):     14(ptr) Variable Function
       87(psout):     86(ptr) Variable Function
              24:     23(ptr) AccessChain 20 22
              25:   17(ivec4) Load 24
              28:   13(bvec4) INotEqual 25 27
              29:   13(bvec4) LogicalNot 28
                              Store 15(r00) 29
              31:     23(ptr) AccessChain 20 22
              32:   17(ivec4) Load 31
              33:   13(bvec4) INotEqual 32 27
              35:     23(ptr) AccessChain 20 34
              36:   17(ivec4) Load 35
              37:   13(bvec4) INotEqual 36 27
              38:   13(bvec4) LogicalAnd 33 37
                              Store 30(r01) 38
              40:     23(ptr) AccessChain 20 22
              41:   17(ivec4) Load 40
              42:   13(bvec4) INotEqual 41 27
              43:     23(ptr) AccessChain 20 34
              44:   17(ivec4) Load 43
              45:   13(bvec4) INotEqual 44 27
              46:   13(bvec4) LogicalOr 42 45
                              Store 39(r02) 46
              50:     49(ptr) AccessChain 20 48
              51:     16(int) Load 50
              52:    12(bool) INotEqual 51 26
              53:   13(bvec4) CompositeConstruct 52 52 52 52
              54:     23(ptr) AccessChain 20 34
              55:   17(ivec4) Load 54
              56:   13(bvec4) INotEqual 55 27
              57:   13(bvec4) LogicalAnd 53 56
                              Store 47(r10) 57
              59:     49(ptr) AccessChain 20 48
              60:     16(int) Load 59
              61:    12(bool) INotEqual 60 26
              62:   13(bvec4) CompositeConstruct 61 61 61 61
              63:     23(ptr) AccessChain 20 34
              64:   17(ivec4) Load 63
              65:   13(bvec4) INotEqual 64 27
              66:   13(bvec4) LogicalOr 62 65
                              Store 58(r11) 66
              68:     23(ptr) AccessChain 20 22
              69:   17(ivec4) Load 68
              70:   13(bvec4) INotEqual 69 27
              72:     49(ptr) AccessChain 20 71
              73:     16(int) Load 72
              74:    12(bool) INotEqual 73 26
              75:   13(bvec4) CompositeConstruct 74 74 74 74
              76:   13(bvec4) LogicalAnd 70 75
                              Store 67(r20) 76
              78:     23(ptr) AccessChain 20 22
              79:   17(ivec4) Load 78
              80:   13(bvec4) INotEqual 79 27
              81:     49(ptr) AccessChain 20 71
              82:     16(int) Load 81
              83:    12(bool) INotEqual 82 26
              84:   13(bvec4) CompositeConstruct 83 83 83 83
              85:   13(bvec4) LogicalOr 80 84
                              Store 77(r21) 85
              88:   13(bvec4) Load 15(r00)
              89:   13(bvec4) Load 30(r01)
              90:   13(bvec4) LogicalOr 88 89
              91:   13(bvec4) Load 39(r02)
              92:   13(bvec4) LogicalOr 90 91
              93:   13(bvec4) Load 47(r10)
              94:   13(bvec4) LogicalOr 92 93
              95:   13(bvec4) Load 58(r11)
              96:   13(bvec4) LogicalOr 94 95
              97:   13(bvec4) Load 67(r20)
              98:   13(bvec4) LogicalOr 96 97
              99:   13(bvec4) Load 77(r21)
             100:   13(bvec4) LogicalOr 98 99
             105:    7(fvec4) Select 100 104 103
             107:    106(ptr) AccessChain 87(psout) 22
                              Store 107 105
             108:8(PS_OUTPUT) Load 87(psout)
                              ReturnValue 108
                              FunctionEnd
