1#[cfg(feature = "virgl_renderer")]
4#[link(name = "virglrenderer")]
5extern "C" {}
6
7pub const VIRGL_RENDERER_CALLBACKS_VERSION: u32 = 4;
8pub const VIRGL_RENDERER_USE_EGL: u32 = 1;
9pub const VIRGL_RENDERER_THREAD_SYNC: u32 = 2;
10pub const VIRGL_RENDERER_USE_GLX: u32 = 4;
11pub const VIRGL_RENDERER_USE_SURFACELESS: u32 = 8;
12pub const VIRGL_RENDERER_USE_GLES: u32 = 16;
13pub const VIRGL_RENDERER_USE_EXTERNAL_BLOB: u32 = 32;
14pub const VIRGL_RENDERER_VENUS: u32 = 64;
15pub const VIRGL_RENDERER_NO_VIRGL: u32 = 128;
16pub const VIRGL_RENDERER_ASYNC_FENCE_CB: u32 = 256;
17pub const VIRGL_RENDERER_RENDER_SERVER: u32 = 512;
18pub const VIRGL_RENDERER_DRM: u32 = 1024;
19pub const VIRGL_RENDERER_USE_VIDEO: u32 = 2048;
20pub const VIRGL_RENDERER_D3D11_SHARE_TEXTURE: u32 = 4096;
21pub const VIRGL_RENDERER_COMPAT_PROFILE: u32 = 8192;
22pub const VIRGL_RES_BIND_DEPTH_STENCIL: u32 = 1;
23pub const VIRGL_RES_BIND_RENDER_TARGET: u32 = 2;
24pub const VIRGL_RES_BIND_SAMPLER_VIEW: u32 = 8;
25pub const VIRGL_RES_BIND_VERTEX_BUFFER: u32 = 16;
26pub const VIRGL_RES_BIND_INDEX_BUFFER: u32 = 32;
27pub const VIRGL_RES_BIND_CONSTANT_BUFFER: u32 = 64;
28pub const VIRGL_RES_BIND_STREAM_OUTPUT: u32 = 2048;
29pub const VIRGL_RES_BIND_CURSOR: u32 = 65536;
30pub const VIRGL_RES_BIND_CUSTOM: u32 = 131072;
31pub const VIRGL_RES_BIND_SCANOUT: u32 = 262144;
32pub const VIRGL_RES_BIND_SHARED: u32 = 1048576;
33pub const VIRGL_RENDERER_RESOURCE_INFO_EXT_VERSION: u32 = 0;
34pub const VIRGL_RENDERER_CONTEXT_FLAG_CAPSET_ID_MASK: u32 = 255;
35pub const VIRGL_RENDERER_BLOB_MEM_GUEST: u32 = 1;
36pub const VIRGL_RENDERER_BLOB_MEM_HOST3D: u32 = 2;
37pub const VIRGL_RENDERER_BLOB_MEM_HOST3D_GUEST: u32 = 3;
38pub const VIRGL_RENDERER_BLOB_MEM_GUEST_VRAM: u32 = 4;
39pub const VIRGL_RENDERER_BLOB_FLAG_USE_MAPPABLE: u32 = 1;
40pub const VIRGL_RENDERER_BLOB_FLAG_USE_SHAREABLE: u32 = 2;
41pub const VIRGL_RENDERER_BLOB_FLAG_USE_CROSS_DEVICE: u32 = 4;
42pub const VIRGL_RENDERER_BLOB_FLAG_USE_DUMB_BUFFER: u32 = 8;
43pub const VIRGL_RENDERER_MAP_CACHE_MASK: u32 = 15;
44pub const VIRGL_RENDERER_MAP_CACHE_NONE: u32 = 0;
45pub const VIRGL_RENDERER_MAP_CACHE_CACHED: u32 = 1;
46pub const VIRGL_RENDERER_MAP_CACHE_UNCACHED: u32 = 2;
47pub const VIRGL_RENDERER_MAP_CACHE_WC: u32 = 3;
48pub const VIRGL_RENDERER_BLOB_FD_TYPE_DMABUF: u32 = 1;
49pub const VIRGL_RENDERER_BLOB_FD_TYPE_OPAQUE: u32 = 2;
50pub const VIRGL_RENDERER_BLOB_FD_TYPE_SHM: u32 = 3;
51pub const VIRGL_RENDERER_FENCE_FLAG_MERGEABLE: u32 = 1;
52#[repr(C)]
53#[derive(Debug, Copy, Clone)]
54pub struct virgl_box {
55 _unused: [u8; 0],
56}
57#[repr(C)]
58#[derive(Debug, Copy, Clone)]
59pub struct iovec {
60 _unused: [u8; 0],
61}
62pub type virgl_renderer_gl_context = *mut ::std::os::raw::c_void;
63#[repr(C)]
64#[derive(Debug, Default, Copy, Clone)]
65pub struct virgl_renderer_gl_ctx_param {
66 pub version: ::std::os::raw::c_int,
67 pub shared: bool,
68 pub major_ver: ::std::os::raw::c_int,
69 pub minor_ver: ::std::os::raw::c_int,
70 pub compat_ctx: ::std::os::raw::c_int,
71}
72#[repr(C)]
73#[derive(Debug, Default, Copy, Clone)]
74pub struct virgl_renderer_callbacks {
75 pub version: ::std::os::raw::c_int,
76 pub write_fence: ::std::option::Option<
77 unsafe extern "C" fn(cookie: *mut ::std::os::raw::c_void, fence: u32),
78 >,
79 pub create_gl_context: ::std::option::Option<
80 unsafe extern "C" fn(
81 cookie: *mut ::std::os::raw::c_void,
82 scanout_idx: ::std::os::raw::c_int,
83 param: *mut virgl_renderer_gl_ctx_param,
84 ) -> virgl_renderer_gl_context,
85 >,
86 pub destroy_gl_context: ::std::option::Option<
87 unsafe extern "C" fn(cookie: *mut ::std::os::raw::c_void, ctx: virgl_renderer_gl_context),
88 >,
89 pub make_current: ::std::option::Option<
90 unsafe extern "C" fn(
91 cookie: *mut ::std::os::raw::c_void,
92 scanout_idx: ::std::os::raw::c_int,
93 ctx: virgl_renderer_gl_context,
94 ) -> ::std::os::raw::c_int,
95 >,
96 pub get_drm_fd: ::std::option::Option<
97 unsafe extern "C" fn(cookie: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
98 >,
99 pub write_context_fence: ::std::option::Option<
100 unsafe extern "C" fn(
101 cookie: *mut ::std::os::raw::c_void,
102 ctx_id: u32,
103 ring_idx: u32,
104 fence_id: u64,
105 ),
106 >,
107 pub get_server_fd: ::std::option::Option<
108 unsafe extern "C" fn(
109 cookie: *mut ::std::os::raw::c_void,
110 version: u32,
111 ) -> ::std::os::raw::c_int,
112 >,
113 pub get_egl_display: ::std::option::Option<
114 unsafe extern "C" fn(cookie: *mut ::std::os::raw::c_void) -> *mut ::std::os::raw::c_void,
115 >,
116}
117extern "C" {
118 pub fn virgl_renderer_init(
119 cookie: *mut ::std::os::raw::c_void,
120 flags: ::std::os::raw::c_int,
121 cb: *mut virgl_renderer_callbacks,
122 ) -> ::std::os::raw::c_int;
123}
124extern "C" {
125 pub fn virgl_renderer_poll();
126}
127extern "C" {
128 pub fn virgl_renderer_get_cursor_data(
129 resource_id: u32,
130 width: *mut u32,
131 height: *mut u32,
132 ) -> *mut ::std::os::raw::c_void;
133}
134extern "C" {
135 pub fn virgl_renderer_get_rect(
136 resource_id: ::std::os::raw::c_int,
137 iov: *mut iovec,
138 num_iovs: ::std::os::raw::c_uint,
139 offset: u32,
140 x: ::std::os::raw::c_int,
141 y: ::std::os::raw::c_int,
142 width: ::std::os::raw::c_int,
143 height: ::std::os::raw::c_int,
144 );
145}
146extern "C" {
147 pub fn virgl_renderer_get_fd_for_texture(
148 tex_id: u32,
149 fd: *mut ::std::os::raw::c_int,
150 ) -> ::std::os::raw::c_int;
151}
152extern "C" {
153 pub fn virgl_renderer_get_fd_for_texture2(
154 tex_id: u32,
155 fd: *mut ::std::os::raw::c_int,
156 stride: *mut ::std::os::raw::c_int,
157 offset: *mut ::std::os::raw::c_int,
158 ) -> ::std::os::raw::c_int;
159}
160pub const VIRGL_RENDERER_STRUCTURE_TYPE_NONE: virgl_renderer_structure_type_v0 = 0;
161pub const VIRGL_RENDERER_STRUCTURE_TYPE_EXPORT_QUERY: virgl_renderer_structure_type_v0 = 1;
162pub const VIRGL_RENDERER_STRUCTURE_TYPE_SUPPORTED_STRUCTURES: virgl_renderer_structure_type_v0 = 2;
163pub type virgl_renderer_structure_type_v0 = ::std::os::raw::c_uint;
164#[repr(C)]
165#[derive(Debug, Default, Copy, Clone)]
166pub struct virgl_renderer_resource_create_args {
167 pub handle: u32,
168 pub target: u32,
169 pub format: u32,
170 pub bind: u32,
171 pub width: u32,
172 pub height: u32,
173 pub depth: u32,
174 pub array_size: u32,
175 pub last_level: u32,
176 pub nr_samples: u32,
177 pub flags: u32,
178}
179#[repr(C)]
180#[derive(Debug, Default, Copy, Clone)]
181pub struct virgl_renderer_hdr {
182 pub stype: u32,
183 pub stype_version: u32,
184 pub size: u32,
185}
186#[repr(C)]
187#[derive(Debug, Default, Copy, Clone)]
188pub struct virgl_renderer_export_query {
189 pub hdr: virgl_renderer_hdr,
190 pub in_resource_id: u32,
191 pub out_num_fds: u32,
192 pub in_export_fds: u32,
193 pub out_fourcc: u32,
194 pub pad: u32,
195 pub out_fds: [i32; 4usize],
196 pub out_strides: [u32; 4usize],
197 pub out_offsets: [u32; 4usize],
198 pub out_modifier: u64,
199}
200#[repr(C)]
201#[derive(Debug, Default, Copy, Clone)]
202pub struct virgl_renderer_supported_structures {
203 pub hdr: virgl_renderer_hdr,
204 pub in_stype_version: u32,
205 pub out_supported_structures_mask: u32,
206}
207pub const VIRGL_LOG_LEVEL_DEBUG: virgl_log_level_flags = 0;
208pub const VIRGL_LOG_LEVEL_INFO: virgl_log_level_flags = 1;
209pub const VIRGL_LOG_LEVEL_WARNING: virgl_log_level_flags = 2;
210pub const VIRGL_LOG_LEVEL_ERROR: virgl_log_level_flags = 3;
211pub const VIRGL_LOG_LEVEL_SILENT: virgl_log_level_flags = 4;
212pub type virgl_log_level_flags = ::std::os::raw::c_uint;
213pub type virgl_free_data_callback_type =
214 ::std::option::Option<unsafe extern "C" fn(user_data: *mut ::std::os::raw::c_void)>;
215pub type virgl_log_callback_type = ::std::option::Option<
216 unsafe extern "C" fn(
217 log_level: virgl_log_level_flags,
218 message: *const ::std::os::raw::c_char,
219 user_data: *mut ::std::os::raw::c_void,
220 ),
221>;
222extern "C" {
223 pub fn virgl_renderer_resource_create(
224 args: *mut virgl_renderer_resource_create_args,
225 iov: *mut iovec,
226 num_iovs: u32,
227 ) -> ::std::os::raw::c_int;
228}
229extern "C" {
230 pub fn virgl_renderer_resource_import_eglimage(
231 args: *mut virgl_renderer_resource_create_args,
232 image: *mut ::std::os::raw::c_void,
233 ) -> ::std::os::raw::c_int;
234}
235extern "C" {
236 pub fn virgl_renderer_resource_unref(res_handle: u32);
237}
238extern "C" {
239 pub fn virgl_renderer_resource_set_priv(res_handle: u32, priv_: *mut ::std::os::raw::c_void);
240}
241extern "C" {
242 pub fn virgl_renderer_resource_get_priv(res_handle: u32) -> *mut ::std::os::raw::c_void;
243}
244extern "C" {
245 pub fn virgl_renderer_context_create(
246 handle: u32,
247 nlen: u32,
248 name: *const ::std::os::raw::c_char,
249 ) -> ::std::os::raw::c_int;
250}
251extern "C" {
252 pub fn virgl_renderer_context_destroy(handle: u32);
253}
254extern "C" {
255 pub fn virgl_renderer_submit_cmd(
256 buffer: *mut ::std::os::raw::c_void,
257 ctx_id: ::std::os::raw::c_int,
258 ndw: ::std::os::raw::c_int,
259 ) -> ::std::os::raw::c_int;
260}
261extern "C" {
262 pub fn virgl_renderer_transfer_read_iov(
263 handle: u32,
264 ctx_id: u32,
265 level: u32,
266 stride: u32,
267 layer_stride: u32,
268 box_: *mut virgl_box,
269 offset: u64,
270 iov: *mut iovec,
271 iovec_cnt: ::std::os::raw::c_int,
272 ) -> ::std::os::raw::c_int;
273}
274extern "C" {
275 pub fn virgl_renderer_transfer_write_iov(
276 handle: u32,
277 ctx_id: u32,
278 level: ::std::os::raw::c_int,
279 stride: u32,
280 layer_stride: u32,
281 box_: *mut virgl_box,
282 offset: u64,
283 iovec: *mut iovec,
284 iovec_cnt: ::std::os::raw::c_uint,
285 ) -> ::std::os::raw::c_int;
286}
287extern "C" {
288 pub fn virgl_renderer_get_cap_set(set: u32, max_ver: *mut u32, max_size: *mut u32);
289}
290extern "C" {
291 pub fn virgl_renderer_fill_caps(set: u32, version: u32, caps: *mut ::std::os::raw::c_void);
292}
293extern "C" {
294 pub fn virgl_renderer_resource_attach_iov(
295 res_handle: ::std::os::raw::c_int,
296 iov: *mut iovec,
297 num_iovs: ::std::os::raw::c_int,
298 ) -> ::std::os::raw::c_int;
299}
300extern "C" {
301 pub fn virgl_renderer_resource_detach_iov(
302 res_handle: ::std::os::raw::c_int,
303 iov: *mut *mut iovec,
304 num_iovs: *mut ::std::os::raw::c_int,
305 );
306}
307extern "C" {
308 pub fn virgl_renderer_create_fence(
309 client_fence_id: ::std::os::raw::c_int,
310 ctx_id: u32,
311 ) -> ::std::os::raw::c_int;
312}
313extern "C" {
314 pub fn virgl_renderer_force_ctx_0();
315}
316extern "C" {
317 pub fn virgl_renderer_ctx_attach_resource(
318 ctx_id: ::std::os::raw::c_int,
319 res_handle: ::std::os::raw::c_int,
320 );
321}
322extern "C" {
323 pub fn virgl_renderer_ctx_detach_resource(
324 ctx_id: ::std::os::raw::c_int,
325 res_handle: ::std::os::raw::c_int,
326 );
327}
328extern "C" {
329 pub fn virgl_set_log_callback(
330 cb: virgl_log_callback_type,
331 user_data: *mut ::std::os::raw::c_void,
332 free_user_data_cb: virgl_free_data_callback_type,
333 );
334}
335#[repr(C)]
336#[derive(Debug, Default, Copy, Clone)]
337pub struct virgl_renderer_resource_info {
338 pub handle: u32,
339 pub virgl_format: u32,
340 pub width: u32,
341 pub height: u32,
342 pub depth: u32,
343 pub flags: u32,
344 pub tex_id: u32,
345 pub stride: u32,
346 pub drm_fourcc: ::std::os::raw::c_int,
347 pub fd: ::std::os::raw::c_int,
348}
349#[repr(C)]
350#[derive(Debug, Copy, Clone)]
351pub struct virgl_renderer_resource_info_ext {
352 pub version: ::std::os::raw::c_int,
353 pub base: virgl_renderer_resource_info,
354 pub has_dmabuf_export: bool,
355 pub planes: ::std::os::raw::c_int,
356 pub modifiers: u64,
357 pub d3d_tex2d: *mut ::std::os::raw::c_void,
358}
359impl Default for virgl_renderer_resource_info_ext {
360 fn default() -> Self {
361 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
362 #[allow(clippy::undocumented_unsafe_blocks)]
364 unsafe {
365 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
366 s.assume_init()
367 }
368 }
369}
370extern "C" {
371 pub fn virgl_renderer_resource_get_info(
372 res_handle: ::std::os::raw::c_int,
373 info: *mut virgl_renderer_resource_info,
374 ) -> ::std::os::raw::c_int;
375}
376extern "C" {
377 pub fn virgl_renderer_resource_get_info_ext(
378 res_handle: ::std::os::raw::c_int,
379 info: *mut virgl_renderer_resource_info_ext,
380 ) -> ::std::os::raw::c_int;
381}
382extern "C" {
383 pub fn virgl_renderer_cleanup(cookie: *mut ::std::os::raw::c_void);
384}
385extern "C" {
386 pub fn virgl_renderer_reset();
387}
388extern "C" {
389 pub fn virgl_renderer_get_poll_fd() -> ::std::os::raw::c_int;
390}
391extern "C" {
392 pub fn virgl_renderer_execute(
393 execute_args: *mut ::std::os::raw::c_void,
394 execute_size: u32,
395 ) -> ::std::os::raw::c_int;
396}
397extern "C" {
398 pub fn virgl_renderer_context_create_with_flags(
399 ctx_id: u32,
400 ctx_flags: u32,
401 nlen: u32,
402 name: *const ::std::os::raw::c_char,
403 ) -> ::std::os::raw::c_int;
404}
405#[repr(C)]
406#[derive(Debug, Copy, Clone)]
407pub struct virgl_renderer_resource_create_blob_args {
408 pub res_handle: u32,
409 pub ctx_id: u32,
410 pub blob_mem: u32,
411 pub blob_flags: u32,
412 pub blob_id: u64,
413 pub size: u64,
414 pub iovecs: *const iovec,
415 pub num_iovs: u32,
416}
417impl Default for virgl_renderer_resource_create_blob_args {
418 fn default() -> Self {
419 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
420 #[allow(clippy::undocumented_unsafe_blocks)]
422 unsafe {
423 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
424 s.assume_init()
425 }
426 }
427}
428extern "C" {
429 pub fn virgl_renderer_resource_create_blob(
430 args: *const virgl_renderer_resource_create_blob_args,
431 ) -> ::std::os::raw::c_int;
432}
433extern "C" {
434 pub fn virgl_renderer_resource_map(
435 res_handle: u32,
436 map: *mut *mut ::std::os::raw::c_void,
437 out_size: *mut u64,
438 ) -> ::std::os::raw::c_int;
439}
440extern "C" {
441 pub fn virgl_renderer_resource_unmap(res_handle: u32) -> ::std::os::raw::c_int;
442}
443extern "C" {
444 pub fn virgl_renderer_resource_get_map_info(
445 res_handle: u32,
446 map_info: *mut u32,
447 ) -> ::std::os::raw::c_int;
448}
449extern "C" {
450 pub fn virgl_renderer_resource_export_blob(
451 res_id: u32,
452 fd_type: *mut u32,
453 fd: *mut ::std::os::raw::c_int,
454 ) -> ::std::os::raw::c_int;
455}
456#[repr(C)]
457#[derive(Debug, Default, Copy, Clone)]
458pub struct virgl_renderer_resource_import_blob_args {
459 pub res_handle: u32,
460 pub blob_mem: u32,
461 pub fd_type: u32,
462 pub fd: ::std::os::raw::c_int,
463 pub size: u64,
464}
465extern "C" {
466 pub fn virgl_renderer_resource_import_blob(
467 args: *const virgl_renderer_resource_import_blob_args,
468 ) -> ::std::os::raw::c_int;
469}
470extern "C" {
471 pub fn virgl_renderer_context_create_fence(
472 ctx_id: u32,
473 flags: u32,
474 ring_idx: u32,
475 fence_id: u64,
476 ) -> ::std::os::raw::c_int;
477}
478extern "C" {
479 pub fn virgl_renderer_export_fence(
480 client_fence_id: u64,
481 fd: *mut ::std::os::raw::c_int,
482 ) -> ::std::os::raw::c_int;
483}
484extern "C" {
485 pub fn virgl_renderer_export_signalled_fence() -> ::std::os::raw::c_int;
486}
487extern "C" {
488 pub fn virgl_renderer_context_poll(ctx_id: u32);
489}
490extern "C" {
491 pub fn virgl_renderer_context_get_poll_fd(ctx_id: u32) -> ::std::os::raw::c_int;
492}
493extern "C" {
494 pub fn virgl_renderer_submit_cmd2(
495 buffer: *mut ::std::os::raw::c_void,
496 ctx_id: ::std::os::raw::c_int,
497 ndw: ::std::os::raw::c_int,
498 in_fence_ids: *mut u64,
499 num_in_fences: u32,
500 ) -> ::std::os::raw::c_int;
501}