; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 301
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %219 "foo_vert" %214 %217
OpEntryPoint Fragment %273 "foo_frag" %272
OpEntryPoint GLCompute %291 "assign_through_ptr"
OpExecutionMode %273 OriginUpperLeft
OpExecutionMode %291 LocalSize 1 1 1
OpMemberName %6 0 "a"
OpMemberName %6 1 "b"
OpMemberName %6 2 "c"
OpName %6 "GlobalConst"
OpMemberName %7 0 "value"
OpName %7 "AlignedWrapper"
OpMemberName %20 0 "_matrix"
OpMemberName %20 1 "matrix_array"
OpMemberName %20 2 "atom"
OpMemberName %20 3 "atom_arr"
OpMemberName %20 4 "arr"
OpMemberName %20 5 "data"
OpName %20 "Bar"
OpMemberName %22 0 "m"
OpName %22 "Baz"
OpMemberName %26 0 "am"
OpName %26 "MatCx2InArray"
OpName %40 "global_const"
OpName %42 "bar"
OpName %44 "baz"
OpName %47 "qux"
OpName %50 "nested_mat_cx2"
OpName %54 "test_matrix_within_struct_accesses"
OpName %82 "idx"
OpName %84 "t"
OpName %130 "test_matrix_within_array_within_struct_accesses"
OpName %140 "idx"
OpName %141 "t"
OpName %187 "foo"
OpName %188 "read_from_private"
OpName %193 "a"
OpName %194 "test_arr_as_arg"
OpName %200 "p"
OpName %201 "assign_through_ptr_fn"
OpName %206 "foo"
OpName %207 "assign_array_through_ptr_fn"
OpName %214 "vi"
OpName %219 "foo_vert"
OpName %231 "foo"
OpName %232 "c2"
OpName %273 "foo_frag"
OpName %291 "assign_through_ptr"
OpName %296 "val"
OpName %297 "arr"
OpMemberDecorate %6 0 Offset 0
OpMemberDecorate %6 1 Offset 16
OpMemberDecorate %6 2 Offset 28
OpMemberDecorate %7 0 Offset 0
OpDecorate %13 ArrayStride 16
OpDecorate %15 ArrayStride 4
OpDecorate %18 ArrayStride 8
OpDecorate %19 ArrayStride 8
OpMemberDecorate %20 0 Offset 0
OpMemberDecorate %20 0 ColMajor
OpMemberDecorate %20 0 MatrixStride 16
OpMemberDecorate %20 1 Offset 64
OpMemberDecorate %20 1 ColMajor
OpMemberDecorate %20 1 MatrixStride 8
OpMemberDecorate %20 2 Offset 96
OpMemberDecorate %20 3 Offset 100
OpMemberDecorate %20 4 Offset 144
OpMemberDecorate %20 5 Offset 160
OpDecorate %20 Block
OpMemberDecorate %22 0 Offset 0
OpMemberDecorate %22 0 ColMajor
OpMemberDecorate %22 0 MatrixStride 8
OpDecorate %25 ArrayStride 32
OpMemberDecorate %26 0 Offset 0
OpMemberDecorate %26 0 ColMajor
OpMemberDecorate %26 0 MatrixStride 8
OpDecorate %28 ArrayStride 4
OpDecorate %29 ArrayStride 40
OpDecorate %32 ArrayStride 4
OpDecorate %34 ArrayStride 16
OpDecorate %42 DescriptorSet 0
OpDecorate %42 Binding 0
OpDecorate %44 DescriptorSet 0
OpDecorate %44 Binding 1
OpDecorate %45 Block
OpMemberDecorate %45 0 Offset 0
OpDecorate %47 DescriptorSet 0
OpDecorate %47 Binding 2
OpDecorate %48 Block
OpMemberDecorate %48 0 Offset 0
OpDecorate %50 DescriptorSet 0
OpDecorate %50 Binding 3
OpDecorate %51 Block
OpMemberDecorate %51 0 Offset 0
OpDecorate %214 BuiltIn VertexIndex
OpDecorate %217 BuiltIn Position
OpDecorate %272 Location 0
%2 = OpTypeVoid
%3 = OpTypeInt 32 0
%4 = OpTypeVector %3 3
%5 = OpTypeInt 32 1
%6 = OpTypeStruct %3 %4 %5
%7 = OpTypeStruct %5
%10 = OpTypeFloat 32
%9 = OpTypeVector %10 3
%8 = OpTypeMatrix %9 4
%12 = OpTypeVector %10 2
%11 = OpTypeMatrix %12 2
%14 = OpConstant  %3  2
%13 = OpTypeArray %11 %14
%16 = OpConstant  %3  10
%15 = OpTypeArray %5 %16
%17 = OpTypeVector %3 2
%18 = OpTypeArray %17 %14
%19 = OpTypeRuntimeArray %7
%20 = OpTypeStruct %8 %13 %5 %15 %18 %19
%21 = OpTypeMatrix %12 3
%22 = OpTypeStruct %21
%23 = OpTypeVector %5 2
%24 = OpTypeMatrix %12 4
%25 = OpTypeArray %24 %14
%26 = OpTypeStruct %25
%27 = OpTypePointer Function %10
%28 = OpTypeArray %10 %16
%30 = OpConstant  %3  5
%29 = OpTypeArray %28 %30
%31 = OpTypeVector %10 4
%32 = OpTypeArray %5 %30
%33 = OpTypePointer Function %3
%34 = OpTypeArray %31 %14
%35 = OpTypePointer Function %34
%36 = OpConstant  %3  0
%37 = OpConstantComposite  %4  %36 %36 %36
%38 = OpConstant  %5  0
%39 = OpConstantComposite  %6  %36 %37 %38
%41 = OpTypePointer Private %6
%40 = OpVariable  %41  Private %39
%43 = OpTypePointer StorageBuffer %20
%42 = OpVariable  %43  StorageBuffer
%45 = OpTypeStruct %22
%46 = OpTypePointer Uniform %45
%44 = OpVariable  %46  Uniform
%48 = OpTypeStruct %23
%49 = OpTypePointer StorageBuffer %48
%47 = OpVariable  %49  StorageBuffer
%51 = OpTypeStruct %26
%52 = OpTypePointer Uniform %51
%50 = OpVariable  %52  Uniform
%55 = OpTypeFunction %2
%56 = OpTypePointer Uniform %22
%58 = OpConstant  %5  1
%59 = OpConstant  %10  1.0
%60 = OpConstantComposite  %12  %59 %59
%61 = OpConstant  %10  2.0
%62 = OpConstantComposite  %12  %61 %61
%63 = OpConstant  %10  3.0
%64 = OpConstantComposite  %12  %63 %63
%65 = OpConstantComposite  %21  %60 %62 %64
%66 = OpConstantComposite  %22  %65
%67 = OpConstant  %10  6.0
%68 = OpConstantComposite  %12  %67 %67
%69 = OpConstant  %10  5.0
%70 = OpConstantComposite  %12  %69 %69
%71 = OpConstant  %10  4.0
%72 = OpConstantComposite  %12  %71 %71
%73 = OpConstantComposite  %21  %68 %70 %72
%74 = OpConstant  %10  9.0
%75 = OpConstantComposite  %12  %74 %74
%76 = OpConstant  %10  90.0
%77 = OpConstantComposite  %12  %76 %76
%78 = OpConstant  %10  10.0
%79 = OpConstant  %10  20.0
%80 = OpConstant  %10  30.0
%81 = OpConstant  %10  40.0
%83 = OpTypePointer Function %5
%85 = OpTypePointer Function %22
%89 = OpTypePointer Uniform %21
%92 = OpTypePointer Uniform %12
%98 = OpTypePointer Uniform %10
%99 = OpConstant  %3  1
%114 = OpTypePointer Function %21
%116 = OpTypePointer Function %12
%120 = OpTypePointer Function %10
%131 = OpTypePointer Uniform %26
%133 = OpConstantNull  %25
%134 = OpConstantComposite  %26  %133
%135 = OpConstant  %10  8.0
%136 = OpConstantComposite  %12  %135 %135
%137 = OpConstant  %10  7.0
%138 = OpConstantComposite  %12  %137 %137
%139 = OpConstantComposite  %24  %136 %138 %68 %70
%142 = OpTypePointer Function %26
%146 = OpTypePointer Uniform %25
%149 = OpTypePointer Uniform %24
%171 = OpTypePointer Function %25
%173 = OpTypePointer Function %24
%189 = OpTypeFunction %10 %27
%195 = OpTypeFunction %10 %29
%202 = OpTypeFunction %2 %33
%203 = OpConstant  %3  42
%208 = OpTypeFunction %2 %35
%209 = OpConstantComposite  %31  %59 %59 %59 %59
%210 = OpConstantComposite  %31  %61 %61 %61 %61
%211 = OpConstantComposite  %34  %209 %210
%215 = OpTypePointer Input %3
%214 = OpVariable  %215  Input
%218 = OpTypePointer Output %31
%217 = OpVariable  %218  Output
%221 = OpTypePointer StorageBuffer %23
%224 = OpConstant  %10  0.0
%225 = OpConstant  %3  3
%226 = OpConstant  %5  3
%227 = OpConstant  %5  4
%228 = OpConstant  %5  5
%229 = OpConstant  %5  42
%230 = OpConstantNull  %29
%233 = OpTypePointer Function %32
%234 = OpConstantNull  %32
%239 = OpTypePointer StorageBuffer %8
%242 = OpTypePointer StorageBuffer %18
%243 = OpConstant  %3  4
%246 = OpTypePointer StorageBuffer %9
%247 = OpTypePointer StorageBuffer %10
%250 = OpTypePointer StorageBuffer %19
%253 = OpTypePointer StorageBuffer %7
%254 = OpTypePointer StorageBuffer %5
%266 = OpTypeVector %5 4
%272 = OpVariable  %218  Output
%275 = OpConstantComposite  %9  %224 %224 %224
%276 = OpConstantComposite  %9  %59 %59 %59
%277 = OpConstantComposite  %9  %61 %61 %61
%278 = OpConstantComposite  %9  %63 %63 %63
%279 = OpConstantComposite  %8  %275 %276 %277 %278
%280 = OpConstantComposite  %17  %36 %36
%281 = OpConstantComposite  %17  %99 %99
%282 = OpConstantComposite  %18  %280 %281
%283 = OpConstantNull  %23
%284 = OpConstantComposite  %31  %224 %224 %224 %224
%292 = OpConstant  %3  33
%293 = OpConstantComposite  %31  %67 %67 %67 %67
%294 = OpConstantComposite  %31  %137 %137 %137 %137
%295 = OpConstantComposite  %34  %293 %294
%54 = OpFunction  %2  None %55
%53 = OpLabel
%82 = OpVariable  %83  Function %58
%84 = OpVariable  %85  Function %66
%57 = OpAccessChain  %56  %44 %36
OpBranch %86
%86 = OpLabel
%87 = OpLoad  %5  %82
%88 = OpISub  %5  %87 %58
OpStore %82 %88
%90 = OpAccessChain  %89  %57 %36
%91 = OpLoad  %21  %90
%93 = OpAccessChain  %92  %57 %36 %36
%94 = OpLoad  %12  %93
%95 = OpLoad  %5  %82
%96 = OpAccessChain  %92  %57 %36 %95
%97 = OpLoad  %12  %96
%100 = OpAccessChain  %98  %57 %36 %36 %99
%101 = OpLoad  %10  %100
%102 = OpLoad  %5  %82
%103 = OpAccessChain  %98  %57 %36 %36 %102
%104 = OpLoad  %10  %103
%105 = OpLoad  %5  %82
%106 = OpAccessChain  %98  %57 %36 %105 %99
%107 = OpLoad  %10  %106
%108 = OpLoad  %5  %82
%109 = OpLoad  %5  %82
%110 = OpAccessChain  %98  %57 %36 %108 %109
%111 = OpLoad  %10  %110
%112 = OpLoad  %5  %82
%113 = OpIAdd  %5  %112 %58
OpStore %82 %113
%115 = OpAccessChain  %114  %84 %36
OpStore %115 %73
%117 = OpAccessChain  %116  %84 %36 %36
OpStore %117 %75
%118 = OpLoad  %5  %82
%119 = OpAccessChain  %116  %84 %36 %118
OpStore %119 %77
%121 = OpAccessChain  %120  %84 %36 %36 %99
OpStore %121 %78
%122 = OpLoad  %5  %82
%123 = OpAccessChain  %120  %84 %36 %36 %122
OpStore %123 %79
%124 = OpLoad  %5  %82
%125 = OpAccessChain  %120  %84 %36 %124 %99
OpStore %125 %80
%126 = OpLoad  %5  %82
%127 = OpLoad  %5  %82
%128 = OpAccessChain  %120  %84 %36 %126 %127
OpStore %128 %81
OpReturn
OpFunctionEnd
%130 = OpFunction  %2  None %55
%129 = OpLabel
%140 = OpVariable  %83  Function %58
%141 = OpVariable  %142  Function %134
%132 = OpAccessChain  %131  %50 %36
OpBranch %143
%143 = OpLabel
%144 = OpLoad  %5  %140
%145 = OpISub  %5  %144 %58
OpStore %140 %145
%147 = OpAccessChain  %146  %132 %36
%148 = OpLoad  %25  %147
%150 = OpAccessChain  %149  %132 %36 %36
%151 = OpLoad  %24  %150
%152 = OpAccessChain  %92  %132 %36 %36 %36
%153 = OpLoad  %12  %152
%154 = OpLoad  %5  %140
%155 = OpAccessChain  %92  %132 %36 %36 %154
%156 = OpLoad  %12  %155
%157 = OpAccessChain  %98  %132 %36 %36 %36 %99
%158 = OpLoad  %10  %157
%159 = OpLoad  %5  %140
%160 = OpAccessChain  %98  %132 %36 %36 %36 %159
%161 = OpLoad  %10  %160
%162 = OpLoad  %5  %140
%163 = OpAccessChain  %98  %132 %36 %36 %162 %99
%164 = OpLoad  %10  %163
%165 = OpLoad  %5  %140
%166 = OpLoad  %5  %140
%167 = OpAccessChain  %98  %132 %36 %36 %165 %166
%168 = OpLoad  %10  %167
%169 = OpLoad  %5  %140
%170 = OpIAdd  %5  %169 %58
OpStore %140 %170
%172 = OpAccessChain  %171  %141 %36
OpStore %172 %133
%174 = OpAccessChain  %173  %141 %36 %36
OpStore %174 %139
%175 = OpAccessChain  %116  %141 %36 %36 %36
OpStore %175 %75
%176 = OpLoad  %5  %140
%177 = OpAccessChain  %116  %141 %36 %36 %176
OpStore %177 %77
%178 = OpAccessChain  %120  %141 %36 %36 %36 %99
OpStore %178 %78
%179 = OpLoad  %5  %140
%180 = OpAccessChain  %120  %141 %36 %36 %36 %179
OpStore %180 %79
%181 = OpLoad  %5  %140
%182 = OpAccessChain  %120  %141 %36 %36 %181 %99
OpStore %182 %80
%183 = OpLoad  %5  %140
%184 = OpLoad  %5  %140
%185 = OpAccessChain  %120  %141 %36 %36 %183 %184
OpStore %185 %81
OpReturn
OpFunctionEnd
%188 = OpFunction  %10  None %189
%187 = OpFunctionParameter  %27
%186 = OpLabel
OpBranch %190
%190 = OpLabel
%191 = OpLoad  %10  %187
OpReturnValue %191
OpFunctionEnd
%194 = OpFunction  %10  None %195
%193 = OpFunctionParameter  %29
%192 = OpLabel
OpBranch %196
%196 = OpLabel
%197 = OpCompositeExtract  %28  %193 4
%198 = OpCompositeExtract  %10  %197 9
OpReturnValue %198
OpFunctionEnd
%201 = OpFunction  %2  None %202
%200 = OpFunctionParameter  %33
%199 = OpLabel
OpBranch %204
%204 = OpLabel
OpStore %200 %203
OpReturn
OpFunctionEnd
%207 = OpFunction  %2  None %208
%206 = OpFunctionParameter  %35
%205 = OpLabel
OpBranch %212
%212 = OpLabel
OpStore %206 %211
OpReturn
OpFunctionEnd
%219 = OpFunction  %2  None %55
%213 = OpLabel
%231 = OpVariable  %27  Function %224
%232 = OpVariable  %233  Function %234
%216 = OpLoad  %3  %214
%220 = OpAccessChain  %56  %44 %36
%222 = OpAccessChain  %221  %47 %36
%223 = OpAccessChain  %131  %50 %36
OpBranch %235
%235 = OpLabel
%236 = OpLoad  %10  %231
OpStore %231 %59
%237 = OpFunctionCall  %2  %54
%238 = OpFunctionCall  %2  %130
%240 = OpAccessChain  %239  %42 %36
%241 = OpLoad  %8  %240
%244 = OpAccessChain  %242  %42 %243
%245 = OpLoad  %18  %244
%248 = OpAccessChain  %247  %42 %36 %225 %36
%249 = OpLoad  %10  %248
%251 = OpArrayLength  %3  %42 5
%252 = OpISub  %3  %251 %14
%255 = OpAccessChain  %254  %42 %30 %252 %36
%256 = OpLoad  %5  %255
%257 = OpLoad  %23  %222
%258 = OpFunctionCall  %10  %188 %231
%259 = OpConvertFToS  %5  %249
%260 = OpCompositeConstruct  %32  %256 %259 %226 %227 %228
OpStore %232 %260
%261 = OpIAdd  %3  %216 %99
%262 = OpAccessChain  %83  %232 %261
OpStore %262 %229
%263 = OpAccessChain  %83  %232 %216
%264 = OpLoad  %5  %263
%265 = OpFunctionCall  %10  %194 %230
%267 = OpCompositeConstruct  %266  %264 %264 %264 %264
%268 = OpConvertSToF  %31  %267
%269 = OpMatrixTimesVector  %9  %241 %268
%270 = OpCompositeConstruct  %31  %269 %61
OpStore %217 %270
OpReturn
OpFunctionEnd
%273 = OpFunction  %2  None %55
%271 = OpLabel
%274 = OpAccessChain  %221  %47 %36
OpBranch %285
%285 = OpLabel
%286 = OpAccessChain  %247  %42 %36 %99 %14
OpStore %286 %59
%287 = OpAccessChain  %239  %42 %36
OpStore %287 %279
%288 = OpAccessChain  %242  %42 %243
OpStore %288 %282
%289 = OpAccessChain  %254  %42 %30 %99 %36
OpStore %289 %58
OpStore %274 %283
OpStore %272 %284
OpReturn
OpFunctionEnd
%291 = OpFunction  %2  None %55
%290 = OpLabel
%296 = OpVariable  %33  Function %292
%297 = OpVariable  %35  Function %295
OpBranch %298
%298 = OpLabel
%299 = OpFunctionCall  %2  %201 %296
%300 = OpFunctionCall  %2  %207 %297
OpReturn
OpFunctionEnd