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