xref: /aosp_15_r20/external/skia/tests/sksl/shared/MatrixSwizzleStore.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 "testMatrix3x3"
11               OpMemberName %_UniformBuffer 3 "testMatrix4x4"
12               OpName %_entrypoint_v "_entrypoint_v"
13               OpName %test4x4_b "test4x4_b"
14               OpName %matrix "matrix"
15               OpName %values "values"
16               OpName %index "index"
17               OpName %main "main"
18               OpName %_0_matrix "_0_matrix"
19               OpName %_1_values "_1_values"
20               OpName %_2_index "_2_index"
21               OpDecorate %sk_FragColor RelaxedPrecision
22               OpDecorate %sk_FragColor Location 0
23               OpDecorate %sk_FragColor Index 0
24               OpMemberDecorate %_UniformBuffer 0 Offset 0
25               OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
26               OpMemberDecorate %_UniformBuffer 1 Offset 16
27               OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
28               OpMemberDecorate %_UniformBuffer 2 Offset 32
29               OpMemberDecorate %_UniformBuffer 2 ColMajor
30               OpMemberDecorate %_UniformBuffer 2 MatrixStride 16
31               OpMemberDecorate %_UniformBuffer 3 Offset 80
32               OpMemberDecorate %_UniformBuffer 3 ColMajor
33               OpMemberDecorate %_UniformBuffer 3 MatrixStride 16
34               OpDecorate %_UniformBuffer Block
35               OpDecorate %8 Binding 0
36               OpDecorate %8 DescriptorSet 0
37               OpDecorate %155 RelaxedPrecision
38               OpDecorate %157 RelaxedPrecision
39               OpDecorate %158 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    %v3float = OpTypeVector %float 3
45%mat3v3float = OpTypeMatrix %v3float 3
46%mat4v4float = OpTypeMatrix %v4float 4
47%_UniformBuffer = OpTypeStruct %v4float %v4float %mat3v3float %mat4v4float
48%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
49          %8 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
50       %void = OpTypeVoid
51         %16 = OpTypeFunction %void
52    %float_0 = OpConstant %float 0
53    %v2float = OpTypeVector %float 2
54         %20 = OpConstantComposite %v2float %float_0 %float_0
55%_ptr_Function_v2float = OpTypePointer Function %v2float
56       %bool = OpTypeBool
57         %25 = OpTypeFunction %bool
58%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
59%_ptr_Function_v4float = OpTypePointer Function %v4float
60    %float_4 = OpConstant %float 4
61    %float_3 = OpConstant %float 3
62    %float_2 = OpConstant %float 2
63    %float_1 = OpConstant %float 1
64         %35 = OpConstantComposite %v4float %float_4 %float_3 %float_2 %float_1
65        %int = OpTypeInt 32 1
66%_ptr_Function_int = OpTypePointer Function %int
67      %int_0 = OpConstant %int 0
68      %int_4 = OpConstant %int 4
69         %61 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_4
70      %int_1 = OpConstant %int 1
71%_ptr_Uniform_mat4v4float = OpTypePointer Uniform %mat4v4float
72      %int_3 = OpConstant %int 3
73     %v4bool = OpTypeVector %bool 4
74         %91 = OpTypeFunction %v4float %_ptr_Function_v2float
75%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
76%_ptr_Function_v3float = OpTypePointer Function %v3float
77         %98 = OpConstantComposite %v3float %float_3 %float_2 %float_1
78%_ptr_Function_float = OpTypePointer Function %float
79        %120 = OpConstantComposite %v3float %float_3 %float_3 %float_3
80      %false = OpConstantFalse %bool
81%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
82      %int_2 = OpConstant %int 2
83     %v3bool = OpTypeVector %bool 3
84%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
85%_entrypoint_v = OpFunction %void None %16
86         %17 = OpLabel
87         %21 = OpVariable %_ptr_Function_v2float Function
88               OpStore %21 %20
89         %23 = OpFunctionCall %v4float %main %21
90               OpStore %sk_FragColor %23
91               OpReturn
92               OpFunctionEnd
93  %test4x4_b = OpFunction %bool None %25
94         %26 = OpLabel
95     %matrix = OpVariable %_ptr_Function_mat4v4float Function
96     %values = OpVariable %_ptr_Function_v4float Function
97      %index = OpVariable %_ptr_Function_int Function
98               OpStore %values %35
99               OpStore %index %int_0
100               OpBranch %40
101         %40 = OpLabel
102               OpLoopMerge %44 %43 None
103               OpBranch %41
104         %41 = OpLabel
105         %45 = OpLoad %int %index
106         %47 = OpSLessThan %bool %45 %int_4
107               OpBranchConditional %47 %42 %44
108         %42 = OpLabel
109         %48 = OpLoad %v4float %values
110         %49 = OpVectorShuffle %v2float %48 %48 0 3
111         %50 = OpLoad %int %index
112         %51 = OpAccessChain %_ptr_Function_v4float %matrix %50
113         %52 = OpLoad %v4float %51
114         %53 = OpVectorShuffle %v4float %52 %49 5 1 2 4
115               OpStore %51 %53
116         %54 = OpLoad %v4float %values
117         %55 = OpVectorShuffle %v2float %54 %54 1 2
118         %56 = OpLoad %int %index
119         %57 = OpAccessChain %_ptr_Function_v4float %matrix %56
120         %58 = OpLoad %v4float %57
121         %59 = OpVectorShuffle %v4float %58 %55 0 5 4 3
122               OpStore %57 %59
123         %60 = OpLoad %v4float %values
124         %62 = OpFAdd %v4float %60 %61
125               OpStore %values %62
126               OpBranch %43
127         %43 = OpLabel
128         %64 = OpLoad %int %index
129         %65 = OpIAdd %int %64 %int_1
130               OpStore %index %65
131               OpBranch %40
132         %44 = OpLabel
133         %66 = OpLoad %mat4v4float %matrix
134         %67 = OpAccessChain %_ptr_Uniform_mat4v4float %8 %int_3
135         %70 = OpLoad %mat4v4float %67
136         %72 = OpCompositeExtract %v4float %66 0
137         %73 = OpCompositeExtract %v4float %70 0
138         %74 = OpFOrdEqual %v4bool %72 %73
139         %75 = OpAll %bool %74
140         %76 = OpCompositeExtract %v4float %66 1
141         %77 = OpCompositeExtract %v4float %70 1
142         %78 = OpFOrdEqual %v4bool %76 %77
143         %79 = OpAll %bool %78
144         %80 = OpLogicalAnd %bool %75 %79
145         %81 = OpCompositeExtract %v4float %66 2
146         %82 = OpCompositeExtract %v4float %70 2
147         %83 = OpFOrdEqual %v4bool %81 %82
148         %84 = OpAll %bool %83
149         %85 = OpLogicalAnd %bool %80 %84
150         %86 = OpCompositeExtract %v4float %66 3
151         %87 = OpCompositeExtract %v4float %70 3
152         %88 = OpFOrdEqual %v4bool %86 %87
153         %89 = OpAll %bool %88
154         %90 = OpLogicalAnd %bool %85 %89
155               OpReturnValue %90
156               OpFunctionEnd
157       %main = OpFunction %v4float None %91
158         %92 = OpFunctionParameter %_ptr_Function_v2float
159         %93 = OpLabel
160  %_0_matrix = OpVariable %_ptr_Function_mat3v3float Function
161  %_1_values = OpVariable %_ptr_Function_v3float Function
162   %_2_index = OpVariable %_ptr_Function_int Function
163        %149 = OpVariable %_ptr_Function_v4float Function
164               OpStore %_1_values %98
165               OpStore %_2_index %int_0
166               OpBranch %100
167        %100 = OpLabel
168               OpLoopMerge %104 %103 None
169               OpBranch %101
170        %101 = OpLabel
171        %105 = OpLoad %int %_2_index
172        %106 = OpSLessThan %bool %105 %int_3
173               OpBranchConditional %106 %102 %104
174        %102 = OpLabel
175        %107 = OpLoad %v3float %_1_values
176        %108 = OpVectorShuffle %v2float %107 %107 0 2
177        %109 = OpLoad %int %_2_index
178        %110 = OpAccessChain %_ptr_Function_v3float %_0_matrix %109
179        %111 = OpLoad %v3float %110
180        %112 = OpVectorShuffle %v3float %111 %108 4 1 3
181               OpStore %110 %112
182        %113 = OpLoad %v3float %_1_values
183        %114 = OpCompositeExtract %float %113 1
184        %115 = OpLoad %int %_2_index
185        %116 = OpAccessChain %_ptr_Function_v3float %_0_matrix %115
186        %117 = OpAccessChain %_ptr_Function_float %116 %int_1
187               OpStore %117 %114
188        %119 = OpLoad %v3float %_1_values
189        %121 = OpFAdd %v3float %119 %120
190               OpStore %_1_values %121
191               OpBranch %103
192        %103 = OpLabel
193        %122 = OpLoad %int %_2_index
194        %123 = OpIAdd %int %122 %int_1
195               OpStore %_2_index %123
196               OpBranch %100
197        %104 = OpLabel
198        %125 = OpLoad %mat3v3float %_0_matrix
199        %126 = OpAccessChain %_ptr_Uniform_mat3v3float %8 %int_2
200        %129 = OpLoad %mat3v3float %126
201        %131 = OpCompositeExtract %v3float %125 0
202        %132 = OpCompositeExtract %v3float %129 0
203        %133 = OpFOrdEqual %v3bool %131 %132
204        %134 = OpAll %bool %133
205        %135 = OpCompositeExtract %v3float %125 1
206        %136 = OpCompositeExtract %v3float %129 1
207        %137 = OpFOrdEqual %v3bool %135 %136
208        %138 = OpAll %bool %137
209        %139 = OpLogicalAnd %bool %134 %138
210        %140 = OpCompositeExtract %v3float %125 2
211        %141 = OpCompositeExtract %v3float %129 2
212        %142 = OpFOrdEqual %v3bool %140 %141
213        %143 = OpAll %bool %142
214        %144 = OpLogicalAnd %bool %139 %143
215               OpSelectionMerge %146 None
216               OpBranchConditional %144 %145 %146
217        %145 = OpLabel
218        %147 = OpFunctionCall %bool %test4x4_b
219               OpBranch %146
220        %146 = OpLabel
221        %148 = OpPhi %bool %false %104 %147 %145
222               OpSelectionMerge %152 None
223               OpBranchConditional %148 %150 %151
224        %150 = OpLabel
225        %153 = OpAccessChain %_ptr_Uniform_v4float %8 %int_0
226        %155 = OpLoad %v4float %153
227               OpStore %149 %155
228               OpBranch %152
229        %151 = OpLabel
230        %156 = OpAccessChain %_ptr_Uniform_v4float %8 %int_1
231        %157 = OpLoad %v4float %156
232               OpStore %149 %157
233               OpBranch %152
234        %152 = OpLabel
235        %158 = OpLoad %v4float %149
236               OpReturnValue %158
237               OpFunctionEnd
238