hlsl.structbuffer.incdec.frag
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 70

                              Capability Shader
                              Extension  "SPV_GOOGLE_hlsl_functionality1"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 63 66
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 12  "@main(u1;"
                              Name 11  "pos"
                              Name 16  "result"
                              Name 20  "sbuf_rw_i"
                              MemberName 20(sbuf_rw_i) 0  "@data"
                              Name 22  "sbuf_rw_i"
                              Name 26  "sbuf_rw_d"
                              Name 27  "sbuf_rw_nocounter"
                              Name 33  "c1"
                              Name 34  "sbuf_rw_i@count"
                              MemberName 34(sbuf_rw_i@count) 0  "@count"
                              Name 36  "sbuf_rw_i@count"
                              Name 41  "c2"
                              Name 42  "sbuf_rw_d@count"
                              Name 61  "pos"
                              Name 63  "pos"
                              Name 66  "@entryPointOutput"
                              Name 67  "param"
                              Decorate 19 ArrayStride 16
                              MemberDecorate 20(sbuf_rw_i) 0 Offset 0
                              Decorate 20(sbuf_rw_i) BufferBlock
                              Decorate 22(sbuf_rw_i) DescriptorSet 0
                              Decorate 22(sbuf_rw_i) Binding 0
                              Decorate 26(sbuf_rw_d) DescriptorSet 0
                              Decorate 26(sbuf_rw_d) Binding 0
                              Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
                              Decorate 27(sbuf_rw_nocounter) Binding 0
                              MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
                              Decorate 34(sbuf_rw_i@count) BufferBlock
                              Decorate 36(sbuf_rw_i@count) DescriptorSet 0
                              Decorate 36(sbuf_rw_i@count) Binding 0
                              Decorate 42(sbuf_rw_d@count) DescriptorSet 0
                              Decorate 42(sbuf_rw_d@count) Binding 0
                              Decorate 63(pos) Flat
                              Decorate 63(pos) Location 0
                              DecorateStringGOOGLE 63(pos) DecorationHlslSemanticGOOGLE  "FOO"
                              Decorate 66(@entryPointOutput) Location 0
                              DecorateStringGOOGLE 66(@entryPointOutput) DecorationHlslSemanticGOOGLE  "SV_TARGET0"
                              DecorateId 22(sbuf_rw_i) DecorationHlslCounterBufferGOOGLE 36(sbuf_rw_i@count)
                              DecorateId 26(sbuf_rw_d) DecorationHlslCounterBufferGOOGLE 42(sbuf_rw_d@count)
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypePointer Function 6(int)
               8:             TypeFloat 32
               9:             TypeVector 8(float) 4
              10:             TypeFunction 9(fvec4) 7(ptr)
              14:             TypeVector 6(int) 4
              15:             TypePointer Function 14(ivec4)
              17:      6(int) Constant 0
              18:   14(ivec4) ConstantComposite 17 17 17 17
              19:             TypeRuntimeArray 14(ivec4)
   20(sbuf_rw_i):             TypeStruct 19
              21:             TypePointer Uniform 20(sbuf_rw_i)
   22(sbuf_rw_i):     21(ptr) Variable Uniform
              23:             TypeInt 32 1
              24:     23(int) Constant 0
              25:     23(int) Constant 7
   26(sbuf_rw_d):     21(ptr) Variable Uniform
27(sbuf_rw_nocounter):     21(ptr) Variable Uniform
              28:     23(int) Constant 5
              29:      6(int) Constant 2
              30:   14(ivec4) ConstantComposite 29 29 29 29
              31:             TypePointer Uniform 14(ivec4)
34(sbuf_rw_i@count):             TypeStruct 6(int)
              35:             TypePointer Uniform 34(sbuf_rw_i@count)
36(sbuf_rw_i@count):     35(ptr) Variable Uniform
              37:             TypePointer Uniform 6(int)
              39:      6(int) Constant 1
42(sbuf_rw_d@count):     35(ptr) Variable Uniform
              44:      6(int) Constant 4294967295
              46:     23(int) Constant 4294967295
              62:             TypePointer Input 6(int)
         63(pos):     62(ptr) Variable Input
              65:             TypePointer Output 9(fvec4)
66(@entryPointOutput):     65(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
         61(pos):      7(ptr) Variable Function
       67(param):      7(ptr) Variable Function
              64:      6(int) Load 63(pos)
                              Store 61(pos) 64
              68:      6(int) Load 61(pos)
                              Store 67(param) 68
              69:    9(fvec4) FunctionCall 12(@main(u1;) 67(param)
                              Store 66(@entryPointOutput) 69
                              Return
                              FunctionEnd
   12(@main(u1;):    9(fvec4) Function None 10
         11(pos):      7(ptr) FunctionParameter
              13:             Label
      16(result):     15(ptr) Variable Function
          33(c1):      7(ptr) Variable Function
          41(c2):      7(ptr) Variable Function
                              Store 16(result) 18
              32:     31(ptr) AccessChain 27(sbuf_rw_nocounter) 24 28
                              Store 32 30
              38:     37(ptr) AccessChain 36(sbuf_rw_i@count) 24
              40:      6(int) AtomicIAdd 38 39 17 39
                              Store 33(c1) 40
              43:     37(ptr) AccessChain 42(sbuf_rw_d@count) 24
              45:      6(int) AtomicIAdd 43 39 17 44
              47:      6(int) IAdd 45 46
                              Store 41(c2) 47
              48:      7(ptr) AccessChain 16(result) 17
              49:      6(int) Load 48
              50:    8(float) ConvertUToF 49
              51:      7(ptr) AccessChain 16(result) 39
              52:      6(int) Load 51
              53:    8(float) ConvertUToF 52
              54:      6(int) Load 33(c1)
              55:    8(float) ConvertUToF 54
              56:      6(int) Load 41(c2)
              57:    8(float) ConvertUToF 56
              58:    9(fvec4) CompositeConstruct 50 53 55 57
                              ReturnValue 58
                              FunctionEnd
