1*bbecb9d1SAndroid Build Coastguard Worker /**************************************************************************
2*bbecb9d1SAndroid Build Coastguard Worker *
3*bbecb9d1SAndroid Build Coastguard Worker * Copyright 2020 Google LLC
4*bbecb9d1SAndroid Build Coastguard Worker *
5*bbecb9d1SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
6*bbecb9d1SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
7*bbecb9d1SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
8*bbecb9d1SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*bbecb9d1SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
10*bbecb9d1SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
11*bbecb9d1SAndroid Build Coastguard Worker *
12*bbecb9d1SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included
13*bbecb9d1SAndroid Build Coastguard Worker * in all copies or substantial portions of the Software.
14*bbecb9d1SAndroid Build Coastguard Worker *
15*bbecb9d1SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16*bbecb9d1SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*bbecb9d1SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18*bbecb9d1SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19*bbecb9d1SAndroid Build Coastguard Worker * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20*bbecb9d1SAndroid Build Coastguard Worker * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21*bbecb9d1SAndroid Build Coastguard Worker * OTHER DEALINGS IN THE SOFTWARE.
22*bbecb9d1SAndroid Build Coastguard Worker *
23*bbecb9d1SAndroid Build Coastguard Worker **************************************************************************/
24*bbecb9d1SAndroid Build Coastguard Worker
25*bbecb9d1SAndroid Build Coastguard Worker /*
26*bbecb9d1SAndroid Build Coastguard Worker * basic library initialisation, teardown, reset
27*bbecb9d1SAndroid Build Coastguard Worker * and context creation tests.
28*bbecb9d1SAndroid Build Coastguard Worker */
29*bbecb9d1SAndroid Build Coastguard Worker
30*bbecb9d1SAndroid Build Coastguard Worker #include <check.h>
31*bbecb9d1SAndroid Build Coastguard Worker #include <errno.h>
32*bbecb9d1SAndroid Build Coastguard Worker #include <poll.h>
33*bbecb9d1SAndroid Build Coastguard Worker #include <stdlib.h>
34*bbecb9d1SAndroid Build Coastguard Worker #include <unistd.h>
35*bbecb9d1SAndroid Build Coastguard Worker #include <virglrenderer.h>
36*bbecb9d1SAndroid Build Coastguard Worker
37*bbecb9d1SAndroid Build Coastguard Worker #include "testvirgl.h"
38*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_fence_create)39*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_fence_create)
40*bbecb9d1SAndroid Build Coastguard Worker {
41*bbecb9d1SAndroid Build Coastguard Worker int ret;
42*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_single_ctx();
43*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
44*bbecb9d1SAndroid Build Coastguard Worker
45*bbecb9d1SAndroid Build Coastguard Worker testvirgl_reset_fence();
46*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_create_fence(1, 0);
47*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
48*bbecb9d1SAndroid Build Coastguard Worker
49*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_single_ctx();
50*bbecb9d1SAndroid Build Coastguard Worker }
51*bbecb9d1SAndroid Build Coastguard Worker END_TEST
52*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_fence_poll)53*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_fence_poll)
54*bbecb9d1SAndroid Build Coastguard Worker {
55*bbecb9d1SAndroid Build Coastguard Worker const int target_seqno = 50;
56*bbecb9d1SAndroid Build Coastguard Worker int ret;
57*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_single_ctx();
58*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
59*bbecb9d1SAndroid Build Coastguard Worker
60*bbecb9d1SAndroid Build Coastguard Worker testvirgl_reset_fence();
61*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_create_fence(target_seqno, 0);
62*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
63*bbecb9d1SAndroid Build Coastguard Worker
64*bbecb9d1SAndroid Build Coastguard Worker do {
65*bbecb9d1SAndroid Build Coastguard Worker int seqno;
66*bbecb9d1SAndroid Build Coastguard Worker
67*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_poll();
68*bbecb9d1SAndroid Build Coastguard Worker seqno = testvirgl_get_last_fence();
69*bbecb9d1SAndroid Build Coastguard Worker if (seqno == target_seqno)
70*bbecb9d1SAndroid Build Coastguard Worker break;
71*bbecb9d1SAndroid Build Coastguard Worker
72*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(seqno, 0);
73*bbecb9d1SAndroid Build Coastguard Worker usleep(1000);
74*bbecb9d1SAndroid Build Coastguard Worker } while(1);
75*bbecb9d1SAndroid Build Coastguard Worker
76*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_single_ctx();
77*bbecb9d1SAndroid Build Coastguard Worker }
78*bbecb9d1SAndroid Build Coastguard Worker END_TEST
79*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_fence_poll_many)80*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_fence_poll_many)
81*bbecb9d1SAndroid Build Coastguard Worker {
82*bbecb9d1SAndroid Build Coastguard Worker const int fence_count = 100;
83*bbecb9d1SAndroid Build Coastguard Worker const int base_seqno = 50;
84*bbecb9d1SAndroid Build Coastguard Worker const int target_seqno = base_seqno + fence_count - 1;
85*bbecb9d1SAndroid Build Coastguard Worker int last_seqno;
86*bbecb9d1SAndroid Build Coastguard Worker int ret;
87*bbecb9d1SAndroid Build Coastguard Worker int i;
88*bbecb9d1SAndroid Build Coastguard Worker
89*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_single_ctx();
90*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
91*bbecb9d1SAndroid Build Coastguard Worker
92*bbecb9d1SAndroid Build Coastguard Worker testvirgl_reset_fence();
93*bbecb9d1SAndroid Build Coastguard Worker last_seqno = 0;
94*bbecb9d1SAndroid Build Coastguard Worker
95*bbecb9d1SAndroid Build Coastguard Worker for (i = 0; i < fence_count; i++) {
96*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_create_fence(base_seqno + i, 0);
97*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
98*bbecb9d1SAndroid Build Coastguard Worker }
99*bbecb9d1SAndroid Build Coastguard Worker
100*bbecb9d1SAndroid Build Coastguard Worker do {
101*bbecb9d1SAndroid Build Coastguard Worker int seqno;
102*bbecb9d1SAndroid Build Coastguard Worker
103*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_poll();
104*bbecb9d1SAndroid Build Coastguard Worker seqno = testvirgl_get_last_fence();
105*bbecb9d1SAndroid Build Coastguard Worker if (seqno == target_seqno)
106*bbecb9d1SAndroid Build Coastguard Worker break;
107*bbecb9d1SAndroid Build Coastguard Worker
108*bbecb9d1SAndroid Build Coastguard Worker ck_assert(seqno == 0 || (seqno >= base_seqno && seqno < target_seqno));
109*bbecb9d1SAndroid Build Coastguard Worker
110*bbecb9d1SAndroid Build Coastguard Worker /* monotonic increasing */
111*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_ge(seqno, last_seqno);
112*bbecb9d1SAndroid Build Coastguard Worker last_seqno = seqno;
113*bbecb9d1SAndroid Build Coastguard Worker
114*bbecb9d1SAndroid Build Coastguard Worker usleep(1000);
115*bbecb9d1SAndroid Build Coastguard Worker } while(1);
116*bbecb9d1SAndroid Build Coastguard Worker
117*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_single_ctx();
118*bbecb9d1SAndroid Build Coastguard Worker }
119*bbecb9d1SAndroid Build Coastguard Worker END_TEST
120*bbecb9d1SAndroid Build Coastguard Worker
121*bbecb9d1SAndroid Build Coastguard Worker static int
wait_sync_fd(int fd,int timeout)122*bbecb9d1SAndroid Build Coastguard Worker wait_sync_fd(int fd, int timeout)
123*bbecb9d1SAndroid Build Coastguard Worker {
124*bbecb9d1SAndroid Build Coastguard Worker struct pollfd pollfd = {
125*bbecb9d1SAndroid Build Coastguard Worker .fd = fd,
126*bbecb9d1SAndroid Build Coastguard Worker .events = POLLIN,
127*bbecb9d1SAndroid Build Coastguard Worker };
128*bbecb9d1SAndroid Build Coastguard Worker int ret;
129*bbecb9d1SAndroid Build Coastguard Worker do {
130*bbecb9d1SAndroid Build Coastguard Worker ret = poll(&pollfd, 1, timeout);
131*bbecb9d1SAndroid Build Coastguard Worker } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
132*bbecb9d1SAndroid Build Coastguard Worker
133*bbecb9d1SAndroid Build Coastguard Worker if (ret < 0)
134*bbecb9d1SAndroid Build Coastguard Worker return -errno;
135*bbecb9d1SAndroid Build Coastguard Worker else if (ret > 0 && !(pollfd.revents & POLLIN))
136*bbecb9d1SAndroid Build Coastguard Worker return -EINVAL;
137*bbecb9d1SAndroid Build Coastguard Worker
138*bbecb9d1SAndroid Build Coastguard Worker return ret ? 0 : -ETIME;
139*bbecb9d1SAndroid Build Coastguard Worker }
140*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_fence_export)141*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_fence_export)
142*bbecb9d1SAndroid Build Coastguard Worker {
143*bbecb9d1SAndroid Build Coastguard Worker const int target_seqno = 50;
144*bbecb9d1SAndroid Build Coastguard Worker int fd;
145*bbecb9d1SAndroid Build Coastguard Worker int ret;
146*bbecb9d1SAndroid Build Coastguard Worker
147*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_single_ctx();
148*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
149*bbecb9d1SAndroid Build Coastguard Worker
150*bbecb9d1SAndroid Build Coastguard Worker testvirgl_reset_fence();
151*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_create_fence(target_seqno, 0);
152*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
153*bbecb9d1SAndroid Build Coastguard Worker
154*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_export_fence(target_seqno, &fd);
155*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
156*bbecb9d1SAndroid Build Coastguard Worker
157*bbecb9d1SAndroid Build Coastguard Worker ret = wait_sync_fd(fd, -1);
158*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
159*bbecb9d1SAndroid Build Coastguard Worker
160*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_poll();
161*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(testvirgl_get_last_fence(), target_seqno);
162*bbecb9d1SAndroid Build Coastguard Worker
163*bbecb9d1SAndroid Build Coastguard Worker close(fd);
164*bbecb9d1SAndroid Build Coastguard Worker
165*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_single_ctx();
166*bbecb9d1SAndroid Build Coastguard Worker }
167*bbecb9d1SAndroid Build Coastguard Worker END_TEST
168*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_fence_export_signaled)169*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_fence_export_signaled)
170*bbecb9d1SAndroid Build Coastguard Worker {
171*bbecb9d1SAndroid Build Coastguard Worker const int target_seqno = 50;
172*bbecb9d1SAndroid Build Coastguard Worker const int test_range = 10;
173*bbecb9d1SAndroid Build Coastguard Worker int fd;
174*bbecb9d1SAndroid Build Coastguard Worker int ret;
175*bbecb9d1SAndroid Build Coastguard Worker int i;
176*bbecb9d1SAndroid Build Coastguard Worker
177*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_single_ctx();
178*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
179*bbecb9d1SAndroid Build Coastguard Worker
180*bbecb9d1SAndroid Build Coastguard Worker /* when there is no active fence, a signaled fd is always returned */
181*bbecb9d1SAndroid Build Coastguard Worker for (i = 0; i < test_range; i++) {
182*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_export_fence(target_seqno + 1 + i, &fd);
183*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
184*bbecb9d1SAndroid Build Coastguard Worker
185*bbecb9d1SAndroid Build Coastguard Worker ret = wait_sync_fd(fd, 0);
186*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
187*bbecb9d1SAndroid Build Coastguard Worker
188*bbecb9d1SAndroid Build Coastguard Worker close(fd);
189*bbecb9d1SAndroid Build Coastguard Worker }
190*bbecb9d1SAndroid Build Coastguard Worker
191*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_create_fence(target_seqno, 0);
192*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
193*bbecb9d1SAndroid Build Coastguard Worker
194*bbecb9d1SAndroid Build Coastguard Worker /* when there is any active fence, a signaled fd is returned when the
195*bbecb9d1SAndroid Build Coastguard Worker * requested seqno is smaller than the first active fence
196*bbecb9d1SAndroid Build Coastguard Worker */
197*bbecb9d1SAndroid Build Coastguard Worker for (i = 0; i < test_range; i++) {
198*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_export_fence(target_seqno - 1 - i, &fd);
199*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
200*bbecb9d1SAndroid Build Coastguard Worker
201*bbecb9d1SAndroid Build Coastguard Worker ret = wait_sync_fd(fd, 0);
202*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
203*bbecb9d1SAndroid Build Coastguard Worker
204*bbecb9d1SAndroid Build Coastguard Worker close(fd);
205*bbecb9d1SAndroid Build Coastguard Worker }
206*bbecb9d1SAndroid Build Coastguard Worker
207*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_single_ctx();
208*bbecb9d1SAndroid Build Coastguard Worker }
209*bbecb9d1SAndroid Build Coastguard Worker END_TEST
210*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_fence_export_invalid)211*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_fence_export_invalid)
212*bbecb9d1SAndroid Build Coastguard Worker {
213*bbecb9d1SAndroid Build Coastguard Worker const int target_seqno = 50;
214*bbecb9d1SAndroid Build Coastguard Worker const int target_seqno2 = 55;
215*bbecb9d1SAndroid Build Coastguard Worker int seqno;
216*bbecb9d1SAndroid Build Coastguard Worker int fd;
217*bbecb9d1SAndroid Build Coastguard Worker int ret;
218*bbecb9d1SAndroid Build Coastguard Worker
219*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_single_ctx();
220*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
221*bbecb9d1SAndroid Build Coastguard Worker
222*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_create_fence(target_seqno, 0);
223*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
224*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_create_fence(target_seqno2, 0);
225*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
226*bbecb9d1SAndroid Build Coastguard Worker
227*bbecb9d1SAndroid Build Coastguard Worker for (seqno = target_seqno; seqno <= target_seqno2 + 1; seqno++) {
228*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_export_fence(seqno, &fd);
229*bbecb9d1SAndroid Build Coastguard Worker if (seqno == target_seqno || seqno == target_seqno2) {
230*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
231*bbecb9d1SAndroid Build Coastguard Worker close(fd);
232*bbecb9d1SAndroid Build Coastguard Worker } else {
233*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, -EINVAL);
234*bbecb9d1SAndroid Build Coastguard Worker }
235*bbecb9d1SAndroid Build Coastguard Worker }
236*bbecb9d1SAndroid Build Coastguard Worker
237*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_single_ctx();
238*bbecb9d1SAndroid Build Coastguard Worker }
239*bbecb9d1SAndroid Build Coastguard Worker END_TEST
240*bbecb9d1SAndroid Build Coastguard Worker
virgl_init_suite(bool include_fence_export)241*bbecb9d1SAndroid Build Coastguard Worker static Suite *virgl_init_suite(bool include_fence_export)
242*bbecb9d1SAndroid Build Coastguard Worker {
243*bbecb9d1SAndroid Build Coastguard Worker Suite *s;
244*bbecb9d1SAndroid Build Coastguard Worker TCase *tc_core;
245*bbecb9d1SAndroid Build Coastguard Worker
246*bbecb9d1SAndroid Build Coastguard Worker s = suite_create("virgl_fence");
247*bbecb9d1SAndroid Build Coastguard Worker tc_core = tcase_create("fence");
248*bbecb9d1SAndroid Build Coastguard Worker
249*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_fence_create);
250*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_fence_poll);
251*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_fence_poll_many);
252*bbecb9d1SAndroid Build Coastguard Worker
253*bbecb9d1SAndroid Build Coastguard Worker if (include_fence_export) {
254*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_fence_export);
255*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_fence_export_signaled);
256*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_fence_export_invalid);
257*bbecb9d1SAndroid Build Coastguard Worker }
258*bbecb9d1SAndroid Build Coastguard Worker
259*bbecb9d1SAndroid Build Coastguard Worker suite_add_tcase(s, tc_core);
260*bbecb9d1SAndroid Build Coastguard Worker
261*bbecb9d1SAndroid Build Coastguard Worker return s;
262*bbecb9d1SAndroid Build Coastguard Worker }
263*bbecb9d1SAndroid Build Coastguard Worker
detect_fence_export_support(void)264*bbecb9d1SAndroid Build Coastguard Worker static bool detect_fence_export_support(void)
265*bbecb9d1SAndroid Build Coastguard Worker {
266*bbecb9d1SAndroid Build Coastguard Worker int dummy_cookie;
267*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_callbacks dummy_cbs;
268*bbecb9d1SAndroid Build Coastguard Worker int fd;
269*bbecb9d1SAndroid Build Coastguard Worker int ret;
270*bbecb9d1SAndroid Build Coastguard Worker
271*bbecb9d1SAndroid Build Coastguard Worker memset(&dummy_cbs, 0, sizeof(dummy_cbs));
272*bbecb9d1SAndroid Build Coastguard Worker dummy_cbs.version = 1;
273*bbecb9d1SAndroid Build Coastguard Worker
274*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_init(&dummy_cookie, context_flags, &dummy_cbs);
275*bbecb9d1SAndroid Build Coastguard Worker if (ret)
276*bbecb9d1SAndroid Build Coastguard Worker return false;
277*bbecb9d1SAndroid Build Coastguard Worker
278*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_export_fence(0, &fd);
279*bbecb9d1SAndroid Build Coastguard Worker if (ret) {
280*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_cleanup(&dummy_cookie);
281*bbecb9d1SAndroid Build Coastguard Worker return false;
282*bbecb9d1SAndroid Build Coastguard Worker }
283*bbecb9d1SAndroid Build Coastguard Worker
284*bbecb9d1SAndroid Build Coastguard Worker close(fd);
285*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_cleanup(&dummy_cookie);
286*bbecb9d1SAndroid Build Coastguard Worker return true;
287*bbecb9d1SAndroid Build Coastguard Worker }
288*bbecb9d1SAndroid Build Coastguard Worker
main(void)289*bbecb9d1SAndroid Build Coastguard Worker int main(void)
290*bbecb9d1SAndroid Build Coastguard Worker {
291*bbecb9d1SAndroid Build Coastguard Worker Suite *s;
292*bbecb9d1SAndroid Build Coastguard Worker SRunner *sr;
293*bbecb9d1SAndroid Build Coastguard Worker int number_failed;
294*bbecb9d1SAndroid Build Coastguard Worker bool include_fence_export = false;
295*bbecb9d1SAndroid Build Coastguard Worker
296*bbecb9d1SAndroid Build Coastguard Worker if (getenv("VRENDTEST_USE_EGL_SURFACELESS"))
297*bbecb9d1SAndroid Build Coastguard Worker context_flags |= VIRGL_RENDERER_USE_SURFACELESS;
298*bbecb9d1SAndroid Build Coastguard Worker if (getenv("VRENDTEST_USE_EGL_GLES")) {
299*bbecb9d1SAndroid Build Coastguard Worker context_flags |= VIRGL_RENDERER_USE_GLES;
300*bbecb9d1SAndroid Build Coastguard Worker include_fence_export = detect_fence_export_support();
301*bbecb9d1SAndroid Build Coastguard Worker }
302*bbecb9d1SAndroid Build Coastguard Worker
303*bbecb9d1SAndroid Build Coastguard Worker s = virgl_init_suite(include_fence_export);
304*bbecb9d1SAndroid Build Coastguard Worker sr = srunner_create(s);
305*bbecb9d1SAndroid Build Coastguard Worker
306*bbecb9d1SAndroid Build Coastguard Worker srunner_run_all(sr, CK_NORMAL);
307*bbecb9d1SAndroid Build Coastguard Worker number_failed = srunner_ntests_failed(sr);
308*bbecb9d1SAndroid Build Coastguard Worker srunner_free(sr);
309*bbecb9d1SAndroid Build Coastguard Worker
310*bbecb9d1SAndroid Build Coastguard Worker return number_failed == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
311*bbecb9d1SAndroid Build Coastguard Worker }
312