xref: /aosp_15_r20/external/skia/tests/sksl/shared/OutParams.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 "colorWhite"
11               OpName %_entrypoint_v "_entrypoint_v"
12               OpName %out_half_vh "out_half_vh"
13               OpName %out_half2_vh2 "out_half2_vh2"
14               OpName %out_half3_vh3 "out_half3_vh3"
15               OpName %out_half4_vh4 "out_half4_vh4"
16               OpName %out_half2x2_vh22 "out_half2x2_vh22"
17               OpName %out_half3x3_vh33 "out_half3x3_vh33"
18               OpName %out_half4x4_vh44 "out_half4x4_vh44"
19               OpName %out_int_vi "out_int_vi"
20               OpName %out_int2_vi2 "out_int2_vi2"
21               OpName %out_int3_vi3 "out_int3_vi3"
22               OpName %out_int4_vi4 "out_int4_vi4"
23               OpName %out_float_vf "out_float_vf"
24               OpName %out_float2_vf2 "out_float2_vf2"
25               OpName %out_float3_vf3 "out_float3_vf3"
26               OpName %out_float4_vf4 "out_float4_vf4"
27               OpName %out_float2x2_vf22 "out_float2x2_vf22"
28               OpName %out_float3x3_vf33 "out_float3x3_vf33"
29               OpName %out_float4x4_vf44 "out_float4x4_vf44"
30               OpName %out_bool_vb "out_bool_vb"
31               OpName %out_bool2_vb2 "out_bool2_vb2"
32               OpName %out_bool3_vb3 "out_bool3_vb3"
33               OpName %out_bool4_vb4 "out_bool4_vb4"
34               OpName %main "main"
35               OpName %h "h"
36               OpName %h2 "h2"
37               OpName %h3 "h3"
38               OpName %h4 "h4"
39               OpName %h2x2 "h2x2"
40               OpName %h3x3 "h3x3"
41               OpName %h4x4 "h4x4"
42               OpName %i "i"
43               OpName %i2 "i2"
44               OpName %i3 "i3"
45               OpName %i4 "i4"
46               OpName %f "f"
47               OpName %f2 "f2"
48               OpName %f3 "f3"
49               OpName %f4 "f4"
50               OpName %f2x2 "f2x2"
51               OpName %f3x3 "f3x3"
52               OpName %f4x4 "f4x4"
53               OpName %b "b"
54               OpName %b2 "b2"
55               OpName %b3 "b3"
56               OpName %b4 "b4"
57               OpName %ok "ok"
58               OpDecorate %sk_FragColor RelaxedPrecision
59               OpDecorate %sk_FragColor Location 0
60               OpDecorate %sk_FragColor Index 0
61               OpMemberDecorate %_UniformBuffer 0 Offset 0
62               OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
63               OpMemberDecorate %_UniformBuffer 1 Offset 16
64               OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
65               OpMemberDecorate %_UniformBuffer 2 Offset 32
66               OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
67               OpDecorate %_UniformBuffer Block
68               OpDecorate %29 Binding 0
69               OpDecorate %29 DescriptorSet 0
70               OpDecorate %50 RelaxedPrecision
71               OpDecorate %51 RelaxedPrecision
72               OpDecorate %56 RelaxedPrecision
73               OpDecorate %57 RelaxedPrecision
74               OpDecorate %58 RelaxedPrecision
75               OpDecorate %65 RelaxedPrecision
76               OpDecorate %66 RelaxedPrecision
77               OpDecorate %67 RelaxedPrecision
78               OpDecorate %73 RelaxedPrecision
79               OpDecorate %74 RelaxedPrecision
80               OpDecorate %75 RelaxedPrecision
81               OpDecorate %82 RelaxedPrecision
82               OpDecorate %83 RelaxedPrecision
83               OpDecorate %84 RelaxedPrecision
84               OpDecorate %85 RelaxedPrecision
85               OpDecorate %86 RelaxedPrecision
86               OpDecorate %93 RelaxedPrecision
87               OpDecorate %94 RelaxedPrecision
88               OpDecorate %95 RelaxedPrecision
89               OpDecorate %96 RelaxedPrecision
90               OpDecorate %97 RelaxedPrecision
91               OpDecorate %98 RelaxedPrecision
92               OpDecorate %105 RelaxedPrecision
93               OpDecorate %106 RelaxedPrecision
94               OpDecorate %107 RelaxedPrecision
95               OpDecorate %108 RelaxedPrecision
96               OpDecorate %109 RelaxedPrecision
97               OpDecorate %110 RelaxedPrecision
98               OpDecorate %111 RelaxedPrecision
99               OpDecorate %117 RelaxedPrecision
100               OpDecorate %118 RelaxedPrecision
101               OpDecorate %126 RelaxedPrecision
102               OpDecorate %127 RelaxedPrecision
103               OpDecorate %136 RelaxedPrecision
104               OpDecorate %137 RelaxedPrecision
105               OpDecorate %146 RelaxedPrecision
106               OpDecorate %147 RelaxedPrecision
107               OpDecorate %153 RelaxedPrecision
108               OpDecorate %154 RelaxedPrecision
109               OpDecorate %158 RelaxedPrecision
110               OpDecorate %159 RelaxedPrecision
111               OpDecorate %164 RelaxedPrecision
112               OpDecorate %165 RelaxedPrecision
113               OpDecorate %170 RelaxedPrecision
114               OpDecorate %171 RelaxedPrecision
115               OpDecorate %176 RelaxedPrecision
116               OpDecorate %177 RelaxedPrecision
117               OpDecorate %184 RelaxedPrecision
118               OpDecorate %185 RelaxedPrecision
119               OpDecorate %193 RelaxedPrecision
120               OpDecorate %194 RelaxedPrecision
121               OpDecorate %206 RelaxedPrecision
122               OpDecorate %207 RelaxedPrecision
123               OpDecorate %215 RelaxedPrecision
124               OpDecorate %216 RelaxedPrecision
125               OpDecorate %225 RelaxedPrecision
126               OpDecorate %226 RelaxedPrecision
127               OpDecorate %235 RelaxedPrecision
128               OpDecorate %236 RelaxedPrecision
129               OpDecorate %h RelaxedPrecision
130               OpDecorate %243 RelaxedPrecision
131               OpDecorate %245 RelaxedPrecision
132               OpDecorate %h2 RelaxedPrecision
133               OpDecorate %247 RelaxedPrecision
134               OpDecorate %249 RelaxedPrecision
135               OpDecorate %h3 RelaxedPrecision
136               OpDecorate %251 RelaxedPrecision
137               OpDecorate %253 RelaxedPrecision
138               OpDecorate %h4 RelaxedPrecision
139               OpDecorate %255 RelaxedPrecision
140               OpDecorate %257 RelaxedPrecision
141               OpDecorate %260 RelaxedPrecision
142               OpDecorate %262 RelaxedPrecision
143               OpDecorate %263 RelaxedPrecision
144               OpDecorate %265 RelaxedPrecision
145               OpDecorate %266 RelaxedPrecision
146               OpDecorate %267 RelaxedPrecision
147               OpDecorate %268 RelaxedPrecision
148               OpDecorate %270 RelaxedPrecision
149               OpDecorate %271 RelaxedPrecision
150               OpDecorate %272 RelaxedPrecision
151               OpDecorate %h2x2 RelaxedPrecision
152               OpDecorate %274 RelaxedPrecision
153               OpDecorate %276 RelaxedPrecision
154               OpDecorate %h3x3 RelaxedPrecision
155               OpDecorate %278 RelaxedPrecision
156               OpDecorate %280 RelaxedPrecision
157               OpDecorate %h4x4 RelaxedPrecision
158               OpDecorate %282 RelaxedPrecision
159               OpDecorate %284 RelaxedPrecision
160               OpDecorate %286 RelaxedPrecision
161               OpDecorate %288 RelaxedPrecision
162               OpDecorate %292 RelaxedPrecision
163               OpDecorate %294 RelaxedPrecision
164               OpDecorate %298 RelaxedPrecision
165               OpDecorate %300 RelaxedPrecision
166               OpDecorate %399 RelaxedPrecision
167               OpDecorate %400 RelaxedPrecision
168               OpDecorate %401 RelaxedPrecision
169               OpDecorate %402 RelaxedPrecision
170               OpDecorate %403 RelaxedPrecision
171               OpDecorate %404 RelaxedPrecision
172               OpDecorate %405 RelaxedPrecision
173               OpDecorate %406 RelaxedPrecision
174               OpDecorate %407 RelaxedPrecision
175               OpDecorate %408 RelaxedPrecision
176               OpDecorate %410 RelaxedPrecision
177               OpDecorate %411 RelaxedPrecision
178               OpDecorate %412 RelaxedPrecision
179               OpDecorate %414 RelaxedPrecision
180               OpDecorate %415 RelaxedPrecision
181               OpDecorate %416 RelaxedPrecision
182               OpDecorate %418 RelaxedPrecision
183               OpDecorate %419 RelaxedPrecision
184               OpDecorate %420 RelaxedPrecision
185               OpDecorate %465 RelaxedPrecision
186               OpDecorate %468 RelaxedPrecision
187               OpDecorate %473 RelaxedPrecision
188               OpDecorate %478 RelaxedPrecision
189               OpDecorate %487 RelaxedPrecision
190               OpDecorate %489 RelaxedPrecision
191               OpDecorate %490 RelaxedPrecision
192      %float = OpTypeFloat 32
193    %v4float = OpTypeVector %float 4
194%_ptr_Output_v4float = OpTypePointer Output %v4float
195%sk_FragColor = OpVariable %_ptr_Output_v4float Output
196%_UniformBuffer = OpTypeStruct %v4float %v4float %v4float
197%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
198         %29 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
199       %void = OpTypeVoid
200         %34 = OpTypeFunction %void
201    %float_0 = OpConstant %float 0
202    %v2float = OpTypeVector %float 2
203         %38 = OpConstantComposite %v2float %float_0 %float_0
204%_ptr_Function_v2float = OpTypePointer Function %v2float
205%_ptr_Function_float = OpTypePointer Function %float
206         %43 = OpTypeFunction %void %_ptr_Function_float
207%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
208        %int = OpTypeInt 32 1
209      %int_2 = OpConstant %int 2
210         %52 = OpTypeFunction %void %_ptr_Function_v2float
211    %v3float = OpTypeVector %float 3
212%_ptr_Function_v3float = OpTypePointer Function %v3float
213         %61 = OpTypeFunction %void %_ptr_Function_v3float
214%_ptr_Function_v4float = OpTypePointer Function %v4float
215         %69 = OpTypeFunction %void %_ptr_Function_v4float
216%mat2v2float = OpTypeMatrix %v2float 2
217%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
218         %78 = OpTypeFunction %void %_ptr_Function_mat2v2float
219%mat3v3float = OpTypeMatrix %v3float 3
220%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
221         %89 = OpTypeFunction %void %_ptr_Function_mat3v3float
222%mat4v4float = OpTypeMatrix %v4float 4
223%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
224        %101 = OpTypeFunction %void %_ptr_Function_mat4v4float
225%_ptr_Function_int = OpTypePointer Function %int
226        %113 = OpTypeFunction %void %_ptr_Function_int
227      %v2int = OpTypeVector %int 2
228%_ptr_Function_v2int = OpTypePointer Function %v2int
229        %122 = OpTypeFunction %void %_ptr_Function_v2int
230      %v3int = OpTypeVector %int 3
231%_ptr_Function_v3int = OpTypePointer Function %v3int
232        %132 = OpTypeFunction %void %_ptr_Function_v3int
233      %v4int = OpTypeVector %int 4
234%_ptr_Function_v4int = OpTypePointer Function %v4int
235        %142 = OpTypeFunction %void %_ptr_Function_v4int
236       %bool = OpTypeBool
237%_ptr_Function_bool = OpTypePointer Function %bool
238        %202 = OpTypeFunction %void %_ptr_Function_bool
239     %v2bool = OpTypeVector %bool 2
240%_ptr_Function_v2bool = OpTypePointer Function %v2bool
241        %211 = OpTypeFunction %void %_ptr_Function_v2bool
242     %v3bool = OpTypeVector %bool 3
243%_ptr_Function_v3bool = OpTypePointer Function %v3bool
244        %221 = OpTypeFunction %void %_ptr_Function_v3bool
245     %v4bool = OpTypeVector %bool 4
246%_ptr_Function_v4bool = OpTypePointer Function %v4bool
247        %231 = OpTypeFunction %void %_ptr_Function_v4bool
248        %239 = OpTypeFunction %v4float %_ptr_Function_v2float
249      %int_1 = OpConstant %int 1
250      %int_3 = OpConstant %int 3
251      %int_0 = OpConstant %int 0
252       %true = OpConstantTrue %bool
253      %false = OpConstantFalse %bool
254    %float_1 = OpConstant %float 1
255%_entrypoint_v = OpFunction %void None %34
256         %35 = OpLabel
257         %39 = OpVariable %_ptr_Function_v2float Function
258               OpStore %39 %38
259         %41 = OpFunctionCall %v4float %main %39
260               OpStore %sk_FragColor %41
261               OpReturn
262               OpFunctionEnd
263%out_half_vh = OpFunction %void None %43
264         %44 = OpFunctionParameter %_ptr_Function_float
265         %45 = OpLabel
266         %46 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
267         %50 = OpLoad %v4float %46
268         %51 = OpCompositeExtract %float %50 0
269               OpStore %44 %51
270               OpReturn
271               OpFunctionEnd
272%out_half2_vh2 = OpFunction %void None %52
273         %53 = OpFunctionParameter %_ptr_Function_v2float
274         %54 = OpLabel
275         %55 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
276         %56 = OpLoad %v4float %55
277         %57 = OpCompositeExtract %float %56 1
278         %58 = OpCompositeConstruct %v2float %57 %57
279               OpStore %53 %58
280               OpReturn
281               OpFunctionEnd
282%out_half3_vh3 = OpFunction %void None %61
283         %62 = OpFunctionParameter %_ptr_Function_v3float
284         %63 = OpLabel
285         %64 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
286         %65 = OpLoad %v4float %64
287         %66 = OpCompositeExtract %float %65 2
288         %67 = OpCompositeConstruct %v3float %66 %66 %66
289               OpStore %62 %67
290               OpReturn
291               OpFunctionEnd
292%out_half4_vh4 = OpFunction %void None %69
293         %70 = OpFunctionParameter %_ptr_Function_v4float
294         %71 = OpLabel
295         %72 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
296         %73 = OpLoad %v4float %72
297         %74 = OpCompositeExtract %float %73 3
298         %75 = OpCompositeConstruct %v4float %74 %74 %74 %74
299               OpStore %70 %75
300               OpReturn
301               OpFunctionEnd
302%out_half2x2_vh22 = OpFunction %void None %78
303         %79 = OpFunctionParameter %_ptr_Function_mat2v2float
304         %80 = OpLabel
305         %81 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
306         %82 = OpLoad %v4float %81
307         %83 = OpCompositeExtract %float %82 0
308         %84 = OpCompositeConstruct %v2float %83 %float_0
309         %85 = OpCompositeConstruct %v2float %float_0 %83
310         %86 = OpCompositeConstruct %mat2v2float %84 %85
311               OpStore %79 %86
312               OpReturn
313               OpFunctionEnd
314%out_half3x3_vh33 = OpFunction %void None %89
315         %90 = OpFunctionParameter %_ptr_Function_mat3v3float
316         %91 = OpLabel
317         %92 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
318         %93 = OpLoad %v4float %92
319         %94 = OpCompositeExtract %float %93 1
320         %95 = OpCompositeConstruct %v3float %94 %float_0 %float_0
321         %96 = OpCompositeConstruct %v3float %float_0 %94 %float_0
322         %97 = OpCompositeConstruct %v3float %float_0 %float_0 %94
323         %98 = OpCompositeConstruct %mat3v3float %95 %96 %97
324               OpStore %90 %98
325               OpReturn
326               OpFunctionEnd
327%out_half4x4_vh44 = OpFunction %void None %101
328        %102 = OpFunctionParameter %_ptr_Function_mat4v4float
329        %103 = OpLabel
330        %104 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
331        %105 = OpLoad %v4float %104
332        %106 = OpCompositeExtract %float %105 2
333        %107 = OpCompositeConstruct %v4float %106 %float_0 %float_0 %float_0
334        %108 = OpCompositeConstruct %v4float %float_0 %106 %float_0 %float_0
335        %109 = OpCompositeConstruct %v4float %float_0 %float_0 %106 %float_0
336        %110 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %106
337        %111 = OpCompositeConstruct %mat4v4float %107 %108 %109 %110
338               OpStore %102 %111
339               OpReturn
340               OpFunctionEnd
341 %out_int_vi = OpFunction %void None %113
342        %114 = OpFunctionParameter %_ptr_Function_int
343        %115 = OpLabel
344        %116 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
345        %117 = OpLoad %v4float %116
346        %118 = OpCompositeExtract %float %117 0
347        %119 = OpConvertFToS %int %118
348               OpStore %114 %119
349               OpReturn
350               OpFunctionEnd
351%out_int2_vi2 = OpFunction %void None %122
352        %123 = OpFunctionParameter %_ptr_Function_v2int
353        %124 = OpLabel
354        %125 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
355        %126 = OpLoad %v4float %125
356        %127 = OpCompositeExtract %float %126 1
357        %128 = OpConvertFToS %int %127
358        %129 = OpCompositeConstruct %v2int %128 %128
359               OpStore %123 %129
360               OpReturn
361               OpFunctionEnd
362%out_int3_vi3 = OpFunction %void None %132
363        %133 = OpFunctionParameter %_ptr_Function_v3int
364        %134 = OpLabel
365        %135 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
366        %136 = OpLoad %v4float %135
367        %137 = OpCompositeExtract %float %136 2
368        %138 = OpConvertFToS %int %137
369        %139 = OpCompositeConstruct %v3int %138 %138 %138
370               OpStore %133 %139
371               OpReturn
372               OpFunctionEnd
373%out_int4_vi4 = OpFunction %void None %142
374        %143 = OpFunctionParameter %_ptr_Function_v4int
375        %144 = OpLabel
376        %145 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
377        %146 = OpLoad %v4float %145
378        %147 = OpCompositeExtract %float %146 3
379        %148 = OpConvertFToS %int %147
380        %149 = OpCompositeConstruct %v4int %148 %148 %148 %148
381               OpStore %143 %149
382               OpReturn
383               OpFunctionEnd
384%out_float_vf = OpFunction %void None %43
385        %150 = OpFunctionParameter %_ptr_Function_float
386        %151 = OpLabel
387        %152 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
388        %153 = OpLoad %v4float %152
389        %154 = OpCompositeExtract %float %153 0
390               OpStore %150 %154
391               OpReturn
392               OpFunctionEnd
393%out_float2_vf2 = OpFunction %void None %52
394        %155 = OpFunctionParameter %_ptr_Function_v2float
395        %156 = OpLabel
396        %157 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
397        %158 = OpLoad %v4float %157
398        %159 = OpCompositeExtract %float %158 1
399        %160 = OpCompositeConstruct %v2float %159 %159
400               OpStore %155 %160
401               OpReturn
402               OpFunctionEnd
403%out_float3_vf3 = OpFunction %void None %61
404        %161 = OpFunctionParameter %_ptr_Function_v3float
405        %162 = OpLabel
406        %163 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
407        %164 = OpLoad %v4float %163
408        %165 = OpCompositeExtract %float %164 2
409        %166 = OpCompositeConstruct %v3float %165 %165 %165
410               OpStore %161 %166
411               OpReturn
412               OpFunctionEnd
413%out_float4_vf4 = OpFunction %void None %69
414        %167 = OpFunctionParameter %_ptr_Function_v4float
415        %168 = OpLabel
416        %169 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
417        %170 = OpLoad %v4float %169
418        %171 = OpCompositeExtract %float %170 3
419        %172 = OpCompositeConstruct %v4float %171 %171 %171 %171
420               OpStore %167 %172
421               OpReturn
422               OpFunctionEnd
423%out_float2x2_vf22 = OpFunction %void None %78
424        %173 = OpFunctionParameter %_ptr_Function_mat2v2float
425        %174 = OpLabel
426        %175 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
427        %176 = OpLoad %v4float %175
428        %177 = OpCompositeExtract %float %176 0
429        %178 = OpCompositeConstruct %v2float %177 %float_0
430        %179 = OpCompositeConstruct %v2float %float_0 %177
431        %180 = OpCompositeConstruct %mat2v2float %178 %179
432               OpStore %173 %180
433               OpReturn
434               OpFunctionEnd
435%out_float3x3_vf33 = OpFunction %void None %89
436        %181 = OpFunctionParameter %_ptr_Function_mat3v3float
437        %182 = OpLabel
438        %183 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
439        %184 = OpLoad %v4float %183
440        %185 = OpCompositeExtract %float %184 1
441        %186 = OpCompositeConstruct %v3float %185 %float_0 %float_0
442        %187 = OpCompositeConstruct %v3float %float_0 %185 %float_0
443        %188 = OpCompositeConstruct %v3float %float_0 %float_0 %185
444        %189 = OpCompositeConstruct %mat3v3float %186 %187 %188
445               OpStore %181 %189
446               OpReturn
447               OpFunctionEnd
448%out_float4x4_vf44 = OpFunction %void None %101
449        %190 = OpFunctionParameter %_ptr_Function_mat4v4float
450        %191 = OpLabel
451        %192 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
452        %193 = OpLoad %v4float %192
453        %194 = OpCompositeExtract %float %193 2
454        %195 = OpCompositeConstruct %v4float %194 %float_0 %float_0 %float_0
455        %196 = OpCompositeConstruct %v4float %float_0 %194 %float_0 %float_0
456        %197 = OpCompositeConstruct %v4float %float_0 %float_0 %194 %float_0
457        %198 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %194
458        %199 = OpCompositeConstruct %mat4v4float %195 %196 %197 %198
459               OpStore %190 %199
460               OpReturn
461               OpFunctionEnd
462%out_bool_vb = OpFunction %void None %202
463        %203 = OpFunctionParameter %_ptr_Function_bool
464        %204 = OpLabel
465        %205 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
466        %206 = OpLoad %v4float %205
467        %207 = OpCompositeExtract %float %206 0
468        %208 = OpFUnordNotEqual %bool %207 %float_0
469               OpStore %203 %208
470               OpReturn
471               OpFunctionEnd
472%out_bool2_vb2 = OpFunction %void None %211
473        %212 = OpFunctionParameter %_ptr_Function_v2bool
474        %213 = OpLabel
475        %214 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
476        %215 = OpLoad %v4float %214
477        %216 = OpCompositeExtract %float %215 1
478        %217 = OpFUnordNotEqual %bool %216 %float_0
479        %218 = OpCompositeConstruct %v2bool %217 %217
480               OpStore %212 %218
481               OpReturn
482               OpFunctionEnd
483%out_bool3_vb3 = OpFunction %void None %221
484        %222 = OpFunctionParameter %_ptr_Function_v3bool
485        %223 = OpLabel
486        %224 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
487        %225 = OpLoad %v4float %224
488        %226 = OpCompositeExtract %float %225 2
489        %227 = OpFUnordNotEqual %bool %226 %float_0
490        %228 = OpCompositeConstruct %v3bool %227 %227 %227
491               OpStore %222 %228
492               OpReturn
493               OpFunctionEnd
494%out_bool4_vb4 = OpFunction %void None %231
495        %232 = OpFunctionParameter %_ptr_Function_v4bool
496        %233 = OpLabel
497        %234 = OpAccessChain %_ptr_Uniform_v4float %29 %int_2
498        %235 = OpLoad %v4float %234
499        %236 = OpCompositeExtract %float %235 3
500        %237 = OpFUnordNotEqual %bool %236 %float_0
501        %238 = OpCompositeConstruct %v4bool %237 %237 %237 %237
502               OpStore %232 %238
503               OpReturn
504               OpFunctionEnd
505       %main = OpFunction %v4float None %239
506        %240 = OpFunctionParameter %_ptr_Function_v2float
507        %241 = OpLabel
508          %h = OpVariable %_ptr_Function_float Function
509        %243 = OpVariable %_ptr_Function_float Function
510         %h2 = OpVariable %_ptr_Function_v2float Function
511        %247 = OpVariable %_ptr_Function_v2float Function
512         %h3 = OpVariable %_ptr_Function_v3float Function
513        %251 = OpVariable %_ptr_Function_v3float Function
514         %h4 = OpVariable %_ptr_Function_v4float Function
515        %255 = OpVariable %_ptr_Function_v4float Function
516        %260 = OpVariable %_ptr_Function_float Function
517        %263 = OpVariable %_ptr_Function_v2float Function
518        %268 = OpVariable %_ptr_Function_v4float Function
519       %h2x2 = OpVariable %_ptr_Function_mat2v2float Function
520        %274 = OpVariable %_ptr_Function_mat2v2float Function
521       %h3x3 = OpVariable %_ptr_Function_mat3v3float Function
522        %278 = OpVariable %_ptr_Function_mat3v3float Function
523       %h4x4 = OpVariable %_ptr_Function_mat4v4float Function
524        %282 = OpVariable %_ptr_Function_mat4v4float Function
525        %286 = OpVariable %_ptr_Function_v3float Function
526        %292 = OpVariable %_ptr_Function_float Function
527        %298 = OpVariable %_ptr_Function_float Function
528          %i = OpVariable %_ptr_Function_int Function
529        %302 = OpVariable %_ptr_Function_int Function
530         %i2 = OpVariable %_ptr_Function_v2int Function
531        %306 = OpVariable %_ptr_Function_v2int Function
532         %i3 = OpVariable %_ptr_Function_v3int Function
533        %310 = OpVariable %_ptr_Function_v3int Function
534         %i4 = OpVariable %_ptr_Function_v4int Function
535        %314 = OpVariable %_ptr_Function_v4int Function
536        %317 = OpVariable %_ptr_Function_v3int Function
537        %323 = OpVariable %_ptr_Function_int Function
538          %f = OpVariable %_ptr_Function_float Function
539        %327 = OpVariable %_ptr_Function_float Function
540         %f2 = OpVariable %_ptr_Function_v2float Function
541        %331 = OpVariable %_ptr_Function_v2float Function
542         %f3 = OpVariable %_ptr_Function_v3float Function
543        %335 = OpVariable %_ptr_Function_v3float Function
544         %f4 = OpVariable %_ptr_Function_v4float Function
545        %339 = OpVariable %_ptr_Function_v4float Function
546        %342 = OpVariable %_ptr_Function_v2float Function
547        %348 = OpVariable %_ptr_Function_float Function
548       %f2x2 = OpVariable %_ptr_Function_mat2v2float Function
549        %352 = OpVariable %_ptr_Function_mat2v2float Function
550       %f3x3 = OpVariable %_ptr_Function_mat3v3float Function
551        %356 = OpVariable %_ptr_Function_mat3v3float Function
552       %f4x4 = OpVariable %_ptr_Function_mat4v4float Function
553        %360 = OpVariable %_ptr_Function_mat4v4float Function
554        %365 = OpVariable %_ptr_Function_float Function
555          %b = OpVariable %_ptr_Function_bool Function
556        %369 = OpVariable %_ptr_Function_bool Function
557         %b2 = OpVariable %_ptr_Function_v2bool Function
558        %373 = OpVariable %_ptr_Function_v2bool Function
559         %b3 = OpVariable %_ptr_Function_v3bool Function
560        %377 = OpVariable %_ptr_Function_v3bool Function
561         %b4 = OpVariable %_ptr_Function_v4bool Function
562        %381 = OpVariable %_ptr_Function_v4bool Function
563        %384 = OpVariable %_ptr_Function_v2bool Function
564        %390 = OpVariable %_ptr_Function_bool Function
565         %ok = OpVariable %_ptr_Function_bool Function
566        %482 = OpVariable %_ptr_Function_v4float Function
567        %244 = OpFunctionCall %void %out_half_vh %243
568        %245 = OpLoad %float %243
569               OpStore %h %245
570        %248 = OpFunctionCall %void %out_half2_vh2 %247
571        %249 = OpLoad %v2float %247
572               OpStore %h2 %249
573        %252 = OpFunctionCall %void %out_half3_vh3 %251
574        %253 = OpLoad %v3float %251
575               OpStore %h3 %253
576        %256 = OpFunctionCall %void %out_half4_vh4 %255
577        %257 = OpLoad %v4float %255
578               OpStore %h4 %257
579        %258 = OpAccessChain %_ptr_Function_float %h3 %int_1
580        %261 = OpFunctionCall %void %out_half_vh %260
581        %262 = OpLoad %float %260
582               OpStore %258 %262
583        %264 = OpFunctionCall %void %out_half2_vh2 %263
584        %265 = OpLoad %v2float %263
585        %266 = OpLoad %v3float %h3
586        %267 = OpVectorShuffle %v3float %266 %265 3 1 4
587               OpStore %h3 %267
588        %269 = OpFunctionCall %void %out_half4_vh4 %268
589        %270 = OpLoad %v4float %268
590        %271 = OpLoad %v4float %h4
591        %272 = OpVectorShuffle %v4float %271 %270 6 7 4 5
592               OpStore %h4 %272
593        %275 = OpFunctionCall %void %out_half2x2_vh22 %274
594        %276 = OpLoad %mat2v2float %274
595               OpStore %h2x2 %276
596        %279 = OpFunctionCall %void %out_half3x3_vh33 %278
597        %280 = OpLoad %mat3v3float %278
598               OpStore %h3x3 %280
599        %283 = OpFunctionCall %void %out_half4x4_vh44 %282
600        %284 = OpLoad %mat4v4float %282
601               OpStore %h4x4 %284
602        %285 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_1
603        %287 = OpFunctionCall %void %out_half3_vh3 %286
604        %288 = OpLoad %v3float %286
605               OpStore %285 %288
606        %290 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_3
607        %291 = OpAccessChain %_ptr_Function_float %290 %int_3
608        %293 = OpFunctionCall %void %out_half_vh %292
609        %294 = OpLoad %float %292
610               OpStore %291 %294
611        %296 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
612        %297 = OpAccessChain %_ptr_Function_float %296 %int_0
613        %299 = OpFunctionCall %void %out_half_vh %298
614        %300 = OpLoad %float %298
615               OpStore %297 %300
616        %303 = OpFunctionCall %void %out_int_vi %302
617        %304 = OpLoad %int %302
618               OpStore %i %304
619        %307 = OpFunctionCall %void %out_int2_vi2 %306
620        %308 = OpLoad %v2int %306
621               OpStore %i2 %308
622        %311 = OpFunctionCall %void %out_int3_vi3 %310
623        %312 = OpLoad %v3int %310
624               OpStore %i3 %312
625        %315 = OpFunctionCall %void %out_int4_vi4 %314
626        %316 = OpLoad %v4int %314
627               OpStore %i4 %316
628        %318 = OpFunctionCall %void %out_int3_vi3 %317
629        %319 = OpLoad %v3int %317
630        %320 = OpLoad %v4int %i4
631        %321 = OpVectorShuffle %v4int %320 %319 4 5 6 3
632               OpStore %i4 %321
633        %322 = OpAccessChain %_ptr_Function_int %i2 %int_1
634        %324 = OpFunctionCall %void %out_int_vi %323
635        %325 = OpLoad %int %323
636               OpStore %322 %325
637        %328 = OpFunctionCall %void %out_float_vf %327
638        %329 = OpLoad %float %327
639               OpStore %f %329
640        %332 = OpFunctionCall %void %out_float2_vf2 %331
641        %333 = OpLoad %v2float %331
642               OpStore %f2 %333
643        %336 = OpFunctionCall %void %out_float3_vf3 %335
644        %337 = OpLoad %v3float %335
645               OpStore %f3 %337
646        %340 = OpFunctionCall %void %out_float4_vf4 %339
647        %341 = OpLoad %v4float %339
648               OpStore %f4 %341
649        %343 = OpFunctionCall %void %out_float2_vf2 %342
650        %344 = OpLoad %v2float %342
651        %345 = OpLoad %v3float %f3
652        %346 = OpVectorShuffle %v3float %345 %344 3 4 2
653               OpStore %f3 %346
654        %347 = OpAccessChain %_ptr_Function_float %f2 %int_0
655        %349 = OpFunctionCall %void %out_float_vf %348
656        %350 = OpLoad %float %348
657               OpStore %347 %350
658        %353 = OpFunctionCall %void %out_float2x2_vf22 %352
659        %354 = OpLoad %mat2v2float %352
660               OpStore %f2x2 %354
661        %357 = OpFunctionCall %void %out_float3x3_vf33 %356
662        %358 = OpLoad %mat3v3float %356
663               OpStore %f3x3 %358
664        %361 = OpFunctionCall %void %out_float4x4_vf44 %360
665        %362 = OpLoad %mat4v4float %360
666               OpStore %f4x4 %362
667        %363 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
668        %364 = OpAccessChain %_ptr_Function_float %363 %int_0
669        %366 = OpFunctionCall %void %out_float_vf %365
670        %367 = OpLoad %float %365
671               OpStore %364 %367
672        %370 = OpFunctionCall %void %out_bool_vb %369
673        %371 = OpLoad %bool %369
674               OpStore %b %371
675        %374 = OpFunctionCall %void %out_bool2_vb2 %373
676        %375 = OpLoad %v2bool %373
677               OpStore %b2 %375
678        %378 = OpFunctionCall %void %out_bool3_vb3 %377
679        %379 = OpLoad %v3bool %377
680               OpStore %b3 %379
681        %382 = OpFunctionCall %void %out_bool4_vb4 %381
682        %383 = OpLoad %v4bool %381
683               OpStore %b4 %383
684        %385 = OpFunctionCall %void %out_bool2_vb2 %384
685        %386 = OpLoad %v2bool %384
686        %387 = OpLoad %v4bool %b4
687        %388 = OpVectorShuffle %v4bool %387 %386 4 1 2 5
688               OpStore %b4 %388
689        %389 = OpAccessChain %_ptr_Function_bool %b3 %int_2
690        %391 = OpFunctionCall %void %out_bool_vb %390
691        %392 = OpLoad %bool %390
692               OpStore %389 %392
693               OpStore %ok %true
694               OpSelectionMerge %397 None
695               OpBranchConditional %true %396 %397
696        %396 = OpLabel
697        %399 = OpLoad %float %h
698        %400 = OpLoad %v2float %h2
699        %401 = OpCompositeExtract %float %400 0
700        %402 = OpFMul %float %399 %401
701        %403 = OpLoad %v3float %h3
702        %404 = OpCompositeExtract %float %403 0
703        %405 = OpFMul %float %402 %404
704        %406 = OpLoad %v4float %h4
705        %407 = OpCompositeExtract %float %406 0
706        %408 = OpFMul %float %405 %407
707        %409 = OpAccessChain %_ptr_Function_v2float %h2x2 %int_0
708        %410 = OpLoad %v2float %409
709        %411 = OpCompositeExtract %float %410 0
710        %412 = OpFMul %float %408 %411
711        %413 = OpAccessChain %_ptr_Function_v3float %h3x3 %int_0
712        %414 = OpLoad %v3float %413
713        %415 = OpCompositeExtract %float %414 0
714        %416 = OpFMul %float %412 %415
715        %417 = OpAccessChain %_ptr_Function_v4float %h4x4 %int_0
716        %418 = OpLoad %v4float %417
717        %419 = OpCompositeExtract %float %418 0
718        %420 = OpFMul %float %416 %419
719        %421 = OpFOrdEqual %bool %float_1 %420
720               OpBranch %397
721        %397 = OpLabel
722        %422 = OpPhi %bool %false %241 %421 %396
723               OpStore %ok %422
724               OpSelectionMerge %424 None
725               OpBranchConditional %422 %423 %424
726        %423 = OpLabel
727        %425 = OpLoad %float %f
728        %426 = OpLoad %v2float %f2
729        %427 = OpCompositeExtract %float %426 0
730        %428 = OpFMul %float %425 %427
731        %429 = OpLoad %v3float %f3
732        %430 = OpCompositeExtract %float %429 0
733        %431 = OpFMul %float %428 %430
734        %432 = OpLoad %v4float %f4
735        %433 = OpCompositeExtract %float %432 0
736        %434 = OpFMul %float %431 %433
737        %435 = OpAccessChain %_ptr_Function_v2float %f2x2 %int_0
738        %436 = OpLoad %v2float %435
739        %437 = OpCompositeExtract %float %436 0
740        %438 = OpFMul %float %434 %437
741        %439 = OpAccessChain %_ptr_Function_v3float %f3x3 %int_0
742        %440 = OpLoad %v3float %439
743        %441 = OpCompositeExtract %float %440 0
744        %442 = OpFMul %float %438 %441
745        %443 = OpAccessChain %_ptr_Function_v4float %f4x4 %int_0
746        %444 = OpLoad %v4float %443
747        %445 = OpCompositeExtract %float %444 0
748        %446 = OpFMul %float %442 %445
749        %447 = OpFOrdEqual %bool %float_1 %446
750               OpBranch %424
751        %424 = OpLabel
752        %448 = OpPhi %bool %false %397 %447 %423
753               OpStore %ok %448
754               OpSelectionMerge %450 None
755               OpBranchConditional %448 %449 %450
756        %449 = OpLabel
757        %451 = OpLoad %int %i
758        %452 = OpLoad %v2int %i2
759        %453 = OpCompositeExtract %int %452 0
760        %454 = OpIMul %int %451 %453
761        %455 = OpLoad %v3int %i3
762        %456 = OpCompositeExtract %int %455 0
763        %457 = OpIMul %int %454 %456
764        %458 = OpLoad %v4int %i4
765        %459 = OpCompositeExtract %int %458 0
766        %460 = OpIMul %int %457 %459
767        %461 = OpIEqual %bool %int_1 %460
768               OpBranch %450
769        %450 = OpLabel
770        %462 = OpPhi %bool %false %424 %461 %449
771               OpStore %ok %462
772               OpSelectionMerge %464 None
773               OpBranchConditional %462 %463 %464
774        %463 = OpLabel
775        %465 = OpLoad %bool %b
776               OpSelectionMerge %467 None
777               OpBranchConditional %465 %466 %467
778        %466 = OpLabel
779        %468 = OpLoad %v2bool %b2
780        %469 = OpCompositeExtract %bool %468 0
781               OpBranch %467
782        %467 = OpLabel
783        %470 = OpPhi %bool %false %463 %469 %466
784               OpSelectionMerge %472 None
785               OpBranchConditional %470 %471 %472
786        %471 = OpLabel
787        %473 = OpLoad %v3bool %b3
788        %474 = OpCompositeExtract %bool %473 0
789               OpBranch %472
790        %472 = OpLabel
791        %475 = OpPhi %bool %false %467 %474 %471
792               OpSelectionMerge %477 None
793               OpBranchConditional %475 %476 %477
794        %476 = OpLabel
795        %478 = OpLoad %v4bool %b4
796        %479 = OpCompositeExtract %bool %478 0
797               OpBranch %477
798        %477 = OpLabel
799        %480 = OpPhi %bool %false %472 %479 %476
800               OpBranch %464
801        %464 = OpLabel
802        %481 = OpPhi %bool %false %450 %480 %477
803               OpStore %ok %481
804               OpSelectionMerge %485 None
805               OpBranchConditional %481 %483 %484
806        %483 = OpLabel
807        %486 = OpAccessChain %_ptr_Uniform_v4float %29 %int_0
808        %487 = OpLoad %v4float %486
809               OpStore %482 %487
810               OpBranch %485
811        %484 = OpLabel
812        %488 = OpAccessChain %_ptr_Uniform_v4float %29 %int_1
813        %489 = OpLoad %v4float %488
814               OpStore %482 %489
815               OpBranch %485
816        %485 = OpLabel
817        %490 = OpLoad %v4float %482
818               OpReturnValue %490
819               OpFunctionEnd
820