spv.bufferhandleUvec2.frag
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 71

                              Capability Shader
                              Capability PhysicalStorageBufferAddressesEXT
                              Extension  "SPV_KHR_physical_storage_buffer"
                              Extension  "SPV_KHR_storage_buffer_storage_class"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel PhysicalStorageBuffer64EXT GLSL450
                              EntryPoint Fragment 4  "main" 16 19
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              SourceExtension  "GL_EXT_buffer_reference"
                              SourceExtension  "GL_EXT_buffer_reference_uvec2"
                              Name 4  "main"
                              Name 8  "blockType"
                              MemberName 8(blockType) 0  "a"
                              MemberName 8(blockType) 1  "b"
                              MemberName 8(blockType) 2  "c"
                              MemberName 8(blockType) 3  "d"
                              MemberName 8(blockType) 4  "e"
                              Name 13  "b1"
                              Name 16  "h"
                              Name 19  "i"
                              Name 34  "b2"
                              Name 37  "b3"
                              Name 46  "j"
                              Name 54  "carry"
                              Name 55  "ResType"
                              Name 68  "t2"
                              MemberName 68(t2) 0  "f"
                              MemberName 68(t2) 1  "g"
                              Name 70  "t"
                              MemberDecorate 8(blockType) 0 Offset 0
                              MemberDecorate 8(blockType) 1 Offset 4
                              MemberDecorate 8(blockType) 2 Offset 8
                              MemberDecorate 8(blockType) 3 Offset 12
                              MemberDecorate 8(blockType) 4 Offset 16
                              Decorate 8(blockType) Block
                              Decorate 13(b1) DecorationAliasedPointerEXT
                              Decorate 16(h) Flat
                              Decorate 19(i) Flat
                              Decorate 34(b2) DecorationAliasedPointerEXT
                              Decorate 37(b3) DecorationAliasedPointerEXT
                              MemberDecorate 68(t2) 0 Offset 0
                              MemberDecorate 68(t2) 1 Offset 8
                              Decorate 68(t2) Block
                              Decorate 70(t) DescriptorSet 0
                              Decorate 70(t) Binding 0
               2:             TypeVoid
               3:             TypeFunction 2
                              TypeForwardPointer 6 PhysicalStorageBufferEXT
               7:             TypeInt 32 1
    8(blockType):             TypeStruct 7(int) 7(int) 7(int) 7(int) 7(int)
               6:             TypePointer PhysicalStorageBufferEXT 8(blockType)
               9:             TypeInt 32 0
              10:      9(int) Constant 2
              11:             TypeArray 6(ptr) 10
              12:             TypePointer Function 11
              14:             TypeVector 9(int) 2
              15:             TypePointer Input 14(ivec2)
           16(h):     15(ptr) Variable Input
           19(i):     15(ptr) Variable Input
              23:      7(int) Constant 0
              24:             TypePointer Function 6(ptr)
              27:      7(int) Constant 1
              30:             TypePointer PhysicalStorageBufferEXT 7(int)
              45:             TypePointer Function 14(ivec2)
              49:      9(int) Constant 0
              50:             TypePointer Function 9(int)
              53:      9(int) Constant 256
     55(ResType):             TypeStruct 9(int) 9(int)
              61:      9(int) Constant 1
          68(t2):             TypeStruct 6(ptr) 6(ptr)
              69:             TypePointer StorageBuffer 68(t2)
           70(t):     69(ptr) Variable StorageBuffer
         4(main):           2 Function None 3
               5:             Label
          13(b1):     12(ptr) Variable Function
          34(b2):     24(ptr) Variable Function
          37(b3):     24(ptr) Variable Function
           46(j):     45(ptr) Variable Function
       54(carry):     50(ptr) Variable Function
              17:   14(ivec2) Load 16(h)
              18:      6(ptr) Bitcast 17
              20:   14(ivec2) Load 19(i)
              21:      6(ptr) Bitcast 20
              22:          11 CompositeConstruct 18 21
                              Store 13(b1) 22
              25:     24(ptr) AccessChain 13(b1) 23
              26:      6(ptr) Load 25
              28:     24(ptr) AccessChain 13(b1) 27
              29:      6(ptr) Load 28
              31:     30(ptr) AccessChain 29 27
              32:      7(int) Load 31 Aligned 4
              33:     30(ptr) AccessChain 26 23
                              Store 33 32 Aligned 16
              35:   14(ivec2) Load 16(h)
              36:      6(ptr) Bitcast 35
                              Store 34(b2) 36
              38:   14(ivec2) Load 19(i)
              39:      6(ptr) Bitcast 38
                              Store 37(b3) 39
              40:      6(ptr) Load 34(b2)
              41:      6(ptr) Load 37(b3)
              42:     30(ptr) AccessChain 41 27
              43:      7(int) Load 42 Aligned 4
              44:     30(ptr) AccessChain 40 23
                              Store 44 43 Aligned 16
              47:      6(ptr) Load 34(b2)
              48:   14(ivec2) Bitcast 47
                              Store 46(j) 48
              51:     50(ptr) AccessChain 46(j) 49
              52:      9(int) Load 51
              56: 55(ResType) IAddCarry 52 53
              57:      9(int) CompositeExtract 56 1
                              Store 54(carry) 57
              58:      9(int) CompositeExtract 56 0
              59:     50(ptr) AccessChain 46(j) 49
                              Store 59 58
              60:      9(int) Load 54(carry)
              62:     50(ptr) AccessChain 46(j) 61
              63:      9(int) Load 62
              64:      9(int) IAdd 63 60
              65:     50(ptr) AccessChain 46(j) 61
                              Store 65 64
              66:   14(ivec2) Load 46(j)
              67:      6(ptr) Bitcast 66
                              Store 34(b2) 67
                              Return
                              FunctionEnd
