spv.boolInBlock.frag
// Module Version 10000
// Generated by (magic number): 80005
// Id's are bound by 102

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 74
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              Name 4  "main"
                              Name 14  "foo(vb4;vb2;"
                              Name 12  "paramb4"
                              Name 13  "paramb2"
                              Name 17  "b1"
                              Name 25  "Buffer"
                              MemberName 25(Buffer) 0  "b2"
                              Name 27  ""
                              Name 40  "Uniform"
                              MemberName 40(Uniform) 0  "b4"
                              Name 42  ""
                              Name 60  "param"
                              Name 66  "param"
                              Name 74  "fragColor"
                              MemberDecorate 25(Buffer) 0 Offset 0
                              Decorate 25(Buffer) BufferBlock
                              Decorate 27 DescriptorSet 0
                              Decorate 27 Binding 1
                              MemberDecorate 40(Uniform) 0 Offset 0
                              Decorate 40(Uniform) Block
                              Decorate 42 DescriptorSet 0
                              Decorate 42 Binding 0
                              Decorate 74(fragColor) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeBool
               7:             TypeVector 6(bool) 4
               8:             TypePointer Function 7(bvec4)
               9:             TypeVector 6(bool) 2
              10:             TypePointer Function 9(bvec2)
              11:             TypeFunction 2 8(ptr) 10(ptr)
              16:             TypePointer Function 6(bool)
              18:             TypeInt 32 0
              19:     18(int) Constant 2
              24:             TypeVector 18(int) 2
      25(Buffer):             TypeStruct 24(ivec2)
              26:             TypePointer Uniform 25(Buffer)
              27:     26(ptr) Variable Uniform
              28:             TypeInt 32 1
              29:     28(int) Constant 0
              30:     6(bool) ConstantFalse
              31:    9(bvec2) ConstantComposite 30 30
              32:     18(int) Constant 1
              33:   24(ivec2) ConstantComposite 32 32
              34:     18(int) Constant 0
              35:   24(ivec2) ConstantComposite 34 34
              37:             TypePointer Uniform 24(ivec2)
              39:             TypeVector 18(int) 4
     40(Uniform):             TypeStruct 39(ivec4)
              41:             TypePointer Uniform 40(Uniform)
              42:     41(ptr) Variable Uniform
              43:             TypePointer Uniform 18(int)
              61:             TypePointer Uniform 39(ivec4)
              64:   39(ivec4) ConstantComposite 34 34 34 34
              71:             TypeFloat 32
              72:             TypeVector 71(float) 4
              73:             TypePointer Output 72(fvec4)
   74(fragColor):     73(ptr) Variable Output
              84:   71(float) Constant 0
              85:   71(float) Constant 1065353216
         4(main):           2 Function None 3
               5:             Label
       60(param):      8(ptr) Variable Function
       66(param):     10(ptr) Variable Function
              36:   24(ivec2) Select 31 33 35
              38:     37(ptr) AccessChain 27 29
                              Store 38 36
              44:     43(ptr) AccessChain 42 29 19
              45:     18(int) Load 44
              46:     6(bool) INotEqual 45 34
                              SelectionMerge 48 None
                              BranchConditional 46 47 48
              47:               Label
              49:     43(ptr)   AccessChain 42 29 34
              50:     18(int)   Load 49
              51:     6(bool)   INotEqual 50 34
              52:    9(bvec2)   CompositeConstruct 51 51
              53:   24(ivec2)   Select 52 33 35
              54:     37(ptr)   AccessChain 27 29
                                Store 54 53
                                Branch 48
              48:             Label
              55:     43(ptr) AccessChain 27 29 34
              56:     18(int) Load 55
              57:     6(bool) INotEqual 56 34
                              SelectionMerge 59 None
                              BranchConditional 57 58 59
              58:               Label
              62:     61(ptr)   AccessChain 42 29
              63:   39(ivec4)   Load 62
              65:    7(bvec4)   INotEqual 63 64
                                Store 60(param) 65
              67:           2   FunctionCall 14(foo(vb4;vb2;) 60(param) 66(param)
              68:    9(bvec2)   Load 66(param)
              69:   24(ivec2)   Select 68 33 35
              70:     37(ptr)   AccessChain 27 29
                                Store 70 69
                                Branch 59
              59:             Label
              75:     43(ptr) AccessChain 42 29 34
              76:     18(int) Load 75
              77:     6(bool) INotEqual 76 34
                              SelectionMerge 79 None
                              BranchConditional 77 78 79
              78:               Label
              80:     43(ptr)   AccessChain 42 29 32
              81:     18(int)   Load 80
              82:     6(bool)   INotEqual 81 34
                                Branch 79
              79:             Label
              83:     6(bool) Phi 77 59 82 78
              86:   71(float) Select 83 85 84
              87:   72(fvec4) CompositeConstruct 86 86 86 86
                              Store 74(fragColor) 87
              88:     43(ptr) AccessChain 42 29 34
              89:     18(int) Load 88
              90:     6(bool) INotEqual 89 34
              91:     6(bool) LogicalNot 90
                              SelectionMerge 93 None
                              BranchConditional 91 92 93
              92:               Label
              94:     43(ptr)   AccessChain 42 29 32
              95:     18(int)   Load 94
              96:     6(bool)   INotEqual 95 34
                                Branch 93
              93:             Label
              97:     6(bool) Phi 90 79 96 92
              98:   71(float) Select 97 85 84
              99:   72(fvec4) CompositeConstruct 98 98 98 98
             100:   72(fvec4) Load 74(fragColor)
             101:   72(fvec4) FSub 100 99
                              Store 74(fragColor) 101
                              Return
                              FunctionEnd
14(foo(vb4;vb2;):           2 Function None 11
     12(paramb4):      8(ptr) FunctionParameter
     13(paramb2):     10(ptr) FunctionParameter
              15:             Label
          17(b1):     16(ptr) Variable Function
              20:     16(ptr) AccessChain 12(paramb4) 19
              21:     6(bool) Load 20
                              Store 17(b1) 21
              22:     6(bool) Load 17(b1)
              23:    9(bvec2) CompositeConstruct 22 22
                              Store 13(paramb2) 23
                              Return
                              FunctionEnd
