X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fnouveau%2Fnouveau_fence.h;h=e14572bce8f972f406b57148e85a09146543006e;hb=104a49f1665e560e8367419d186978b856a87fa9;hp=785fc8d2a0af7e248fa7458244db9b20ad54f1be;hpb=5a0915870c7e994d20334042b7647db749e79224;p=mesa.git diff --git a/src/gallium/drivers/nouveau/nouveau_fence.h b/src/gallium/drivers/nouveau/nouveau_fence.h index 785fc8d2a0a..e14572bce8f 100644 --- a/src/gallium/drivers/nouveau/nouveau_fence.h +++ b/src/gallium/drivers/nouveau/nouveau_fence.h @@ -3,12 +3,15 @@ #define __NOUVEAU_FENCE_H__ #include "util/u_inlines.h" -#include "util/u_double_list.h" +#include "util/list.h" #define NOUVEAU_FENCE_STATE_AVAILABLE 0 -#define NOUVEAU_FENCE_STATE_EMITTED 1 -#define NOUVEAU_FENCE_STATE_FLUSHED 2 -#define NOUVEAU_FENCE_STATE_SIGNALLED 3 +#define NOUVEAU_FENCE_STATE_EMITTING 1 +#define NOUVEAU_FENCE_STATE_EMITTED 2 +#define NOUVEAU_FENCE_STATE_FLUSHED 3 +#define NOUVEAU_FENCE_STATE_SIGNALLED 4 + +struct pipe_debug_callback; struct nouveau_fence_work { struct list_head list; @@ -22,34 +25,38 @@ struct nouveau_fence { int state; int ref; uint32_t sequence; + uint32_t work_count; struct list_head work; }; void nouveau_fence_emit(struct nouveau_fence *); void nouveau_fence_del(struct nouveau_fence *); -boolean nouveau_fence_new(struct nouveau_screen *, struct nouveau_fence **, - boolean emit); -boolean nouveau_fence_work(struct nouveau_fence *, void (*)(void *), void *); -void nouveau_fence_update(struct nouveau_screen *, boolean flushed); -void nouveau_fence_next(struct nouveau_screen *); -boolean nouveau_fence_wait(struct nouveau_fence *); -boolean nouveau_fence_signalled(struct nouveau_fence *); +bool nouveau_fence_new(struct nouveau_screen *, struct nouveau_fence **); +bool nouveau_fence_work(struct nouveau_fence *, void (*)(void *), void *); +void nouveau_fence_update(struct nouveau_screen *, bool flushed); +void nouveau_fence_next(struct nouveau_screen *); +bool nouveau_fence_wait(struct nouveau_fence *, struct pipe_debug_callback *); +bool nouveau_fence_signalled(struct nouveau_fence *); + +void nouveau_fence_unref_bo(void *data); /* generic unref bo callback */ -static INLINE void + +static inline void nouveau_fence_ref(struct nouveau_fence *fence, struct nouveau_fence **ref) { + if (fence) + ++fence->ref; + if (*ref) { if (--(*ref)->ref == 0) nouveau_fence_del(*ref); } - if (fence) - ++fence->ref; *ref = fence; } -static INLINE struct nouveau_fence * +static inline struct nouveau_fence * nouveau_fence(struct pipe_fence_handle *fence) { return (struct nouveau_fence *)fence;