spv.1.4.image.frag
// Module Version 10400
// Generated by (magic number): 80008
// Id's are bound by 104

                              Capability Shader
                              Capability StorageImageMultisample
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 26 30 40 52 64 77 89 100 103
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              Name 4  "main"
                              Name 9  "v"
                              Name 15  "iv"
                              Name 21  "uv"
                              Name 26  "i2D"
                              Name 30  "ic2D"
                              Name 40  "ii2D"
                              Name 52  "ui2D"
                              Name 64  "i2DMS"
                              Name 77  "ii2DMS"
                              Name 89  "ui2DMS"
                              Name 100  "fragData"
                              Name 103  "value"
                              Decorate 26(i2D) DescriptorSet 0
                              Decorate 26(i2D) Binding 1
                              Decorate 30(ic2D) Flat
                              Decorate 40(ii2D) DescriptorSet 0
                              Decorate 40(ii2D) Binding 12
                              Decorate 52(ui2D) DescriptorSet 0
                              Decorate 52(ui2D) Binding 12
                              Decorate 64(i2DMS) DescriptorSet 0
                              Decorate 64(i2DMS) Binding 9
                              Decorate 77(ii2DMS) DescriptorSet 0
                              Decorate 77(ii2DMS) Binding 13
                              Decorate 89(ui2DMS) DescriptorSet 0
                              Decorate 89(ui2DMS) Binding 13
                              Decorate 103(value) Flat
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Function 7(fvec4)
              10:    6(float) Constant 0
              11:    7(fvec4) ConstantComposite 10 10 10 10
              12:             TypeInt 32 1
              13:             TypeVector 12(int) 4
              14:             TypePointer Function 13(ivec4)
              16:     12(int) Constant 0
              17:   13(ivec4) ConstantComposite 16 16 16 16
              18:             TypeInt 32 0
              19:             TypeVector 18(int) 4
              20:             TypePointer Function 19(ivec4)
              22:     18(int) Constant 0
              23:   19(ivec4) ConstantComposite 22 22 22 22
              24:             TypeImage 6(float) 2D nonsampled format:Rgba32f
              25:             TypePointer UniformConstant 24
         26(i2D):     25(ptr) Variable UniformConstant
              28:             TypeVector 12(int) 2
              29:             TypePointer Input 28(ivec2)
        30(ic2D):     29(ptr) Variable Input
              38:             TypeImage 12(int) 2D nonsampled format:R32i
              39:             TypePointer UniformConstant 38
        40(ii2D):     39(ptr) Variable UniformConstant
              50:             TypeImage 18(int) 2D nonsampled format:R32ui
              51:             TypePointer UniformConstant 50
        52(ui2D):     51(ptr) Variable UniformConstant
              62:             TypeImage 6(float) 2D multi-sampled nonsampled format:Rgba32f
              63:             TypePointer UniformConstant 62
       64(i2DMS):     63(ptr) Variable UniformConstant
              67:     12(int) Constant 1
              73:     12(int) Constant 2
              75:             TypeImage 12(int) 2D multi-sampled nonsampled format:R32i
              76:             TypePointer UniformConstant 75
      77(ii2DMS):     76(ptr) Variable UniformConstant
              87:             TypeImage 18(int) 2D multi-sampled nonsampled format:R32ui
              88:             TypePointer UniformConstant 87
      89(ui2DMS):     88(ptr) Variable UniformConstant
              99:             TypePointer Output 7(fvec4)
   100(fragData):     99(ptr) Variable Output
             102:             TypePointer Input 18(int)
      103(value):    102(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
            9(v):      8(ptr) Variable Function
          15(iv):     14(ptr) Variable Function
          21(uv):     20(ptr) Variable Function
                              Store 9(v) 11
                              Store 15(iv) 17
                              Store 21(uv) 23
              27:          24 Load 26(i2D)
              31:   28(ivec2) Load 30(ic2D)
              32:    7(fvec4) ImageRead 27 31
              33:    7(fvec4) Load 9(v)
              34:    7(fvec4) FAdd 33 32
                              Store 9(v) 34
              35:          24 Load 26(i2D)
              36:   28(ivec2) Load 30(ic2D)
              37:    7(fvec4) Load 9(v)
                              ImageWrite 35 36 37
              41:          38 Load 40(ii2D)
              42:   28(ivec2) Load 30(ic2D)
              43:   13(ivec4) ImageRead 41 42 SignExtend 
              44:    7(fvec4) ConvertSToF 43
              45:    7(fvec4) Load 9(v)
              46:    7(fvec4) FAdd 45 44
                              Store 9(v) 46
              47:          38 Load 40(ii2D)
              48:   28(ivec2) Load 30(ic2D)
              49:   13(ivec4) Load 15(iv)
                              ImageWrite 47 48 49 SignExtend 
              53:          50 Load 52(ui2D)
              54:   28(ivec2) Load 30(ic2D)
              55:   19(ivec4) ImageRead 53 54 ZeroExtend 
              56:    7(fvec4) ConvertUToF 55
              57:    7(fvec4) Load 9(v)
              58:    7(fvec4) FAdd 57 56
                              Store 9(v) 58
              59:          50 Load 52(ui2D)
              60:   28(ivec2) Load 30(ic2D)
              61:   19(ivec4) Load 21(uv)
                              ImageWrite 59 60 61 ZeroExtend 
              65:          62 Load 64(i2DMS)
              66:   28(ivec2) Load 30(ic2D)
              68:    7(fvec4) ImageRead 65 66 Sample 67
              69:    7(fvec4) Load 9(v)
              70:    7(fvec4) FAdd 69 68
                              Store 9(v) 70
              71:          62 Load 64(i2DMS)
              72:   28(ivec2) Load 30(ic2D)
              74:    7(fvec4) Load 9(v)
                              ImageWrite 71 72 74 Sample 73
              78:          75 Load 77(ii2DMS)
              79:   28(ivec2) Load 30(ic2D)
              80:   13(ivec4) ImageRead 78 79 Sample SignExtend 67
              81:    7(fvec4) ConvertSToF 80
              82:    7(fvec4) Load 9(v)
              83:    7(fvec4) FAdd 82 81
                              Store 9(v) 83
              84:          75 Load 77(ii2DMS)
              85:   28(ivec2) Load 30(ic2D)
              86:   13(ivec4) Load 15(iv)
                              ImageWrite 84 85 86 Sample SignExtend 73
              90:          87 Load 89(ui2DMS)
              91:   28(ivec2) Load 30(ic2D)
              92:   19(ivec4) ImageRead 90 91 Sample ZeroExtend 67
              93:    7(fvec4) ConvertUToF 92
              94:    7(fvec4) Load 9(v)
              95:    7(fvec4) FAdd 94 93
                              Store 9(v) 95
              96:          87 Load 89(ui2DMS)
              97:   28(ivec2) Load 30(ic2D)
              98:   19(ivec4) Load 21(uv)
                              ImageWrite 96 97 98 Sample ZeroExtend 73
             101:    7(fvec4) Load 9(v)
                              Store 100(fragData) 101
                              Return
                              FunctionEnd
