xref: /aosp_15_r20/external/virglrenderer/tests/testvirgl.c (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
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 /* helper functions for testing purposes */
26*bbecb9d1SAndroid Build Coastguard Worker #include <check.h>
27*bbecb9d1SAndroid Build Coastguard Worker #include <errno.h>
28*bbecb9d1SAndroid Build Coastguard Worker #include <sys/uio.h>
29*bbecb9d1SAndroid Build Coastguard Worker #include "pipe/p_defines.h"
30*bbecb9d1SAndroid Build Coastguard Worker #include "pipe/p_format.h"
31*bbecb9d1SAndroid Build Coastguard Worker #include "util/u_memory.h"
32*bbecb9d1SAndroid Build Coastguard Worker #include "util/u_format.h"
33*bbecb9d1SAndroid Build Coastguard Worker #include "testvirgl.h"
34*bbecb9d1SAndroid Build Coastguard Worker 
35*bbecb9d1SAndroid Build Coastguard Worker #include "virgl_hw.h"
36*bbecb9d1SAndroid Build Coastguard Worker #include "virglrenderer.h"
37*bbecb9d1SAndroid Build Coastguard Worker 
38*bbecb9d1SAndroid Build Coastguard Worker int context_flags = VIRGL_RENDERER_USE_EGL;
39*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_init_simple_1d_resource(struct virgl_renderer_resource_create_args * res,int handle)40*bbecb9d1SAndroid Build Coastguard Worker void testvirgl_init_simple_1d_resource(struct virgl_renderer_resource_create_args *res, int handle)
41*bbecb9d1SAndroid Build Coastguard Worker {
42*bbecb9d1SAndroid Build Coastguard Worker     res->handle = handle;
43*bbecb9d1SAndroid Build Coastguard Worker     res->target = PIPE_TEXTURE_1D;
44*bbecb9d1SAndroid Build Coastguard Worker     res->format = PIPE_FORMAT_B8G8R8X8_UNORM;
45*bbecb9d1SAndroid Build Coastguard Worker     res->width = 50;
46*bbecb9d1SAndroid Build Coastguard Worker     res->height = 1;
47*bbecb9d1SAndroid Build Coastguard Worker     res->depth = 1;
48*bbecb9d1SAndroid Build Coastguard Worker     res->array_size = 1;
49*bbecb9d1SAndroid Build Coastguard Worker     res->last_level = 0;
50*bbecb9d1SAndroid Build Coastguard Worker     res->nr_samples = 0;
51*bbecb9d1SAndroid Build Coastguard Worker     res->bind = PIPE_BIND_SAMPLER_VIEW;
52*bbecb9d1SAndroid Build Coastguard Worker     res->flags = 0;
53*bbecb9d1SAndroid Build Coastguard Worker }
54*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_init_simple_buffer_sized(struct virgl_renderer_resource_create_args * res,int handle,int width)55*bbecb9d1SAndroid Build Coastguard Worker void testvirgl_init_simple_buffer_sized(struct virgl_renderer_resource_create_args *res, int handle, int width)
56*bbecb9d1SAndroid Build Coastguard Worker {
57*bbecb9d1SAndroid Build Coastguard Worker     res->handle = handle;
58*bbecb9d1SAndroid Build Coastguard Worker     res->target = PIPE_BUFFER;
59*bbecb9d1SAndroid Build Coastguard Worker     res->format = PIPE_FORMAT_R8_UNORM;
60*bbecb9d1SAndroid Build Coastguard Worker     res->width = width;
61*bbecb9d1SAndroid Build Coastguard Worker     res->height = 1;
62*bbecb9d1SAndroid Build Coastguard Worker     res->depth = 1;
63*bbecb9d1SAndroid Build Coastguard Worker     res->array_size = 1;
64*bbecb9d1SAndroid Build Coastguard Worker     res->last_level = 0;
65*bbecb9d1SAndroid Build Coastguard Worker     res->nr_samples = 0;
66*bbecb9d1SAndroid Build Coastguard Worker     res->bind = 0;
67*bbecb9d1SAndroid Build Coastguard Worker     res->flags = 0;
68*bbecb9d1SAndroid Build Coastguard Worker }
69*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_init_simple_buffer(struct virgl_renderer_resource_create_args * res,int handle)70*bbecb9d1SAndroid Build Coastguard Worker void testvirgl_init_simple_buffer(struct virgl_renderer_resource_create_args *res, int handle)
71*bbecb9d1SAndroid Build Coastguard Worker {
72*bbecb9d1SAndroid Build Coastguard Worker     testvirgl_init_simple_buffer_sized(res, handle, 50);
73*bbecb9d1SAndroid Build Coastguard Worker }
74*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_init_simple_2d_resource(struct virgl_renderer_resource_create_args * res,int handle)75*bbecb9d1SAndroid Build Coastguard Worker void testvirgl_init_simple_2d_resource(struct virgl_renderer_resource_create_args *res, int handle)
76*bbecb9d1SAndroid Build Coastguard Worker {
77*bbecb9d1SAndroid Build Coastguard Worker     res->handle = handle;
78*bbecb9d1SAndroid Build Coastguard Worker     res->target = PIPE_TEXTURE_2D;
79*bbecb9d1SAndroid Build Coastguard Worker     res->format = PIPE_FORMAT_B8G8R8X8_UNORM;
80*bbecb9d1SAndroid Build Coastguard Worker     res->width = 50;
81*bbecb9d1SAndroid Build Coastguard Worker     res->height = 50;
82*bbecb9d1SAndroid Build Coastguard Worker     res->depth = 1;
83*bbecb9d1SAndroid Build Coastguard Worker     res->array_size = 1;
84*bbecb9d1SAndroid Build Coastguard Worker     res->last_level = 0;
85*bbecb9d1SAndroid Build Coastguard Worker     res->nr_samples = 0;
86*bbecb9d1SAndroid Build Coastguard Worker     res->bind = PIPE_BIND_SAMPLER_VIEW;
87*bbecb9d1SAndroid Build Coastguard Worker     res->flags = 0;
88*bbecb9d1SAndroid Build Coastguard Worker }
89*bbecb9d1SAndroid Build Coastguard Worker 
90*bbecb9d1SAndroid Build Coastguard Worker 
91*bbecb9d1SAndroid Build Coastguard Worker struct myinfo_struct {
92*bbecb9d1SAndroid Build Coastguard Worker   uint32_t test;
93*bbecb9d1SAndroid Build Coastguard Worker };
94*bbecb9d1SAndroid Build Coastguard Worker 
95*bbecb9d1SAndroid Build Coastguard Worker static struct myinfo_struct mystruct;
96*bbecb9d1SAndroid Build Coastguard Worker 
97*bbecb9d1SAndroid Build Coastguard Worker static struct virgl_renderer_callbacks test_cbs;
98*bbecb9d1SAndroid Build Coastguard Worker 
99*bbecb9d1SAndroid Build Coastguard Worker static uint32_t testvirgl_last_fence;
testvirgl_write_fence(UNUSED void * cookie,uint32_t fence)100*bbecb9d1SAndroid Build Coastguard Worker static void testvirgl_write_fence(UNUSED void *cookie, uint32_t fence)
101*bbecb9d1SAndroid Build Coastguard Worker {
102*bbecb9d1SAndroid Build Coastguard Worker    testvirgl_last_fence = fence;
103*bbecb9d1SAndroid Build Coastguard Worker }
104*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_get_last_fence(void)105*bbecb9d1SAndroid Build Coastguard Worker uint32_t testvirgl_get_last_fence(void)
106*bbecb9d1SAndroid Build Coastguard Worker {
107*bbecb9d1SAndroid Build Coastguard Worker     return testvirgl_last_fence;
108*bbecb9d1SAndroid Build Coastguard Worker }
109*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_reset_fence(void)110*bbecb9d1SAndroid Build Coastguard Worker void testvirgl_reset_fence(void)
111*bbecb9d1SAndroid Build Coastguard Worker {
112*bbecb9d1SAndroid Build Coastguard Worker    testvirgl_last_fence = 0;
113*bbecb9d1SAndroid Build Coastguard Worker }
114*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_init_single_ctx(void)115*bbecb9d1SAndroid Build Coastguard Worker int testvirgl_init_single_ctx(void)
116*bbecb9d1SAndroid Build Coastguard Worker {
117*bbecb9d1SAndroid Build Coastguard Worker     int ret;
118*bbecb9d1SAndroid Build Coastguard Worker 
119*bbecb9d1SAndroid Build Coastguard Worker     test_cbs.version = 1;
120*bbecb9d1SAndroid Build Coastguard Worker     test_cbs.write_fence = testvirgl_write_fence;
121*bbecb9d1SAndroid Build Coastguard Worker     ret = virgl_renderer_init(&mystruct, context_flags, &test_cbs);
122*bbecb9d1SAndroid Build Coastguard Worker     ck_assert_int_eq(ret, 0);
123*bbecb9d1SAndroid Build Coastguard Worker     if (ret)
124*bbecb9d1SAndroid Build Coastguard Worker 	return ret;
125*bbecb9d1SAndroid Build Coastguard Worker     ret = virgl_renderer_context_create(1, strlen("test1"), "test1");
126*bbecb9d1SAndroid Build Coastguard Worker     ck_assert_int_eq(ret, 0);
127*bbecb9d1SAndroid Build Coastguard Worker     return ret;
128*bbecb9d1SAndroid Build Coastguard Worker 
129*bbecb9d1SAndroid Build Coastguard Worker }
130*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_init_single_ctx_nr(void)131*bbecb9d1SAndroid Build Coastguard Worker void testvirgl_init_single_ctx_nr(void)
132*bbecb9d1SAndroid Build Coastguard Worker {
133*bbecb9d1SAndroid Build Coastguard Worker     testvirgl_init_single_ctx();
134*bbecb9d1SAndroid Build Coastguard Worker }
135*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_fini_single_ctx(void)136*bbecb9d1SAndroid Build Coastguard Worker void testvirgl_fini_single_ctx(void)
137*bbecb9d1SAndroid Build Coastguard Worker {
138*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_context_destroy(1);
139*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_cleanup(&mystruct);
140*bbecb9d1SAndroid Build Coastguard Worker }
141*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_flush(struct virgl_context * ctx)142*bbecb9d1SAndroid Build Coastguard Worker static void testvirgl_flush(struct virgl_context *ctx)
143*bbecb9d1SAndroid Build Coastguard Worker {
144*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_submit_cmd(ctx->cbuf->buf, ctx->ctx_id, ctx->cbuf->cdw);
145*bbecb9d1SAndroid Build Coastguard Worker     ctx->cbuf->cdw = 0;
146*bbecb9d1SAndroid Build Coastguard Worker }
147*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_init_ctx_cmdbuf(struct virgl_context * ctx)148*bbecb9d1SAndroid Build Coastguard Worker int testvirgl_init_ctx_cmdbuf(struct virgl_context *ctx)
149*bbecb9d1SAndroid Build Coastguard Worker {
150*bbecb9d1SAndroid Build Coastguard Worker     int ret;
151*bbecb9d1SAndroid Build Coastguard Worker     ret = testvirgl_init_single_ctx();
152*bbecb9d1SAndroid Build Coastguard Worker     if (ret)
153*bbecb9d1SAndroid Build Coastguard Worker 	return ret;
154*bbecb9d1SAndroid Build Coastguard Worker 
155*bbecb9d1SAndroid Build Coastguard Worker     ctx->flush = testvirgl_flush;
156*bbecb9d1SAndroid Build Coastguard Worker     ctx->ctx_id = 1;
157*bbecb9d1SAndroid Build Coastguard Worker     ctx->cbuf = CALLOC_STRUCT(virgl_cmd_buf);
158*bbecb9d1SAndroid Build Coastguard Worker     if (!ctx->cbuf) {
159*bbecb9d1SAndroid Build Coastguard Worker 	testvirgl_fini_single_ctx();
160*bbecb9d1SAndroid Build Coastguard Worker 	return ENOMEM;
161*bbecb9d1SAndroid Build Coastguard Worker     }
162*bbecb9d1SAndroid Build Coastguard Worker 
163*bbecb9d1SAndroid Build Coastguard Worker     ctx->cbuf->buf = CALLOC(1, VIRGL_MAX_CMDBUF_DWORDS * 4);
164*bbecb9d1SAndroid Build Coastguard Worker     if (!ctx->cbuf->buf) {
165*bbecb9d1SAndroid Build Coastguard Worker 	FREE(ctx->cbuf);
166*bbecb9d1SAndroid Build Coastguard Worker 	testvirgl_fini_single_ctx();
167*bbecb9d1SAndroid Build Coastguard Worker 	return ENOMEM;
168*bbecb9d1SAndroid Build Coastguard Worker     }
169*bbecb9d1SAndroid Build Coastguard Worker     return 0;
170*bbecb9d1SAndroid Build Coastguard Worker }
171*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_fini_ctx_cmdbuf(struct virgl_context * ctx)172*bbecb9d1SAndroid Build Coastguard Worker void testvirgl_fini_ctx_cmdbuf(struct virgl_context *ctx)
173*bbecb9d1SAndroid Build Coastguard Worker {
174*bbecb9d1SAndroid Build Coastguard Worker     FREE(ctx->cbuf->buf);
175*bbecb9d1SAndroid Build Coastguard Worker     FREE(ctx->cbuf);
176*bbecb9d1SAndroid Build Coastguard Worker     testvirgl_fini_single_ctx();
177*bbecb9d1SAndroid Build Coastguard Worker }
178*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_create_backed_simple_2d_res(struct virgl_resource * res,int handle,int w,int h)179*bbecb9d1SAndroid Build Coastguard Worker int testvirgl_create_backed_simple_2d_res(struct virgl_resource *res,
180*bbecb9d1SAndroid Build Coastguard Worker 					  int handle, int w, int h)
181*bbecb9d1SAndroid Build Coastguard Worker {
182*bbecb9d1SAndroid Build Coastguard Worker     struct virgl_renderer_resource_create_args args;
183*bbecb9d1SAndroid Build Coastguard Worker     uint32_t backing_size;
184*bbecb9d1SAndroid Build Coastguard Worker     int ret;
185*bbecb9d1SAndroid Build Coastguard Worker 
186*bbecb9d1SAndroid Build Coastguard Worker     testvirgl_init_simple_2d_resource(&args, handle);
187*bbecb9d1SAndroid Build Coastguard Worker     args.width = w;
188*bbecb9d1SAndroid Build Coastguard Worker     args.height = h;
189*bbecb9d1SAndroid Build Coastguard Worker     ret = virgl_renderer_resource_create(&args, NULL, 0);
190*bbecb9d1SAndroid Build Coastguard Worker     ck_assert_int_eq(ret, 0);
191*bbecb9d1SAndroid Build Coastguard Worker 
192*bbecb9d1SAndroid Build Coastguard Worker     res->handle = handle;
193*bbecb9d1SAndroid Build Coastguard Worker     res->base.target = args.target;
194*bbecb9d1SAndroid Build Coastguard Worker     res->base.format = args.format;
195*bbecb9d1SAndroid Build Coastguard Worker 
196*bbecb9d1SAndroid Build Coastguard Worker     backing_size = args.width * args.height * util_format_get_blocksize(res->base.format);
197*bbecb9d1SAndroid Build Coastguard Worker     res->iovs = malloc(sizeof(struct iovec));
198*bbecb9d1SAndroid Build Coastguard Worker 
199*bbecb9d1SAndroid Build Coastguard Worker     res->iovs[0].iov_base = malloc(backing_size);
200*bbecb9d1SAndroid Build Coastguard Worker     res->iovs[0].iov_len = backing_size;
201*bbecb9d1SAndroid Build Coastguard Worker     res->niovs = 1;
202*bbecb9d1SAndroid Build Coastguard Worker 
203*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_resource_attach_iov(res->handle, res->iovs, res->niovs);
204*bbecb9d1SAndroid Build Coastguard Worker     return 0;
205*bbecb9d1SAndroid Build Coastguard Worker }
206*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_create_backed_simple_1d_res(struct virgl_resource * res,int handle)207*bbecb9d1SAndroid Build Coastguard Worker int testvirgl_create_backed_simple_1d_res(struct virgl_resource *res,
208*bbecb9d1SAndroid Build Coastguard Worker 					  int handle)
209*bbecb9d1SAndroid Build Coastguard Worker {
210*bbecb9d1SAndroid Build Coastguard Worker     struct virgl_renderer_resource_create_args args;
211*bbecb9d1SAndroid Build Coastguard Worker     uint32_t backing_size;
212*bbecb9d1SAndroid Build Coastguard Worker     int ret;
213*bbecb9d1SAndroid Build Coastguard Worker 
214*bbecb9d1SAndroid Build Coastguard Worker     testvirgl_init_simple_1d_resource(&args, handle);
215*bbecb9d1SAndroid Build Coastguard Worker     ret = virgl_renderer_resource_create(&args, NULL, 0);
216*bbecb9d1SAndroid Build Coastguard Worker     ck_assert_int_eq(ret, 0);
217*bbecb9d1SAndroid Build Coastguard Worker 
218*bbecb9d1SAndroid Build Coastguard Worker     res->handle = handle;
219*bbecb9d1SAndroid Build Coastguard Worker     res->base.target = args.target;
220*bbecb9d1SAndroid Build Coastguard Worker     res->base.format = args.format;
221*bbecb9d1SAndroid Build Coastguard Worker 
222*bbecb9d1SAndroid Build Coastguard Worker     backing_size = args.width * util_format_get_blocksize(res->base.format);
223*bbecb9d1SAndroid Build Coastguard Worker     res->iovs = malloc(sizeof(struct iovec));
224*bbecb9d1SAndroid Build Coastguard Worker 
225*bbecb9d1SAndroid Build Coastguard Worker     res->iovs[0].iov_base = malloc(backing_size);
226*bbecb9d1SAndroid Build Coastguard Worker     res->iovs[0].iov_len = backing_size;
227*bbecb9d1SAndroid Build Coastguard Worker     res->niovs = 1;
228*bbecb9d1SAndroid Build Coastguard Worker 
229*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_resource_attach_iov(res->handle, res->iovs, res->niovs);
230*bbecb9d1SAndroid Build Coastguard Worker     return 0;
231*bbecb9d1SAndroid Build Coastguard Worker }
232*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_destroy_backed_res(struct virgl_resource * res)233*bbecb9d1SAndroid Build Coastguard Worker void testvirgl_destroy_backed_res(struct virgl_resource *res)
234*bbecb9d1SAndroid Build Coastguard Worker {
235*bbecb9d1SAndroid Build Coastguard Worker     struct iovec *iovs;
236*bbecb9d1SAndroid Build Coastguard Worker     int niovs;
237*bbecb9d1SAndroid Build Coastguard Worker 
238*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_resource_detach_iov(res->handle, &iovs, &niovs);
239*bbecb9d1SAndroid Build Coastguard Worker 
240*bbecb9d1SAndroid Build Coastguard Worker     free(iovs[0].iov_base);
241*bbecb9d1SAndroid Build Coastguard Worker     free(iovs);
242*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_resource_unref(res->handle);
243*bbecb9d1SAndroid Build Coastguard Worker }
244*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_create_backed_simple_buffer(struct virgl_resource * res,int handle,int size,int binding)245*bbecb9d1SAndroid Build Coastguard Worker int testvirgl_create_backed_simple_buffer(struct virgl_resource *res,
246*bbecb9d1SAndroid Build Coastguard Worker 					  int handle, int size, int binding)
247*bbecb9d1SAndroid Build Coastguard Worker {
248*bbecb9d1SAndroid Build Coastguard Worker     struct virgl_renderer_resource_create_args args;
249*bbecb9d1SAndroid Build Coastguard Worker     uint32_t backing_size;
250*bbecb9d1SAndroid Build Coastguard Worker     int ret;
251*bbecb9d1SAndroid Build Coastguard Worker 
252*bbecb9d1SAndroid Build Coastguard Worker     testvirgl_init_simple_buffer_sized(&args, handle, size);
253*bbecb9d1SAndroid Build Coastguard Worker     args.bind = binding;
254*bbecb9d1SAndroid Build Coastguard Worker     ret = virgl_renderer_resource_create(&args, NULL, 0);
255*bbecb9d1SAndroid Build Coastguard Worker     ck_assert_int_eq(ret, 0);
256*bbecb9d1SAndroid Build Coastguard Worker 
257*bbecb9d1SAndroid Build Coastguard Worker     res->handle = handle;
258*bbecb9d1SAndroid Build Coastguard Worker     res->base.target = args.target;
259*bbecb9d1SAndroid Build Coastguard Worker     res->base.format = args.format;
260*bbecb9d1SAndroid Build Coastguard Worker     res->base.bind = args.bind;
261*bbecb9d1SAndroid Build Coastguard Worker     backing_size = args.width * args.height * util_format_get_blocksize(res->base.format);
262*bbecb9d1SAndroid Build Coastguard Worker     res->iovs = malloc(sizeof(struct iovec));
263*bbecb9d1SAndroid Build Coastguard Worker 
264*bbecb9d1SAndroid Build Coastguard Worker     res->iovs[0].iov_base = malloc(backing_size);
265*bbecb9d1SAndroid Build Coastguard Worker     res->iovs[0].iov_len = backing_size;
266*bbecb9d1SAndroid Build Coastguard Worker     res->niovs = 1;
267*bbecb9d1SAndroid Build Coastguard Worker 
268*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_resource_attach_iov(res->handle, res->iovs, res->niovs);
269*bbecb9d1SAndroid Build Coastguard Worker     return 0;
270*bbecb9d1SAndroid Build Coastguard Worker }
271*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_create_unbacked_simple_buffer(struct virgl_resource * res,int handle,int size,int binding)272*bbecb9d1SAndroid Build Coastguard Worker int testvirgl_create_unbacked_simple_buffer(struct virgl_resource *res,
273*bbecb9d1SAndroid Build Coastguard Worker 					    int handle, int size, int binding)
274*bbecb9d1SAndroid Build Coastguard Worker {
275*bbecb9d1SAndroid Build Coastguard Worker     struct virgl_renderer_resource_create_args args;
276*bbecb9d1SAndroid Build Coastguard Worker     int ret;
277*bbecb9d1SAndroid Build Coastguard Worker 
278*bbecb9d1SAndroid Build Coastguard Worker     testvirgl_init_simple_buffer_sized(&args, handle, size);
279*bbecb9d1SAndroid Build Coastguard Worker     args.bind = binding;
280*bbecb9d1SAndroid Build Coastguard Worker     ret = virgl_renderer_resource_create(&args, NULL, 0);
281*bbecb9d1SAndroid Build Coastguard Worker     ck_assert_int_eq(ret, 0);
282*bbecb9d1SAndroid Build Coastguard Worker 
283*bbecb9d1SAndroid Build Coastguard Worker     res->handle = handle;
284*bbecb9d1SAndroid Build Coastguard Worker     res->base.target = args.target;
285*bbecb9d1SAndroid Build Coastguard Worker     res->base.format = args.format;
286*bbecb9d1SAndroid Build Coastguard Worker     res->base.bind = args.bind;
287*bbecb9d1SAndroid Build Coastguard Worker 
288*bbecb9d1SAndroid Build Coastguard Worker     return 0;
289*bbecb9d1SAndroid Build Coastguard Worker }
290*bbecb9d1SAndroid Build Coastguard Worker 
get_caps(void)291*bbecb9d1SAndroid Build Coastguard Worker static void *get_caps(void)
292*bbecb9d1SAndroid Build Coastguard Worker {
293*bbecb9d1SAndroid Build Coastguard Worker     uint32_t max_ver, max_size;
294*bbecb9d1SAndroid Build Coastguard Worker     void *caps;
295*bbecb9d1SAndroid Build Coastguard Worker 
296*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_get_cap_set(1, &max_ver, &max_size);
297*bbecb9d1SAndroid Build Coastguard Worker     ck_assert_int_ge(max_ver, 1);
298*bbecb9d1SAndroid Build Coastguard Worker     ck_assert_int_ne(max_size, 0);
299*bbecb9d1SAndroid Build Coastguard Worker     ck_assert_int_ge(max_size, sizeof(struct virgl_caps_v1));
300*bbecb9d1SAndroid Build Coastguard Worker     caps = malloc(max_size);
301*bbecb9d1SAndroid Build Coastguard Worker 
302*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_fill_caps(0, 0, caps);
303*bbecb9d1SAndroid Build Coastguard Worker     return caps;
304*bbecb9d1SAndroid Build Coastguard Worker }
305*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_get_glsl_level_from_caps(void)306*bbecb9d1SAndroid Build Coastguard Worker uint32_t testvirgl_get_glsl_level_from_caps(void)
307*bbecb9d1SAndroid Build Coastguard Worker {
308*bbecb9d1SAndroid Build Coastguard Worker     uint32_t glsl_level;
309*bbecb9d1SAndroid Build Coastguard Worker     void *caps = get_caps();
310*bbecb9d1SAndroid Build Coastguard Worker     struct virgl_caps_v1 *v1 = (struct virgl_caps_v1*) caps;
311*bbecb9d1SAndroid Build Coastguard Worker     glsl_level = v1->glsl_level;
312*bbecb9d1SAndroid Build Coastguard Worker 
313*bbecb9d1SAndroid Build Coastguard Worker     free(caps);
314*bbecb9d1SAndroid Build Coastguard Worker 
315*bbecb9d1SAndroid Build Coastguard Worker     return glsl_level;
316*bbecb9d1SAndroid Build Coastguard Worker }
317*bbecb9d1SAndroid Build Coastguard Worker 
testvirgl_get_multisample_from_caps(void)318*bbecb9d1SAndroid Build Coastguard Worker unsigned testvirgl_get_multisample_from_caps(void)
319*bbecb9d1SAndroid Build Coastguard Worker {
320*bbecb9d1SAndroid Build Coastguard Worker     void *caps = get_caps();
321*bbecb9d1SAndroid Build Coastguard Worker     unsigned multisample;
322*bbecb9d1SAndroid Build Coastguard Worker 
323*bbecb9d1SAndroid Build Coastguard Worker     struct virgl_caps_v1 *v1 = (struct virgl_caps_v1*) caps;
324*bbecb9d1SAndroid Build Coastguard Worker     multisample = v1->bset.texture_multisample;
325*bbecb9d1SAndroid Build Coastguard Worker 
326*bbecb9d1SAndroid Build Coastguard Worker     free(caps);
327*bbecb9d1SAndroid Build Coastguard Worker 
328*bbecb9d1SAndroid Build Coastguard Worker     return multisample;
329*bbecb9d1SAndroid Build Coastguard Worker }
330