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

                              Capability Shader
                              Capability CapabilityVulkanMemoryModelKHR
                              Capability CapabilityPhysicalStorageBufferAddressesEXT
                              Extension  "SPV_EXT_physical_storage_buffer"
                              Extension  "SPV_KHR_storage_buffer_storage_class"
                              Extension  "SPV_KHR_vulkan_memory_model"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel PhysicalStorageBuffer64EXT VulkanKHR
                              EntryPoint Fragment 4  "main" 19
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              SourceExtension  "GL_ARB_gpu_shader_int64"
                              SourceExtension  "GL_EXT_buffer_reference"
                              Name 4  "main"
                              Name 7  "t2"
                              MemberName 7(t2) 0  "f"
                              Name 10  "blockType"
                              MemberName 10(blockType) 0  "x"
                              Name 12  "t"
                              Name 19  "i"
                              Name 28  "b"
                              Name 34  "b2"
                              MemberDecorate 7(t2) 0 Offset 0
                              Decorate 7(t2) Block
                              Decorate 9 ArrayStride 4
                              MemberDecorate 10(blockType) 0 Offset 0
                              Decorate 10(blockType) Block
                              Decorate 12(t) DescriptorSet 0
                              Decorate 12(t) Binding 0
                              Decorate 19(i) Flat
                              Decorate 19(i) Location 0
                              Decorate 28(b) DecorationAliasedPointerEXT
                              Decorate 34(b2) DecorationAliasedPointerEXT
               2:             TypeVoid
               3:             TypeFunction 2
                              TypeForwardPointer 6 PhysicalStorageBufferEXT
           7(t2):             TypeStruct 6
               8:             TypeInt 32 0
               9:             TypeRuntimeArray 8(int)
   10(blockType):             TypeStruct 9
               6:             TypePointer PhysicalStorageBufferEXT 10(blockType)
              11:             TypePointer StorageBuffer 7(t2)
           12(t):     11(ptr) Variable StorageBuffer
              13:             TypeInt 32 1
              14:     13(int) Constant 0
              15:             TypePointer StorageBuffer 6(ptr)
              18:             TypePointer Input 8(int)
           19(i):     18(ptr) Variable Input
              21:             TypePointer PhysicalStorageBufferEXT 8(int)
              23:      8(int) Constant 1
              24:      8(int) Constant 5
              25:      8(int) Constant 0
              27:             TypePointer Function 6(ptr)
              32:      8(int) Constant 2
              38:      8(int) Constant 3
         4(main):           2 Function None 3
               5:             Label
           28(b):     27(ptr) Variable Function
          34(b2):     27(ptr) Variable Function
              16:     15(ptr) AccessChain 12(t) 14
              17:      6(ptr) Load 16
              20:      8(int) Load 19(i)
              22:     21(ptr) AccessChain 17 14 20
              26:      8(int) AtomicIAdd 22 24 25 23
              29:     15(ptr) AccessChain 12(t) 14
              30:      6(ptr) Load 29
                              Store 28(b) 30
              31:      6(ptr) Load 28(b)
              33:     21(ptr) AccessChain 31 14 14
                              Store 33 32 Aligned MakePointerAvailableKHR NonPrivatePointerKHR 4 24
              35:     15(ptr) AccessChain 12(t) 14
              36:      6(ptr) Load 35
                              Store 34(b2) 36 Volatile 
              37:      6(ptr) Load 34(b2) Volatile 
              39:     21(ptr) AccessChain 37 14 14
                              Store 39 38 Volatile Aligned MakePointerAvailableKHR NonPrivatePointerKHR 4 24
                              Return
                              FunctionEnd
