Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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.