From 3ebe7d1656cc9dbf7ac889bac227107acacc6f4a Mon Sep 17 00:00:00 2001 From: Jesse Barnes Date: Fri, 20 Nov 2009 12:16:56 -0800 Subject: libdrm: add support for page flip completion events --- libdrm/xf86drm.h | 6 ++++++ libdrm/xf86drmMode.c | 12 +++++++++++- shared-core/drm.h | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/libdrm/xf86drm.h b/libdrm/xf86drm.h index 2cb9c9e9..d75ec4f3 100644 --- a/libdrm/xf86drm.h +++ b/libdrm/xf86drm.h @@ -682,6 +682,12 @@ typedef struct _drmEventContext { unsigned int tv_usec, void *user_data); + void (*pageflip_handler)(int fd, + unsigned int sequence, + unsigned int tv_sec, + unsigned int tv_usec, + void *user_data); + } drmEventContext, *drmEventContextPtr; extern int drmHandleEvent(int fd, drmEventContextPtr evctx); diff --git a/libdrm/xf86drmMode.c b/libdrm/xf86drmMode.c index 400ad49d..7d318eaa 100644 --- a/libdrm/xf86drmMode.c +++ b/libdrm/xf86drmMode.c @@ -700,7 +700,17 @@ int drmHandleEvent(int fd, drmEventContextPtr evctx) vblank->tv_usec, U642VOID (vblank->user_data)); break; - + case DRM_EVENT_FLIP_COMPLETE: + if (evctx->version < 1 || + evctx->pageflip_handler == NULL) + break; + vblank = (struct drm_event_vblank *) e; + evctx->pageflip_handler(fd, + vblank->sequence, + vblank->tv_sec, + vblank->tv_usec, + U642VOID (vblank->user_data)); + break; default: break; } diff --git a/shared-core/drm.h b/shared-core/drm.h index f820e458..c381874f 100644 --- a/shared-core/drm.h +++ b/shared-core/drm.h @@ -828,6 +828,7 @@ struct drm_event { }; #define DRM_EVENT_VBLANK 0x01 +#define DRM_EVENT_FLIP_COMPLETE 0x02 struct drm_event_vblank { struct drm_event base; -- cgit v1.2.3