Home | History | Annotate | Download | only in nouveau
      1 
      2 #ifndef __NOUVEAU_FENCE_H__
      3 #define __NOUVEAU_FENCE_H__
      4 
      5 #include "util/u_inlines.h"
      6 #include "util/u_double_list.h"
      7 
      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
     13 
     14 struct nouveau_fence_work {
     15    struct list_head list;
     16    void (*func)(void *);
     17    void *data;
     18 };
     19 
     20 struct nouveau_fence {
     21    struct nouveau_fence *next;
     22    struct nouveau_screen *screen;
     23    int state;
     24    int ref;
     25    uint32_t sequence;
     26    struct list_head work;
     27 };
     28 
     29 void nouveau_fence_emit(struct nouveau_fence *);
     30 void nouveau_fence_del(struct nouveau_fence *);
     31 
     32 boolean nouveau_fence_new(struct nouveau_screen *, struct nouveau_fence **,
     33                           boolean emit);
     34 boolean nouveau_fence_work(struct nouveau_fence *, void (*)(void *), void *);
     35 void    nouveau_fence_update(struct nouveau_screen *, boolean flushed);
     36 void    nouveau_fence_next(struct nouveau_screen *);
     37 boolean nouveau_fence_wait(struct nouveau_fence *);
     38 boolean nouveau_fence_signalled(struct nouveau_fence *);
     39 
     40 static INLINE void
     41 nouveau_fence_ref(struct nouveau_fence *fence, struct nouveau_fence **ref)
     42 {
     43    if (fence)
     44       ++fence->ref;
     45 
     46    if (*ref) {
     47       if (--(*ref)->ref == 0)
     48          nouveau_fence_del(*ref);
     49    }
     50 
     51    *ref = fence;
     52 }
     53 
     54 static INLINE struct nouveau_fence *
     55 nouveau_fence(struct pipe_fence_handle *fence)
     56 {
     57    return (struct nouveau_fence *)fence;
     58 }
     59 
     60 #endif // __NOUVEAU_FENCE_H__
     61