• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef VIRTIO_GOLDFISH_PIPE
2 #define VIRTIO_GOLDFISH_PIPE
3 
4 /* An override of virtio-gpu-3d (virgl) that runs goldfish pipe.  One could
5  * implement an actual virtio goldfish pipe, but this hijacking of virgl  is
6  * done in order to avoid any guest kernel changes. */
7 
8 #include "virglrenderer.h"
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 struct virgl_renderer_virtio_interface*
14     get_goldfish_pipe_virgl_renderer_virtio_interface(void);
15 
16 /* Needed for goldfish pipe */
17 void virgl_write_fence(void *opaque, uint32_t fence);
18 
19 #ifdef _WIN32
20 #define VG_EXPORT __declspec(dllexport)
21 #else
22 #define VG_EXPORT __attribute__((visibility("default")))
23 #endif
24 
25 VG_EXPORT void virtio_goldfish_pipe_reset(void* hwpipe, void* hostpipe);
26 
27 #define VIRTIO_GOLDFISH_EXPORT_API
28 #ifdef VIRTIO_GOLDFISH_EXPORT_API
29 
30 VG_EXPORT int pipe_virgl_renderer_init(void *cookie,
31                                        int flags,
32                                        struct virgl_renderer_callbacks *cb);
33 VG_EXPORT void pipe_virgl_renderer_poll(void);
34 VG_EXPORT void* pipe_virgl_renderer_get_cursor_data(
35     uint32_t resource_id, uint32_t *width, uint32_t *height);
36 VG_EXPORT int pipe_virgl_renderer_resource_create(
37     struct virgl_renderer_resource_create_args *args,
38     struct iovec *iov, uint32_t num_iovs);
39 VG_EXPORT void pipe_virgl_renderer_resource_unref(uint32_t res_handle);
40 VG_EXPORT int pipe_virgl_renderer_context_create(
41     uint32_t handle, uint32_t nlen, const char *name);
42 VG_EXPORT void pipe_virgl_renderer_context_destroy(uint32_t handle);
43 VG_EXPORT int pipe_virgl_renderer_submit_cmd(void *buffer,
44                                           int ctx_id,
45                                           int bytes);
46 VG_EXPORT int pipe_virgl_renderer_transfer_read_iov(
47     uint32_t handle, uint32_t ctx_id,
48     uint32_t level, uint32_t stride,
49     uint32_t layer_stride,
50     struct virgl_box *box,
51     uint64_t offset, struct iovec *iov,
52     int iovec_cnt);
53 VG_EXPORT int pipe_virgl_renderer_transfer_write_iov(
54     uint32_t handle,
55     uint32_t ctx_id,
56     int level,
57     uint32_t stride,
58     uint32_t layer_stride,
59     struct virgl_box *box,
60     uint64_t offset,
61     struct iovec *iovec,
62     unsigned int iovec_cnt);
63 VG_EXPORT void pipe_virgl_renderer_get_cap_set(uint32_t, uint32_t*, uint32_t*);
64 VG_EXPORT void pipe_virgl_renderer_fill_caps(uint32_t, uint32_t, void *caps);
65 
66 VG_EXPORT int pipe_virgl_renderer_resource_attach_iov(
67     int res_handle, struct iovec *iov,
68     int num_iovs);
69 VG_EXPORT void pipe_virgl_renderer_resource_detach_iov(
70     int res_handle, struct iovec **iov, int *num_iovs);
71 VG_EXPORT int pipe_virgl_renderer_create_fence(
72     int client_fence_id, uint32_t cmd_type);
73 VG_EXPORT void pipe_virgl_renderer_force_ctx_0(void);
74 VG_EXPORT void pipe_virgl_renderer_ctx_attach_resource(
75     int ctx_id, int res_handle);
76 VG_EXPORT void pipe_virgl_renderer_ctx_detach_resource(
77     int ctx_id, int res_handle);
78 VG_EXPORT int pipe_virgl_renderer_resource_get_info(
79     int res_handle,
80     struct virgl_renderer_resource_info *info);
81 
82 VG_EXPORT void stream_renderer_flush_resource_and_readback(
83     uint32_t res_handle, uint32_t x, uint32_t y, uint32_t width, uint32_t height,
84     void* pixels, uint32_t max_bytes);
85 
86 VG_EXPORT void stream_renderer_resource_create_v2(
87     uint32_t res_handle, uint64_t hvaId);
88 VG_EXPORT uint64_t stream_renderer_resource_get_hva(uint32_t res_handle);
89 VG_EXPORT uint64_t stream_renderer_resource_get_hva_size(uint32_t res_handle);
90 VG_EXPORT void stream_renderer_resource_set_hv_slot(uint32_t res_handle, uint32_t slot);
91 VG_EXPORT uint32_t stream_renderer_resource_get_hv_slot(uint32_t res_handle);
92 VG_EXPORT int stream_renderer_resource_map(uint32_t res_handle, void** hvaOut, uint64_t* sizeOut);
93 VG_EXPORT int stream_renderer_resource_unmap(uint32_t res_handle);
94 
95 #else
96 
97 #define VG_EXPORT
98 
99 #endif // !VIRTIO_GOLDFISH_EXPORT_API
100 
101 #ifdef __cplusplus
102 } // extern "C"
103 #endif
104 
105 #endif
106