xref: /aosp_15_r20/external/crosvm/third_party/virglrenderer/src/virglrenderer.h (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 /* library interface from QEMU to virglrenderer */
26*bbecb9d1SAndroid Build Coastguard Worker 
27*bbecb9d1SAndroid Build Coastguard Worker #ifndef VIRGLRENDERER_H
28*bbecb9d1SAndroid Build Coastguard Worker #define VIRGLRENDERER_H
29*bbecb9d1SAndroid Build Coastguard Worker 
30*bbecb9d1SAndroid Build Coastguard Worker #include <stdint.h>
31*bbecb9d1SAndroid Build Coastguard Worker #include <stdbool.h>
32*bbecb9d1SAndroid Build Coastguard Worker #include <stdarg.h>
33*bbecb9d1SAndroid Build Coastguard Worker 
34*bbecb9d1SAndroid Build Coastguard Worker struct virgl_box;
35*bbecb9d1SAndroid Build Coastguard Worker struct iovec;
36*bbecb9d1SAndroid Build Coastguard Worker 
37*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_EXPORT  __attribute__((visibility("default")))
38*bbecb9d1SAndroid Build Coastguard Worker 
39*bbecb9d1SAndroid Build Coastguard Worker typedef void *virgl_renderer_gl_context;
40*bbecb9d1SAndroid Build Coastguard Worker 
41*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_gl_ctx_param {
42*bbecb9d1SAndroid Build Coastguard Worker    int version;
43*bbecb9d1SAndroid Build Coastguard Worker    bool shared;
44*bbecb9d1SAndroid Build Coastguard Worker    int major_ver;
45*bbecb9d1SAndroid Build Coastguard Worker    int minor_ver;
46*bbecb9d1SAndroid Build Coastguard Worker };
47*bbecb9d1SAndroid Build Coastguard Worker 
48*bbecb9d1SAndroid Build Coastguard Worker #ifdef VIRGL_RENDERER_UNSTABLE_APIS
49*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_CALLBACKS_VERSION 4
50*bbecb9d1SAndroid Build Coastguard Worker #else
51*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_CALLBACKS_VERSION 2
52*bbecb9d1SAndroid Build Coastguard Worker #endif
53*bbecb9d1SAndroid Build Coastguard Worker 
54*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_callbacks {
55*bbecb9d1SAndroid Build Coastguard Worker    int version;
56*bbecb9d1SAndroid Build Coastguard Worker    void (*write_fence)(void *cookie, uint32_t fence);
57*bbecb9d1SAndroid Build Coastguard Worker 
58*bbecb9d1SAndroid Build Coastguard Worker    /*
59*bbecb9d1SAndroid Build Coastguard Worker     * The following 3 callbacks allows virglrenderer to
60*bbecb9d1SAndroid Build Coastguard Worker     * use winsys from caller, instead of initializing it's own
61*bbecb9d1SAndroid Build Coastguard Worker     * winsys (flag VIRGL_RENDERER_USE_EGL or VIRGL_RENDERER_USE_GLX).
62*bbecb9d1SAndroid Build Coastguard Worker     */
63*bbecb9d1SAndroid Build Coastguard Worker 
64*bbecb9d1SAndroid Build Coastguard Worker    /* create a GL/GLES context */
65*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_gl_context (*create_gl_context)(void *cookie, int scanout_idx, struct virgl_renderer_gl_ctx_param *param);
66*bbecb9d1SAndroid Build Coastguard Worker    /* destroy a GL/GLES context */
67*bbecb9d1SAndroid Build Coastguard Worker    void (*destroy_gl_context)(void *cookie, virgl_renderer_gl_context ctx);
68*bbecb9d1SAndroid Build Coastguard Worker    /* make a context current */
69*bbecb9d1SAndroid Build Coastguard Worker    int (*make_current)(void *cookie, int scanout_idx, virgl_renderer_gl_context ctx);
70*bbecb9d1SAndroid Build Coastguard Worker 
71*bbecb9d1SAndroid Build Coastguard Worker    /*
72*bbecb9d1SAndroid Build Coastguard Worker     * v2, used with flags & VIRGL_RENDERER_USE_EGL
73*bbecb9d1SAndroid Build Coastguard Worker     * Chose the drm fd, that will be used by virglrenderer
74*bbecb9d1SAndroid Build Coastguard Worker     * for winsys initialization.  Virglrenderer takes ownership of the fd
75*bbecb9d1SAndroid Build Coastguard Worker     * that is returned and is responsible to close() it.  This should not
76*bbecb9d1SAndroid Build Coastguard Worker     * return the same fd each time it is call, if called multiple times.
77*bbecb9d1SAndroid Build Coastguard Worker     */
78*bbecb9d1SAndroid Build Coastguard Worker    int (*get_drm_fd)(void *cookie);
79*bbecb9d1SAndroid Build Coastguard Worker 
80*bbecb9d1SAndroid Build Coastguard Worker #ifdef VIRGL_RENDERER_UNSTABLE_APIS
81*bbecb9d1SAndroid Build Coastguard Worker    void (*write_context_fence)(void *cookie, uint32_t ctx_id, uint32_t ring_idx, uint64_t fence_id);
82*bbecb9d1SAndroid Build Coastguard Worker 
83*bbecb9d1SAndroid Build Coastguard Worker    /* version 0: a connected socket of type SOCK_SEQPACKET */
84*bbecb9d1SAndroid Build Coastguard Worker    int (*get_server_fd)(void *cookie, uint32_t version);
85*bbecb9d1SAndroid Build Coastguard Worker 
86*bbecb9d1SAndroid Build Coastguard Worker    /*
87*bbecb9d1SAndroid Build Coastguard Worker     * Get the EGLDisplay from caller. It requires create_gl_context,
88*bbecb9d1SAndroid Build Coastguard Worker     * destroy_gl_context, make_current to be implemented by caller.
89*bbecb9d1SAndroid Build Coastguard Worker     */
90*bbecb9d1SAndroid Build Coastguard Worker    void *(*get_egl_display)(void *cookie);
91*bbecb9d1SAndroid Build Coastguard Worker #endif
92*bbecb9d1SAndroid Build Coastguard Worker };
93*bbecb9d1SAndroid Build Coastguard Worker 
94*bbecb9d1SAndroid Build Coastguard Worker /* virtio-gpu compatible interface */
95*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_USE_EGL 1
96*bbecb9d1SAndroid Build Coastguard Worker /*
97*bbecb9d1SAndroid Build Coastguard Worker  * Wait for sync objects in thread rather than polling
98*bbecb9d1SAndroid Build Coastguard Worker  * need to use virgl_renderer_get_poll_fd to know if this feature is in effect.
99*bbecb9d1SAndroid Build Coastguard Worker  */
100*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_THREAD_SYNC 2
101*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_USE_GLX (1 << 2)
102*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_USE_SURFACELESS (1 << 3)
103*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_USE_GLES (1 << 4)
104*bbecb9d1SAndroid Build Coastguard Worker 
105*bbecb9d1SAndroid Build Coastguard Worker #ifdef VIRGL_RENDERER_UNSTABLE_APIS
106*bbecb9d1SAndroid Build Coastguard Worker /*
107*bbecb9d1SAndroid Build Coastguard Worker  * Blob resources used with the 3D driver must be able to be represented as file descriptors.
108*bbecb9d1SAndroid Build Coastguard Worker  * The typical use case is the virtual machine manager (or vtest) is running in a multiprocess
109*bbecb9d1SAndroid Build Coastguard Worker  * mode. In a standard Linux setup, that means the KVM process is different from the process that
110*bbecb9d1SAndroid Build Coastguard Worker  * instantiated virglrenderer. For zero-copy capability to work, file descriptors must be used.
111*bbecb9d1SAndroid Build Coastguard Worker  *
112*bbecb9d1SAndroid Build Coastguard Worker  * VMMs that advertise support for the virtio-gpu feature VIRTIO_GPU_F_RESOURCE_BLOB and run in
113*bbecb9d1SAndroid Build Coastguard Worker  * a multi-process mode *must* specify this flag.
114*bbecb9d1SAndroid Build Coastguard Worker  */
115*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_USE_EXTERNAL_BLOB (1 << 5)
116*bbecb9d1SAndroid Build Coastguard Worker 
117*bbecb9d1SAndroid Build Coastguard Worker /* Enable venus renderer.
118*bbecb9d1SAndroid Build Coastguard Worker  */
119*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_VENUS         (1 << 6)
120*bbecb9d1SAndroid Build Coastguard Worker 
121*bbecb9d1SAndroid Build Coastguard Worker /* Disable virgl renderer.
122*bbecb9d1SAndroid Build Coastguard Worker  */
123*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_NO_VIRGL      (1 << 7)
124*bbecb9d1SAndroid Build Coastguard Worker 
125*bbecb9d1SAndroid Build Coastguard Worker /*
126*bbecb9d1SAndroid Build Coastguard Worker  * Used in conjonction with VIRGL_RENDERER_THREAD_SYNC;
127*bbecb9d1SAndroid Build Coastguard Worker  * write_fence callback is executed directly from the polling thread. When enabled,
128*bbecb9d1SAndroid Build Coastguard Worker  * virgl_renderer_get_poll_fd should not be used to watch for retired fences.
129*bbecb9d1SAndroid Build Coastguard Worker  */
130*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_ASYNC_FENCE_CB (1 << 8)
131*bbecb9d1SAndroid Build Coastguard Worker 
132*bbecb9d1SAndroid Build Coastguard Worker /* Start a render server and move GPU rendering to the render server.
133*bbecb9d1SAndroid Build Coastguard Worker  *
134*bbecb9d1SAndroid Build Coastguard Worker  * This is respected by the venus renderer but ignored by the virgl renderer.
135*bbecb9d1SAndroid Build Coastguard Worker  */
136*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_RENDER_SERVER (1 << 9)
137*bbecb9d1SAndroid Build Coastguard Worker 
138*bbecb9d1SAndroid Build Coastguard Worker /*
139*bbecb9d1SAndroid Build Coastguard Worker  * Enable drm renderer.
140*bbecb9d1SAndroid Build Coastguard Worker  */
141*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_DRM           (1 << 10)
142*bbecb9d1SAndroid Build Coastguard Worker 
143*bbecb9d1SAndroid Build Coastguard Worker /* Video encode/decode */
144*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_USE_VIDEO     (1 << 11)
145*bbecb9d1SAndroid Build Coastguard Worker 
146*bbecb9d1SAndroid Build Coastguard Worker 
147*bbecb9d1SAndroid Build Coastguard Worker #endif /* VIRGL_RENDERER_UNSTABLE_APIS */
148*bbecb9d1SAndroid Build Coastguard Worker 
149*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_init(void *cookie, int flags, struct virgl_renderer_callbacks *cb);
150*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_poll(void); /* force fences */
151*bbecb9d1SAndroid Build Coastguard Worker 
152*bbecb9d1SAndroid Build Coastguard Worker /* we need to give qemu the cursor resource contents */
153*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void *virgl_renderer_get_cursor_data(uint32_t resource_id, uint32_t *width, uint32_t *height);
154*bbecb9d1SAndroid Build Coastguard Worker 
155*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_get_rect(int resource_id, struct iovec *iov, unsigned int num_iovs,
156*bbecb9d1SAndroid Build Coastguard Worker                                           uint32_t offset, int x, int y, int width, int height);
157*bbecb9d1SAndroid Build Coastguard Worker 
158*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_get_fd_for_texture(uint32_t tex_id, int *fd);
159*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_get_fd_for_texture2(uint32_t tex_id, int *fd, int *stride, int *offset);
160*bbecb9d1SAndroid Build Coastguard Worker 
161*bbecb9d1SAndroid Build Coastguard Worker /*
162*bbecb9d1SAndroid Build Coastguard Worker  * These are only here for compatibility-reasons. In the future, use the flags
163*bbecb9d1SAndroid Build Coastguard Worker  * from virgl_hw.h instead.
164*bbecb9d1SAndroid Build Coastguard Worker  */
165*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_DEPTH_STENCIL (1 << 0)
166*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_RENDER_TARGET (1 << 1)
167*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_SAMPLER_VIEW  (1 << 3)
168*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_VERTEX_BUFFER (1 << 4)
169*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_INDEX_BUFFER  (1 << 5)
170*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_CONSTANT_BUFFER (1 << 6)
171*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_STREAM_OUTPUT (1 << 11)
172*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_CURSOR        (1 << 16)
173*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_CUSTOM        (1 << 17)
174*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_SCANOUT       (1 << 18)
175*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RES_BIND_SHARED        (1 << 20)
176*bbecb9d1SAndroid Build Coastguard Worker 
177*bbecb9d1SAndroid Build Coastguard Worker enum virgl_renderer_structure_type_v0 {
178*bbecb9d1SAndroid Build Coastguard Worker    VIRGL_RENDERER_STRUCTURE_TYPE_NONE = 0,
179*bbecb9d1SAndroid Build Coastguard Worker    VIRGL_RENDERER_STRUCTURE_TYPE_EXPORT_QUERY = (1 << 0),
180*bbecb9d1SAndroid Build Coastguard Worker    VIRGL_RENDERER_STRUCTURE_TYPE_SUPPORTED_STRUCTURES = (1 << 1),
181*bbecb9d1SAndroid Build Coastguard Worker };
182*bbecb9d1SAndroid Build Coastguard Worker 
183*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_args {
184*bbecb9d1SAndroid Build Coastguard Worker    uint32_t handle;
185*bbecb9d1SAndroid Build Coastguard Worker    uint32_t target;
186*bbecb9d1SAndroid Build Coastguard Worker    uint32_t format;
187*bbecb9d1SAndroid Build Coastguard Worker    uint32_t bind;
188*bbecb9d1SAndroid Build Coastguard Worker    uint32_t width;
189*bbecb9d1SAndroid Build Coastguard Worker    uint32_t height;
190*bbecb9d1SAndroid Build Coastguard Worker    uint32_t depth;
191*bbecb9d1SAndroid Build Coastguard Worker    uint32_t array_size;
192*bbecb9d1SAndroid Build Coastguard Worker    uint32_t last_level;
193*bbecb9d1SAndroid Build Coastguard Worker    uint32_t nr_samples;
194*bbecb9d1SAndroid Build Coastguard Worker    uint32_t flags;
195*bbecb9d1SAndroid Build Coastguard Worker };
196*bbecb9d1SAndroid Build Coastguard Worker 
197*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_hdr {
198*bbecb9d1SAndroid Build Coastguard Worker    uint32_t stype;
199*bbecb9d1SAndroid Build Coastguard Worker    uint32_t stype_version;
200*bbecb9d1SAndroid Build Coastguard Worker    uint32_t size;
201*bbecb9d1SAndroid Build Coastguard Worker };
202*bbecb9d1SAndroid Build Coastguard Worker 
203*bbecb9d1SAndroid Build Coastguard Worker /*
204*bbecb9d1SAndroid Build Coastguard Worker  * "out_num_fds" represents the number of distinct kernel buffers backing an
205*bbecb9d1SAndroid Build Coastguard Worker  * allocation. If this number or 'out_fourcc' is zero, the resource is not
206*bbecb9d1SAndroid Build Coastguard Worker  * exportable. The "out_fds" field will be populated with "out_num_fds" file
207*bbecb9d1SAndroid Build Coastguard Worker  * descriptors if "in_export_fds" is non-zero.
208*bbecb9d1SAndroid Build Coastguard Worker  */
209*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_export_query {
210*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_hdr hdr;
211*bbecb9d1SAndroid Build Coastguard Worker    uint32_t in_resource_id;
212*bbecb9d1SAndroid Build Coastguard Worker 
213*bbecb9d1SAndroid Build Coastguard Worker    uint32_t out_num_fds;
214*bbecb9d1SAndroid Build Coastguard Worker    uint32_t in_export_fds;
215*bbecb9d1SAndroid Build Coastguard Worker    uint32_t out_fourcc;
216*bbecb9d1SAndroid Build Coastguard Worker    uint32_t pad;
217*bbecb9d1SAndroid Build Coastguard Worker 
218*bbecb9d1SAndroid Build Coastguard Worker    int32_t out_fds[4];
219*bbecb9d1SAndroid Build Coastguard Worker    uint32_t out_strides[4];
220*bbecb9d1SAndroid Build Coastguard Worker    uint32_t out_offsets[4];
221*bbecb9d1SAndroid Build Coastguard Worker    uint64_t out_modifier;
222*bbecb9d1SAndroid Build Coastguard Worker };
223*bbecb9d1SAndroid Build Coastguard Worker 
224*bbecb9d1SAndroid Build Coastguard Worker /*
225*bbecb9d1SAndroid Build Coastguard Worker  * "out_supported_structures_mask" is a bitmask representing the structures that
226*bbecb9d1SAndroid Build Coastguard Worker  * virglrenderer knows how to handle for a given "in_stype_version".
227*bbecb9d1SAndroid Build Coastguard Worker  */
228*bbecb9d1SAndroid Build Coastguard Worker 
229*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_supported_structures {
230*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_hdr hdr;
231*bbecb9d1SAndroid Build Coastguard Worker    uint32_t in_stype_version;
232*bbecb9d1SAndroid Build Coastguard Worker    uint32_t out_supported_structures_mask;
233*bbecb9d1SAndroid Build Coastguard Worker };
234*bbecb9d1SAndroid Build Coastguard Worker 
235*bbecb9d1SAndroid Build Coastguard Worker /* new API */
236*bbecb9d1SAndroid Build Coastguard Worker /* This typedef must be kept in sync with vrend_debug.h */
237*bbecb9d1SAndroid Build Coastguard Worker typedef void (*virgl_debug_callback_type)(const char *fmt, va_list ap);
238*bbecb9d1SAndroid Build Coastguard Worker 
239*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_resource_create(struct virgl_renderer_resource_create_args *args, struct iovec *iov, uint32_t num_iovs);
240*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_resource_import_eglimage(struct virgl_renderer_resource_create_args *args, void *image);
241*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_resource_unref(uint32_t res_handle);
242*bbecb9d1SAndroid Build Coastguard Worker 
243*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_resource_set_priv(uint32_t res_handle, void *priv);
244*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void *virgl_renderer_resource_get_priv(uint32_t res_handle);
245*bbecb9d1SAndroid Build Coastguard Worker 
246*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_context_create(uint32_t handle, uint32_t nlen, const char *name);
247*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_context_destroy(uint32_t handle);
248*bbecb9d1SAndroid Build Coastguard Worker 
249*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_submit_cmd(void *buffer,
250*bbecb9d1SAndroid Build Coastguard Worker                                            int ctx_id,
251*bbecb9d1SAndroid Build Coastguard Worker                                            int ndw);
252*bbecb9d1SAndroid Build Coastguard Worker 
253*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_transfer_read_iov(uint32_t handle, uint32_t ctx_id,
254*bbecb9d1SAndroid Build Coastguard Worker                                                   uint32_t level, uint32_t stride,
255*bbecb9d1SAndroid Build Coastguard Worker                                                   uint32_t layer_stride,
256*bbecb9d1SAndroid Build Coastguard Worker                                                   struct virgl_box *box,
257*bbecb9d1SAndroid Build Coastguard Worker                                                   uint64_t offset, struct iovec *iov,
258*bbecb9d1SAndroid Build Coastguard Worker                                                   int iovec_cnt);
259*bbecb9d1SAndroid Build Coastguard Worker 
260*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_transfer_write_iov(uint32_t handle,
261*bbecb9d1SAndroid Build Coastguard Worker                                                    uint32_t ctx_id,
262*bbecb9d1SAndroid Build Coastguard Worker                                                    int level,
263*bbecb9d1SAndroid Build Coastguard Worker                                                    uint32_t stride,
264*bbecb9d1SAndroid Build Coastguard Worker                                                    uint32_t layer_stride,
265*bbecb9d1SAndroid Build Coastguard Worker                                                    struct virgl_box *box,
266*bbecb9d1SAndroid Build Coastguard Worker                                                    uint64_t offset,
267*bbecb9d1SAndroid Build Coastguard Worker                                                    struct iovec *iovec,
268*bbecb9d1SAndroid Build Coastguard Worker                                                    unsigned int iovec_cnt);
269*bbecb9d1SAndroid Build Coastguard Worker 
270*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_get_cap_set(uint32_t set, uint32_t *max_ver,
271*bbecb9d1SAndroid Build Coastguard Worker                                              uint32_t *max_size);
272*bbecb9d1SAndroid Build Coastguard Worker 
273*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_fill_caps(uint32_t set, uint32_t version,
274*bbecb9d1SAndroid Build Coastguard Worker                                            void *caps);
275*bbecb9d1SAndroid Build Coastguard Worker 
276*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_resource_attach_iov(int res_handle, struct iovec *iov,
277*bbecb9d1SAndroid Build Coastguard Worker                                                     int num_iovs);
278*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_resource_detach_iov(int res_handle, struct iovec **iov, int *num_iovs);
279*bbecb9d1SAndroid Build Coastguard Worker 
280*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_create_fence(int client_fence_id, uint32_t ctx_id);
281*bbecb9d1SAndroid Build Coastguard Worker 
282*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_force_ctx_0(void);
283*bbecb9d1SAndroid Build Coastguard Worker 
284*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_ctx_attach_resource(int ctx_id, int res_handle);
285*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_ctx_detach_resource(int ctx_id, int res_handle);
286*bbecb9d1SAndroid Build Coastguard Worker 
287*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT virgl_debug_callback_type virgl_set_debug_callback(virgl_debug_callback_type cb);
288*bbecb9d1SAndroid Build Coastguard Worker 
289*bbecb9d1SAndroid Build Coastguard Worker /* return information about a resource */
290*bbecb9d1SAndroid Build Coastguard Worker 
291*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_info {
292*bbecb9d1SAndroid Build Coastguard Worker    uint32_t handle;
293*bbecb9d1SAndroid Build Coastguard Worker    uint32_t virgl_format;
294*bbecb9d1SAndroid Build Coastguard Worker    uint32_t width;
295*bbecb9d1SAndroid Build Coastguard Worker    uint32_t height;
296*bbecb9d1SAndroid Build Coastguard Worker    uint32_t depth;
297*bbecb9d1SAndroid Build Coastguard Worker    uint32_t flags;
298*bbecb9d1SAndroid Build Coastguard Worker    uint32_t tex_id;
299*bbecb9d1SAndroid Build Coastguard Worker    uint32_t stride;
300*bbecb9d1SAndroid Build Coastguard Worker    int drm_fourcc;
301*bbecb9d1SAndroid Build Coastguard Worker };
302*bbecb9d1SAndroid Build Coastguard Worker 
303*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_resource_get_info(int res_handle,
304*bbecb9d1SAndroid Build Coastguard Worker                                                   struct virgl_renderer_resource_info *info);
305*bbecb9d1SAndroid Build Coastguard Worker 
306*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_cleanup(void *cookie);
307*bbecb9d1SAndroid Build Coastguard Worker 
308*bbecb9d1SAndroid Build Coastguard Worker /* reset the rendererer - destroy all contexts and resource */
309*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_reset(void);
310*bbecb9d1SAndroid Build Coastguard Worker 
311*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_get_poll_fd(void);
312*bbecb9d1SAndroid Build Coastguard Worker 
313*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_execute(void *execute_args, uint32_t execute_size);
314*bbecb9d1SAndroid Build Coastguard Worker 
315*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_CONTEXT_FLAG_CAPSET_ID_MASK 0xff
316*bbecb9d1SAndroid Build Coastguard Worker 
317*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_context_create_with_flags(uint32_t ctx_id,
318*bbecb9d1SAndroid Build Coastguard Worker                                                           uint32_t ctx_flags,
319*bbecb9d1SAndroid Build Coastguard Worker                                                           uint32_t nlen,
320*bbecb9d1SAndroid Build Coastguard Worker                                                           const char *name);
321*bbecb9d1SAndroid Build Coastguard Worker 
322*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_BLOB_MEM_GUEST             0x0001
323*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_BLOB_MEM_HOST3D            0x0002
324*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_BLOB_MEM_HOST3D_GUEST      0x0003
325*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_BLOB_MEM_GUEST_VRAM        0x0004
326*bbecb9d1SAndroid Build Coastguard Worker 
327*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_BLOB_FLAG_USE_MAPPABLE     0x0001
328*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_BLOB_FLAG_USE_SHAREABLE    0x0002
329*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_BLOB_FLAG_USE_CROSS_DEVICE 0x0004
330*bbecb9d1SAndroid Build Coastguard Worker 
331*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_create_blob_args
332*bbecb9d1SAndroid Build Coastguard Worker {
333*bbecb9d1SAndroid Build Coastguard Worker    uint32_t res_handle;
334*bbecb9d1SAndroid Build Coastguard Worker    uint32_t ctx_id;
335*bbecb9d1SAndroid Build Coastguard Worker    uint32_t blob_mem;
336*bbecb9d1SAndroid Build Coastguard Worker    uint32_t blob_flags;
337*bbecb9d1SAndroid Build Coastguard Worker    uint64_t blob_id;
338*bbecb9d1SAndroid Build Coastguard Worker    uint64_t size;
339*bbecb9d1SAndroid Build Coastguard Worker    const struct iovec *iovecs;
340*bbecb9d1SAndroid Build Coastguard Worker    uint32_t num_iovs;
341*bbecb9d1SAndroid Build Coastguard Worker };
342*bbecb9d1SAndroid Build Coastguard Worker 
343*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int
344*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_create_blob(const struct virgl_renderer_resource_create_blob_args *args);
345*bbecb9d1SAndroid Build Coastguard Worker 
346*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_resource_map(uint32_t res_handle, void **map, uint64_t *out_size);
347*bbecb9d1SAndroid Build Coastguard Worker 
348*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_resource_unmap(uint32_t res_handle);
349*bbecb9d1SAndroid Build Coastguard Worker 
350*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_MAP_CACHE_MASK      0x0f
351*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_MAP_CACHE_NONE      0x00
352*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_MAP_CACHE_CACHED    0x01
353*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_MAP_CACHE_UNCACHED  0x02
354*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_MAP_CACHE_WC        0x03
355*bbecb9d1SAndroid Build Coastguard Worker 
356*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_resource_get_map_info(uint32_t res_handle, uint32_t *map_info);
357*bbecb9d1SAndroid Build Coastguard Worker 
358*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_BLOB_FD_TYPE_DMABUF        0x0001
359*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_BLOB_FD_TYPE_OPAQUE        0x0002
360*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_BLOB_FD_TYPE_SHM           0x0003
361*bbecb9d1SAndroid Build Coastguard Worker 
362*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int
363*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_export_blob(uint32_t res_id, uint32_t *fd_type, int *fd);
364*bbecb9d1SAndroid Build Coastguard Worker 
365*bbecb9d1SAndroid Build Coastguard Worker /*
366*bbecb9d1SAndroid Build Coastguard Worker  * These are unstable APIs for development only. Use these for development/testing purposes
367*bbecb9d1SAndroid Build Coastguard Worker  * only, not in production
368*bbecb9d1SAndroid Build Coastguard Worker  */
369*bbecb9d1SAndroid Build Coastguard Worker #ifdef VIRGL_RENDERER_UNSTABLE_APIS
370*bbecb9d1SAndroid Build Coastguard Worker 
371*bbecb9d1SAndroid Build Coastguard Worker struct virgl_renderer_resource_import_blob_args
372*bbecb9d1SAndroid Build Coastguard Worker {
373*bbecb9d1SAndroid Build Coastguard Worker    uint32_t res_handle;
374*bbecb9d1SAndroid Build Coastguard Worker    uint32_t blob_mem;
375*bbecb9d1SAndroid Build Coastguard Worker    uint32_t fd_type;
376*bbecb9d1SAndroid Build Coastguard Worker    int fd;
377*bbecb9d1SAndroid Build Coastguard Worker    uint64_t size;
378*bbecb9d1SAndroid Build Coastguard Worker };
379*bbecb9d1SAndroid Build Coastguard Worker 
380*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int
381*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_resource_import_blob(const struct virgl_renderer_resource_import_blob_args *args);
382*bbecb9d1SAndroid Build Coastguard Worker 
383*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int
384*bbecb9d1SAndroid Build Coastguard Worker virgl_renderer_export_fence(uint32_t client_fence_id, int *fd);
385*bbecb9d1SAndroid Build Coastguard Worker 
386*bbecb9d1SAndroid Build Coastguard Worker #define VIRGL_RENDERER_FENCE_FLAG_MERGEABLE      (1 << 0)
387*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_context_create_fence(uint32_t ctx_id,
388*bbecb9d1SAndroid Build Coastguard Worker                                                      uint32_t flags,
389*bbecb9d1SAndroid Build Coastguard Worker                                                      uint32_t ring_idx,
390*bbecb9d1SAndroid Build Coastguard Worker                                                      uint64_t fence_id);
391*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT void virgl_renderer_context_poll(uint32_t ctx_id); /* force fences */
392*bbecb9d1SAndroid Build Coastguard Worker VIRGL_EXPORT int virgl_renderer_context_get_poll_fd(uint32_t ctx_id);
393*bbecb9d1SAndroid Build Coastguard Worker 
394*bbecb9d1SAndroid Build Coastguard Worker #endif /* VIRGL_RENDERER_UNSTABLE_APIS */
395*bbecb9d1SAndroid Build Coastguard Worker 
396*bbecb9d1SAndroid Build Coastguard Worker #endif
397