spv.accessChain.frag
Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.


Linked fragment stage:


// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 197

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 65
                              ExecutionMode 4 OriginLowerLeft
                              Source GLSL 420
                              Name 4  "main"
                              Name 8  "S"
                              MemberName 8(S) 0  "color"
                              Name 11  "GetColor1(struct-S-vf31;"
                              Name 10  "i"
                              Name 18  "GetColor2(struct-S-vf31;i1;"
                              Name 16  "i"
                              Name 17  "comp"
                              Name 22  "GetColor3(struct-S-vf31;i1;"
                              Name 20  "i"
                              Name 21  "comp"
                              Name 26  "GetColor4(struct-S-vf31;i1;"
                              Name 24  "i"
                              Name 25  "comp"
                              Name 30  "GetColor5(struct-S-vf31;i1;"
                              Name 28  "i"
                              Name 29  "comp"
                              Name 34  "GetColor6(struct-S-vf31;i1;"
                              Name 32  "i"
                              Name 33  "comp"
                              Name 38  "GetColor7(struct-S-vf31;i1;"
                              Name 36  "i"
                              Name 37  "comp"
                              Name 42  "GetColor8(struct-S-vf31;i1;"
                              Name 40  "i"
                              Name 41  "comp"
                              Name 46  "GetColor9(struct-S-vf31;i1;"
                              Name 44  "i"
                              Name 45  "comp"
                              Name 50  "GetColor10(struct-S-vf31;i1;"
                              Name 48  "i"
                              Name 49  "comp"
                              Name 54  "GetColor11(struct-S-vf31;i1;"
                              Name 52  "i"
                              Name 53  "comp"
                              Name 58  "GetColor12(struct-S-vf31;i1;"
                              Name 56  "i"
                              Name 57  "comp"
                              Name 62  "GetColor13(struct-S-vf31;i1;"
                              Name 60  "i"
                              Name 61  "comp"
                              Name 65  "OutColor"
                              Name 144  "s"
                              Name 149  "u"
                              Name 150  "param"
                              Name 154  "param"
                              Name 158  "param"
                              Name 162  "param"
                              Name 166  "param"
                              Name 170  "param"
                              Name 174  "param"
                              Name 178  "param"
                              Name 182  "param"
                              Name 186  "param"
                              Name 190  "param"
                              Name 194  "param"
                              Decorate 65(OutColor) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 3
            8(S):             TypeStruct 7(fvec3)
               9:             TypeFunction 2 8(S)
              13:             TypeInt 32 1
              14:             TypePointer Function 13(int)
              15:             TypeFunction 2 8(S) 14(ptr)
              64:             TypePointer Output 7(fvec3)
    65(OutColor):     64(ptr) Variable Output
              66:     13(int) Constant 0
              67:             TypeInt 32 0
              68:     67(int) Constant 0
              95:             TypeVector 6(float) 2
             109:     67(int) Constant 2
             136:             TypePointer Output 6(float)
             141:    6(float) Constant 0
             142:    7(fvec3) ConstantComposite 141 141 141
             143:             TypePointer Function 8(S)
             148:             TypePointer UniformConstant 13(int)
          149(u):    148(ptr) Variable UniformConstant
         4(main):           2 Function None 3
               5:             Label
          144(s):    143(ptr) Variable Function
      150(param):     14(ptr) Variable Function
      154(param):     14(ptr) Variable Function
      158(param):     14(ptr) Variable Function
      162(param):     14(ptr) Variable Function
      166(param):     14(ptr) Variable Function
      170(param):     14(ptr) Variable Function
      174(param):     14(ptr) Variable Function
      178(param):     14(ptr) Variable Function
      182(param):     14(ptr) Variable Function
      186(param):     14(ptr) Variable Function
      190(param):     14(ptr) Variable Function
      194(param):     14(ptr) Variable Function
                              Store 65(OutColor) 142
             145:        8(S) Load 144(s)
             146:           2 FunctionCall 11(GetColor1(struct-S-vf31;) 145
             147:        8(S) Load 144(s)
             151:     13(int) Load 149(u)
                              Store 150(param) 151
             152:           2 FunctionCall 18(GetColor2(struct-S-vf31;i1;) 147 150(param)
             153:        8(S) Load 144(s)
             155:     13(int) Load 149(u)
                              Store 154(param) 155
             156:           2 FunctionCall 22(GetColor3(struct-S-vf31;i1;) 153 154(param)
             157:        8(S) Load 144(s)
             159:     13(int) Load 149(u)
                              Store 158(param) 159
             160:           2 FunctionCall 26(GetColor4(struct-S-vf31;i1;) 157 158(param)
             161:        8(S) Load 144(s)
             163:     13(int) Load 149(u)
                              Store 162(param) 163
             164:           2 FunctionCall 30(GetColor5(struct-S-vf31;i1;) 161 162(param)
             165:        8(S) Load 144(s)
             167:     13(int) Load 149(u)
                              Store 166(param) 167
             168:           2 FunctionCall 34(GetColor6(struct-S-vf31;i1;) 165 166(param)
             169:        8(S) Load 144(s)
             171:     13(int) Load 149(u)
                              Store 170(param) 171
             172:           2 FunctionCall 38(GetColor7(struct-S-vf31;i1;) 169 170(param)
             173:        8(S) Load 144(s)
             175:     13(int) Load 149(u)
                              Store 174(param) 175
             176:           2 FunctionCall 42(GetColor8(struct-S-vf31;i1;) 173 174(param)
             177:        8(S) Load 144(s)
             179:     13(int) Load 149(u)
                              Store 178(param) 179
             180:           2 FunctionCall 46(GetColor9(struct-S-vf31;i1;) 177 178(param)
             181:        8(S) Load 144(s)
             183:     13(int) Load 149(u)
                              Store 182(param) 183
             184:           2 FunctionCall 50(GetColor10(struct-S-vf31;i1;) 181 182(param)
             185:        8(S) Load 144(s)
             187:     13(int) Load 149(u)
                              Store 186(param) 187
             188:           2 FunctionCall 54(GetColor11(struct-S-vf31;i1;) 185 186(param)
             189:        8(S) Load 144(s)
             191:     13(int) Load 149(u)
                              Store 190(param) 191
             192:           2 FunctionCall 58(GetColor12(struct-S-vf31;i1;) 189 190(param)
             193:        8(S) Load 144(s)
             195:     13(int) Load 149(u)
                              Store 194(param) 195
             196:           2 FunctionCall 62(GetColor13(struct-S-vf31;i1;) 193 194(param)
                              Return
                              FunctionEnd
11(GetColor1(struct-S-vf31;):           2 Function None 9
           10(i):        8(S) FunctionParameter
              12:             Label
              69:    6(float) CompositeExtract 10(i) 0 0
              70:    7(fvec3) Load 65(OutColor)
              71:    7(fvec3) CompositeConstruct 69 69 69
              72:    7(fvec3) FAdd 70 71
                              Store 65(OutColor) 72
                              Return
                              FunctionEnd
18(GetColor2(struct-S-vf31;i1;):           2 Function None 15
           16(i):        8(S) FunctionParameter
        17(comp):     14(ptr) FunctionParameter
              19:             Label
              73:     13(int) Load 17(comp)
              74:    7(fvec3) CompositeExtract 16(i) 0
              75:    6(float) VectorExtractDynamic 74 73
              76:    7(fvec3) Load 65(OutColor)
              77:    7(fvec3) CompositeConstruct 75 75 75
              78:    7(fvec3) FAdd 76 77
                              Store 65(OutColor) 78
                              Return
                              FunctionEnd
22(GetColor3(struct-S-vf31;i1;):           2 Function None 15
           20(i):        8(S) FunctionParameter
        21(comp):     14(ptr) FunctionParameter
              23:             Label
              79:     13(int) Load 21(comp)
              80:    7(fvec3) CompositeExtract 20(i) 0
              81:    6(float) VectorExtractDynamic 80 79
              82:    7(fvec3) Load 65(OutColor)
              83:    7(fvec3) CompositeConstruct 81 81 81
              84:    7(fvec3) FAdd 82 83
                              Store 65(OutColor) 84
                              Return
                              FunctionEnd
26(GetColor4(struct-S-vf31;i1;):           2 Function None 15
           24(i):        8(S) FunctionParameter
        25(comp):     14(ptr) FunctionParameter
              27:             Label
              85:     13(int) Load 25(comp)
              86:    7(fvec3) CompositeExtract 24(i) 0
              87:    6(float) VectorExtractDynamic 86 85
              88:    7(fvec3) Load 65(OutColor)
              89:    7(fvec3) CompositeConstruct 87 87 87
              90:    7(fvec3) FAdd 88 89
                              Store 65(OutColor) 90
                              Return
                              FunctionEnd
30(GetColor5(struct-S-vf31;i1;):           2 Function None 15
           28(i):        8(S) FunctionParameter
        29(comp):     14(ptr) FunctionParameter
              31:             Label
              91:    7(fvec3) CompositeExtract 28(i) 0
              92:    7(fvec3) Load 65(OutColor)
              93:    7(fvec3) FAdd 92 91
                              Store 65(OutColor) 93
                              Return
                              FunctionEnd
34(GetColor6(struct-S-vf31;i1;):           2 Function None 15
           32(i):        8(S) FunctionParameter
        33(comp):     14(ptr) FunctionParameter
              35:             Label
              94:     13(int) Load 33(comp)
              96:    7(fvec3) CompositeExtract 32(i) 0
              97:   95(fvec2) VectorShuffle 96 96 1 0
              98:    6(float) VectorExtractDynamic 97 94
              99:    7(fvec3) Load 65(OutColor)
             100:    7(fvec3) CompositeConstruct 98 98 98
             101:    7(fvec3) FAdd 99 100
                              Store 65(OutColor) 101
                              Return
                              FunctionEnd
38(GetColor7(struct-S-vf31;i1;):           2 Function None 15
           36(i):        8(S) FunctionParameter
        37(comp):     14(ptr) FunctionParameter
              39:             Label
             102:    7(fvec3) CompositeExtract 36(i) 0
             103:   95(fvec2) VectorShuffle 102 102 0 1
             104:    7(fvec3) Load 65(OutColor)
             105:   95(fvec2) VectorShuffle 104 104 0 1
             106:   95(fvec2) FAdd 105 103
             107:    7(fvec3) Load 65(OutColor)
             108:    7(fvec3) VectorShuffle 107 106 3 4 2
                              Store 65(OutColor) 108
                              Return
                              FunctionEnd
42(GetColor8(struct-S-vf31;i1;):           2 Function None 15
           40(i):        8(S) FunctionParameter
        41(comp):     14(ptr) FunctionParameter
              43:             Label
             110:    6(float) CompositeExtract 40(i) 0 2
             111:    7(fvec3) Load 65(OutColor)
             112:    7(fvec3) CompositeConstruct 110 110 110
             113:    7(fvec3) FAdd 111 112
                              Store 65(OutColor) 113
                              Return
                              FunctionEnd
46(GetColor9(struct-S-vf31;i1;):           2 Function None 15
           44(i):        8(S) FunctionParameter
        45(comp):     14(ptr) FunctionParameter
              47:             Label
             114:    7(fvec3) CompositeExtract 44(i) 0
             115:    7(fvec3) Load 65(OutColor)
             116:    7(fvec3) VectorShuffle 115 115 2 0 1
             117:    7(fvec3) FAdd 116 114
             118:    7(fvec3) Load 65(OutColor)
             119:    7(fvec3) VectorShuffle 118 117 4 5 3
                              Store 65(OutColor) 119
                              Return
                              FunctionEnd
50(GetColor10(struct-S-vf31;i1;):           2 Function None 15
           48(i):        8(S) FunctionParameter
        49(comp):     14(ptr) FunctionParameter
              51:             Label
             120:    7(fvec3) CompositeExtract 48(i) 0
             121:   95(fvec2) VectorShuffle 120 120 0 1
             122:    7(fvec3) Load 65(OutColor)
             123:   95(fvec2) VectorShuffle 122 122 2 1
             124:   95(fvec2) FAdd 123 121
             125:    7(fvec3) Load 65(OutColor)
             126:    7(fvec3) VectorShuffle 125 124 0 4 3
                              Store 65(OutColor) 126
                              Return
                              FunctionEnd
54(GetColor11(struct-S-vf31;i1;):           2 Function None 15
           52(i):        8(S) FunctionParameter
        53(comp):     14(ptr) FunctionParameter
              55:             Label
             127:    7(fvec3) CompositeExtract 52(i) 0
             128:   95(fvec2) VectorShuffle 127 127 0 1
             129:    7(fvec3) Load 65(OutColor)
             130:   95(fvec2) VectorShuffle 129 129 0 2
             131:   95(fvec2) FAdd 130 128
             132:    7(fvec3) Load 65(OutColor)
             133:    7(fvec3) VectorShuffle 132 131 3 1 4
                              Store 65(OutColor) 133
                              Return
                              FunctionEnd
58(GetColor12(struct-S-vf31;i1;):           2 Function None 15
           56(i):        8(S) FunctionParameter
        57(comp):     14(ptr) FunctionParameter
              59:             Label
             134:     13(int) Load 57(comp)
             135:    6(float) CompositeExtract 56(i) 0 0
             137:    136(ptr) AccessChain 65(OutColor) 134
             138:    6(float) Load 137
             139:    6(float) FAdd 138 135
             140:    136(ptr) AccessChain 65(OutColor) 134
                              Store 140 139
                              Return
                              FunctionEnd
62(GetColor13(struct-S-vf31;i1;):           2 Function None 15
           60(i):        8(S) FunctionParameter
        61(comp):     14(ptr) FunctionParameter
              63:             Label
                              Return
                              FunctionEnd
