int vmw_ioctl_fence_signalled(struct vmw_winsys_screen *vws, uint32_t handle, uint32_t flags) { struct drm_vmw_fence_signaled_arg arg; uint32_t vflags = vmw_drm_fence_flags(flags); int ret; memset(&arg, 0, sizeof(arg)); arg.handle = handle; arg.flags = vflags; ret = drmCommandWriteRead(vws->ioctl.drm_fd, DRM_VMW_FENCE_SIGNALED, &arg, sizeof(arg)); if (ret != 0) return ret; return (arg.signaled) ? 0 : -1; }
int vmw_ioctl_fence_finish(struct vmw_winsys_screen *vws, uint32_t handle, uint32_t flags) { struct drm_vmw_fence_wait_arg arg; uint32_t vflags = vmw_drm_fence_flags(flags); int ret; memset(&arg, 0, sizeof(arg)); arg.handle = handle; arg.timeout_us = 10*1000000; arg.lazy = 0; arg.flags = vflags; ret = drmCommandWriteRead(vws->ioctl.drm_fd, DRM_VMW_FENCE_WAIT, &arg, sizeof(arg)); if (ret != 0) vmw_error("%s Failed\n", __FUNCTION__); return 0; }