#ifndef VIRTIO_GOLDFISH_PIPE #define VIRTIO_GOLDFISH_PIPE /* An override of virtio-gpu-3d (virgl) that runs goldfish pipe. One could * implement an actual virtio goldfish pipe, but this hijacking of virgl is * done in order to avoid any guest kernel changes. */ #include "virglrenderer.h" #ifdef __cplusplus extern "C" { #endif struct virgl_renderer_virtio_interface* get_goldfish_pipe_virgl_renderer_virtio_interface(void); /* Needed for goldfish pipe */ void virgl_write_fence(void *opaque, uint32_t fence); #ifdef _WIN32 #define VG_EXPORT __declspec(dllexport) #else #define VG_EXPORT __attribute__((visibility("default"))) #endif VG_EXPORT void virtio_goldfish_pipe_reset(void* hwpipe, void* hostpipe); #define VIRTIO_GOLDFISH_EXPORT_API #ifdef VIRTIO_GOLDFISH_EXPORT_API VG_EXPORT int pipe_virgl_renderer_init(void *cookie, int flags, struct virgl_renderer_callbacks *cb); VG_EXPORT void pipe_virgl_renderer_poll(void); VG_EXPORT void* pipe_virgl_renderer_get_cursor_data( uint32_t resource_id, uint32_t *width, uint32_t *height); VG_EXPORT int pipe_virgl_renderer_resource_create( struct virgl_renderer_resource_create_args *args, struct iovec *iov, uint32_t num_iovs); VG_EXPORT void pipe_virgl_renderer_resource_unref(uint32_t res_handle); VG_EXPORT int pipe_virgl_renderer_context_create( uint32_t handle, uint32_t nlen, const char *name); VG_EXPORT void pipe_virgl_renderer_context_destroy(uint32_t handle); VG_EXPORT int pipe_virgl_renderer_submit_cmd(void *buffer, int ctx_id, int bytes); VG_EXPORT int pipe_virgl_renderer_transfer_read_iov( uint32_t handle, uint32_t ctx_id, uint32_t level, uint32_t stride, uint32_t layer_stride, struct virgl_box *box, uint64_t offset, struct iovec *iov, int iovec_cnt); VG_EXPORT int pipe_virgl_renderer_transfer_write_iov( uint32_t handle, uint32_t ctx_id, int level, uint32_t stride, uint32_t layer_stride, struct virgl_box *box, uint64_t offset, struct iovec *iovec, unsigned int iovec_cnt); VG_EXPORT void pipe_virgl_renderer_get_cap_set(uint32_t, uint32_t*, uint32_t*); VG_EXPORT void pipe_virgl_renderer_fill_caps(uint32_t, uint32_t, void *caps); VG_EXPORT int pipe_virgl_renderer_resource_attach_iov( int res_handle, struct iovec *iov, int num_iovs); VG_EXPORT void pipe_virgl_renderer_resource_detach_iov( int res_handle, struct iovec **iov, int *num_iovs); VG_EXPORT int pipe_virgl_renderer_create_fence( int client_fence_id, uint32_t cmd_type); VG_EXPORT void pipe_virgl_renderer_force_ctx_0(void); VG_EXPORT void pipe_virgl_renderer_ctx_attach_resource( int ctx_id, int res_handle); VG_EXPORT void pipe_virgl_renderer_ctx_detach_resource( int ctx_id, int res_handle); VG_EXPORT int pipe_virgl_renderer_resource_get_info( int res_handle, struct virgl_renderer_resource_info *info); VG_EXPORT void stream_renderer_flush_resource_and_readback( uint32_t res_handle, uint32_t x, uint32_t y, uint32_t width, uint32_t height, void* pixels, uint32_t max_bytes); VG_EXPORT void stream_renderer_resource_create_v2( uint32_t res_handle, uint64_t hvaId); VG_EXPORT uint64_t stream_renderer_resource_get_hva(uint32_t res_handle); VG_EXPORT uint64_t stream_renderer_resource_get_hva_size(uint32_t res_handle); VG_EXPORT void stream_renderer_resource_set_hv_slot(uint32_t res_handle, uint32_t slot); VG_EXPORT uint32_t stream_renderer_resource_get_hv_slot(uint32_t res_handle); VG_EXPORT int stream_renderer_resource_map(uint32_t res_handle, void** hvaOut, uint64_t* sizeOut); VG_EXPORT int stream_renderer_resource_unmap(uint32_t res_handle); #else #define VG_EXPORT #endif // !VIRTIO_GOLDFISH_EXPORT_API #ifdef __cplusplus } // extern "C" #endif #endif