Spaces:
Running on Zero
Running on Zero
| // clang-format off | |
| // clang-format on | |
| // Will be defined include/drm/virtgpu_drm.h when | |
| // https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1590/diffs | |
| // is merged | |
| // Mesa/Virlgrenderer Venus internal. Only necessary during the | |
| // Venus->APIR transition in Virglrenderer | |
| typedef uint32_t virgl_renderer_capset; | |
| /* from src/virtio/vulkan/vn_renderer_virtgpu.c */ | |
| enum virt_gpu_result_t { | |
| APIR_SUCCESS = 0, | |
| APIR_ERROR_INITIALIZATION_FAILED = -1, | |
| }; | |
| struct virtgpu { | |
| bool use_apir_capset; | |
| int fd; | |
| struct { | |
| virgl_renderer_capset id; | |
| uint32_t version; | |
| virgl_renderer_capset_apir data; | |
| } capset; | |
| util_sparse_array shmem_array; | |
| /* APIR communication pages */ | |
| virtgpu_shmem reply_shmem; | |
| virtgpu_shmem data_shmem; | |
| /* Mutex to protect shared data_shmem buffer from concurrent access */ | |
| mtx_t data_shmem_mutex; | |
| /* Cached device information to prevent memory leaks and race conditions */ | |
| struct { | |
| char * description; | |
| char * name; | |
| int32_t device_count; | |
| uint32_t type; | |
| size_t memory_free; | |
| size_t memory_total; | |
| } cached_device_info; | |
| /* Cached buffer type information to prevent memory leaks and race conditions */ | |
| struct { | |
| apir_buffer_type_host_handle_t host_handle; | |
| char * name; | |
| size_t alignment; | |
| size_t max_size; | |
| } cached_buffer_type; | |
| }; | |
| static inline int virtgpu_ioctl(virtgpu * gpu, unsigned long request, void * args) { | |
| return drmIoctl(gpu->fd, request, args); | |
| } | |
| virtgpu * create_virtgpu(); | |
| apir_encoder * remote_call_prepare(virtgpu * gpu, ApirCommandType apir_cmd_type, int32_t cmd_flags); | |
| uint32_t remote_call(virtgpu * gpu, | |
| apir_encoder * enc, | |
| apir_decoder ** dec, | |
| float max_wait_ms, | |
| long long * call_duration_ns); | |
| void remote_call_finish(virtgpu * gpu, apir_encoder * enc, apir_decoder * dec); | |