7 struct _DriFenceObject
;
11 * Do a quick check to see if the fence manager has registered the fence
12 * object as signaled. Note that this function may return a false negative
15 extern uint32_t driFenceSignaledTypeCached(struct _DriFenceObject
*fence
);
18 * Check if the fence object is signaled. This function can be substantially
19 * more expensive to call than the above function, but will not return a false
20 * negative answer. The argument "flush_type" sets the types that the
21 * underlying mechanism must make sure will eventually signal.
23 extern int driFenceSignaledType(struct _DriFenceObject
*fence
,
24 uint32_t flush_type
, uint32_t *signaled
);
27 * Convenience functions.
30 static inline int driFenceSignaled(struct _DriFenceObject
*fence
,
33 uint32_t signaled_types
;
34 int ret
= driFenceSignaledType(fence
, flush_type
, &signaled_types
);
37 return ((signaled_types
& flush_type
) == flush_type
);
40 static inline int driFenceSignaledCached(struct _DriFenceObject
*fence
,
43 uint32_t signaled_types
=
44 driFenceSignaledTypeCached(fence
);
46 return ((signaled_types
& flush_type
) == flush_type
);
50 * Reference a fence object.
52 extern struct _DriFenceObject
*driFenceReference(struct _DriFenceObject
*fence
);
55 * Unreference a fence object. The fence object pointer will be reset to NULL.
58 extern void driFenceUnReference(struct _DriFenceObject
**pFence
);
62 * Wait for a fence to signal the indicated fence_type.
63 * If "lazy_hint" is true, it indicates that the wait may sleep to avoid
66 extern int driFenceFinish(struct _DriFenceObject
*fence
, uint32_t fence_type
,
70 * Create a DriFenceObject for manager "mgr".
72 * "private" is a pointer that should be used for the callbacks in
73 * struct _DriFenceMgrCreateInfo.
75 * if private_size is nonzero, then the info stored at *private, with size
76 * private size will be copied and the fence manager will instead use a
77 * pointer to the copied data for the callbacks in
78 * struct _DriFenceMgrCreateInfo. In that case, the object pointed to by
79 * "private" may be destroyed after the call to driFenceCreate.
81 extern struct _DriFenceObject
*driFenceCreate(struct _DriFenceMgr
*mgr
,
87 extern uint32_t driFenceType(struct _DriFenceObject
*fence
);
90 * Fence creations are ordered. If a fence signals a fence_type,
91 * it is safe to assume that all fences of the same class that was
92 * created before that fence has signaled the same type.
95 #define DRI_FENCE_CLASS_ORDERED (1 << 0)
97 struct _DriFenceMgrCreateInfo
{
100 int (*signaled
) (struct _DriFenceMgr
*mgr
, void *private, uint32_t flush_type
,
101 uint32_t *signaled_type
);
102 int (*finish
) (struct _DriFenceMgr
*mgr
, void *private, uint32_t fence_type
, int lazy_hint
);
103 int (*unreference
) (struct _DriFenceMgr
*mgr
, void **private);
106 extern struct _DriFenceMgr
*
107 driFenceMgrCreate(const struct _DriFenceMgrCreateInfo
*info
);
110 driFenceMgrUnReference(struct _DriFenceMgr
**pMgr
);
112 extern struct _DriFenceMgr
*
113 driFenceMgrTTMInit(int fd
);