xref: /aosp_15_r20/external/skia/tests/sksl/intrinsics/OuterProduct.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 "testMatrix2x2"
11               OpMemberName %_UniformBuffer 3 "testMatrix3x3"
12               OpMemberName %_UniformBuffer 4 "testInputs"
13               OpName %_entrypoint_v "_entrypoint_v"
14               OpName %main "main"
15               OpDecorate %sk_FragColor RelaxedPrecision
16               OpDecorate %sk_FragColor Location 0
17               OpDecorate %sk_FragColor Index 0
18               OpMemberDecorate %_UniformBuffer 0 Offset 0
19               OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
20               OpMemberDecorate %_UniformBuffer 1 Offset 16
21               OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
22               OpMemberDecorate %_UniformBuffer 2 Offset 32
23               OpMemberDecorate %_UniformBuffer 2 ColMajor
24               OpMemberDecorate %_UniformBuffer 2 MatrixStride 16
25               OpMemberDecorate %_UniformBuffer 3 Offset 64
26               OpMemberDecorate %_UniformBuffer 3 ColMajor
27               OpMemberDecorate %_UniformBuffer 3 MatrixStride 16
28               OpMemberDecorate %_UniformBuffer 4 Offset 112
29               OpMemberDecorate %_UniformBuffer 4 RelaxedPrecision
30               OpDecorate %_UniformBuffer Block
31               OpDecorate %7 Binding 0
32               OpDecorate %7 DescriptorSet 0
33               OpDecorate %117 RelaxedPrecision
34               OpDecorate %121 RelaxedPrecision
35               OpDecorate %157 RelaxedPrecision
36               OpDecorate %173 RelaxedPrecision
37               OpDecorate %201 RelaxedPrecision
38               OpDecorate %203 RelaxedPrecision
39               OpDecorate %204 RelaxedPrecision
40      %float = OpTypeFloat 32
41    %v4float = OpTypeVector %float 4
42%_ptr_Output_v4float = OpTypePointer Output %v4float
43%sk_FragColor = OpVariable %_ptr_Output_v4float Output
44    %v2float = OpTypeVector %float 2
45%mat2v2float = OpTypeMatrix %v2float 2
46    %v3float = OpTypeVector %float 3
47%mat3v3float = OpTypeMatrix %v3float 3
48%_UniformBuffer = OpTypeStruct %v4float %v4float %mat2v2float %mat3v3float %v4float
49%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
50          %7 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
51       %void = OpTypeVoid
52         %16 = OpTypeFunction %void
53    %float_0 = OpConstant %float 0
54         %19 = OpConstantComposite %v2float %float_0 %float_0
55%_ptr_Function_v2float = OpTypePointer Function %v2float
56         %23 = OpTypeFunction %v4float %_ptr_Function_v2float
57       %bool = OpTypeBool
58      %false = OpConstantFalse %bool
59%_ptr_Uniform_mat2v2float = OpTypePointer Uniform %mat2v2float
60        %int = OpTypeInt 32 1
61      %int_2 = OpConstant %int 2
62      %int_0 = OpConstant %int 0
63%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
64      %int_1 = OpConstant %int 1
65    %float_3 = OpConstant %float 3
66    %float_6 = OpConstant %float 6
67    %float_4 = OpConstant %float 4
68    %float_8 = OpConstant %float 8
69         %45 = OpConstantComposite %v2float %float_3 %float_6
70         %46 = OpConstantComposite %v2float %float_4 %float_8
71         %47 = OpConstantComposite %mat2v2float %45 %46
72     %v2bool = OpTypeVector %bool 2
73%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
74      %int_3 = OpConstant %int 3
75%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
76   %float_12 = OpConstant %float 12
77    %float_5 = OpConstant %float 5
78   %float_10 = OpConstant %float 10
79   %float_15 = OpConstant %float 15
80   %float_18 = OpConstant %float 18
81         %73 = OpConstantComposite %v3float %float_4 %float_8 %float_12
82         %74 = OpConstantComposite %v3float %float_5 %float_10 %float_15
83         %75 = OpConstantComposite %v3float %float_6 %float_12 %float_18
84         %76 = OpConstantComposite %mat3v3float %73 %74 %75
85     %v3bool = OpTypeVector %bool 3
86%mat3v2float = OpTypeMatrix %v2float 3
87        %100 = OpConstantComposite %v2float %float_5 %float_10
88        %101 = OpConstantComposite %v2float %float_6 %float_12
89        %102 = OpConstantComposite %mat3v2float %46 %100 %101
90%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
91      %int_4 = OpConstant %int 4
92    %float_1 = OpConstant %float 1
93    %float_2 = OpConstant %float 2
94        %124 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_2
95%mat4v4float = OpTypeMatrix %v4float 4
96%float_n1_25 = OpConstant %float -1.25
97 %float_0_75 = OpConstant %float 0.75
98 %float_2_25 = OpConstant %float 2.25
99 %float_n2_5 = OpConstant %float -2.5
100  %float_1_5 = OpConstant %float 1.5
101  %float_4_5 = OpConstant %float 4.5
102        %132 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0_75 %float_2_25
103        %133 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
104        %134 = OpConstantComposite %v4float %float_n2_5 %float_0 %float_1_5 %float_4_5
105        %135 = OpConstantComposite %mat4v4float %132 %133 %133 %134
106     %v4bool = OpTypeVector %bool 4
107        %158 = OpConstantComposite %v2float %float_1 %float_2
108%mat2v4float = OpTypeMatrix %v4float 2
109        %160 = OpConstantComposite %mat2v4float %132 %134
110%mat4v2float = OpTypeMatrix %v2float 4
111        %175 = OpConstantComposite %v2float %float_n1_25 %float_n2_5
112        %176 = OpConstantComposite %v2float %float_0_75 %float_1_5
113        %177 = OpConstantComposite %v2float %float_2_25 %float_4_5
114        %178 = OpConstantComposite %mat4v2float %175 %19 %176 %177
115%_ptr_Function_v4float = OpTypePointer Function %v4float
116%_entrypoint_v = OpFunction %void None %16
117         %17 = OpLabel
118         %20 = OpVariable %_ptr_Function_v2float Function
119               OpStore %20 %19
120         %22 = OpFunctionCall %v4float %main %20
121               OpStore %sk_FragColor %22
122               OpReturn
123               OpFunctionEnd
124       %main = OpFunction %v4float None %23
125         %24 = OpFunctionParameter %_ptr_Function_v2float
126         %25 = OpLabel
127        %195 = OpVariable %_ptr_Function_v4float Function
128         %29 = OpAccessChain %_ptr_Uniform_mat2v2float %7 %int_2
129         %34 = OpAccessChain %_ptr_Uniform_v2float %29 %int_0
130         %36 = OpLoad %v2float %34
131         %37 = OpAccessChain %_ptr_Uniform_mat2v2float %7 %int_2
132         %39 = OpAccessChain %_ptr_Uniform_v2float %37 %int_1
133         %40 = OpLoad %v2float %39
134         %28 = OpOuterProduct %mat2v2float %36 %40
135         %49 = OpCompositeExtract %v2float %28 0
136         %50 = OpFOrdEqual %v2bool %49 %45
137         %51 = OpAll %bool %50
138         %52 = OpCompositeExtract %v2float %28 1
139         %53 = OpFOrdEqual %v2bool %52 %46
140         %54 = OpAll %bool %53
141         %55 = OpLogicalAnd %bool %51 %54
142               OpSelectionMerge %57 None
143               OpBranchConditional %55 %56 %57
144         %56 = OpLabel
145         %59 = OpAccessChain %_ptr_Uniform_mat3v3float %7 %int_3
146         %62 = OpAccessChain %_ptr_Uniform_v3float %59 %int_0
147         %64 = OpLoad %v3float %62
148         %65 = OpAccessChain %_ptr_Uniform_mat3v3float %7 %int_3
149         %66 = OpAccessChain %_ptr_Uniform_v3float %65 %int_1
150         %67 = OpLoad %v3float %66
151         %58 = OpOuterProduct %mat3v3float %64 %67
152         %78 = OpCompositeExtract %v3float %58 0
153         %79 = OpFOrdEqual %v3bool %78 %73
154         %80 = OpAll %bool %79
155         %81 = OpCompositeExtract %v3float %58 1
156         %82 = OpFOrdEqual %v3bool %81 %74
157         %83 = OpAll %bool %82
158         %84 = OpLogicalAnd %bool %80 %83
159         %85 = OpCompositeExtract %v3float %58 2
160         %86 = OpFOrdEqual %v3bool %85 %75
161         %87 = OpAll %bool %86
162         %88 = OpLogicalAnd %bool %84 %87
163               OpBranch %57
164         %57 = OpLabel
165         %89 = OpPhi %bool %false %25 %88 %56
166               OpSelectionMerge %91 None
167               OpBranchConditional %89 %90 %91
168         %90 = OpLabel
169         %93 = OpAccessChain %_ptr_Uniform_mat2v2float %7 %int_2
170         %94 = OpAccessChain %_ptr_Uniform_v2float %93 %int_0
171         %95 = OpLoad %v2float %94
172         %96 = OpAccessChain %_ptr_Uniform_mat3v3float %7 %int_3
173         %97 = OpAccessChain %_ptr_Uniform_v3float %96 %int_1
174         %98 = OpLoad %v3float %97
175         %92 = OpOuterProduct %mat3v2float %95 %98
176        %103 = OpCompositeExtract %v2float %92 0
177        %104 = OpFOrdEqual %v2bool %103 %46
178        %105 = OpAll %bool %104
179        %106 = OpCompositeExtract %v2float %92 1
180        %107 = OpFOrdEqual %v2bool %106 %100
181        %108 = OpAll %bool %107
182        %109 = OpLogicalAnd %bool %105 %108
183        %110 = OpCompositeExtract %v2float %92 2
184        %111 = OpFOrdEqual %v2bool %110 %101
185        %112 = OpAll %bool %111
186        %113 = OpLogicalAnd %bool %109 %112
187               OpBranch %91
188         %91 = OpLabel
189        %114 = OpPhi %bool %false %57 %113 %90
190               OpSelectionMerge %116 None
191               OpBranchConditional %114 %115 %116
192        %115 = OpLabel
193        %118 = OpAccessChain %_ptr_Uniform_v4float %7 %int_4
194        %121 = OpLoad %v4float %118
195        %117 = OpOuterProduct %mat4v4float %121 %124
196        %137 = OpCompositeExtract %v4float %117 0
197        %138 = OpFOrdEqual %v4bool %137 %132
198        %139 = OpAll %bool %138
199        %140 = OpCompositeExtract %v4float %117 1
200        %141 = OpFOrdEqual %v4bool %140 %133
201        %142 = OpAll %bool %141
202        %143 = OpLogicalAnd %bool %139 %142
203        %144 = OpCompositeExtract %v4float %117 2
204        %145 = OpFOrdEqual %v4bool %144 %133
205        %146 = OpAll %bool %145
206        %147 = OpLogicalAnd %bool %143 %146
207        %148 = OpCompositeExtract %v4float %117 3
208        %149 = OpFOrdEqual %v4bool %148 %134
209        %150 = OpAll %bool %149
210        %151 = OpLogicalAnd %bool %147 %150
211               OpBranch %116
212        %116 = OpLabel
213        %152 = OpPhi %bool %false %91 %151 %115
214               OpSelectionMerge %154 None
215               OpBranchConditional %152 %153 %154
216        %153 = OpLabel
217        %156 = OpAccessChain %_ptr_Uniform_v4float %7 %int_4
218        %157 = OpLoad %v4float %156
219        %155 = OpOuterProduct %mat2v4float %157 %158
220        %161 = OpCompositeExtract %v4float %155 0
221        %162 = OpFOrdEqual %v4bool %161 %132
222        %163 = OpAll %bool %162
223        %164 = OpCompositeExtract %v4float %155 1
224        %165 = OpFOrdEqual %v4bool %164 %134
225        %166 = OpAll %bool %165
226        %167 = OpLogicalAnd %bool %163 %166
227               OpBranch %154
228        %154 = OpLabel
229        %168 = OpPhi %bool %false %116 %167 %153
230               OpSelectionMerge %170 None
231               OpBranchConditional %168 %169 %170
232        %169 = OpLabel
233        %172 = OpAccessChain %_ptr_Uniform_v4float %7 %int_4
234        %173 = OpLoad %v4float %172
235        %171 = OpOuterProduct %mat4v2float %158 %173
236        %179 = OpCompositeExtract %v2float %171 0
237        %180 = OpFOrdEqual %v2bool %179 %175
238        %181 = OpAll %bool %180
239        %182 = OpCompositeExtract %v2float %171 1
240        %183 = OpFOrdEqual %v2bool %182 %19
241        %184 = OpAll %bool %183
242        %185 = OpLogicalAnd %bool %181 %184
243        %186 = OpCompositeExtract %v2float %171 2
244        %187 = OpFOrdEqual %v2bool %186 %176
245        %188 = OpAll %bool %187
246        %189 = OpLogicalAnd %bool %185 %188
247        %190 = OpCompositeExtract %v2float %171 3
248        %191 = OpFOrdEqual %v2bool %190 %177
249        %192 = OpAll %bool %191
250        %193 = OpLogicalAnd %bool %189 %192
251               OpBranch %170
252        %170 = OpLabel
253        %194 = OpPhi %bool %false %154 %193 %169
254               OpSelectionMerge %199 None
255               OpBranchConditional %194 %197 %198
256        %197 = OpLabel
257        %200 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
258        %201 = OpLoad %v4float %200
259               OpStore %195 %201
260               OpBranch %199
261        %198 = OpLabel
262        %202 = OpAccessChain %_ptr_Uniform_v4float %7 %int_1
263        %203 = OpLoad %v4float %202
264               OpStore %195 %203
265               OpBranch %199
266        %199 = OpLabel
267        %204 = OpLoad %v4float %195
268               OpReturnValue %204
269               OpFunctionEnd
270