spv.bufferhandle3.frag
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 50

                              Capability Shader
                              Capability CapabilityPhysicalStorageBufferAddressesEXT
                              Extension  "SPV_EXT_physical_storage_buffer"
                              Extension  "SPV_KHR_storage_buffer_storage_class"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel PhysicalStorageBuffer64EXT GLSL450
                              EntryPoint Fragment 4  "main" 42
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              SourceExtension  "GL_EXT_buffer_reference"
                              Name 4  "main"
                              Name 9  "t4"
                              MemberName 9(t4) 0  "j"
                              MemberName 9(t4) 1  "k"
                              Name 10  "t3"
                              MemberName 10(t3) 0  "h"
                              Name 14  "foo(1;"
                              Name 13  "y"
                              Name 19  "t5"
                              MemberName 19(t5) 0  "m"
                              Name 21  "s5"
                              Name 23  "param"
                              Name 38  "t4"
                              MemberName 38(t4) 0  "j"
                              MemberName 38(t4) 1  "k"
                              Name 40  "x"
                              Name 42  "k"
                              MemberDecorate 9(t4) 0 Offset 0
                              MemberDecorate 9(t4) 1 Offset 8
                              Decorate 9(t4) Block
                              MemberDecorate 10(t3) 0 Offset 0
                              Decorate 10(t3) Block
                              Decorate 13(y) DecorationAliasedPointerEXT
                              MemberDecorate 19(t5) 0 Offset 0
                              Decorate 19(t5) Block
                              Decorate 21(s5) DescriptorSet 0
                              Decorate 21(s5) Binding 0
                              MemberDecorate 38(t4) 0 Offset 0
                              MemberDecorate 38(t4) 1 Offset 8
                              Decorate 38(t4) Block
                              Decorate 40(x) DescriptorSet 1
                              Decorate 40(x) Binding 2
                              Decorate 42(k) Flat
                              Decorate 42(k) DecorationAliasedPointerEXT
                              Decorate 23(param) DecorationAliasedPointerEXT
               2:             TypeVoid
               3:             TypeFunction 2
                              TypeForwardPointer 6 PhysicalStorageBufferEXT
               7:             TypeInt 32 1
                              TypeForwardPointer 8 PhysicalStorageBufferEXT
           9(t4):             TypeStruct 7(int) 8
          10(t3):             TypeStruct 7(int)
               8:             TypePointer PhysicalStorageBufferEXT 10(t3)
               6:             TypePointer PhysicalStorageBufferEXT 9(t4)
              11:             TypePointer Function 6(ptr)
              12:             TypeFunction 6(ptr) 11(ptr)
          19(t5):             TypeStruct 6(ptr)
              20:             TypePointer StorageBuffer 19(t5)
          21(s5):     20(ptr) Variable StorageBuffer
              22:      7(int) Constant 0
              24:             TypePointer StorageBuffer 6(ptr)
              30:      7(int) Constant 1
              31:             TypePointer PhysicalStorageBufferEXT 8(ptr)
              34:             TypePointer PhysicalStorageBufferEXT 7(int)
          38(t4):             TypeStruct 7(int) 8(ptr)
              39:             TypePointer StorageBuffer 38(t4)
           40(x):     39(ptr) Variable StorageBuffer
              41:             TypePointer Input 6(ptr)
           42(k):     41(ptr) Variable Input
              48:             TypePointer StorageBuffer 7(int)
         4(main):           2 Function None 3
               5:             Label
       23(param):     11(ptr) Variable Function
              25:     24(ptr) AccessChain 21(s5) 22
              26:      6(ptr) Load 25
                              Store 23(param) 26
              27:      6(ptr) FunctionCall 14(foo(1;) 23(param)
              28:     24(ptr) AccessChain 21(s5) 22
              29:      6(ptr) Load 28
              32:     31(ptr) AccessChain 29 30
              33:      8(ptr) Load 32 Aligned 8
              35:     34(ptr) AccessChain 33 22
              36:      7(int) Load 35 Aligned 16
              37:     34(ptr) AccessChain 27 22
                              Store 37 36 Aligned 16
              43:      6(ptr) Load 42(k)
              44:     31(ptr) AccessChain 43 30
              45:      8(ptr) Load 44 Aligned 8
              46:     34(ptr) AccessChain 45 22
              47:      7(int) Load 46 Aligned 16
              49:     48(ptr) AccessChain 40(x) 22
                              Store 49 47
                              Return
                              FunctionEnd
      14(foo(1;):      6(ptr) Function None 12
           13(y):     11(ptr) FunctionParameter
              15:             Label
              16:      6(ptr) Load 13(y)
                              ReturnValue 16
                              FunctionEnd
