; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 172
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %93 "main" %116
OpExecutionMode %93 LocalSize 1 1 1
OpDecorate %5 ArrayStride 4
OpMemberDecorate %9 0 Offset 0
OpMemberDecorate %9 1 Offset 12
OpDecorate %11 ArrayStride 8
OpDecorate %13 ArrayStride 16
OpDecorate %17 ArrayStride 32
OpDecorate %19 ArrayStride 64
OpDecorate %21 ArrayStride 32
OpDecorate %22 ArrayStride 64
OpDecorate %30 DescriptorSet 0
OpDecorate %30 Binding 1
OpDecorate %31 Block
OpMemberDecorate %31 0 Offset 0
OpDecorate %33 NonWritable
OpDecorate %33 DescriptorSet 0
OpDecorate %33 Binding 2
OpDecorate %34 Block
OpMemberDecorate %34 0 Offset 0
OpDecorate %36 DescriptorSet 0
OpDecorate %36 Binding 3
OpDecorate %37 Block
OpMemberDecorate %37 0 Offset 0
OpDecorate %39 DescriptorSet 0
OpDecorate %39 Binding 4
OpDecorate %40 Block
OpMemberDecorate %40 0 Offset 0
OpDecorate %42 DescriptorSet 0
OpDecorate %42 Binding 5
OpDecorate %43 Block
OpMemberDecorate %43 0 Offset 0
OpMemberDecorate %43 0 ColMajor
OpMemberDecorate %43 0 MatrixStride 8
OpDecorate %45 DescriptorSet 0
OpDecorate %45 Binding 6
OpDecorate %46 Block
OpMemberDecorate %46 0 Offset 0
OpMemberDecorate %46 0 ColMajor
OpMemberDecorate %46 0 MatrixStride 16
OpDecorate %48 DescriptorSet 0
OpDecorate %48 Binding 7
OpDecorate %49 Block
OpMemberDecorate %49 0 Offset 0
OpMemberDecorate %49 0 ColMajor
OpMemberDecorate %49 0 MatrixStride 8
OpDecorate %116 BuiltIn LocalInvocationId
%2 = OpTypeVoid
%3 = OpTypeBool
%4 = OpTypeFloat 32
%7 = OpTypeInt 32 0
%6 = OpConstant  %7  10
%5 = OpTypeArray %4 %6
%8 = OpTypeVector %4 3
%9 = OpTypeStruct %8 %4
%10 = OpTypeVector %4 2
%11 = OpTypeRuntimeArray %10
%12 = OpTypeVector %4 4
%14 = OpConstant  %7  20
%13 = OpTypeArray %12 %14
%15 = OpTypeMatrix %10 3
%16 = OpTypeMatrix %12 2
%18 = OpConstant  %7  2
%17 = OpTypeArray %16 %18
%19 = OpTypeArray %17 %18
%20 = OpTypeMatrix %10 4
%21 = OpTypeArray %20 %18
%22 = OpTypeArray %21 %18
%23 = OpTypeInt 32 1
%24 = OpTypeMatrix %8 3
%25 = OpConstantTrue  %3
%27 = OpTypePointer Workgroup %5
%26 = OpVariable  %27  Workgroup
%29 = OpTypePointer Workgroup %7
%28 = OpVariable  %29  Workgroup
%31 = OpTypeStruct %9
%32 = OpTypePointer StorageBuffer %31
%30 = OpVariable  %32  StorageBuffer
%34 = OpTypeStruct %11
%35 = OpTypePointer StorageBuffer %34
%33 = OpVariable  %35  StorageBuffer
%37 = OpTypeStruct %13
%38 = OpTypePointer Uniform %37
%36 = OpVariable  %38  Uniform
%40 = OpTypeStruct %8
%41 = OpTypePointer Uniform %40
%39 = OpVariable  %41  Uniform
%43 = OpTypeStruct %15
%44 = OpTypePointer Uniform %43
%42 = OpVariable  %44  Uniform
%46 = OpTypeStruct %19
%47 = OpTypePointer Uniform %46
%45 = OpVariable  %47  Uniform
%49 = OpTypeStruct %22
%50 = OpTypePointer Uniform %49
%48 = OpVariable  %50  Uniform
%54 = OpTypeFunction %2 %8
%58 = OpTypeFunction %2
%59 = OpTypePointer StorageBuffer %9
%60 = OpConstant  %7  0
%62 = OpConstant  %4  1.0
%63 = OpConstantComposite  %8  %62 %62 %62
%64 = OpConstant  %23  1
%65 = OpConstant  %4  2.0
%66 = OpConstant  %4  3.0
%67 = OpConstantNull  %24
%69 = OpTypePointer Function %23
%71 = OpTypePointer StorageBuffer %8
%73 = OpTypePointer StorageBuffer %4
%95 = OpTypePointer StorageBuffer %11
%97 = OpTypePointer Uniform %13
%99 = OpTypePointer Uniform %8
%101 = OpTypePointer Uniform %15
%103 = OpTypePointer Uniform %19
%105 = OpTypePointer Uniform %22
%107 = OpConstant  %4  4.0
%109 = OpTypePointer Function %4
%111 = OpTypePointer Function %3
%113 = OpConstantNull  %5
%114 = OpConstantNull  %7
%115 = OpTypeVector %7 3
%117 = OpTypePointer Input %115
%116 = OpVariable  %117  Input
%119 = OpConstantNull  %115
%120 = OpTypeVector %3 3
%125 = OpConstant  %7  264
%128 = OpTypePointer Workgroup %4
%129 = OpTypePointer Uniform %21
%130 = OpTypePointer Uniform %20
%133 = OpTypePointer Uniform %17
%134 = OpTypePointer Uniform %16
%135 = OpTypePointer Uniform %12
%140 = OpConstant  %7  7
%146 = OpConstant  %7  6
%148 = OpTypePointer StorageBuffer %10
%149 = OpConstant  %7  1
%152 = OpConstant  %7  5
%154 = OpTypePointer Uniform %4
%155 = OpConstant  %7  3
%158 = OpConstant  %7  4
%170 = OpConstant  %23  2
%171 = OpConstant  %7  256
%53 = OpFunction  %2  None %54
%52 = OpFunctionParameter  %8
%51 = OpLabel
OpBranch %55
%55 = OpLabel
OpReturn
OpFunctionEnd
%57 = OpFunction  %2  None %58
%56 = OpLabel
%68 = OpVariable  %69  Function %64
%61 = OpAccessChain  %59  %30 %60
OpBranch %70
%70 = OpLabel
%72 = OpAccessChain  %71  %61 %60
OpStore %72 %63
%74 = OpAccessChain  %73  %61 %60 %60
OpStore %74 %62
%75 = OpAccessChain  %73  %61 %60 %60
OpStore %75 %65
%76 = OpLoad  %23  %68
%77 = OpAccessChain  %73  %61 %60 %76
OpStore %77 %66
%78 = OpLoad  %9  %61
%79 = OpCompositeExtract  %8  %78 0
%80 = OpCompositeExtract  %8  %78 0
%81 = OpVectorShuffle  %10  %80 %80 2 0
%82 = OpCompositeExtract  %8  %78 0
%83 = OpFunctionCall  %2  %53 %82
%84 = OpCompositeExtract  %8  %78 0
%85 = OpVectorTimesMatrix  %8  %84 %67
%86 = OpCompositeExtract  %8  %78 0
%87 = OpMatrixTimesVector  %8  %67 %86
%88 = OpCompositeExtract  %8  %78 0
%89 = OpVectorTimesScalar  %8  %88 %65
%90 = OpCompositeExtract  %8  %78 0
%91 = OpVectorTimesScalar  %8  %90 %65
OpReturn
OpFunctionEnd
%93 = OpFunction  %2  None %58
%92 = OpLabel
%108 = OpVariable  %109  Function %62
%110 = OpVariable  %111  Function %25
%94 = OpAccessChain  %59  %30 %60
%96 = OpAccessChain  %95  %33 %60
%98 = OpAccessChain  %97  %36 %60
%100 = OpAccessChain  %99  %39 %60
%102 = OpAccessChain  %101  %42 %60
%104 = OpAccessChain  %103  %45 %60
%106 = OpAccessChain  %105  %48 %60
OpBranch %112
%112 = OpLabel
%118 = OpLoad  %115  %116
%121 = OpIEqual  %120  %118 %119
%122 = OpAll  %3  %121
OpSelectionMerge %123 None
OpBranchConditional %122 %124 %123
%124 = OpLabel
OpStore %26 %113
OpStore %28 %114
OpBranch %123
%123 = OpLabel
OpControlBarrier %18 %18 %125
OpBranch %126
%126 = OpLabel
%127 = OpFunctionCall  %2  %57
%131 = OpAccessChain  %130  %106 %60 %60
%132 = OpLoad  %20  %131
%136 = OpAccessChain  %135  %104 %60 %60 %60
%137 = OpLoad  %12  %136
%138 = OpMatrixTimesVector  %10  %132 %137
%139 = OpCompositeExtract  %4  %138 0
%141 = OpAccessChain  %128  %26 %140
OpStore %141 %139
%142 = OpLoad  %15  %102
%143 = OpLoad  %8  %100
%144 = OpMatrixTimesVector  %10  %142 %143
%145 = OpCompositeExtract  %4  %144 0
%147 = OpAccessChain  %128  %26 %146
OpStore %147 %145
%150 = OpAccessChain  %73  %96 %149 %149
%151 = OpLoad  %4  %150
%153 = OpAccessChain  %128  %26 %152
OpStore %153 %151
%156 = OpAccessChain  %154  %98 %60 %155
%157 = OpLoad  %4  %156
%159 = OpAccessChain  %128  %26 %158
OpStore %159 %157
%160 = OpAccessChain  %73  %94 %149
%161 = OpLoad  %4  %160
%162 = OpAccessChain  %128  %26 %155
OpStore %162 %161
%163 = OpAccessChain  %73  %94 %60 %60
%164 = OpLoad  %4  %163
%165 = OpAccessChain  %128  %26 %18
OpStore %165 %164
%166 = OpAccessChain  %73  %94 %149
OpStore %166 %107
%167 = OpArrayLength  %7  %33 0
%168 = OpConvertUToF  %4  %167
%169 = OpAccessChain  %128  %26 %149
OpStore %169 %168
OpAtomicStore %28 %170 %171 %18
OpReturn
OpFunctionEnd