diff options
author | Simon Ser <contact@emersion.fr> | 2022-12-01 11:29:30 +0100 |
---|---|---|
committer | Simon Zeni <simon@bl4ckb0ne.ca> | 2022-12-06 14:54:09 +0000 |
commit | 30219cf76b0c497783a3d04e1613504468e49dc7 (patch) | |
tree | 064f50ddf478021c5901063fc384e4df2eb054f7 /render/dmabuf_linux.c | |
parent | 825f1b2dc6886071939f9b8b9738392cd8966cab (diff) |
render/dmabuf: add dmabuf_export_sync_file()
Diffstat (limited to 'render/dmabuf_linux.c')
-rw-r--r-- | render/dmabuf_linux.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/render/dmabuf_linux.c b/render/dmabuf_linux.c index a6bf1d42..cf06229c 100644 --- a/render/dmabuf_linux.c +++ b/render/dmabuf_linux.c @@ -51,6 +51,7 @@ bool dmabuf_check_sync_file_import_export(void) { } // TODO: drop these definitions once widespread + #if !defined(DMA_BUF_IOCTL_IMPORT_SYNC_FILE) struct dma_buf_import_sync_file { @@ -62,6 +63,17 @@ struct dma_buf_import_sync_file { #endif +#if !defined(DMA_BUF_IOCTL_EXPORT_SYNC_FILE) + +struct dma_buf_export_sync_file { + __u32 flags; + __s32 fd; +}; + +#define DMA_BUF_IOCTL_EXPORT_SYNC_FILE _IOWR(DMA_BUF_BASE, 2, struct dma_buf_export_sync_file) + +#endif + bool dmabuf_import_sync_file(int dmabuf_fd, uint32_t flags, int sync_file_fd) { struct dma_buf_import_sync_file data = { .flags = flags, @@ -73,3 +85,15 @@ bool dmabuf_import_sync_file(int dmabuf_fd, uint32_t flags, int sync_file_fd) { } return true; } + +int dmabuf_export_sync_file(int dmabuf_fd, uint32_t flags) { + struct dma_buf_export_sync_file data = { + .flags = flags, + .fd = -1, + }; + if (drmIoctl(dmabuf_fd, DMA_BUF_IOCTL_EXPORT_SYNC_FILE, &data) != 0) { + wlr_log_errno(WLR_ERROR, "drmIoctl(EXPORT_SYNC_FILE) failed"); + return -1; + } + return data.fd; +} |