1*bbecb9d1SAndroid Build Coastguard Worker /**************************************************************************
2*bbecb9d1SAndroid Build Coastguard Worker *
3*bbecb9d1SAndroid Build Coastguard Worker * Copyright (C) 2014 Red Hat Inc.
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 /* transfer and iov related tests */
26*bbecb9d1SAndroid Build Coastguard Worker #include <check.h>
27*bbecb9d1SAndroid Build Coastguard Worker #include <stdlib.h>
28*bbecb9d1SAndroid Build Coastguard Worker #include <sys/uio.h>
29*bbecb9d1SAndroid Build Coastguard Worker #include <errno.h>
30*bbecb9d1SAndroid Build Coastguard Worker #include <virglrenderer.h>
31*bbecb9d1SAndroid Build Coastguard Worker #include "pipe/p_defines.h"
32*bbecb9d1SAndroid Build Coastguard Worker #include "virgl_hw.h"
33*bbecb9d1SAndroid Build Coastguard Worker #include "virgl_protocol.h"
34*bbecb9d1SAndroid Build Coastguard Worker #include "testvirgl_encode.h"
35*bbecb9d1SAndroid Build Coastguard Worker
36*bbecb9d1SAndroid Build Coastguard Worker /* pass an illegal context to transfer fn */
START_TEST(virgl_test_transfer_read_illegal_ctx)37*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_read_illegal_ctx)
38*bbecb9d1SAndroid Build Coastguard Worker {
39*bbecb9d1SAndroid Build Coastguard Worker int ret;
40*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
41*bbecb9d1SAndroid Build Coastguard Worker
42*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_read_iov(1, 2, 0, 1, 1, &box, 0, NULL, 0);
43*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
44*bbecb9d1SAndroid Build Coastguard Worker }
45*bbecb9d1SAndroid Build Coastguard Worker END_TEST
46*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_write_illegal_ctx)47*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_write_illegal_ctx)
48*bbecb9d1SAndroid Build Coastguard Worker {
49*bbecb9d1SAndroid Build Coastguard Worker int ret;
50*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
51*bbecb9d1SAndroid Build Coastguard Worker
52*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(1, 2, 0, 1, 1, &box, 0, NULL, 0);
53*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
54*bbecb9d1SAndroid Build Coastguard Worker }
55*bbecb9d1SAndroid Build Coastguard Worker END_TEST
56*bbecb9d1SAndroid Build Coastguard Worker
57*bbecb9d1SAndroid Build Coastguard Worker /* pass a resource not bound to the context to transfers */
START_TEST(virgl_test_transfer_read_unbound_res)58*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_read_unbound_res)
59*bbecb9d1SAndroid Build Coastguard Worker {
60*bbecb9d1SAndroid Build Coastguard Worker int ret;
61*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
62*bbecb9d1SAndroid Build Coastguard Worker
63*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_read_iov(1, 1, 0, 1, 1, &box, 0, NULL, 0);
64*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
65*bbecb9d1SAndroid Build Coastguard Worker }
66*bbecb9d1SAndroid Build Coastguard Worker END_TEST
67*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_write_unbound_res)68*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_write_unbound_res)
69*bbecb9d1SAndroid Build Coastguard Worker {
70*bbecb9d1SAndroid Build Coastguard Worker int ret;
71*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
72*bbecb9d1SAndroid Build Coastguard Worker
73*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(1, 1, 0, 1, 1, &box, 0, NULL, 0);
74*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
75*bbecb9d1SAndroid Build Coastguard Worker }
76*bbecb9d1SAndroid Build Coastguard Worker END_TEST
77*bbecb9d1SAndroid Build Coastguard Worker
78*bbecb9d1SAndroid Build Coastguard Worker /* don't pass an IOV to read into */
START_TEST(virgl_test_transfer_read_no_iov)79*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_read_no_iov)
80*bbecb9d1SAndroid Build Coastguard Worker {
81*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
82*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
83*bbecb9d1SAndroid Build Coastguard Worker int ret;
84*bbecb9d1SAndroid Build Coastguard Worker
85*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
86*bbecb9d1SAndroid Build Coastguard Worker
87*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
88*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
89*bbecb9d1SAndroid Build Coastguard Worker
90*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
91*bbecb9d1SAndroid Build Coastguard Worker
92*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_read_iov(1, 1, 0, 1, 1, &box, 0, NULL, 0);
93*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
94*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
95*bbecb9d1SAndroid Build Coastguard Worker
96*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
97*bbecb9d1SAndroid Build Coastguard Worker }
98*bbecb9d1SAndroid Build Coastguard Worker END_TEST
99*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_write_no_iov)100*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_write_no_iov)
101*bbecb9d1SAndroid Build Coastguard Worker {
102*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
103*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
104*bbecb9d1SAndroid Build Coastguard Worker int ret;
105*bbecb9d1SAndroid Build Coastguard Worker
106*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
107*bbecb9d1SAndroid Build Coastguard Worker
108*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
109*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
110*bbecb9d1SAndroid Build Coastguard Worker
111*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
112*bbecb9d1SAndroid Build Coastguard Worker
113*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(1, 1, 0, 1, 1, &box, 0, NULL, 0);
114*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
115*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
116*bbecb9d1SAndroid Build Coastguard Worker
117*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
118*bbecb9d1SAndroid Build Coastguard Worker }
119*bbecb9d1SAndroid Build Coastguard Worker END_TEST
120*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_read_no_box)121*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_read_no_box)
122*bbecb9d1SAndroid Build Coastguard Worker {
123*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
124*bbecb9d1SAndroid Build Coastguard Worker struct iovec iovs[1];
125*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
126*bbecb9d1SAndroid Build Coastguard Worker int ret;
127*bbecb9d1SAndroid Build Coastguard Worker
128*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
129*bbecb9d1SAndroid Build Coastguard Worker
130*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
131*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
132*bbecb9d1SAndroid Build Coastguard Worker
133*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
134*bbecb9d1SAndroid Build Coastguard Worker
135*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_read_iov(1, 1, 0, 1, 1, NULL, 0, iovs, niovs);
136*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
137*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
138*bbecb9d1SAndroid Build Coastguard Worker
139*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
140*bbecb9d1SAndroid Build Coastguard Worker }
141*bbecb9d1SAndroid Build Coastguard Worker END_TEST
142*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_write_no_box)143*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_write_no_box)
144*bbecb9d1SAndroid Build Coastguard Worker {
145*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
146*bbecb9d1SAndroid Build Coastguard Worker struct iovec iovs[1];
147*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
148*bbecb9d1SAndroid Build Coastguard Worker int ret;
149*bbecb9d1SAndroid Build Coastguard Worker
150*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
151*bbecb9d1SAndroid Build Coastguard Worker
152*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
153*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
154*bbecb9d1SAndroid Build Coastguard Worker
155*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
156*bbecb9d1SAndroid Build Coastguard Worker
157*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(1, 1, 0, 1, 1, NULL, 0, iovs, niovs);
158*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
159*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
160*bbecb9d1SAndroid Build Coastguard Worker
161*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
162*bbecb9d1SAndroid Build Coastguard Worker }
163*bbecb9d1SAndroid Build Coastguard Worker END_TEST
164*bbecb9d1SAndroid Build Coastguard Worker
165*bbecb9d1SAndroid Build Coastguard Worker
166*bbecb9d1SAndroid Build Coastguard Worker /* pass a bad box argument */
START_TEST(virgl_test_transfer_read_1d_bad_box)167*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_read_1d_bad_box)
168*bbecb9d1SAndroid Build Coastguard Worker {
169*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
170*bbecb9d1SAndroid Build Coastguard Worker struct iovec iovs[1];
171*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
172*bbecb9d1SAndroid Build Coastguard Worker int ret;
173*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
174*bbecb9d1SAndroid Build Coastguard Worker
175*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
176*bbecb9d1SAndroid Build Coastguard Worker
177*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
178*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
179*bbecb9d1SAndroid Build Coastguard Worker
180*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
181*bbecb9d1SAndroid Build Coastguard Worker
182*bbecb9d1SAndroid Build Coastguard Worker box.x = box.y = box.z = 0;
183*bbecb9d1SAndroid Build Coastguard Worker box.w = 10;
184*bbecb9d1SAndroid Build Coastguard Worker box.h = 2;
185*bbecb9d1SAndroid Build Coastguard Worker box.d = 1;
186*bbecb9d1SAndroid Build Coastguard Worker
187*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_read_iov(1, 1, 0, 1, 1, &box, 0, iovs, niovs);
188*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
189*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
190*bbecb9d1SAndroid Build Coastguard Worker
191*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
192*bbecb9d1SAndroid Build Coastguard Worker }
193*bbecb9d1SAndroid Build Coastguard Worker END_TEST
194*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_write_1d_bad_box)195*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_write_1d_bad_box)
196*bbecb9d1SAndroid Build Coastguard Worker {
197*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
198*bbecb9d1SAndroid Build Coastguard Worker struct iovec iovs[1];
199*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
200*bbecb9d1SAndroid Build Coastguard Worker int ret;
201*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
202*bbecb9d1SAndroid Build Coastguard Worker
203*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
204*bbecb9d1SAndroid Build Coastguard Worker
205*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
206*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
207*bbecb9d1SAndroid Build Coastguard Worker
208*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
209*bbecb9d1SAndroid Build Coastguard Worker
210*bbecb9d1SAndroid Build Coastguard Worker box.x = box.y = box.z = 0;
211*bbecb9d1SAndroid Build Coastguard Worker box.w = 10;
212*bbecb9d1SAndroid Build Coastguard Worker box.h = 2;
213*bbecb9d1SAndroid Build Coastguard Worker box.d = 1;
214*bbecb9d1SAndroid Build Coastguard Worker
215*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(1, 1, 0, 1, 1, &box, 0, iovs, niovs);
216*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
217*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
218*bbecb9d1SAndroid Build Coastguard Worker
219*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
220*bbecb9d1SAndroid Build Coastguard Worker }
221*bbecb9d1SAndroid Build Coastguard Worker END_TEST
222*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_read_1d_array_bad_box)223*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_read_1d_array_bad_box)
224*bbecb9d1SAndroid Build Coastguard Worker {
225*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
226*bbecb9d1SAndroid Build Coastguard Worker struct iovec iovs[1];
227*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
228*bbecb9d1SAndroid Build Coastguard Worker int ret;
229*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
230*bbecb9d1SAndroid Build Coastguard Worker
231*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
232*bbecb9d1SAndroid Build Coastguard Worker res.target = PIPE_TEXTURE_1D_ARRAY;
233*bbecb9d1SAndroid Build Coastguard Worker res.array_size = 5;
234*bbecb9d1SAndroid Build Coastguard Worker
235*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
236*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
237*bbecb9d1SAndroid Build Coastguard Worker
238*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
239*bbecb9d1SAndroid Build Coastguard Worker
240*bbecb9d1SAndroid Build Coastguard Worker box.x = box.y = box.z = 0;
241*bbecb9d1SAndroid Build Coastguard Worker box.w = 10;
242*bbecb9d1SAndroid Build Coastguard Worker box.h = 2;
243*bbecb9d1SAndroid Build Coastguard Worker box.d = 6;
244*bbecb9d1SAndroid Build Coastguard Worker
245*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_read_iov(1, 1, 0, 1, 1, &box, 0, iovs, niovs);
246*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
247*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
248*bbecb9d1SAndroid Build Coastguard Worker
249*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
250*bbecb9d1SAndroid Build Coastguard Worker }
251*bbecb9d1SAndroid Build Coastguard Worker END_TEST
252*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_read_3d_bad_box)253*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_read_3d_bad_box)
254*bbecb9d1SAndroid Build Coastguard Worker {
255*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
256*bbecb9d1SAndroid Build Coastguard Worker struct iovec iovs[1];
257*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
258*bbecb9d1SAndroid Build Coastguard Worker int ret;
259*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
260*bbecb9d1SAndroid Build Coastguard Worker
261*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
262*bbecb9d1SAndroid Build Coastguard Worker res.target = PIPE_TEXTURE_3D;
263*bbecb9d1SAndroid Build Coastguard Worker res.depth = 5;
264*bbecb9d1SAndroid Build Coastguard Worker
265*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
266*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
267*bbecb9d1SAndroid Build Coastguard Worker
268*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
269*bbecb9d1SAndroid Build Coastguard Worker
270*bbecb9d1SAndroid Build Coastguard Worker box.x = box.y = box.z = 0;
271*bbecb9d1SAndroid Build Coastguard Worker box.w = 10;
272*bbecb9d1SAndroid Build Coastguard Worker box.h = 2;
273*bbecb9d1SAndroid Build Coastguard Worker box.d = 6;
274*bbecb9d1SAndroid Build Coastguard Worker
275*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_read_iov(1, 1, 0, 1, 1, &box, 0, iovs, niovs);
276*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
277*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
278*bbecb9d1SAndroid Build Coastguard Worker
279*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
280*bbecb9d1SAndroid Build Coastguard Worker }
281*bbecb9d1SAndroid Build Coastguard Worker END_TEST
282*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_1d)283*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_1d)
284*bbecb9d1SAndroid Build Coastguard Worker {
285*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource res;
286*bbecb9d1SAndroid Build Coastguard Worker unsigned char data[50*4];
287*bbecb9d1SAndroid Build Coastguard Worker struct iovec iov = { .iov_base = data, .iov_len = sizeof(data) };
288*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
289*bbecb9d1SAndroid Build Coastguard Worker int ret;
290*bbecb9d1SAndroid Build Coastguard Worker unsigned i;
291*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box;
292*bbecb9d1SAndroid Build Coastguard Worker
293*bbecb9d1SAndroid Build Coastguard Worker /* init and create simple 2D resource */
294*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_backed_simple_1d_res(&res, 1);
295*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
296*bbecb9d1SAndroid Build Coastguard Worker
297*bbecb9d1SAndroid Build Coastguard Worker /* attach resource to context */
298*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
299*bbecb9d1SAndroid Build Coastguard Worker
300*bbecb9d1SAndroid Build Coastguard Worker box.x = box.y = box.z = 0;
301*bbecb9d1SAndroid Build Coastguard Worker box.w = 50;
302*bbecb9d1SAndroid Build Coastguard Worker box.h = 1;
303*bbecb9d1SAndroid Build Coastguard Worker box.d = 1;
304*bbecb9d1SAndroid Build Coastguard Worker for (i = 0; i < sizeof(data); i++)
305*bbecb9d1SAndroid Build Coastguard Worker data[i] = i;
306*bbecb9d1SAndroid Build Coastguard Worker
307*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, 0, 0, &box, 0, &iov, niovs);
308*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
309*bbecb9d1SAndroid Build Coastguard Worker
310*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_read_iov(res.handle, 1, 0, 0, 0, &box, 0, NULL, 0);
311*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
312*bbecb9d1SAndroid Build Coastguard Worker
313*bbecb9d1SAndroid Build Coastguard Worker /* check the returned values */
314*bbecb9d1SAndroid Build Coastguard Worker unsigned char *ptr = res.iovs[0].iov_base;
315*bbecb9d1SAndroid Build Coastguard Worker for (i = 0; i < sizeof(data); i++) {
316*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ptr[i], i);
317*bbecb9d1SAndroid Build Coastguard Worker }
318*bbecb9d1SAndroid Build Coastguard Worker
319*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
320*bbecb9d1SAndroid Build Coastguard Worker testvirgl_destroy_backed_res(&res);
321*bbecb9d1SAndroid Build Coastguard Worker }
322*bbecb9d1SAndroid Build Coastguard Worker END_TEST
323*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_1d_bad_iov)324*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_1d_bad_iov)
325*bbecb9d1SAndroid Build Coastguard Worker {
326*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
327*bbecb9d1SAndroid Build Coastguard Worker struct iovec iovs[1] = { { NULL, 23 } };
328*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
329*bbecb9d1SAndroid Build Coastguard Worker int ret;
330*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box = { .w = 50, .h = 1, .d = 1 };
331*bbecb9d1SAndroid Build Coastguard Worker
332*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
333*bbecb9d1SAndroid Build Coastguard Worker res.target = PIPE_TEXTURE_1D;
334*bbecb9d1SAndroid Build Coastguard Worker res.depth = 1;
335*bbecb9d1SAndroid Build Coastguard Worker
336*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
337*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
338*bbecb9d1SAndroid Build Coastguard Worker
339*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
340*bbecb9d1SAndroid Build Coastguard Worker
341*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, 0, 0, &box, 0, iovs, niovs);
342*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
343*bbecb9d1SAndroid Build Coastguard Worker
344*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
345*bbecb9d1SAndroid Build Coastguard Worker
346*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
347*bbecb9d1SAndroid Build Coastguard Worker }
348*bbecb9d1SAndroid Build Coastguard Worker END_TEST
349*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_1d_bad_iov_offset)350*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_1d_bad_iov_offset)
351*bbecb9d1SAndroid Build Coastguard Worker {
352*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
353*bbecb9d1SAndroid Build Coastguard Worker unsigned char data[50*4];
354*bbecb9d1SAndroid Build Coastguard Worker struct iovec iov = { .iov_base = data, .iov_len = sizeof(data) };
355*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
356*bbecb9d1SAndroid Build Coastguard Worker int ret;
357*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box = { .w = 50, .h = 1, .d = 1 };
358*bbecb9d1SAndroid Build Coastguard Worker
359*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
360*bbecb9d1SAndroid Build Coastguard Worker res.target = PIPE_TEXTURE_1D;
361*bbecb9d1SAndroid Build Coastguard Worker res.depth = 1;
362*bbecb9d1SAndroid Build Coastguard Worker
363*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
364*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
365*bbecb9d1SAndroid Build Coastguard Worker
366*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
367*bbecb9d1SAndroid Build Coastguard Worker
368*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, 0, 0, &box, 20, &iov, niovs);
369*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
370*bbecb9d1SAndroid Build Coastguard Worker
371*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
372*bbecb9d1SAndroid Build Coastguard Worker
373*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
374*bbecb9d1SAndroid Build Coastguard Worker }
375*bbecb9d1SAndroid Build Coastguard Worker END_TEST
376*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_1d_bad_strides)377*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_1d_bad_strides)
378*bbecb9d1SAndroid Build Coastguard Worker {
379*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
380*bbecb9d1SAndroid Build Coastguard Worker unsigned char data[50*4];
381*bbecb9d1SAndroid Build Coastguard Worker struct iovec iov = { .iov_base = data, .iov_len = sizeof(data) };
382*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
383*bbecb9d1SAndroid Build Coastguard Worker int ret;
384*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box = { .w = 50, .h = 1, .d = 1 };
385*bbecb9d1SAndroid Build Coastguard Worker int bad_stride = box.w - 1;
386*bbecb9d1SAndroid Build Coastguard Worker
387*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_1d_resource(&res, 1);
388*bbecb9d1SAndroid Build Coastguard Worker res.target = PIPE_TEXTURE_1D;
389*bbecb9d1SAndroid Build Coastguard Worker res.depth = 1;
390*bbecb9d1SAndroid Build Coastguard Worker
391*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
392*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
393*bbecb9d1SAndroid Build Coastguard Worker
394*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
395*bbecb9d1SAndroid Build Coastguard Worker
396*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, bad_stride, 0,
397*bbecb9d1SAndroid Build Coastguard Worker &box, 0, &iov, niovs);
398*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
399*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, 0, bad_stride,
400*bbecb9d1SAndroid Build Coastguard Worker &box, 0, &iov, niovs);
401*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
402*bbecb9d1SAndroid Build Coastguard Worker
403*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
404*bbecb9d1SAndroid Build Coastguard Worker
405*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
406*bbecb9d1SAndroid Build Coastguard Worker }
407*bbecb9d1SAndroid Build Coastguard Worker END_TEST
408*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_2d_bad_strides)409*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_2d_bad_strides)
410*bbecb9d1SAndroid Build Coastguard Worker {
411*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
412*bbecb9d1SAndroid Build Coastguard Worker unsigned char data[50*4];
413*bbecb9d1SAndroid Build Coastguard Worker struct iovec iov = { .iov_base = data, .iov_len = sizeof(data) };
414*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
415*bbecb9d1SAndroid Build Coastguard Worker int ret;
416*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box = { .w = 50, .h = 1, .d = 1 };
417*bbecb9d1SAndroid Build Coastguard Worker int bad_stride = box.w - 1;
418*bbecb9d1SAndroid Build Coastguard Worker
419*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_2d_resource(&res, 1);
420*bbecb9d1SAndroid Build Coastguard Worker
421*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
422*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
423*bbecb9d1SAndroid Build Coastguard Worker
424*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
425*bbecb9d1SAndroid Build Coastguard Worker
426*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, bad_stride, 0,
427*bbecb9d1SAndroid Build Coastguard Worker &box, 0, &iov, niovs);
428*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
429*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, 0, bad_stride,
430*bbecb9d1SAndroid Build Coastguard Worker &box, 0, &iov, niovs);
431*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
432*bbecb9d1SAndroid Build Coastguard Worker
433*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
434*bbecb9d1SAndroid Build Coastguard Worker
435*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
436*bbecb9d1SAndroid Build Coastguard Worker }
437*bbecb9d1SAndroid Build Coastguard Worker END_TEST
438*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_buffer_bad_strides)439*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_buffer_bad_strides)
440*bbecb9d1SAndroid Build Coastguard Worker {
441*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
442*bbecb9d1SAndroid Build Coastguard Worker unsigned char data[50*4];
443*bbecb9d1SAndroid Build Coastguard Worker struct iovec iov = { .iov_base = data, .iov_len = sizeof(data) };
444*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
445*bbecb9d1SAndroid Build Coastguard Worker int ret;
446*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box = { .w = 50, .h = 1, .d = 1 };
447*bbecb9d1SAndroid Build Coastguard Worker int bad_stride = box.w - 1;
448*bbecb9d1SAndroid Build Coastguard Worker
449*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_buffer(&res, 1);
450*bbecb9d1SAndroid Build Coastguard Worker
451*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
452*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
453*bbecb9d1SAndroid Build Coastguard Worker
454*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
455*bbecb9d1SAndroid Build Coastguard Worker
456*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, bad_stride, 0,
457*bbecb9d1SAndroid Build Coastguard Worker &box, 0, &iov, niovs);
458*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
459*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, 0, bad_stride,
460*bbecb9d1SAndroid Build Coastguard Worker &box, 0, &iov, niovs);
461*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
462*bbecb9d1SAndroid Build Coastguard Worker
463*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
464*bbecb9d1SAndroid Build Coastguard Worker
465*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
466*bbecb9d1SAndroid Build Coastguard Worker }
467*bbecb9d1SAndroid Build Coastguard Worker END_TEST
468*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_2d_array_bad_layer_stride)469*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_2d_array_bad_layer_stride)
470*bbecb9d1SAndroid Build Coastguard Worker {
471*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
472*bbecb9d1SAndroid Build Coastguard Worker unsigned char *data;
473*bbecb9d1SAndroid Build Coastguard Worker struct iovec iov;
474*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
475*bbecb9d1SAndroid Build Coastguard Worker int ret;
476*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box = { .w = 50, .h = 5, .d = 2 };
477*bbecb9d1SAndroid Build Coastguard Worker int size = 50*50*2*4;
478*bbecb9d1SAndroid Build Coastguard Worker data = calloc(1, size);
479*bbecb9d1SAndroid Build Coastguard Worker iov.iov_base = data;
480*bbecb9d1SAndroid Build Coastguard Worker iov.iov_len = size;
481*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_2d_resource(&res, 1);
482*bbecb9d1SAndroid Build Coastguard Worker res.target = PIPE_TEXTURE_2D_ARRAY;
483*bbecb9d1SAndroid Build Coastguard Worker res.array_size = 5;
484*bbecb9d1SAndroid Build Coastguard Worker
485*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
486*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
487*bbecb9d1SAndroid Build Coastguard Worker
488*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
489*bbecb9d1SAndroid Build Coastguard Worker
490*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, 0, 100, &box, 0, &iov, niovs);
491*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
492*bbecb9d1SAndroid Build Coastguard Worker
493*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
494*bbecb9d1SAndroid Build Coastguard Worker
495*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
496*bbecb9d1SAndroid Build Coastguard Worker free(data);
497*bbecb9d1SAndroid Build Coastguard Worker }
498*bbecb9d1SAndroid Build Coastguard Worker END_TEST
499*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_2d_bad_level)500*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_2d_bad_level)
501*bbecb9d1SAndroid Build Coastguard Worker {
502*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
503*bbecb9d1SAndroid Build Coastguard Worker unsigned char data[50*4];
504*bbecb9d1SAndroid Build Coastguard Worker struct iovec iov = { .iov_base = data, .iov_len = sizeof(data) };
505*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
506*bbecb9d1SAndroid Build Coastguard Worker int ret;
507*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box box = { .w = 50, .h = 1, .d = 1 };
508*bbecb9d1SAndroid Build Coastguard Worker
509*bbecb9d1SAndroid Build Coastguard Worker testvirgl_init_simple_2d_resource(&res, 1);
510*bbecb9d1SAndroid Build Coastguard Worker res.last_level = 1;
511*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
512*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
513*bbecb9d1SAndroid Build Coastguard Worker
514*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
515*bbecb9d1SAndroid Build Coastguard Worker
516*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 2, 0, 0, &box, 0, &iov, niovs);
517*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
518*bbecb9d1SAndroid Build Coastguard Worker
519*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
520*bbecb9d1SAndroid Build Coastguard Worker
521*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(1);
522*bbecb9d1SAndroid Build Coastguard Worker }
523*bbecb9d1SAndroid Build Coastguard Worker END_TEST
524*bbecb9d1SAndroid Build Coastguard Worker
525*bbecb9d1SAndroid Build Coastguard Worker /* for each texture type construct a valid and invalid transfer,
526*bbecb9d1SAndroid Build Coastguard Worker invalid using a box outside the bounds of the transfer */
527*bbecb9d1SAndroid Build Coastguard Worker #define LARGE_FLAG_WIDTH (1 << 0)
528*bbecb9d1SAndroid Build Coastguard Worker #define LARGE_FLAG_HEIGHT (1 << 1)
529*bbecb9d1SAndroid Build Coastguard Worker #define LARGE_FLAG_DEPTH (1 << 2)
get_resource_args(enum pipe_texture_target target,bool invalid,struct virgl_renderer_resource_create_args * args,struct pipe_box * box,int nsamples,int large_flags)530*bbecb9d1SAndroid Build Coastguard Worker static void get_resource_args(enum pipe_texture_target target, bool invalid,
531*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args *args,
532*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box *box, int nsamples, int large_flags)
533*bbecb9d1SAndroid Build Coastguard Worker {
534*bbecb9d1SAndroid Build Coastguard Worker memset(args, 0, sizeof(*args));
535*bbecb9d1SAndroid Build Coastguard Worker memset(box, 0, sizeof(*box));
536*bbecb9d1SAndroid Build Coastguard Worker
537*bbecb9d1SAndroid Build Coastguard Worker args->handle = 1;
538*bbecb9d1SAndroid Build Coastguard Worker args->target = target;
539*bbecb9d1SAndroid Build Coastguard Worker if (args->target == PIPE_BUFFER) {
540*bbecb9d1SAndroid Build Coastguard Worker args->format = PIPE_FORMAT_R8_UNORM;
541*bbecb9d1SAndroid Build Coastguard Worker args->bind = PIPE_BIND_VERTEX_BUFFER;
542*bbecb9d1SAndroid Build Coastguard Worker } else {
543*bbecb9d1SAndroid Build Coastguard Worker args->bind = PIPE_BIND_SAMPLER_VIEW;
544*bbecb9d1SAndroid Build Coastguard Worker args->format = PIPE_FORMAT_B8G8R8X8_UNORM;
545*bbecb9d1SAndroid Build Coastguard Worker }
546*bbecb9d1SAndroid Build Coastguard Worker args->nr_samples = nsamples;
547*bbecb9d1SAndroid Build Coastguard Worker args->flags = 0;
548*bbecb9d1SAndroid Build Coastguard Worker
549*bbecb9d1SAndroid Build Coastguard Worker if (large_flags & LARGE_FLAG_WIDTH)
550*bbecb9d1SAndroid Build Coastguard Worker if (args->target == PIPE_BUFFER)
551*bbecb9d1SAndroid Build Coastguard Worker args->width = 65536*2;
552*bbecb9d1SAndroid Build Coastguard Worker else if (args->target == PIPE_TEXTURE_3D)
553*bbecb9d1SAndroid Build Coastguard Worker args->width = 1024;
554*bbecb9d1SAndroid Build Coastguard Worker else
555*bbecb9d1SAndroid Build Coastguard Worker args->width = 4096;
556*bbecb9d1SAndroid Build Coastguard Worker else
557*bbecb9d1SAndroid Build Coastguard Worker args->width = 50;
558*bbecb9d1SAndroid Build Coastguard Worker args->height = args->depth = args->array_size = 1;
559*bbecb9d1SAndroid Build Coastguard Worker
560*bbecb9d1SAndroid Build Coastguard Worker switch (target) {
561*bbecb9d1SAndroid Build Coastguard Worker case PIPE_TEXTURE_CUBE_ARRAY:
562*bbecb9d1SAndroid Build Coastguard Worker args->array_size = 12;
563*bbecb9d1SAndroid Build Coastguard Worker args->height = args->width;
564*bbecb9d1SAndroid Build Coastguard Worker break;
565*bbecb9d1SAndroid Build Coastguard Worker case PIPE_TEXTURE_1D_ARRAY:
566*bbecb9d1SAndroid Build Coastguard Worker case PIPE_TEXTURE_2D_ARRAY:
567*bbecb9d1SAndroid Build Coastguard Worker args->array_size = 10;
568*bbecb9d1SAndroid Build Coastguard Worker break;
569*bbecb9d1SAndroid Build Coastguard Worker case PIPE_TEXTURE_3D:
570*bbecb9d1SAndroid Build Coastguard Worker args->depth = 8;
571*bbecb9d1SAndroid Build Coastguard Worker break;
572*bbecb9d1SAndroid Build Coastguard Worker case PIPE_TEXTURE_CUBE:
573*bbecb9d1SAndroid Build Coastguard Worker args->array_size = 6;
574*bbecb9d1SAndroid Build Coastguard Worker args->height = args->width;
575*bbecb9d1SAndroid Build Coastguard Worker break;
576*bbecb9d1SAndroid Build Coastguard Worker default:
577*bbecb9d1SAndroid Build Coastguard Worker break;
578*bbecb9d1SAndroid Build Coastguard Worker }
579*bbecb9d1SAndroid Build Coastguard Worker
580*bbecb9d1SAndroid Build Coastguard Worker switch (target) {
581*bbecb9d1SAndroid Build Coastguard Worker case PIPE_BUFFER:
582*bbecb9d1SAndroid Build Coastguard Worker case PIPE_TEXTURE_1D:
583*bbecb9d1SAndroid Build Coastguard Worker case PIPE_TEXTURE_1D_ARRAY:
584*bbecb9d1SAndroid Build Coastguard Worker case PIPE_TEXTURE_CUBE:
585*bbecb9d1SAndroid Build Coastguard Worker case PIPE_TEXTURE_CUBE_ARRAY:
586*bbecb9d1SAndroid Build Coastguard Worker break;
587*bbecb9d1SAndroid Build Coastguard Worker default:
588*bbecb9d1SAndroid Build Coastguard Worker if (large_flags & LARGE_FLAG_HEIGHT) {
589*bbecb9d1SAndroid Build Coastguard Worker if (args->target == PIPE_BUFFER)
590*bbecb9d1SAndroid Build Coastguard Worker args->height = 64000;
591*bbecb9d1SAndroid Build Coastguard Worker else if (args->target == PIPE_TEXTURE_3D)
592*bbecb9d1SAndroid Build Coastguard Worker args->height = 1024;
593*bbecb9d1SAndroid Build Coastguard Worker else
594*bbecb9d1SAndroid Build Coastguard Worker args->height = 4096;
595*bbecb9d1SAndroid Build Coastguard Worker } else
596*bbecb9d1SAndroid Build Coastguard Worker args->height = 50;
597*bbecb9d1SAndroid Build Coastguard Worker break;
598*bbecb9d1SAndroid Build Coastguard Worker }
599*bbecb9d1SAndroid Build Coastguard Worker
600*bbecb9d1SAndroid Build Coastguard Worker if (invalid) {
601*bbecb9d1SAndroid Build Coastguard Worker box->width = args->width + 10;
602*bbecb9d1SAndroid Build Coastguard Worker box->height = args->height;
603*bbecb9d1SAndroid Build Coastguard Worker box->depth = 1;
604*bbecb9d1SAndroid Build Coastguard Worker } else {
605*bbecb9d1SAndroid Build Coastguard Worker box->width = args->width;
606*bbecb9d1SAndroid Build Coastguard Worker box->height = args->height;
607*bbecb9d1SAndroid Build Coastguard Worker box->depth = 1;
608*bbecb9d1SAndroid Build Coastguard Worker if (args->depth > 1)
609*bbecb9d1SAndroid Build Coastguard Worker box->depth = 6;
610*bbecb9d1SAndroid Build Coastguard Worker if (args->array_size > 1)
611*bbecb9d1SAndroid Build Coastguard Worker box->depth = 4;
612*bbecb9d1SAndroid Build Coastguard Worker }
613*bbecb9d1SAndroid Build Coastguard Worker }
614*bbecb9d1SAndroid Build Coastguard Worker
get_box_size(struct pipe_box * box,int elsize)615*bbecb9d1SAndroid Build Coastguard Worker static unsigned get_box_size(struct pipe_box *box, int elsize)
616*bbecb9d1SAndroid Build Coastguard Worker {
617*bbecb9d1SAndroid Build Coastguard Worker return elsize * box->width * box->height * box->depth;
618*bbecb9d1SAndroid Build Coastguard Worker }
619*bbecb9d1SAndroid Build Coastguard Worker
virgl_test_transfer_res(enum pipe_texture_target target,bool write,bool invalid)620*bbecb9d1SAndroid Build Coastguard Worker static void virgl_test_transfer_res(enum pipe_texture_target target,
621*bbecb9d1SAndroid Build Coastguard Worker bool write, bool invalid)
622*bbecb9d1SAndroid Build Coastguard Worker {
623*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
624*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box box;
625*bbecb9d1SAndroid Build Coastguard Worker void *data;
626*bbecb9d1SAndroid Build Coastguard Worker struct iovec iovs[1];
627*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
628*bbecb9d1SAndroid Build Coastguard Worker int ret;
629*bbecb9d1SAndroid Build Coastguard Worker int size;
630*bbecb9d1SAndroid Build Coastguard Worker
631*bbecb9d1SAndroid Build Coastguard Worker get_resource_args(target, invalid, &res, &box, 0, 0);
632*bbecb9d1SAndroid Build Coastguard Worker
633*bbecb9d1SAndroid Build Coastguard Worker size = get_box_size(&box, target == PIPE_BUFFER ? 1 : 4);
634*bbecb9d1SAndroid Build Coastguard Worker data = calloc(1, size);
635*bbecb9d1SAndroid Build Coastguard Worker iovs[0].iov_base = data;
636*bbecb9d1SAndroid Build Coastguard Worker iovs[0].iov_len = size;
637*bbecb9d1SAndroid Build Coastguard Worker
638*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&res, NULL, 0);
639*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
640*bbecb9d1SAndroid Build Coastguard Worker
641*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(1, res.handle);
642*bbecb9d1SAndroid Build Coastguard Worker
643*bbecb9d1SAndroid Build Coastguard Worker if (write)
644*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_write_iov(res.handle, 1, 0, 0, 0,
645*bbecb9d1SAndroid Build Coastguard Worker (struct virgl_box *)&box, 0, iovs, niovs);
646*bbecb9d1SAndroid Build Coastguard Worker else
647*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_read_iov(res.handle, 1, 0, 0, 0,
648*bbecb9d1SAndroid Build Coastguard Worker (struct virgl_box *)&box, 0, iovs, niovs);
649*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, invalid ? EINVAL : 0);
650*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
651*bbecb9d1SAndroid Build Coastguard Worker
652*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(res.handle);
653*bbecb9d1SAndroid Build Coastguard Worker free(data);
654*bbecb9d1SAndroid Build Coastguard Worker }
655*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_res_read_valid)656*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_res_read_valid)
657*bbecb9d1SAndroid Build Coastguard Worker {
658*bbecb9d1SAndroid Build Coastguard Worker virgl_test_transfer_res(_i, false, false);
659*bbecb9d1SAndroid Build Coastguard Worker }
660*bbecb9d1SAndroid Build Coastguard Worker END_TEST
661*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_res_write_valid)662*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_res_write_valid)
663*bbecb9d1SAndroid Build Coastguard Worker {
664*bbecb9d1SAndroid Build Coastguard Worker virgl_test_transfer_res(_i, true, false);
665*bbecb9d1SAndroid Build Coastguard Worker }
666*bbecb9d1SAndroid Build Coastguard Worker END_TEST
667*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_res_read_invalid)668*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_res_read_invalid)
669*bbecb9d1SAndroid Build Coastguard Worker {
670*bbecb9d1SAndroid Build Coastguard Worker virgl_test_transfer_res(_i, false, true);
671*bbecb9d1SAndroid Build Coastguard Worker }
672*bbecb9d1SAndroid Build Coastguard Worker END_TEST
673*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_res_write_invalid)674*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_res_write_invalid)
675*bbecb9d1SAndroid Build Coastguard Worker {
676*bbecb9d1SAndroid Build Coastguard Worker virgl_test_transfer_res(_i, true, true);
677*bbecb9d1SAndroid Build Coastguard Worker }
678*bbecb9d1SAndroid Build Coastguard Worker END_TEST
679*bbecb9d1SAndroid Build Coastguard Worker
virgl_test_transfer_inline(enum pipe_texture_target target,bool invalid,int large_flags)680*bbecb9d1SAndroid Build Coastguard Worker static void virgl_test_transfer_inline(enum pipe_texture_target target,
681*bbecb9d1SAndroid Build Coastguard Worker bool invalid, int large_flags)
682*bbecb9d1SAndroid Build Coastguard Worker {
683*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args args;
684*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box box;
685*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context ctx;
686*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource res;
687*bbecb9d1SAndroid Build Coastguard Worker int ret;
688*bbecb9d1SAndroid Build Coastguard Worker int elsize = target == 0 ? 1 : 4;
689*bbecb9d1SAndroid Build Coastguard Worker void *data;
690*bbecb9d1SAndroid Build Coastguard Worker unsigned size;
691*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_ctx_cmdbuf(&ctx);
692*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
693*bbecb9d1SAndroid Build Coastguard Worker
694*bbecb9d1SAndroid Build Coastguard Worker get_resource_args(target, invalid, &args, &box, 0, large_flags);
695*bbecb9d1SAndroid Build Coastguard Worker
696*bbecb9d1SAndroid Build Coastguard Worker size = get_box_size(&box, elsize);
697*bbecb9d1SAndroid Build Coastguard Worker data = calloc(1, size);
698*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_resource_create(&args, NULL, 0);
699*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
700*bbecb9d1SAndroid Build Coastguard Worker
701*bbecb9d1SAndroid Build Coastguard Worker res.handle = args.handle;
702*bbecb9d1SAndroid Build Coastguard Worker res.base.target = args.target;
703*bbecb9d1SAndroid Build Coastguard Worker res.base.format = args.format;
704*bbecb9d1SAndroid Build Coastguard Worker
705*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, res.handle);
706*bbecb9d1SAndroid Build Coastguard Worker virgl_encoder_inline_write(&ctx, &res, 0, 0, (struct pipe_box *)&box, data, box.width * elsize, 0);
707*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_submit_cmd(ctx.cbuf->buf, ctx.ctx_id, ctx.cbuf->cdw);
708*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, invalid ? EINVAL : 0);
709*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, res.handle);
710*bbecb9d1SAndroid Build Coastguard Worker
711*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(res.handle);
712*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_ctx_cmdbuf(&ctx);
713*bbecb9d1SAndroid Build Coastguard Worker free(data);
714*bbecb9d1SAndroid Build Coastguard Worker }
715*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_inline_valid)716*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_inline_valid)
717*bbecb9d1SAndroid Build Coastguard Worker {
718*bbecb9d1SAndroid Build Coastguard Worker virgl_test_transfer_inline(_i, false, 0);
719*bbecb9d1SAndroid Build Coastguard Worker }
720*bbecb9d1SAndroid Build Coastguard Worker END_TEST
721*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_inline_invalid)722*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_inline_invalid)
723*bbecb9d1SAndroid Build Coastguard Worker {
724*bbecb9d1SAndroid Build Coastguard Worker virgl_test_transfer_inline(_i, true, 0);
725*bbecb9d1SAndroid Build Coastguard Worker }
726*bbecb9d1SAndroid Build Coastguard Worker END_TEST
727*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_inline_valid_large)728*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_inline_valid_large)
729*bbecb9d1SAndroid Build Coastguard Worker {
730*bbecb9d1SAndroid Build Coastguard Worker virgl_test_transfer_inline(_i, false, LARGE_FLAG_WIDTH);
731*bbecb9d1SAndroid Build Coastguard Worker }
732*bbecb9d1SAndroid Build Coastguard Worker END_TEST
733*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_to_staging_without_iov_fails)734*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_to_staging_without_iov_fails)
735*bbecb9d1SAndroid Build Coastguard Worker {
736*bbecb9d1SAndroid Build Coastguard Worker static const unsigned bufsize = 50;
737*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context ctx;
738*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource res;
739*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box box = {.width = bufsize, .height = 1, .depth = 1};
740*bbecb9d1SAndroid Build Coastguard Worker int ret;
741*bbecb9d1SAndroid Build Coastguard Worker
742*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_ctx_cmdbuf(&ctx);
743*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
744*bbecb9d1SAndroid Build Coastguard Worker
745*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_unbacked_simple_buffer(&res, 1, bufsize, VIRGL_BIND_STAGING);
746*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
747*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, res.handle);
748*bbecb9d1SAndroid Build Coastguard Worker
749*bbecb9d1SAndroid Build Coastguard Worker box.width = bufsize;
750*bbecb9d1SAndroid Build Coastguard Worker virgl_encoder_transfer(&ctx, &res, 0, 0, &box, 0, VIRGL_TRANSFER_TO_HOST);
751*bbecb9d1SAndroid Build Coastguard Worker
752*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_submit_cmd(ctx.cbuf->buf, ctx.ctx_id, ctx.cbuf->cdw);
753*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
754*bbecb9d1SAndroid Build Coastguard Worker
755*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, res.handle);
756*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(res.handle);
757*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_ctx_cmdbuf(&ctx);
758*bbecb9d1SAndroid Build Coastguard Worker }
759*bbecb9d1SAndroid Build Coastguard Worker END_TEST
760*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_to_staging_with_iov_succeeds)761*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_to_staging_with_iov_succeeds)
762*bbecb9d1SAndroid Build Coastguard Worker {
763*bbecb9d1SAndroid Build Coastguard Worker static const unsigned bufsize = 50;
764*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context ctx = {0};
765*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource res = {0};
766*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box box = {.width = bufsize, .height = 1, .depth = 1};
767*bbecb9d1SAndroid Build Coastguard Worker int ret;
768*bbecb9d1SAndroid Build Coastguard Worker
769*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_ctx_cmdbuf(&ctx);
770*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
771*bbecb9d1SAndroid Build Coastguard Worker
772*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_backed_simple_buffer(&res, 1, bufsize, VIRGL_BIND_STAGING);
773*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
774*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, res.handle);
775*bbecb9d1SAndroid Build Coastguard Worker
776*bbecb9d1SAndroid Build Coastguard Worker box.width = bufsize;
777*bbecb9d1SAndroid Build Coastguard Worker virgl_encoder_transfer(&ctx, &res, 0, 0, &box, 0, VIRGL_TRANSFER_TO_HOST);
778*bbecb9d1SAndroid Build Coastguard Worker
779*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_submit_cmd(ctx.cbuf->buf, ctx.ctx_id, ctx.cbuf->cdw);
780*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
781*bbecb9d1SAndroid Build Coastguard Worker
782*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, res.handle);
783*bbecb9d1SAndroid Build Coastguard Worker testvirgl_destroy_backed_res(&res);
784*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_ctx_cmdbuf(&ctx);
785*bbecb9d1SAndroid Build Coastguard Worker }
786*bbecb9d1SAndroid Build Coastguard Worker END_TEST
787*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_copy_transfer_from_staging_without_iov_fails)788*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_copy_transfer_from_staging_without_iov_fails)
789*bbecb9d1SAndroid Build Coastguard Worker {
790*bbecb9d1SAndroid Build Coastguard Worker static const unsigned bufsize = 50;
791*bbecb9d1SAndroid Build Coastguard Worker static const unsigned synchronized = 1;
792*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context ctx = {0};
793*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource src_res = {0};
794*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource dst_res = {0};
795*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box box = {.width = bufsize, .height = 1, .depth = 1};
796*bbecb9d1SAndroid Build Coastguard Worker int ret;
797*bbecb9d1SAndroid Build Coastguard Worker
798*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_ctx_cmdbuf(&ctx);
799*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
800*bbecb9d1SAndroid Build Coastguard Worker
801*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_unbacked_simple_buffer(&src_res, 1, bufsize, VIRGL_BIND_STAGING);
802*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
803*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, src_res.handle);
804*bbecb9d1SAndroid Build Coastguard Worker
805*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_backed_simple_buffer(&dst_res, 2, bufsize, VIRGL_BIND_VERTEX_BUFFER);
806*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
807*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, dst_res.handle);
808*bbecb9d1SAndroid Build Coastguard Worker
809*bbecb9d1SAndroid Build Coastguard Worker box.width = bufsize;
810*bbecb9d1SAndroid Build Coastguard Worker virgl_encoder_copy_transfer(&ctx, &dst_res, 0, 0, &box, &src_res, 0, synchronized);
811*bbecb9d1SAndroid Build Coastguard Worker
812*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_submit_cmd(ctx.cbuf->buf, ctx.ctx_id, ctx.cbuf->cdw);
813*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
814*bbecb9d1SAndroid Build Coastguard Worker
815*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, src_res.handle);
816*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, dst_res.handle);
817*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(src_res.handle);
818*bbecb9d1SAndroid Build Coastguard Worker testvirgl_destroy_backed_res(&dst_res);
819*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_ctx_cmdbuf(&ctx);
820*bbecb9d1SAndroid Build Coastguard Worker }
821*bbecb9d1SAndroid Build Coastguard Worker END_TEST
822*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_copy_transfer_from_staging_with_iov_succeeds)823*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_copy_transfer_from_staging_with_iov_succeeds)
824*bbecb9d1SAndroid Build Coastguard Worker {
825*bbecb9d1SAndroid Build Coastguard Worker static const unsigned bufsize = 50;
826*bbecb9d1SAndroid Build Coastguard Worker const unsigned synchronized = 1;
827*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context ctx = {0};
828*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource src_res = {0};
829*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource dst_res = {0};
830*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box box = {.width = bufsize, .height = 1, .depth = 1};
831*bbecb9d1SAndroid Build Coastguard Worker int ret;
832*bbecb9d1SAndroid Build Coastguard Worker
833*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_ctx_cmdbuf(&ctx);
834*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
835*bbecb9d1SAndroid Build Coastguard Worker
836*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_backed_simple_buffer(&src_res, 1, bufsize, VIRGL_BIND_STAGING);
837*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
838*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, src_res.handle);
839*bbecb9d1SAndroid Build Coastguard Worker
840*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_backed_simple_buffer(&dst_res, 2, bufsize, VIRGL_BIND_VERTEX_BUFFER);
841*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
842*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, dst_res.handle);
843*bbecb9d1SAndroid Build Coastguard Worker
844*bbecb9d1SAndroid Build Coastguard Worker box.width = bufsize;
845*bbecb9d1SAndroid Build Coastguard Worker virgl_encoder_copy_transfer(&ctx, &dst_res, 0, 0, &box, &src_res, 0, synchronized);
846*bbecb9d1SAndroid Build Coastguard Worker
847*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_submit_cmd(ctx.cbuf->buf, ctx.ctx_id, ctx.cbuf->cdw);
848*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
849*bbecb9d1SAndroid Build Coastguard Worker
850*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, src_res.handle);
851*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, dst_res.handle);
852*bbecb9d1SAndroid Build Coastguard Worker testvirgl_destroy_backed_res(&src_res);
853*bbecb9d1SAndroid Build Coastguard Worker testvirgl_destroy_backed_res(&dst_res);
854*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_ctx_cmdbuf(&ctx);
855*bbecb9d1SAndroid Build Coastguard Worker }
856*bbecb9d1SAndroid Build Coastguard Worker END_TEST
857*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_copy_transfer_to_staging_without_iov_fails)858*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_copy_transfer_to_staging_without_iov_fails)
859*bbecb9d1SAndroid Build Coastguard Worker {
860*bbecb9d1SAndroid Build Coastguard Worker static const unsigned bufsize = 50;
861*bbecb9d1SAndroid Build Coastguard Worker const unsigned synchronized = 1;
862*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context ctx = {0};
863*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource src_res = {0};
864*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource dst_res = {0};
865*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box box = {.width = bufsize, .height = 1, .depth = 1};
866*bbecb9d1SAndroid Build Coastguard Worker int ret;
867*bbecb9d1SAndroid Build Coastguard Worker
868*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_ctx_cmdbuf(&ctx);
869*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
870*bbecb9d1SAndroid Build Coastguard Worker
871*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_backed_simple_buffer(&src_res, 1, bufsize, VIRGL_BIND_STAGING);
872*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
873*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, src_res.handle);
874*bbecb9d1SAndroid Build Coastguard Worker
875*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_unbacked_simple_buffer(&dst_res, 2, bufsize, VIRGL_BIND_STAGING);
876*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
877*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, dst_res.handle);
878*bbecb9d1SAndroid Build Coastguard Worker
879*bbecb9d1SAndroid Build Coastguard Worker virgl_encoder_copy_transfer(&ctx, &dst_res, 0, 0, &box, &src_res, 0, synchronized);
880*bbecb9d1SAndroid Build Coastguard Worker
881*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_submit_cmd(ctx.cbuf->buf, ctx.ctx_id, ctx.cbuf->cdw);
882*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, EINVAL);
883*bbecb9d1SAndroid Build Coastguard Worker
884*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, src_res.handle);
885*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, dst_res.handle);
886*bbecb9d1SAndroid Build Coastguard Worker testvirgl_destroy_backed_res(&src_res);
887*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(dst_res.handle);
888*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_ctx_cmdbuf(&ctx);
889*bbecb9d1SAndroid Build Coastguard Worker }
890*bbecb9d1SAndroid Build Coastguard Worker END_TEST
891*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_copy_transfer_to_staging_with_iov_succeeds)892*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_copy_transfer_to_staging_with_iov_succeeds)
893*bbecb9d1SAndroid Build Coastguard Worker {
894*bbecb9d1SAndroid Build Coastguard Worker static const unsigned bufsize = 50;
895*bbecb9d1SAndroid Build Coastguard Worker const unsigned synchronized = 1;
896*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context ctx = {0};
897*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource src_res = {0};
898*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource dst_res = {0};
899*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box box = {.width = bufsize, .height = 1, .depth = 1};
900*bbecb9d1SAndroid Build Coastguard Worker int ret;
901*bbecb9d1SAndroid Build Coastguard Worker
902*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_ctx_cmdbuf(&ctx);
903*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
904*bbecb9d1SAndroid Build Coastguard Worker
905*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_backed_simple_buffer(&src_res, 1, bufsize, VIRGL_BIND_STAGING);
906*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
907*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, src_res.handle);
908*bbecb9d1SAndroid Build Coastguard Worker
909*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_backed_simple_buffer(&dst_res, 2, bufsize, VIRGL_BIND_STAGING);
910*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
911*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, dst_res.handle);
912*bbecb9d1SAndroid Build Coastguard Worker
913*bbecb9d1SAndroid Build Coastguard Worker virgl_encoder_copy_transfer(&ctx, &dst_res, 0, 0, &box, &src_res, 0, synchronized);
914*bbecb9d1SAndroid Build Coastguard Worker
915*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_submit_cmd(ctx.cbuf->buf, ctx.ctx_id, ctx.cbuf->cdw);
916*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
917*bbecb9d1SAndroid Build Coastguard Worker
918*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, src_res.handle);
919*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, dst_res.handle);
920*bbecb9d1SAndroid Build Coastguard Worker testvirgl_destroy_backed_res(&src_res);
921*bbecb9d1SAndroid Build Coastguard Worker testvirgl_destroy_backed_res(&dst_res);
922*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_ctx_cmdbuf(&ctx);
923*bbecb9d1SAndroid Build Coastguard Worker }
924*bbecb9d1SAndroid Build Coastguard Worker END_TEST
925*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(virgl_test_transfer_near_res_bounds_with_stride_succeeds)926*bbecb9d1SAndroid Build Coastguard Worker START_TEST(virgl_test_transfer_near_res_bounds_with_stride_succeeds)
927*bbecb9d1SAndroid Build Coastguard Worker {
928*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context ctx = {0};
929*bbecb9d1SAndroid Build Coastguard Worker struct virgl_resource res = {0};
930*bbecb9d1SAndroid Build Coastguard Worker int res_width = 4;
931*bbecb9d1SAndroid Build Coastguard Worker int res_height = 3;
932*bbecb9d1SAndroid Build Coastguard Worker int res_stride = res_width * 4;
933*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box box = {.x = 2, .y = 1, .z = 0, .width = 2, .height = 2, .depth = 1};
934*bbecb9d1SAndroid Build Coastguard Worker int ret;
935*bbecb9d1SAndroid Build Coastguard Worker
936*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_init_ctx_cmdbuf(&ctx);
937*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
938*bbecb9d1SAndroid Build Coastguard Worker
939*bbecb9d1SAndroid Build Coastguard Worker ret = testvirgl_create_backed_simple_2d_res(&res, 1, res_width, res_height);
940*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
941*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, res.handle);
942*bbecb9d1SAndroid Build Coastguard Worker
943*bbecb9d1SAndroid Build Coastguard Worker virgl_encoder_transfer_with_stride(&ctx, &res, 0, 0, &box, 6 * 4, VIRGL_TRANSFER_TO_HOST,
944*bbecb9d1SAndroid Build Coastguard Worker res_stride, 0);
945*bbecb9d1SAndroid Build Coastguard Worker
946*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_submit_cmd(ctx.cbuf->buf, ctx.ctx_id, ctx.cbuf->cdw);
947*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
948*bbecb9d1SAndroid Build Coastguard Worker
949*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(ctx.ctx_id, res.handle);
950*bbecb9d1SAndroid Build Coastguard Worker testvirgl_destroy_backed_res(&res);
951*bbecb9d1SAndroid Build Coastguard Worker testvirgl_fini_ctx_cmdbuf(&ctx);
952*bbecb9d1SAndroid Build Coastguard Worker }
953*bbecb9d1SAndroid Build Coastguard Worker END_TEST
954*bbecb9d1SAndroid Build Coastguard Worker
START_TEST(test_vrend_host_backed_memory_no_data_leak)955*bbecb9d1SAndroid Build Coastguard Worker START_TEST(test_vrend_host_backed_memory_no_data_leak)
956*bbecb9d1SAndroid Build Coastguard Worker {
957*bbecb9d1SAndroid Build Coastguard Worker struct iovec iovs[1];
958*bbecb9d1SAndroid Build Coastguard Worker int niovs = 1;
959*bbecb9d1SAndroid Build Coastguard Worker
960*bbecb9d1SAndroid Build Coastguard Worker struct virgl_context ctx = {0};
961*bbecb9d1SAndroid Build Coastguard Worker
962*bbecb9d1SAndroid Build Coastguard Worker int ret = testvirgl_init_ctx_cmdbuf(&ctx);
963*bbecb9d1SAndroid Build Coastguard Worker
964*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args res;
965*bbecb9d1SAndroid Build Coastguard Worker res.handle = 0x400;
966*bbecb9d1SAndroid Build Coastguard Worker res.target = PIPE_BUFFER;
967*bbecb9d1SAndroid Build Coastguard Worker res.format = VIRGL_FORMAT_R8_UNORM;
968*bbecb9d1SAndroid Build Coastguard Worker res.nr_samples = 0;
969*bbecb9d1SAndroid Build Coastguard Worker res.last_level = 0;
970*bbecb9d1SAndroid Build Coastguard Worker res.array_size = 1;
971*bbecb9d1SAndroid Build Coastguard Worker res.bind = VIRGL_BIND_CUSTOM;
972*bbecb9d1SAndroid Build Coastguard Worker res.depth = 1;
973*bbecb9d1SAndroid Build Coastguard Worker res.width = 32;
974*bbecb9d1SAndroid Build Coastguard Worker res.height = 1;
975*bbecb9d1SAndroid Build Coastguard Worker res.flags = 0;
976*bbecb9d1SAndroid Build Coastguard Worker
977*bbecb9d1SAndroid Build Coastguard Worker uint32_t size = 32;
978*bbecb9d1SAndroid Build Coastguard Worker uint8_t* data = calloc(1, size);
979*bbecb9d1SAndroid Build Coastguard Worker memset(data, 1, 32);
980*bbecb9d1SAndroid Build Coastguard Worker iovs[0].iov_base = data;
981*bbecb9d1SAndroid Build Coastguard Worker iovs[0].iov_len = size;
982*bbecb9d1SAndroid Build Coastguard Worker
983*bbecb9d1SAndroid Build Coastguard Worker struct pipe_box box = {0,0,0, size, 1,1};
984*bbecb9d1SAndroid Build Coastguard Worker
985*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_create(&res, NULL, 0);
986*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_attach_resource(ctx.ctx_id, res.handle);
987*bbecb9d1SAndroid Build Coastguard Worker
988*bbecb9d1SAndroid Build Coastguard Worker ret = virgl_renderer_transfer_read_iov(res.handle, ctx.ctx_id, 0, 0, 0,
989*bbecb9d1SAndroid Build Coastguard Worker (struct virgl_box *)&box, 0, iovs, niovs);
990*bbecb9d1SAndroid Build Coastguard Worker
991*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(ret, 0);
992*bbecb9d1SAndroid Build Coastguard Worker
993*bbecb9d1SAndroid Build Coastguard Worker for (int i = 0; i < 32; ++i)
994*bbecb9d1SAndroid Build Coastguard Worker ck_assert_int_eq(data[i], 0);
995*bbecb9d1SAndroid Build Coastguard Worker
996*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_ctx_detach_resource(1, res.handle);
997*bbecb9d1SAndroid Build Coastguard Worker
998*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_unref(res.handle);
999*bbecb9d1SAndroid Build Coastguard Worker free(data);
1000*bbecb9d1SAndroid Build Coastguard Worker
1001*bbecb9d1SAndroid Build Coastguard Worker }
1002*bbecb9d1SAndroid Build Coastguard Worker END_TEST
1003*bbecb9d1SAndroid Build Coastguard Worker
1004*bbecb9d1SAndroid Build Coastguard Worker
virgl_init_suite(void)1005*bbecb9d1SAndroid Build Coastguard Worker static Suite *virgl_init_suite(void)
1006*bbecb9d1SAndroid Build Coastguard Worker {
1007*bbecb9d1SAndroid Build Coastguard Worker Suite *s;
1008*bbecb9d1SAndroid Build Coastguard Worker TCase *tc_core;
1009*bbecb9d1SAndroid Build Coastguard Worker
1010*bbecb9d1SAndroid Build Coastguard Worker s = suite_create("virgl_transfer");
1011*bbecb9d1SAndroid Build Coastguard Worker tc_core = tcase_create("transfer_direct");
1012*bbecb9d1SAndroid Build Coastguard Worker
1013*bbecb9d1SAndroid Build Coastguard Worker tcase_add_checked_fixture(tc_core, testvirgl_init_single_ctx_nr, testvirgl_fini_single_ctx);
1014*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_read_illegal_ctx);
1015*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_write_illegal_ctx);
1016*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_read_unbound_res);
1017*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_write_unbound_res);
1018*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_read_no_iov);
1019*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_write_no_iov);
1020*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_read_no_box);
1021*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_write_no_box);
1022*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_read_1d_bad_box);
1023*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_write_1d_bad_box);
1024*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_read_1d_array_bad_box);
1025*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_read_3d_bad_box);
1026*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_1d);
1027*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_1d_bad_iov);
1028*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_1d_bad_iov_offset);
1029*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_1d_bad_strides);
1030*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_2d_bad_strides);
1031*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_buffer_bad_strides);
1032*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_2d_array_bad_layer_stride);
1033*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_2d_bad_level);
1034*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, test_vrend_host_backed_memory_no_data_leak);
1035*bbecb9d1SAndroid Build Coastguard Worker
1036*bbecb9d1SAndroid Build Coastguard Worker tcase_add_loop_test(tc_core, virgl_test_transfer_res_read_valid, 0, PIPE_MAX_TEXTURE_TYPES);
1037*bbecb9d1SAndroid Build Coastguard Worker tcase_add_loop_test(tc_core, virgl_test_transfer_res_write_valid, 0, PIPE_MAX_TEXTURE_TYPES);
1038*bbecb9d1SAndroid Build Coastguard Worker tcase_add_loop_test(tc_core, virgl_test_transfer_res_read_invalid, 0, PIPE_MAX_TEXTURE_TYPES);
1039*bbecb9d1SAndroid Build Coastguard Worker tcase_add_loop_test(tc_core, virgl_test_transfer_res_write_invalid, 0, PIPE_MAX_TEXTURE_TYPES);
1040*bbecb9d1SAndroid Build Coastguard Worker suite_add_tcase(s, tc_core);
1041*bbecb9d1SAndroid Build Coastguard Worker
1042*bbecb9d1SAndroid Build Coastguard Worker tc_core = tcase_create("transfer_inline_write");
1043*bbecb9d1SAndroid Build Coastguard Worker tcase_add_loop_test(tc_core, virgl_test_transfer_inline_valid, 0, PIPE_MAX_TEXTURE_TYPES);
1044*bbecb9d1SAndroid Build Coastguard Worker tcase_add_loop_test(tc_core, virgl_test_transfer_inline_invalid, 0, PIPE_MAX_TEXTURE_TYPES);
1045*bbecb9d1SAndroid Build Coastguard Worker tcase_add_loop_test(tc_core, virgl_test_transfer_inline_valid_large, 0, PIPE_MAX_TEXTURE_TYPES);
1046*bbecb9d1SAndroid Build Coastguard Worker
1047*bbecb9d1SAndroid Build Coastguard Worker suite_add_tcase(s, tc_core);
1048*bbecb9d1SAndroid Build Coastguard Worker
1049*bbecb9d1SAndroid Build Coastguard Worker tc_core = tcase_create("transfers_staging");
1050*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_to_staging_without_iov_fails);
1051*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_to_staging_with_iov_succeeds);
1052*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_copy_transfer_from_staging_without_iov_fails);
1053*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_copy_transfer_from_staging_with_iov_succeeds);
1054*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_copy_transfer_to_staging_without_iov_fails);
1055*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_copy_transfer_to_staging_with_iov_succeeds);
1056*bbecb9d1SAndroid Build Coastguard Worker
1057*bbecb9d1SAndroid Build Coastguard Worker suite_add_tcase(s, tc_core);
1058*bbecb9d1SAndroid Build Coastguard Worker
1059*bbecb9d1SAndroid Build Coastguard Worker tc_core = tcase_create("transfer_command_bounds");
1060*bbecb9d1SAndroid Build Coastguard Worker tcase_add_test(tc_core, virgl_test_transfer_near_res_bounds_with_stride_succeeds);
1061*bbecb9d1SAndroid Build Coastguard Worker
1062*bbecb9d1SAndroid Build Coastguard Worker suite_add_tcase(s, tc_core);
1063*bbecb9d1SAndroid Build Coastguard Worker
1064*bbecb9d1SAndroid Build Coastguard Worker return s;
1065*bbecb9d1SAndroid Build Coastguard Worker
1066*bbecb9d1SAndroid Build Coastguard Worker }
1067*bbecb9d1SAndroid Build Coastguard Worker
1068*bbecb9d1SAndroid Build Coastguard Worker
main(void)1069*bbecb9d1SAndroid Build Coastguard Worker int main(void)
1070*bbecb9d1SAndroid Build Coastguard Worker {
1071*bbecb9d1SAndroid Build Coastguard Worker Suite *s;
1072*bbecb9d1SAndroid Build Coastguard Worker SRunner *sr;
1073*bbecb9d1SAndroid Build Coastguard Worker int number_failed;
1074*bbecb9d1SAndroid Build Coastguard Worker
1075*bbecb9d1SAndroid Build Coastguard Worker if (getenv("VRENDTEST_USE_EGL_SURFACELESS"))
1076*bbecb9d1SAndroid Build Coastguard Worker context_flags |= VIRGL_RENDERER_USE_SURFACELESS;
1077*bbecb9d1SAndroid Build Coastguard Worker if (getenv("VRENDTEST_USE_EGL_GLES"))
1078*bbecb9d1SAndroid Build Coastguard Worker context_flags |= VIRGL_RENDERER_USE_GLES;
1079*bbecb9d1SAndroid Build Coastguard Worker
1080*bbecb9d1SAndroid Build Coastguard Worker s = virgl_init_suite();
1081*bbecb9d1SAndroid Build Coastguard Worker sr = srunner_create(s);
1082*bbecb9d1SAndroid Build Coastguard Worker
1083*bbecb9d1SAndroid Build Coastguard Worker srunner_run_all(sr, CK_ENV);
1084*bbecb9d1SAndroid Build Coastguard Worker number_failed = srunner_ntests_failed(sr);
1085*bbecb9d1SAndroid Build Coastguard Worker srunner_free(sr);
1086*bbecb9d1SAndroid Build Coastguard Worker
1087*bbecb9d1SAndroid Build Coastguard Worker return number_failed == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
1088*bbecb9d1SAndroid Build Coastguard Worker }
1089