2efcab2172dc2ce99b8e3d073d17477e5ae493bf
2 #ifndef __NOUVEAU_FENCE_H__
3 #define __NOUVEAU_FENCE_H__
5 #include "util/u_inlines.h"
8 #define NOUVEAU_FENCE_STATE_AVAILABLE 0
9 #define NOUVEAU_FENCE_STATE_EMITTING 1
10 #define NOUVEAU_FENCE_STATE_EMITTED 2
11 #define NOUVEAU_FENCE_STATE_FLUSHED 3
12 #define NOUVEAU_FENCE_STATE_SIGNALLED 4
14 struct nouveau_fence_work
{
15 struct list_head list
;
20 struct nouveau_fence
{
21 struct nouveau_fence
*next
;
22 struct nouveau_screen
*screen
;
26 struct list_head work
;
29 void nouveau_fence_emit(struct nouveau_fence
*);
30 void nouveau_fence_del(struct nouveau_fence
*);
32 bool nouveau_fence_new(struct nouveau_screen
*, struct nouveau_fence
**,
34 bool nouveau_fence_work(struct nouveau_fence
*, void (*)(void *), void *);
35 void nouveau_fence_update(struct nouveau_screen
*, bool flushed
);
36 void nouveau_fence_next(struct nouveau_screen
*);
37 bool nouveau_fence_wait(struct nouveau_fence
*);
38 bool nouveau_fence_signalled(struct nouveau_fence
*);
40 void nouveau_fence_unref_bo(void *data
); /* generic unref bo callback */
44 nouveau_fence_ref(struct nouveau_fence
*fence
, struct nouveau_fence
**ref
)
50 if (--(*ref
)->ref
== 0)
51 nouveau_fence_del(*ref
);
57 static inline struct nouveau_fence
*
58 nouveau_fence(struct pipe_fence_handle
*fence
)
60 return (struct nouveau_fence
*)fence
;
63 #endif // __NOUVEAU_FENCE_H__