xref: /aosp_15_r20/external/mesa3d/src/panfrost/lib/tests/test-blend.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright (C) 2021 Collabora, Ltd.
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  * Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20*61046927SAndroid Build Coastguard Worker  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21*61046927SAndroid Build Coastguard Worker  * SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  */
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker #include "pan_blend.h"
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker /* A test consists of a given blend mode and its translated form */
27*61046927SAndroid Build Coastguard Worker struct test {
28*61046927SAndroid Build Coastguard Worker    const char *label;
29*61046927SAndroid Build Coastguard Worker    struct pan_blend_equation eq;
30*61046927SAndroid Build Coastguard Worker    unsigned constant_mask;
31*61046927SAndroid Build Coastguard Worker    bool reads_dest;
32*61046927SAndroid Build Coastguard Worker    bool opaque;
33*61046927SAndroid Build Coastguard Worker    bool fixed_function;
34*61046927SAndroid Build Coastguard Worker    bool alpha_zero_nop;
35*61046927SAndroid Build Coastguard Worker    bool alpha_one_store;
36*61046927SAndroid Build Coastguard Worker    uint32_t hardware;
37*61046927SAndroid Build Coastguard Worker };
38*61046927SAndroid Build Coastguard Worker 
39*61046927SAndroid Build Coastguard Worker /* clang-format off */
40*61046927SAndroid Build Coastguard Worker #define RGBA(key, value) \
41*61046927SAndroid Build Coastguard Worker    .rgb_ ## key = value, \
42*61046927SAndroid Build Coastguard Worker    .alpha_ ## key = value
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker static const struct test blend_tests[] = {
45*61046927SAndroid Build Coastguard Worker    {
46*61046927SAndroid Build Coastguard Worker       "Replace",
47*61046927SAndroid Build Coastguard Worker       {
48*61046927SAndroid Build Coastguard Worker          .blend_enable = false,
49*61046927SAndroid Build Coastguard Worker          .color_mask = 0xF,
50*61046927SAndroid Build Coastguard Worker       },
51*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
52*61046927SAndroid Build Coastguard Worker       .reads_dest = false,
53*61046927SAndroid Build Coastguard Worker       .opaque = true,
54*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
55*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
56*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
57*61046927SAndroid Build Coastguard Worker       .hardware = 0xF0122122
58*61046927SAndroid Build Coastguard Worker    },
59*61046927SAndroid Build Coastguard Worker    {
60*61046927SAndroid Build Coastguard Worker       "Alpha",
61*61046927SAndroid Build Coastguard Worker       {
62*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
63*61046927SAndroid Build Coastguard Worker          .color_mask = 0xF,
64*61046927SAndroid Build Coastguard Worker 
65*61046927SAndroid Build Coastguard Worker          RGBA(func, PIPE_BLEND_ADD),
66*61046927SAndroid Build Coastguard Worker          RGBA(src_factor, PIPE_BLENDFACTOR_SRC_ALPHA),
67*61046927SAndroid Build Coastguard Worker          RGBA(dst_factor, PIPE_BLENDFACTOR_INV_SRC_ALPHA),
68*61046927SAndroid Build Coastguard Worker       },
69*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
70*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
71*61046927SAndroid Build Coastguard Worker       .opaque = false,
72*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
73*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = true,
74*61046927SAndroid Build Coastguard Worker       .alpha_one_store = true,
75*61046927SAndroid Build Coastguard Worker       .hardware = 0xF0503503
76*61046927SAndroid Build Coastguard Worker    },
77*61046927SAndroid Build Coastguard Worker    {
78*61046927SAndroid Build Coastguard Worker       "Additive",
79*61046927SAndroid Build Coastguard Worker       {
80*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
81*61046927SAndroid Build Coastguard Worker          .color_mask = 0xF,
82*61046927SAndroid Build Coastguard Worker 
83*61046927SAndroid Build Coastguard Worker          RGBA(func, PIPE_BLEND_ADD),
84*61046927SAndroid Build Coastguard Worker          RGBA(src_factor, PIPE_BLENDFACTOR_ONE),
85*61046927SAndroid Build Coastguard Worker          RGBA(dst_factor, PIPE_BLENDFACTOR_ONE),
86*61046927SAndroid Build Coastguard Worker       },
87*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
88*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
89*61046927SAndroid Build Coastguard Worker       .opaque = false,
90*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
91*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
92*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
93*61046927SAndroid Build Coastguard Worker       .hardware = 0xF0932932 /* equivalently 0xF0923923 */
94*61046927SAndroid Build Coastguard Worker    },
95*61046927SAndroid Build Coastguard Worker    {
96*61046927SAndroid Build Coastguard Worker       "Additive-Alpha",
97*61046927SAndroid Build Coastguard Worker       {
98*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
99*61046927SAndroid Build Coastguard Worker          .color_mask = 0xF,
100*61046927SAndroid Build Coastguard Worker 
101*61046927SAndroid Build Coastguard Worker          RGBA(func, PIPE_BLEND_ADD),
102*61046927SAndroid Build Coastguard Worker          RGBA(src_factor, PIPE_BLENDFACTOR_SRC_ALPHA),
103*61046927SAndroid Build Coastguard Worker          RGBA(dst_factor, PIPE_BLENDFACTOR_ONE),
104*61046927SAndroid Build Coastguard Worker       },
105*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
106*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
107*61046927SAndroid Build Coastguard Worker       .opaque = false,
108*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
109*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = true,
110*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
111*61046927SAndroid Build Coastguard Worker       .hardware = 0xF0523523
112*61046927SAndroid Build Coastguard Worker    },
113*61046927SAndroid Build Coastguard Worker    {
114*61046927SAndroid Build Coastguard Worker       "Subtractive",
115*61046927SAndroid Build Coastguard Worker       {
116*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
117*61046927SAndroid Build Coastguard Worker          .color_mask = 0xF,
118*61046927SAndroid Build Coastguard Worker 
119*61046927SAndroid Build Coastguard Worker          RGBA(func, PIPE_BLEND_SUBTRACT),
120*61046927SAndroid Build Coastguard Worker          RGBA(src_factor, PIPE_BLENDFACTOR_ONE),
121*61046927SAndroid Build Coastguard Worker          RGBA(dst_factor, PIPE_BLENDFACTOR_ONE),
122*61046927SAndroid Build Coastguard Worker       },
123*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
124*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
125*61046927SAndroid Build Coastguard Worker       .opaque = false,
126*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
127*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
128*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
129*61046927SAndroid Build Coastguard Worker       .hardware = 0xF09B29B2 /* equivalently 0xF09A39A3 */
130*61046927SAndroid Build Coastguard Worker    },
131*61046927SAndroid Build Coastguard Worker    {
132*61046927SAndroid Build Coastguard Worker       "Subtractive-Alpha",
133*61046927SAndroid Build Coastguard Worker       {
134*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
135*61046927SAndroid Build Coastguard Worker          .color_mask = 0xF,
136*61046927SAndroid Build Coastguard Worker 
137*61046927SAndroid Build Coastguard Worker          RGBA(func, PIPE_BLEND_SUBTRACT),
138*61046927SAndroid Build Coastguard Worker          RGBA(src_factor, PIPE_BLENDFACTOR_SRC_ALPHA),
139*61046927SAndroid Build Coastguard Worker          RGBA(dst_factor, PIPE_BLENDFACTOR_ONE),
140*61046927SAndroid Build Coastguard Worker       },
141*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
142*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
143*61046927SAndroid Build Coastguard Worker       .opaque = false,
144*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
145*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
146*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
147*61046927SAndroid Build Coastguard Worker       .hardware = 0xF052B52b /* equivalently 0xF05A35A3 */
148*61046927SAndroid Build Coastguard Worker    },
149*61046927SAndroid Build Coastguard Worker    {
150*61046927SAndroid Build Coastguard Worker       "Modulate",
151*61046927SAndroid Build Coastguard Worker       {
152*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
153*61046927SAndroid Build Coastguard Worker          .color_mask = 0xF,
154*61046927SAndroid Build Coastguard Worker 
155*61046927SAndroid Build Coastguard Worker          RGBA(func, PIPE_BLEND_ADD),
156*61046927SAndroid Build Coastguard Worker          RGBA(src_factor, PIPE_BLENDFACTOR_ZERO),
157*61046927SAndroid Build Coastguard Worker          RGBA(dst_factor, PIPE_BLENDFACTOR_SRC_COLOR),
158*61046927SAndroid Build Coastguard Worker       },
159*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
160*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
161*61046927SAndroid Build Coastguard Worker       .opaque = false,
162*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
163*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
164*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
165*61046927SAndroid Build Coastguard Worker       .hardware = 0xF0231231 /* equivalently 0xF0321321 */
166*61046927SAndroid Build Coastguard Worker    },
167*61046927SAndroid Build Coastguard Worker    {
168*61046927SAndroid Build Coastguard Worker       "Replace masked",
169*61046927SAndroid Build Coastguard Worker       {
170*61046927SAndroid Build Coastguard Worker          .blend_enable = false,
171*61046927SAndroid Build Coastguard Worker          .color_mask = 0x3,
172*61046927SAndroid Build Coastguard Worker       },
173*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
174*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
175*61046927SAndroid Build Coastguard Worker       .opaque = false,
176*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
177*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
178*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
179*61046927SAndroid Build Coastguard Worker       .hardware = 0x30122122
180*61046927SAndroid Build Coastguard Worker    },
181*61046927SAndroid Build Coastguard Worker    {
182*61046927SAndroid Build Coastguard Worker       "Modulate masked",
183*61046927SAndroid Build Coastguard Worker       {
184*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
185*61046927SAndroid Build Coastguard Worker          .color_mask = 0xA,
186*61046927SAndroid Build Coastguard Worker 
187*61046927SAndroid Build Coastguard Worker          RGBA(func, PIPE_BLEND_ADD),
188*61046927SAndroid Build Coastguard Worker          RGBA(src_factor, PIPE_BLENDFACTOR_ZERO),
189*61046927SAndroid Build Coastguard Worker          RGBA(dst_factor, PIPE_BLENDFACTOR_SRC_COLOR),
190*61046927SAndroid Build Coastguard Worker       },
191*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
192*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
193*61046927SAndroid Build Coastguard Worker       .opaque = false,
194*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
195*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
196*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
197*61046927SAndroid Build Coastguard Worker       .hardware = 0xA0231231 /* equivalently 0xA0321321 */
198*61046927SAndroid Build Coastguard Worker    },
199*61046927SAndroid Build Coastguard Worker    {
200*61046927SAndroid Build Coastguard Worker       "src*dst + dst*src",
201*61046927SAndroid Build Coastguard Worker       {
202*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
203*61046927SAndroid Build Coastguard Worker          .color_mask = 0xF,
204*61046927SAndroid Build Coastguard Worker 
205*61046927SAndroid Build Coastguard Worker          RGBA(func, PIPE_BLEND_ADD),
206*61046927SAndroid Build Coastguard Worker          RGBA(src_factor, PIPE_BLENDFACTOR_DST_COLOR),
207*61046927SAndroid Build Coastguard Worker          RGBA(dst_factor, PIPE_BLENDFACTOR_SRC_COLOR),
208*61046927SAndroid Build Coastguard Worker       },
209*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
210*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
211*61046927SAndroid Build Coastguard Worker       .opaque = false,
212*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
213*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
214*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
215*61046927SAndroid Build Coastguard Worker       .hardware = 0xF0431431 /* 0 + dest * (2*src) */
216*61046927SAndroid Build Coastguard Worker    },
217*61046927SAndroid Build Coastguard Worker    {
218*61046927SAndroid Build Coastguard Worker       "Mixed src*dst + dst*src masked I",
219*61046927SAndroid Build Coastguard Worker       {
220*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
221*61046927SAndroid Build Coastguard Worker          .color_mask = 0xC,
222*61046927SAndroid Build Coastguard Worker 
223*61046927SAndroid Build Coastguard Worker          .rgb_func = PIPE_BLEND_ADD,
224*61046927SAndroid Build Coastguard Worker          .rgb_src_factor = PIPE_BLENDFACTOR_ONE,
225*61046927SAndroid Build Coastguard Worker          .rgb_dst_factor= PIPE_BLENDFACTOR_ZERO,
226*61046927SAndroid Build Coastguard Worker 
227*61046927SAndroid Build Coastguard Worker          .alpha_func = PIPE_BLEND_ADD,
228*61046927SAndroid Build Coastguard Worker          .alpha_src_factor = PIPE_BLENDFACTOR_DST_COLOR,
229*61046927SAndroid Build Coastguard Worker          .alpha_dst_factor= PIPE_BLENDFACTOR_SRC_COLOR,
230*61046927SAndroid Build Coastguard Worker       },
231*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
232*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
233*61046927SAndroid Build Coastguard Worker       .opaque = false,
234*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
235*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
236*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
237*61046927SAndroid Build Coastguard Worker       .hardware = 0xC0431132 /* 0 + dest * (2*src); equivalent 0xC0431122 */
238*61046927SAndroid Build Coastguard Worker    },
239*61046927SAndroid Build Coastguard Worker    {
240*61046927SAndroid Build Coastguard Worker       "Mixed src*dst + dst*src masked II",
241*61046927SAndroid Build Coastguard Worker       {
242*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
243*61046927SAndroid Build Coastguard Worker          .color_mask = 0xC,
244*61046927SAndroid Build Coastguard Worker 
245*61046927SAndroid Build Coastguard Worker          .rgb_func = PIPE_BLEND_ADD,
246*61046927SAndroid Build Coastguard Worker          .rgb_src_factor = PIPE_BLENDFACTOR_ONE,
247*61046927SAndroid Build Coastguard Worker          .rgb_dst_factor = PIPE_BLENDFACTOR_ZERO,
248*61046927SAndroid Build Coastguard Worker 
249*61046927SAndroid Build Coastguard Worker          .alpha_func = PIPE_BLEND_ADD,
250*61046927SAndroid Build Coastguard Worker          .alpha_src_factor = PIPE_BLENDFACTOR_DST_ALPHA,
251*61046927SAndroid Build Coastguard Worker          .alpha_dst_factor= PIPE_BLENDFACTOR_SRC_COLOR,
252*61046927SAndroid Build Coastguard Worker       },
253*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
254*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
255*61046927SAndroid Build Coastguard Worker       .opaque = false,
256*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
257*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
258*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
259*61046927SAndroid Build Coastguard Worker       .hardware = 0xC0431132 /* 0 + dest * (2*src); equivalent 0xC0431122 */
260*61046927SAndroid Build Coastguard Worker    },
261*61046927SAndroid Build Coastguard Worker    {
262*61046927SAndroid Build Coastguard Worker       "Mixed src*dst + dst*src masked III",
263*61046927SAndroid Build Coastguard Worker       {
264*61046927SAndroid Build Coastguard Worker          .blend_enable = true,
265*61046927SAndroid Build Coastguard Worker          .color_mask = 0xC,
266*61046927SAndroid Build Coastguard Worker 
267*61046927SAndroid Build Coastguard Worker          .rgb_func = PIPE_BLEND_ADD,
268*61046927SAndroid Build Coastguard Worker          .rgb_src_factor = PIPE_BLENDFACTOR_ONE,
269*61046927SAndroid Build Coastguard Worker          .rgb_dst_factor = PIPE_BLENDFACTOR_ZERO,
270*61046927SAndroid Build Coastguard Worker 
271*61046927SAndroid Build Coastguard Worker          .alpha_func = PIPE_BLEND_ADD,
272*61046927SAndroid Build Coastguard Worker          .alpha_src_factor = PIPE_BLENDFACTOR_DST_ALPHA,
273*61046927SAndroid Build Coastguard Worker          .alpha_dst_factor= PIPE_BLENDFACTOR_SRC_ALPHA,
274*61046927SAndroid Build Coastguard Worker       },
275*61046927SAndroid Build Coastguard Worker       .constant_mask = 0x0,
276*61046927SAndroid Build Coastguard Worker       .reads_dest = true,
277*61046927SAndroid Build Coastguard Worker       .opaque = false,
278*61046927SAndroid Build Coastguard Worker       .fixed_function = true,
279*61046927SAndroid Build Coastguard Worker       .alpha_zero_nop = false,
280*61046927SAndroid Build Coastguard Worker       .alpha_one_store = false,
281*61046927SAndroid Build Coastguard Worker       .hardware = 0xC0431132 /* 0 + dest * (2*src); equivalent 0xC0431122 */
282*61046927SAndroid Build Coastguard Worker    }
283*61046927SAndroid Build Coastguard Worker };
284*61046927SAndroid Build Coastguard Worker /* clang-format on */
285*61046927SAndroid Build Coastguard Worker 
286*61046927SAndroid Build Coastguard Worker #define ASSERT_EQ(x, y)                                                        \
287*61046927SAndroid Build Coastguard Worker    do {                                                                        \
288*61046927SAndroid Build Coastguard Worker       if (x == y) {                                                            \
289*61046927SAndroid Build Coastguard Worker          nr_pass++;                                                            \
290*61046927SAndroid Build Coastguard Worker       } else {                                                                 \
291*61046927SAndroid Build Coastguard Worker          nr_fail++;                                                            \
292*61046927SAndroid Build Coastguard Worker          fprintf(stderr, "%s: Assertion failed %s (%x) != %s (%x)\n", T.label, \
293*61046927SAndroid Build Coastguard Worker                  #x, x, #y, y);                                                \
294*61046927SAndroid Build Coastguard Worker       }                                                                        \
295*61046927SAndroid Build Coastguard Worker    } while (0)
296*61046927SAndroid Build Coastguard Worker 
297*61046927SAndroid Build Coastguard Worker int
main(int argc,const char ** argv)298*61046927SAndroid Build Coastguard Worker main(int argc, const char **argv)
299*61046927SAndroid Build Coastguard Worker {
300*61046927SAndroid Build Coastguard Worker    unsigned nr_pass = 0, nr_fail = 0;
301*61046927SAndroid Build Coastguard Worker 
302*61046927SAndroid Build Coastguard Worker    for (unsigned i = 0; i < ARRAY_SIZE(blend_tests); ++i) {
303*61046927SAndroid Build Coastguard Worker       struct test T = blend_tests[i];
304*61046927SAndroid Build Coastguard Worker       ASSERT_EQ(T.constant_mask, pan_blend_constant_mask(T.eq));
305*61046927SAndroid Build Coastguard Worker       ASSERT_EQ(T.reads_dest, pan_blend_reads_dest(T.eq));
306*61046927SAndroid Build Coastguard Worker       ASSERT_EQ(T.opaque, pan_blend_is_opaque(T.eq));
307*61046927SAndroid Build Coastguard Worker       ASSERT_EQ(T.fixed_function, pan_blend_can_fixed_function(T.eq, true));
308*61046927SAndroid Build Coastguard Worker       ASSERT_EQ(T.alpha_zero_nop, pan_blend_alpha_zero_nop(T.eq));
309*61046927SAndroid Build Coastguard Worker       ASSERT_EQ(T.alpha_one_store, pan_blend_alpha_one_store(T.eq));
310*61046927SAndroid Build Coastguard Worker 
311*61046927SAndroid Build Coastguard Worker       if (pan_blend_can_fixed_function(T.eq, true)) {
312*61046927SAndroid Build Coastguard Worker          ASSERT_EQ(T.hardware, pan_pack_blend(T.eq));
313*61046927SAndroid Build Coastguard Worker       }
314*61046927SAndroid Build Coastguard Worker    }
315*61046927SAndroid Build Coastguard Worker 
316*61046927SAndroid Build Coastguard Worker    printf("Passed %u/%u\n", nr_pass, nr_pass + nr_fail);
317*61046927SAndroid Build Coastguard Worker    return nr_fail ? 1 : 0;
318*61046927SAndroid Build Coastguard Worker }
319