This commit is contained in:
John Kessenich 2018-07-20 17:13:19 -06:00
Родитель 81793ad2a3 5a7321eb03
Коммит fa4952c31c
3 изменённых файлов: 241 добавлений и 265 удалений

Просмотреть файл

@ -2031,7 +2031,37 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector<Id>&
Instruction* instr = module.getInstruction(componentTypeId);
Id bitCount = instr->getIdOperand(0);
// Will use a two step process
// Optimize matrix constructed from a bigger matrix
if (isMatrix(sources[0]) && getNumColumns(sources[0]) >= numCols && getNumRows(sources[0]) >= numRows) {
// To truncate the matrix to a smaller number of rows/columns, we need to:
// 1. For each column, extract the column and truncate it to the required size using shuffle
// 2. Assemble the resulting matrix from all columns
Id matrix = sources[0];
Id columnTypeId = getContainedTypeId(resultTypeId);
Id sourceColumnTypeId = getContainedTypeId(getTypeId(matrix));
std::vector<unsigned> channels;
for (int row = 0; row < numRows; ++row)
channels.push_back(row);
std::vector<Id> matrixColumns;
for (int col = 0; col < numCols; ++col) {
std::vector<unsigned> indexes;
indexes.push_back(col);
Id colv = createCompositeExtract(matrix, sourceColumnTypeId, indexes);
setPrecision(colv, precision);
if (numRows != getNumRows(matrix)) {
matrixColumns.push_back(createRvalueSwizzle(precision, columnTypeId, colv, channels));
} else {
matrixColumns.push_back(colv);
}
}
return setPrecision(createCompositeConstruct(resultTypeId, matrixColumns), precision);
}
// Otherwise, will use a two step process
// 1. make a compile-time 2D array of values
// 2. construct a matrix from that array

Просмотреть файл

@ -251,12 +251,12 @@ Shader version: 500
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 106
// Id's are bound by 93
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 87 91 99 103
EntryPoint Vertex 4 "main" 74 78 86 90
Source HLSL 500
Name 4 "main"
Name 9 "VS_INPUT"
@ -274,13 +274,13 @@ Shader version: 500
MemberName 28(C) 1 "View"
MemberName 28(C) 2 "Projection"
Name 30 ""
Name 85 "input"
Name 87 "input.Pos"
Name 91 "input.Norm"
Name 94 "flattenTemp"
Name 95 "param"
Name 99 "@entryPointOutput.Pos"
Name 103 "@entryPointOutput.Norm"
Name 72 "input"
Name 74 "input.Pos"
Name 78 "input.Norm"
Name 81 "flattenTemp"
Name 82 "param"
Name 86 "@entryPointOutput.Pos"
Name 90 "@entryPointOutput.Norm"
MemberDecorate 28(C) 0 RowMajor
MemberDecorate 28(C) 0 Offset 0
MemberDecorate 28(C) 0 MatrixStride 16
@ -293,10 +293,10 @@ Shader version: 500
Decorate 28(C) Block
Decorate 30 DescriptorSet 0
Decorate 30 Binding 0
Decorate 87(input.Pos) Location 0
Decorate 91(input.Norm) Location 1
Decorate 99(@entryPointOutput.Pos) BuiltIn Position
Decorate 103(@entryPointOutput.Norm) Location 0
Decorate 74(input.Pos) Location 0
Decorate 78(input.Norm) Location 1
Decorate 86(@entryPointOutput.Pos) BuiltIn Position
Decorate 90(@entryPointOutput.Norm) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@ -324,37 +324,36 @@ Shader version: 500
39: 16(int) Constant 1
46: 16(int) Constant 2
55: TypeMatrix 7(fvec4) 3
56: 6(float) Constant 1065353216
73: TypePointer Function 8(fvec3)
86: TypePointer Input 7(fvec4)
87(input.Pos): 86(ptr) Variable Input
90: TypePointer Input 8(fvec3)
91(input.Norm): 90(ptr) Variable Input
98: TypePointer Output 7(fvec4)
99(@entryPointOutput.Pos): 98(ptr) Variable Output
102: TypePointer Output 8(fvec3)
103(@entryPointOutput.Norm): 102(ptr) Variable Output
60: TypePointer Function 8(fvec3)
73: TypePointer Input 7(fvec4)
74(input.Pos): 73(ptr) Variable Input
77: TypePointer Input 8(fvec3)
78(input.Norm): 77(ptr) Variable Input
85: TypePointer Output 7(fvec4)
86(@entryPointOutput.Pos): 85(ptr) Variable Output
89: TypePointer Output 8(fvec3)
90(@entryPointOutput.Norm): 89(ptr) Variable Output
4(main): 2 Function None 3
5: Label
85(input): 10(ptr) Variable Function
94(flattenTemp): 20(ptr) Variable Function
95(param): 10(ptr) Variable Function
88: 7(fvec4) Load 87(input.Pos)
89: 34(ptr) AccessChain 85(input) 26
Store 89 88
92: 8(fvec3) Load 91(input.Norm)
93: 73(ptr) AccessChain 85(input) 39
Store 93 92
96: 9(VS_INPUT) Load 85(input)
Store 95(param) 96
97:11(PS_INPUT) FunctionCall 14(@main(struct-VS_INPUT-vf4-vf31;) 95(param)
Store 94(flattenTemp) 97
100: 34(ptr) AccessChain 94(flattenTemp) 26
101: 7(fvec4) Load 100
Store 99(@entryPointOutput.Pos) 101
104: 73(ptr) AccessChain 94(flattenTemp) 39
105: 8(fvec3) Load 104
Store 103(@entryPointOutput.Norm) 105
72(input): 10(ptr) Variable Function
81(flattenTemp): 20(ptr) Variable Function
82(param): 10(ptr) Variable Function
75: 7(fvec4) Load 74(input.Pos)
76: 34(ptr) AccessChain 72(input) 26
Store 76 75
79: 8(fvec3) Load 78(input.Norm)
80: 60(ptr) AccessChain 72(input) 39
Store 80 79
83: 9(VS_INPUT) Load 72(input)
Store 82(param) 83
84:11(PS_INPUT) FunctionCall 14(@main(struct-VS_INPUT-vf4-vf31;) 82(param)
Store 81(flattenTemp) 84
87: 34(ptr) AccessChain 81(flattenTemp) 26
88: 7(fvec4) Load 87
Store 86(@entryPointOutput.Pos) 88
91: 60(ptr) AccessChain 81(flattenTemp) 39
92: 8(fvec3) Load 91
Store 90(@entryPointOutput.Norm) 92
Return
FunctionEnd
14(@main(struct-VS_INPUT-vf4-vf31;):11(PS_INPUT) Function None 12
@ -387,31 +386,19 @@ Shader version: 500
Store 52 51
53: 31(ptr) AccessChain 30 26
54: 27 Load 53
57: 6(float) CompositeExtract 54 0 0
58: 6(float) CompositeExtract 54 0 1
59: 6(float) CompositeExtract 54 0 2
60: 6(float) CompositeExtract 54 0 3
61: 6(float) CompositeExtract 54 1 0
62: 6(float) CompositeExtract 54 1 1
63: 6(float) CompositeExtract 54 1 2
64: 6(float) CompositeExtract 54 1 3
65: 6(float) CompositeExtract 54 2 0
66: 6(float) CompositeExtract 54 2 1
67: 6(float) CompositeExtract 54 2 2
68: 6(float) CompositeExtract 54 2 3
69: 7(fvec4) CompositeConstruct 57 58 59 60
70: 7(fvec4) CompositeConstruct 61 62 63 64
71: 7(fvec4) CompositeConstruct 65 66 67 68
72: 55 CompositeConstruct 69 70 71
74: 73(ptr) AccessChain 13(input) 39
75: 8(fvec3) Load 74
76: 7(fvec4) MatrixTimesVector 72 75
77: 6(float) CompositeExtract 76 0
78: 6(float) CompositeExtract 76 1
79: 6(float) CompositeExtract 76 2
80: 8(fvec3) CompositeConstruct 77 78 79
81: 73(ptr) AccessChain 21(output) 39
Store 81 80
82:11(PS_INPUT) Load 21(output)
ReturnValue 82
56: 7(fvec4) CompositeExtract 54 0
57: 7(fvec4) CompositeExtract 54 1
58: 7(fvec4) CompositeExtract 54 2
59: 55 CompositeConstruct 56 57 58
61: 60(ptr) AccessChain 13(input) 39
62: 8(fvec3) Load 61
63: 7(fvec4) MatrixTimesVector 59 62
64: 6(float) CompositeExtract 63 0
65: 6(float) CompositeExtract 63 1
66: 6(float) CompositeExtract 63 2
67: 8(fvec3) CompositeConstruct 64 65 66
68: 60(ptr) AccessChain 21(output) 39
Store 68 67
69:11(PS_INPUT) Load 21(output)
ReturnValue 69
FunctionEnd

Просмотреть файл

@ -384,12 +384,12 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 231
// Id's are bound by 190
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 229
EntryPoint Fragment 4 "main" 188
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@ -408,14 +408,14 @@ gl_FragCoord origin is upper left
Name 23 ""
Name 37 "r01"
Name 49 "r10"
Name 75 "r11"
Name 87 "r20"
Name 110 "r21"
Name 124 "r30"
Name 144 "r31"
Name 162 "r32"
Name 181 "r33"
Name 229 "@entryPointOutput"
Name 61 "r11"
Name 73 "r20"
Name 88 "r21"
Name 102 "r30"
Name 118 "r31"
Name 133 "r32"
Name 146 "r33"
Name 188 "@entryPointOutput"
MemberDecorate 21(Matrix) 0 RowMajor
MemberDecorate 21(Matrix) 0 Offset 0
MemberDecorate 21(Matrix) 0 MatrixStride 16
@ -439,7 +439,7 @@ gl_FragCoord origin is upper left
MemberDecorate 21(Matrix) 8 Offset 352
Decorate 21(Matrix) Block
Decorate 23 DescriptorSet 0
Decorate 229(@entryPointOutput) Location 0
Decorate 188(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@ -467,32 +467,30 @@ gl_FragCoord origin is upper left
48: TypePointer Function 7(fvec4)
50: 24(int) Constant 0
51: TypePointer Uniform 13
54: 6(float) Constant 1065353216
55: 6(float) Constant 0
76: 24(int) Constant 2
77: TypePointer Uniform 16
117: 24(int) Constant 1
118: TypePointer Uniform 15
122: TypeMatrix 14(fvec3) 2
123: TypePointer Function 122
125: 24(int) Constant 3
126: TypePointer Uniform 17
129: 24(int) Constant 4
130: TypePointer Uniform 18
143: TypePointer Function 16
149: TypeMatrix 19(fvec2) 3
161: TypePointer Function 149
163: 24(int) Constant 5
164: TypePointer Uniform 20
180: TypePointer Function 15
209: TypeInt 32 0
210: 209(int) Constant 0
228: TypePointer Output 7(fvec4)
229(@entryPointOutput): 228(ptr) Variable Output
62: 24(int) Constant 2
63: TypePointer Uniform 16
95: 24(int) Constant 1
96: TypePointer Uniform 15
100: TypeMatrix 14(fvec3) 2
101: TypePointer Function 100
103: 24(int) Constant 3
104: TypePointer Uniform 17
107: 24(int) Constant 4
108: TypePointer Uniform 18
117: TypePointer Function 16
123: TypeMatrix 19(fvec2) 3
132: TypePointer Function 123
134: 24(int) Constant 5
135: TypePointer Uniform 20
145: TypePointer Function 15
168: TypeInt 32 0
169: 168(int) Constant 0
187: TypePointer Output 7(fvec4)
188(@entryPointOutput): 187(ptr) Variable Output
4(main): 2 Function None 3
5: Label
230: 7(fvec4) FunctionCall 9(@main()
Store 229(@entryPointOutput) 230
189: 7(fvec4) FunctionCall 9(@main()
Store 188(@entryPointOutput) 189
Return
FunctionEnd
9(@main(): 7(fvec4) Function None 8
@ -500,13 +498,13 @@ gl_FragCoord origin is upper left
12(r00): 11(ptr) Variable Function
37(r01): 11(ptr) Variable Function
49(r10): 48(ptr) Variable Function
75(r11): 48(ptr) Variable Function
87(r20): 48(ptr) Variable Function
110(r21): 48(ptr) Variable Function
124(r30): 123(ptr) Variable Function
144(r31): 143(ptr) Variable Function
162(r32): 161(ptr) Variable Function
181(r33): 180(ptr) Variable Function
61(r11): 48(ptr) Variable Function
73(r20): 48(ptr) Variable Function
88(r21): 48(ptr) Variable Function
102(r30): 101(ptr) Variable Function
118(r31): 117(ptr) Variable Function
133(r32): 132(ptr) Variable Function
146(r33): 145(ptr) Variable Function
27: 26(ptr) AccessChain 23 25
28: 19(fvec2) Load 27
31: 30(ptr) AccessChain 23 29
@ -527,158 +525,119 @@ gl_FragCoord origin is upper left
Store 37(r01) 47
52: 51(ptr) AccessChain 23 50
53: 13 Load 52
56: 6(float) CompositeExtract 53 0 0
57: 6(float) CompositeExtract 53 0 1
58: 6(float) CompositeExtract 53 0 2
59: 6(float) CompositeExtract 53 0 3
60: 6(float) CompositeExtract 53 1 0
61: 6(float) CompositeExtract 53 1 1
62: 6(float) CompositeExtract 53 1 2
63: 6(float) CompositeExtract 53 1 3
64: 6(float) CompositeExtract 53 2 0
65: 6(float) CompositeExtract 53 2 1
66: 6(float) CompositeExtract 53 2 2
67: 6(float) CompositeExtract 53 2 3
68: 7(fvec4) CompositeConstruct 56 57 58 59
69: 7(fvec4) CompositeConstruct 60 61 62 63
70: 7(fvec4) CompositeConstruct 64 65 66 67
71: 16 CompositeConstruct 68 69 70
72: 30(ptr) AccessChain 23 29
73: 14(fvec3) Load 72
74: 7(fvec4) MatrixTimesVector 71 73
Store 49(r10) 74
78: 77(ptr) AccessChain 23 76
79: 16 Load 78
80: 39(ptr) AccessChain 23 38
81: 7(fvec4) Load 80
82: 6(float) CompositeExtract 81 0
83: 6(float) CompositeExtract 81 1
84: 6(float) CompositeExtract 81 2
85: 14(fvec3) CompositeConstruct 82 83 84
86: 7(fvec4) MatrixTimesVector 79 85
Store 75(r11) 86
88: 30(ptr) AccessChain 23 29
89: 14(fvec3) Load 88
90: 51(ptr) AccessChain 23 50
91: 13 Load 90
92: 6(float) CompositeExtract 91 0 0
93: 6(float) CompositeExtract 91 0 1
94: 6(float) CompositeExtract 91 0 2
95: 6(float) CompositeExtract 91 1 0
96: 6(float) CompositeExtract 91 1 1
97: 6(float) CompositeExtract 91 1 2
98: 6(float) CompositeExtract 91 2 0
99: 6(float) CompositeExtract 91 2 1
100: 6(float) CompositeExtract 91 2 2
101: 6(float) CompositeExtract 91 3 0
102: 6(float) CompositeExtract 91 3 1
103: 6(float) CompositeExtract 91 3 2
104: 14(fvec3) CompositeConstruct 92 93 94
105: 14(fvec3) CompositeConstruct 95 96 97
106: 14(fvec3) CompositeConstruct 98 99 100
107: 14(fvec3) CompositeConstruct 101 102 103
108: 15 CompositeConstruct 104 105 106 107
109: 7(fvec4) VectorTimesMatrix 89 108
Store 87(r20) 109
111: 39(ptr) AccessChain 23 38
112: 7(fvec4) Load 111
113: 6(float) CompositeExtract 112 0
114: 6(float) CompositeExtract 112 1
115: 6(float) CompositeExtract 112 2
116: 14(fvec3) CompositeConstruct 113 114 115
119: 118(ptr) AccessChain 23 117
120: 15 Load 119
121: 7(fvec4) VectorTimesMatrix 116 120
Store 110(r21) 121
127: 126(ptr) AccessChain 23 125
128: 17 Load 127
131: 130(ptr) AccessChain 23 129
132: 18 Load 131
133: 6(float) CompositeExtract 132 0 0
134: 6(float) CompositeExtract 132 0 1
135: 6(float) CompositeExtract 132 0 2
136: 6(float) CompositeExtract 132 1 0
137: 6(float) CompositeExtract 132 1 1
138: 6(float) CompositeExtract 132 1 2
139: 14(fvec3) CompositeConstruct 133 134 135
140: 14(fvec3) CompositeConstruct 136 137 138
141: 122 CompositeConstruct 139 140
142: 122 MatrixTimesMatrix 128 141
Store 124(r30) 142
145: 130(ptr) AccessChain 23 129
146: 18 Load 145
147: 126(ptr) AccessChain 23 125
54: 7(fvec4) CompositeExtract 53 0
55: 7(fvec4) CompositeExtract 53 1
56: 7(fvec4) CompositeExtract 53 2
57: 16 CompositeConstruct 54 55 56
58: 30(ptr) AccessChain 23 29
59: 14(fvec3) Load 58
60: 7(fvec4) MatrixTimesVector 57 59
Store 49(r10) 60
64: 63(ptr) AccessChain 23 62
65: 16 Load 64
66: 39(ptr) AccessChain 23 38
67: 7(fvec4) Load 66
68: 6(float) CompositeExtract 67 0
69: 6(float) CompositeExtract 67 1
70: 6(float) CompositeExtract 67 2
71: 14(fvec3) CompositeConstruct 68 69 70
72: 7(fvec4) MatrixTimesVector 65 71
Store 61(r11) 72
74: 30(ptr) AccessChain 23 29
75: 14(fvec3) Load 74
76: 51(ptr) AccessChain 23 50
77: 13 Load 76
78: 7(fvec4) CompositeExtract 77 0
79: 14(fvec3) VectorShuffle 78 78 0 1 2
80: 7(fvec4) CompositeExtract 77 1
81: 14(fvec3) VectorShuffle 80 80 0 1 2
82: 7(fvec4) CompositeExtract 77 2
83: 14(fvec3) VectorShuffle 82 82 0 1 2
84: 7(fvec4) CompositeExtract 77 3
85: 14(fvec3) VectorShuffle 84 84 0 1 2
86: 15 CompositeConstruct 79 81 83 85
87: 7(fvec4) VectorTimesMatrix 75 86
Store 73(r20) 87
89: 39(ptr) AccessChain 23 38
90: 7(fvec4) Load 89
91: 6(float) CompositeExtract 90 0
92: 6(float) CompositeExtract 90 1
93: 6(float) CompositeExtract 90 2
94: 14(fvec3) CompositeConstruct 91 92 93
97: 96(ptr) AccessChain 23 95
98: 15 Load 97
99: 7(fvec4) VectorTimesMatrix 94 98
Store 88(r21) 99
105: 104(ptr) AccessChain 23 103
106: 17 Load 105
109: 108(ptr) AccessChain 23 107
110: 18 Load 109
111: 7(fvec4) CompositeExtract 110 0
112: 14(fvec3) VectorShuffle 111 111 0 1 2
113: 7(fvec4) CompositeExtract 110 1
114: 14(fvec3) VectorShuffle 113 113 0 1 2
115: 100 CompositeConstruct 112 114
116: 100 MatrixTimesMatrix 106 115
Store 102(r30) 116
119: 108(ptr) AccessChain 23 107
120: 18 Load 119
121: 104(ptr) AccessChain 23 103
122: 17 Load 121
124: 14(fvec3) CompositeExtract 122 0
125: 19(fvec2) VectorShuffle 124 124 0 1
126: 14(fvec3) CompositeExtract 122 1
127: 19(fvec2) VectorShuffle 126 126 0 1
128: 14(fvec3) CompositeExtract 122 2
129: 19(fvec2) VectorShuffle 128 128 0 1
130: 123 CompositeConstruct 125 127 129
131: 16 MatrixTimesMatrix 120 130
Store 118(r31) 131
136: 135(ptr) AccessChain 23 134
137: 20 Load 136
138: 19(fvec2) CompositeExtract 137 0
139: 19(fvec2) CompositeExtract 137 1
140: 19(fvec2) CompositeExtract 137 2
141: 123 CompositeConstruct 138 139 140
142: 104(ptr) AccessChain 23 103
143: 17 Load 142
144: 123 MatrixTimesMatrix 141 143
Store 133(r32) 144
147: 104(ptr) AccessChain 23 103
148: 17 Load 147
150: 6(float) CompositeExtract 148 0 0
151: 6(float) CompositeExtract 148 0 1
152: 6(float) CompositeExtract 148 1 0
153: 6(float) CompositeExtract 148 1 1
154: 6(float) CompositeExtract 148 2 0
155: 6(float) CompositeExtract 148 2 1
156: 19(fvec2) CompositeConstruct 150 151
157: 19(fvec2) CompositeConstruct 152 153
158: 19(fvec2) CompositeConstruct 154 155
159: 149 CompositeConstruct 156 157 158
160: 16 MatrixTimesMatrix 146 159
Store 144(r31) 160
165: 164(ptr) AccessChain 23 163
166: 20 Load 165
167: 6(float) CompositeExtract 166 0 0
168: 6(float) CompositeExtract 166 0 1
169: 6(float) CompositeExtract 166 1 0
170: 6(float) CompositeExtract 166 1 1
171: 6(float) CompositeExtract 166 2 0
172: 6(float) CompositeExtract 166 2 1
173: 19(fvec2) CompositeConstruct 167 168
174: 19(fvec2) CompositeConstruct 169 170
175: 19(fvec2) CompositeConstruct 171 172
176: 149 CompositeConstruct 173 174 175
177: 126(ptr) AccessChain 23 125
178: 17 Load 177
179: 149 MatrixTimesMatrix 176 178
Store 162(r32) 179
182: 126(ptr) AccessChain 23 125
183: 17 Load 182
184: 6(float) CompositeExtract 183 0 0
185: 6(float) CompositeExtract 183 0 1
186: 6(float) CompositeExtract 183 0 2
187: 6(float) CompositeExtract 183 1 0
188: 6(float) CompositeExtract 183 1 1
189: 6(float) CompositeExtract 183 1 2
190: 14(fvec3) CompositeConstruct 184 185 186
191: 14(fvec3) CompositeConstruct 187 188 189
192: 122 CompositeConstruct 190 191
193: 164(ptr) AccessChain 23 163
194: 20 Load 193
195: 15 MatrixTimesMatrix 192 194
Store 181(r33) 195
196: 7(fvec4) Load 49(r10)
197: 7(fvec4) Load 75(r11)
198: 7(fvec4) FAdd 196 197
199: 7(fvec4) Load 87(r20)
200: 7(fvec4) FAdd 198 199
201: 7(fvec4) Load 110(r21)
202: 7(fvec4) FAdd 200 201
203: 6(float) Load 12(r00)
204: 7(fvec4) CompositeConstruct 203 203 203 203
205: 7(fvec4) FAdd 202 204
206: 6(float) Load 37(r01)
207: 7(fvec4) CompositeConstruct 206 206 206 206
208: 7(fvec4) FAdd 205 207
211: 11(ptr) AccessChain 124(r30) 50 210
212: 6(float) Load 211
213: 7(fvec4) CompositeConstruct 212 212 212 212
214: 7(fvec4) FAdd 208 213
215: 48(ptr) AccessChain 144(r31) 50
216: 7(fvec4) Load 215
217: 7(fvec4) FAdd 214 216
218: 11(ptr) AccessChain 162(r32) 50 210
219: 6(float) Load 218
220: 7(fvec4) CompositeConstruct 219 219 219 219
221: 7(fvec4) FAdd 217 220
222: 15 Load 181(r33)
223: 16 Transpose 222
224: 7(fvec4) CompositeExtract 223 0
225: 7(fvec4) FAdd 221 224
ReturnValue 225
149: 14(fvec3) CompositeExtract 148 0
150: 14(fvec3) CompositeExtract 148 1
151: 100 CompositeConstruct 149 150
152: 135(ptr) AccessChain 23 134
153: 20 Load 152
154: 15 MatrixTimesMatrix 151 153
Store 146(r33) 154
155: 7(fvec4) Load 49(r10)
156: 7(fvec4) Load 61(r11)
157: 7(fvec4) FAdd 155 156
158: 7(fvec4) Load 73(r20)
159: 7(fvec4) FAdd 157 158
160: 7(fvec4) Load 88(r21)
161: 7(fvec4) FAdd 159 160
162: 6(float) Load 12(r00)
163: 7(fvec4) CompositeConstruct 162 162 162 162
164: 7(fvec4) FAdd 161 163
165: 6(float) Load 37(r01)
166: 7(fvec4) CompositeConstruct 165 165 165 165
167: 7(fvec4) FAdd 164 166
170: 11(ptr) AccessChain 102(r30) 50 169
171: 6(float) Load 170
172: 7(fvec4) CompositeConstruct 171 171 171 171
173: 7(fvec4) FAdd 167 172
174: 48(ptr) AccessChain 118(r31) 50
175: 7(fvec4) Load 174
176: 7(fvec4) FAdd 173 175
177: 11(ptr) AccessChain 133(r32) 50 169
178: 6(float) Load 177
179: 7(fvec4) CompositeConstruct 178 178 178 178
180: 7(fvec4) FAdd 176 179
181: 15 Load 146(r33)
182: 16 Transpose 181
183: 7(fvec4) CompositeExtract 182 0
184: 7(fvec4) FAdd 180 183
ReturnValue 184
FunctionEnd