xref: /aosp_15_r20/external/skia/tests/sksl/shared/VectorToMatrixCast.asm.frag (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1               OpCapability Shader
2          %1 = OpExtInstImport "GLSL.std.450"
3               OpMemoryModel Logical GLSL450
4               OpEntryPoint Fragment %_entrypoint_v "_entrypoint" %sk_FragColor
5               OpExecutionMode %_entrypoint_v OriginUpperLeft
6               OpName %sk_FragColor "sk_FragColor"
7               OpName %_UniformBuffer "_UniformBuffer"
8               OpMemberName %_UniformBuffer 0 "colorGreen"
9               OpMemberName %_UniformBuffer 1 "colorRed"
10               OpMemberName %_UniformBuffer 2 "testInputs"
11               OpName %_entrypoint_v "_entrypoint_v"
12               OpName %main "main"
13               OpName %ok "ok"
14               OpDecorate %sk_FragColor RelaxedPrecision
15               OpDecorate %sk_FragColor Location 0
16               OpDecorate %sk_FragColor Index 0
17               OpMemberDecorate %_UniformBuffer 0 Offset 0
18               OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
19               OpMemberDecorate %_UniformBuffer 1 Offset 16
20               OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
21               OpMemberDecorate %_UniformBuffer 2 Offset 32
22               OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
23               OpDecorate %_UniformBuffer Block
24               OpDecorate %7 Binding 0
25               OpDecorate %7 DescriptorSet 0
26               OpDecorate %34 RelaxedPrecision
27               OpDecorate %35 RelaxedPrecision
28               OpDecorate %36 RelaxedPrecision
29               OpDecorate %37 RelaxedPrecision
30               OpDecorate %38 RelaxedPrecision
31               OpDecorate %39 RelaxedPrecision
32               OpDecorate %40 RelaxedPrecision
33               OpDecorate %42 RelaxedPrecision
34               OpDecorate %50 RelaxedPrecision
35               OpDecorate %52 RelaxedPrecision
36               OpDecorate %59 RelaxedPrecision
37               OpDecorate %77 RelaxedPrecision
38               OpDecorate %78 RelaxedPrecision
39               OpDecorate %79 RelaxedPrecision
40               OpDecorate %80 RelaxedPrecision
41               OpDecorate %81 RelaxedPrecision
42               OpDecorate %82 RelaxedPrecision
43               OpDecorate %83 RelaxedPrecision
44               OpDecorate %84 RelaxedPrecision
45               OpDecorate %88 RelaxedPrecision
46               OpDecorate %90 RelaxedPrecision
47               OpDecorate %97 RelaxedPrecision
48               OpDecorate %98 RelaxedPrecision
49               OpDecorate %99 RelaxedPrecision
50               OpDecorate %100 RelaxedPrecision
51               OpDecorate %101 RelaxedPrecision
52               OpDecorate %102 RelaxedPrecision
53               OpDecorate %103 RelaxedPrecision
54               OpDecorate %104 RelaxedPrecision
55               OpDecorate %105 RelaxedPrecision
56               OpDecorate %107 RelaxedPrecision
57               OpDecorate %114 RelaxedPrecision
58               OpDecorate %115 RelaxedPrecision
59               OpDecorate %117 RelaxedPrecision
60               OpDecorate %119 RelaxedPrecision
61               OpDecorate %121 RelaxedPrecision
62               OpDecorate %126 RelaxedPrecision
63               OpDecorate %128 RelaxedPrecision
64               OpDecorate %130 RelaxedPrecision
65               OpDecorate %132 RelaxedPrecision
66               OpDecorate %133 RelaxedPrecision
67               OpDecorate %134 RelaxedPrecision
68               OpDecorate %135 RelaxedPrecision
69               OpDecorate %136 RelaxedPrecision
70               OpDecorate %137 RelaxedPrecision
71               OpDecorate %138 RelaxedPrecision
72               OpDecorate %139 RelaxedPrecision
73               OpDecorate %140 RelaxedPrecision
74               OpDecorate %141 RelaxedPrecision
75               OpDecorate %143 RelaxedPrecision
76               OpDecorate %150 RelaxedPrecision
77               OpDecorate %151 RelaxedPrecision
78               OpDecorate %152 RelaxedPrecision
79               OpDecorate %153 RelaxedPrecision
80               OpDecorate %154 RelaxedPrecision
81               OpDecorate %155 RelaxedPrecision
82               OpDecorate %156 RelaxedPrecision
83               OpDecorate %157 RelaxedPrecision
84               OpDecorate %158 RelaxedPrecision
85               OpDecorate %160 RelaxedPrecision
86               OpDecorate %167 RelaxedPrecision
87               OpDecorate %168 RelaxedPrecision
88               OpDecorate %169 RelaxedPrecision
89               OpDecorate %170 RelaxedPrecision
90               OpDecorate %171 RelaxedPrecision
91               OpDecorate %172 RelaxedPrecision
92               OpDecorate %173 RelaxedPrecision
93               OpDecorate %174 RelaxedPrecision
94               OpDecorate %175 RelaxedPrecision
95               OpDecorate %177 RelaxedPrecision
96               OpDecorate %184 RelaxedPrecision
97               OpDecorate %185 RelaxedPrecision
98               OpDecorate %187 RelaxedPrecision
99               OpDecorate %189 RelaxedPrecision
100               OpDecorate %191 RelaxedPrecision
101               OpDecorate %196 RelaxedPrecision
102               OpDecorate %198 RelaxedPrecision
103               OpDecorate %200 RelaxedPrecision
104               OpDecorate %202 RelaxedPrecision
105               OpDecorate %203 RelaxedPrecision
106               OpDecorate %204 RelaxedPrecision
107               OpDecorate %205 RelaxedPrecision
108               OpDecorate %206 RelaxedPrecision
109               OpDecorate %207 RelaxedPrecision
110               OpDecorate %208 RelaxedPrecision
111               OpDecorate %209 RelaxedPrecision
112               OpDecorate %210 RelaxedPrecision
113               OpDecorate %211 RelaxedPrecision
114               OpDecorate %213 RelaxedPrecision
115               OpDecorate %220 RelaxedPrecision
116               OpDecorate %223 RelaxedPrecision
117               OpDecorate %224 RelaxedPrecision
118               OpDecorate %225 RelaxedPrecision
119               OpDecorate %226 RelaxedPrecision
120               OpDecorate %227 RelaxedPrecision
121               OpDecorate %228 RelaxedPrecision
122               OpDecorate %229 RelaxedPrecision
123               OpDecorate %230 RelaxedPrecision
124               OpDecorate %231 RelaxedPrecision
125               OpDecorate %235 RelaxedPrecision
126               OpDecorate %237 RelaxedPrecision
127               OpDecorate %244 RelaxedPrecision
128               OpDecorate %247 RelaxedPrecision
129               OpDecorate %248 RelaxedPrecision
130               OpDecorate %249 RelaxedPrecision
131               OpDecorate %250 RelaxedPrecision
132               OpDecorate %251 RelaxedPrecision
133               OpDecorate %252 RelaxedPrecision
134               OpDecorate %253 RelaxedPrecision
135               OpDecorate %254 RelaxedPrecision
136               OpDecorate %258 RelaxedPrecision
137               OpDecorate %260 RelaxedPrecision
138               OpDecorate %270 RelaxedPrecision
139               OpDecorate %272 RelaxedPrecision
140               OpDecorate %273 RelaxedPrecision
141      %float = OpTypeFloat 32
142    %v4float = OpTypeVector %float 4
143%_ptr_Output_v4float = OpTypePointer Output %v4float
144%sk_FragColor = OpVariable %_ptr_Output_v4float Output
145%_UniformBuffer = OpTypeStruct %v4float %v4float %v4float
146%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
147          %7 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
148       %void = OpTypeVoid
149         %12 = OpTypeFunction %void
150    %float_0 = OpConstant %float 0
151    %v2float = OpTypeVector %float 2
152         %16 = OpConstantComposite %v2float %float_0 %float_0
153%_ptr_Function_v2float = OpTypePointer Function %v2float
154         %20 = OpTypeFunction %v4float %_ptr_Function_v2float
155       %bool = OpTypeBool
156%_ptr_Function_bool = OpTypePointer Function %bool
157       %true = OpConstantTrue %bool
158      %false = OpConstantFalse %bool
159%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
160        %int = OpTypeInt 32 1
161      %int_2 = OpConstant %int 2
162%mat2v2float = OpTypeMatrix %v2float 2
163%float_n1_25 = OpConstant %float -1.25
164 %float_0_75 = OpConstant %float 0.75
165 %float_2_25 = OpConstant %float 2.25
166         %46 = OpConstantComposite %v2float %float_n1_25 %float_0
167         %47 = OpConstantComposite %v2float %float_0_75 %float_2_25
168         %48 = OpConstantComposite %mat2v2float %46 %47
169     %v2bool = OpTypeVector %bool 2
170      %int_0 = OpConstant %int 0
171    %float_1 = OpConstant %float 1
172         %86 = OpConstantComposite %v2float %float_0 %float_1
173         %87 = OpConstantComposite %mat2v2float %86 %86
174      %v4int = OpTypeVector %int 4
175     %v4bool = OpTypeVector %bool 4
176      %int_1 = OpConstant %int 1
177   %float_n1 = OpConstant %float -1
178        %233 = OpConstantComposite %v2float %float_n1 %float_1
179        %234 = OpConstantComposite %mat2v2float %233 %16
180    %float_5 = OpConstant %float 5
181        %246 = OpConstantComposite %v4float %float_5 %float_5 %float_5 %float_5
182    %float_6 = OpConstant %float 6
183        %256 = OpConstantComposite %v2float %float_5 %float_6
184        %257 = OpConstantComposite %mat2v2float %256 %256
185%_ptr_Function_v4float = OpTypePointer Function %v4float
186%_entrypoint_v = OpFunction %void None %12
187         %13 = OpLabel
188         %17 = OpVariable %_ptr_Function_v2float Function
189               OpStore %17 %16
190         %19 = OpFunctionCall %v4float %main %17
191               OpStore %sk_FragColor %19
192               OpReturn
193               OpFunctionEnd
194       %main = OpFunction %v4float None %20
195         %21 = OpFunctionParameter %_ptr_Function_v2float
196         %22 = OpLabel
197         %ok = OpVariable %_ptr_Function_bool Function
198        %264 = OpVariable %_ptr_Function_v4float Function
199               OpStore %ok %true
200               OpSelectionMerge %29 None
201               OpBranchConditional %true %28 %29
202         %28 = OpLabel
203         %30 = OpAccessChain %_ptr_Uniform_v4float %7 %int_2
204         %34 = OpLoad %v4float %30
205         %35 = OpCompositeExtract %float %34 0
206         %36 = OpCompositeExtract %float %34 1
207         %37 = OpCompositeExtract %float %34 2
208         %38 = OpCompositeExtract %float %34 3
209         %39 = OpCompositeConstruct %v2float %35 %36
210         %40 = OpCompositeConstruct %v2float %37 %38
211         %42 = OpCompositeConstruct %mat2v2float %39 %40
212         %50 = OpFOrdEqual %v2bool %39 %46
213         %51 = OpAll %bool %50
214         %52 = OpFOrdEqual %v2bool %40 %47
215         %53 = OpAll %bool %52
216         %54 = OpLogicalAnd %bool %51 %53
217               OpBranch %29
218         %29 = OpLabel
219         %55 = OpPhi %bool %false %22 %54 %28
220               OpStore %ok %55
221               OpSelectionMerge %57 None
222               OpBranchConditional %55 %56 %57
223         %56 = OpLabel
224         %58 = OpAccessChain %_ptr_Uniform_v4float %7 %int_2
225         %59 = OpLoad %v4float %58
226         %60 = OpCompositeExtract %float %59 0
227         %61 = OpCompositeExtract %float %59 1
228         %62 = OpCompositeExtract %float %59 2
229         %63 = OpCompositeExtract %float %59 3
230         %64 = OpCompositeConstruct %v2float %60 %61
231         %65 = OpCompositeConstruct %v2float %62 %63
232         %66 = OpCompositeConstruct %mat2v2float %64 %65
233         %67 = OpFOrdEqual %v2bool %64 %46
234         %68 = OpAll %bool %67
235         %69 = OpFOrdEqual %v2bool %65 %47
236         %70 = OpAll %bool %69
237         %71 = OpLogicalAnd %bool %68 %70
238               OpBranch %57
239         %57 = OpLabel
240         %72 = OpPhi %bool %false %29 %71 %56
241               OpStore %ok %72
242               OpSelectionMerge %74 None
243               OpBranchConditional %72 %73 %74
244         %73 = OpLabel
245         %75 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
246         %77 = OpLoad %v4float %75
247         %78 = OpCompositeExtract %float %77 0
248         %79 = OpCompositeExtract %float %77 1
249         %80 = OpCompositeExtract %float %77 2
250         %81 = OpCompositeExtract %float %77 3
251         %82 = OpCompositeConstruct %v2float %78 %79
252         %83 = OpCompositeConstruct %v2float %80 %81
253         %84 = OpCompositeConstruct %mat2v2float %82 %83
254         %88 = OpFOrdEqual %v2bool %82 %86
255         %89 = OpAll %bool %88
256         %90 = OpFOrdEqual %v2bool %83 %86
257         %91 = OpAll %bool %90
258         %92 = OpLogicalAnd %bool %89 %91
259               OpBranch %74
260         %74 = OpLabel
261         %93 = OpPhi %bool %false %57 %92 %73
262               OpStore %ok %93
263               OpSelectionMerge %95 None
264               OpBranchConditional %93 %94 %95
265         %94 = OpLabel
266         %96 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
267         %97 = OpLoad %v4float %96
268         %98 = OpCompositeExtract %float %97 0
269         %99 = OpCompositeExtract %float %97 1
270        %100 = OpCompositeExtract %float %97 2
271        %101 = OpCompositeExtract %float %97 3
272        %102 = OpCompositeConstruct %v2float %98 %99
273        %103 = OpCompositeConstruct %v2float %100 %101
274        %104 = OpCompositeConstruct %mat2v2float %102 %103
275        %105 = OpFOrdEqual %v2bool %102 %86
276        %106 = OpAll %bool %105
277        %107 = OpFOrdEqual %v2bool %103 %86
278        %108 = OpAll %bool %107
279        %109 = OpLogicalAnd %bool %106 %108
280               OpBranch %95
281         %95 = OpLabel
282        %110 = OpPhi %bool %false %74 %109 %94
283               OpStore %ok %110
284               OpSelectionMerge %112 None
285               OpBranchConditional %110 %111 %112
286        %111 = OpLabel
287        %113 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
288        %114 = OpLoad %v4float %113
289        %115 = OpCompositeExtract %float %114 0
290        %116 = OpConvertFToS %int %115
291        %117 = OpCompositeExtract %float %114 1
292        %118 = OpConvertFToS %int %117
293        %119 = OpCompositeExtract %float %114 2
294        %120 = OpConvertFToS %int %119
295        %121 = OpCompositeExtract %float %114 3
296        %122 = OpConvertFToS %int %121
297        %124 = OpCompositeConstruct %v4int %116 %118 %120 %122
298        %125 = OpCompositeExtract %int %124 0
299        %126 = OpConvertSToF %float %125
300        %127 = OpCompositeExtract %int %124 1
301        %128 = OpConvertSToF %float %127
302        %129 = OpCompositeExtract %int %124 2
303        %130 = OpConvertSToF %float %129
304        %131 = OpCompositeExtract %int %124 3
305        %132 = OpConvertSToF %float %131
306        %133 = OpCompositeConstruct %v4float %126 %128 %130 %132
307        %134 = OpCompositeExtract %float %133 0
308        %135 = OpCompositeExtract %float %133 1
309        %136 = OpCompositeExtract %float %133 2
310        %137 = OpCompositeExtract %float %133 3
311        %138 = OpCompositeConstruct %v2float %134 %135
312        %139 = OpCompositeConstruct %v2float %136 %137
313        %140 = OpCompositeConstruct %mat2v2float %138 %139
314        %141 = OpFOrdEqual %v2bool %138 %86
315        %142 = OpAll %bool %141
316        %143 = OpFOrdEqual %v2bool %139 %86
317        %144 = OpAll %bool %143
318        %145 = OpLogicalAnd %bool %142 %144
319               OpBranch %112
320        %112 = OpLabel
321        %146 = OpPhi %bool %false %95 %145 %111
322               OpStore %ok %146
323               OpSelectionMerge %148 None
324               OpBranchConditional %146 %147 %148
325        %147 = OpLabel
326        %149 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
327        %150 = OpLoad %v4float %149
328        %151 = OpCompositeExtract %float %150 0
329        %152 = OpCompositeExtract %float %150 1
330        %153 = OpCompositeExtract %float %150 2
331        %154 = OpCompositeExtract %float %150 3
332        %155 = OpCompositeConstruct %v2float %151 %152
333        %156 = OpCompositeConstruct %v2float %153 %154
334        %157 = OpCompositeConstruct %mat2v2float %155 %156
335        %158 = OpFOrdEqual %v2bool %155 %86
336        %159 = OpAll %bool %158
337        %160 = OpFOrdEqual %v2bool %156 %86
338        %161 = OpAll %bool %160
339        %162 = OpLogicalAnd %bool %159 %161
340               OpBranch %148
341        %148 = OpLabel
342        %163 = OpPhi %bool %false %112 %162 %147
343               OpStore %ok %163
344               OpSelectionMerge %165 None
345               OpBranchConditional %163 %164 %165
346        %164 = OpLabel
347        %166 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
348        %167 = OpLoad %v4float %166
349        %168 = OpCompositeExtract %float %167 0
350        %169 = OpCompositeExtract %float %167 1
351        %170 = OpCompositeExtract %float %167 2
352        %171 = OpCompositeExtract %float %167 3
353        %172 = OpCompositeConstruct %v2float %168 %169
354        %173 = OpCompositeConstruct %v2float %170 %171
355        %174 = OpCompositeConstruct %mat2v2float %172 %173
356        %175 = OpFOrdEqual %v2bool %172 %86
357        %176 = OpAll %bool %175
358        %177 = OpFOrdEqual %v2bool %173 %86
359        %178 = OpAll %bool %177
360        %179 = OpLogicalAnd %bool %176 %178
361               OpBranch %165
362        %165 = OpLabel
363        %180 = OpPhi %bool %false %148 %179 %164
364               OpStore %ok %180
365               OpSelectionMerge %182 None
366               OpBranchConditional %180 %181 %182
367        %181 = OpLabel
368        %183 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
369        %184 = OpLoad %v4float %183
370        %185 = OpCompositeExtract %float %184 0
371        %186 = OpFUnordNotEqual %bool %185 %float_0
372        %187 = OpCompositeExtract %float %184 1
373        %188 = OpFUnordNotEqual %bool %187 %float_0
374        %189 = OpCompositeExtract %float %184 2
375        %190 = OpFUnordNotEqual %bool %189 %float_0
376        %191 = OpCompositeExtract %float %184 3
377        %192 = OpFUnordNotEqual %bool %191 %float_0
378        %194 = OpCompositeConstruct %v4bool %186 %188 %190 %192
379        %195 = OpCompositeExtract %bool %194 0
380        %196 = OpSelect %float %195 %float_1 %float_0
381        %197 = OpCompositeExtract %bool %194 1
382        %198 = OpSelect %float %197 %float_1 %float_0
383        %199 = OpCompositeExtract %bool %194 2
384        %200 = OpSelect %float %199 %float_1 %float_0
385        %201 = OpCompositeExtract %bool %194 3
386        %202 = OpSelect %float %201 %float_1 %float_0
387        %203 = OpCompositeConstruct %v4float %196 %198 %200 %202
388        %204 = OpCompositeExtract %float %203 0
389        %205 = OpCompositeExtract %float %203 1
390        %206 = OpCompositeExtract %float %203 2
391        %207 = OpCompositeExtract %float %203 3
392        %208 = OpCompositeConstruct %v2float %204 %205
393        %209 = OpCompositeConstruct %v2float %206 %207
394        %210 = OpCompositeConstruct %mat2v2float %208 %209
395        %211 = OpFOrdEqual %v2bool %208 %86
396        %212 = OpAll %bool %211
397        %213 = OpFOrdEqual %v2bool %209 %86
398        %214 = OpAll %bool %213
399        %215 = OpLogicalAnd %bool %212 %214
400               OpBranch %182
401        %182 = OpLabel
402        %216 = OpPhi %bool %false %165 %215 %181
403               OpStore %ok %216
404               OpSelectionMerge %218 None
405               OpBranchConditional %216 %217 %218
406        %217 = OpLabel
407        %219 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
408        %220 = OpLoad %v4float %219
409        %221 = OpAccessChain %_ptr_Uniform_v4float %7 %int_1
410        %223 = OpLoad %v4float %221
411        %224 = OpFSub %v4float %220 %223
412        %225 = OpCompositeExtract %float %224 0
413        %226 = OpCompositeExtract %float %224 1
414        %227 = OpCompositeExtract %float %224 2
415        %228 = OpCompositeExtract %float %224 3
416        %229 = OpCompositeConstruct %v2float %225 %226
417        %230 = OpCompositeConstruct %v2float %227 %228
418        %231 = OpCompositeConstruct %mat2v2float %229 %230
419        %235 = OpFOrdEqual %v2bool %229 %233
420        %236 = OpAll %bool %235
421        %237 = OpFOrdEqual %v2bool %230 %16
422        %238 = OpAll %bool %237
423        %239 = OpLogicalAnd %bool %236 %238
424               OpBranch %218
425        %218 = OpLabel
426        %240 = OpPhi %bool %false %182 %239 %217
427               OpStore %ok %240
428               OpSelectionMerge %242 None
429               OpBranchConditional %240 %241 %242
430        %241 = OpLabel
431        %243 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
432        %244 = OpLoad %v4float %243
433        %247 = OpFAdd %v4float %244 %246
434        %248 = OpCompositeExtract %float %247 0
435        %249 = OpCompositeExtract %float %247 1
436        %250 = OpCompositeExtract %float %247 2
437        %251 = OpCompositeExtract %float %247 3
438        %252 = OpCompositeConstruct %v2float %248 %249
439        %253 = OpCompositeConstruct %v2float %250 %251
440        %254 = OpCompositeConstruct %mat2v2float %252 %253
441        %258 = OpFOrdEqual %v2bool %252 %256
442        %259 = OpAll %bool %258
443        %260 = OpFOrdEqual %v2bool %253 %256
444        %261 = OpAll %bool %260
445        %262 = OpLogicalAnd %bool %259 %261
446               OpBranch %242
447        %242 = OpLabel
448        %263 = OpPhi %bool %false %218 %262 %241
449               OpStore %ok %263
450               OpSelectionMerge %268 None
451               OpBranchConditional %263 %266 %267
452        %266 = OpLabel
453        %269 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
454        %270 = OpLoad %v4float %269
455               OpStore %264 %270
456               OpBranch %268
457        %267 = OpLabel
458        %271 = OpAccessChain %_ptr_Uniform_v4float %7 %int_1
459        %272 = OpLoad %v4float %271
460               OpStore %264 %272
461               OpBranch %268
462        %268 = OpLabel
463        %273 = OpLoad %v4float %264
464               OpReturnValue %273
465               OpFunctionEnd
466