diff --git a/src/virglrenderer.c b/src/virglrenderer.c index 0674129..cd473b0 100644 --- a/src/virglrenderer.c +++ b/src/virglrenderer.c @@ -751,3 +751,24 @@ int virgl_renderer_resource_get_map_info(uint32_t res_handle, uint32_t *map_info return vrend_renderer_resource_get_map_info(res->pipe_resource, map_info); } + +int +virgl_renderer_resource_export_blob(uint32_t res_id, uint32_t *fd_type, int *fd) +{ + struct virgl_resource *res = virgl_resource_lookup(res_id); + if (!res) + return EINVAL; + + switch (virgl_resource_export_fd(res, fd)) { + case VIRGL_RESOURCE_FD_DMABUF: + *fd_type = VIRGL_RENDERER_BLOB_FD_TYPE_DMABUF; + break; + case VIRGL_RESOURCE_FD_OPAQUE: + *fd_type = VIRGL_RENDERER_BLOB_FD_TYPE_OPAQUE; + break; + default: + return EINVAL; + } + + return 0; +} diff --git a/src/virglrenderer.h b/src/virglrenderer.h index f8f99fb..db4bb5c 100644 --- a/src/virglrenderer.h +++ b/src/virglrenderer.h @@ -291,6 +291,12 @@ VIRGL_EXPORT int virgl_renderer_resource_unmap(uint32_t res_handle); VIRGL_EXPORT int virgl_renderer_resource_get_map_info(uint32_t res_handle, uint32_t *map_info); +#define VIRGL_RENDERER_BLOB_FD_TYPE_DMABUF 0x0001 +#define VIRGL_RENDERER_BLOB_FD_TYPE_OPAQUE 0x0002 + +VIRGL_EXPORT int +virgl_renderer_resource_export_blob(uint32_t res_id, uint32_t *fd_type, int *fd); + #endif /* VIRGL_RENDERER_UNSTABLE_APIS */ #endif