Syncobj 介绍
DRM 同步对象(syncobj, struct drm_syncobj)提供同步原语的容器,该同步原语可以由用户空间使用来显式同步 GPU 命令,可以在用户空间进程之间共享,并且可以在不同 DRM 驱动程序之间共享。他们的主要用例是实现 Vulkan 栅栏和信号量。
syncobj 用户空间 API 为多种操作提供 ioctl:
l 同步对象的创建和销毁
l 将syncobj导入到syncobj文件描述符或从syncobj文件描述符导出
l 将syncobj的底层fence导入到同步文件或从同步文件导出
l 重置syncobj(将其fence设置为NULL)
l 向syncobj发出信号(设置一个简单的signal fence)
l 等待同步对象的fence出现并收到信号
libdrm syncobj接口
extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle);
extern int drmSyncobjDestroy(int fd, uint32_t handle);
extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd);
extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle);extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd);
extern int drmSyncobjExportSyncFile(int fd, uint32_t handl