Path: blob/21.2-virgl/src/gallium/drivers/nouveau/nouveau_fence.h
4570 views
1#ifndef __NOUVEAU_FENCE_H__2#define __NOUVEAU_FENCE_H__34#include "util/u_inlines.h"5#include "util/list.h"67#define NOUVEAU_FENCE_STATE_AVAILABLE 08#define NOUVEAU_FENCE_STATE_EMITTING 19#define NOUVEAU_FENCE_STATE_EMITTED 210#define NOUVEAU_FENCE_STATE_FLUSHED 311#define NOUVEAU_FENCE_STATE_SIGNALLED 41213struct pipe_debug_callback;1415struct nouveau_fence_work {16struct list_head list;17void (*func)(void *);18void *data;19};2021struct nouveau_fence {22struct nouveau_fence *next;23struct nouveau_screen *screen;24int state;25int ref;26uint32_t sequence;27uint32_t work_count;28struct list_head work;29};3031void nouveau_fence_emit(struct nouveau_fence *);32void nouveau_fence_del(struct nouveau_fence *);3334bool nouveau_fence_new(struct nouveau_screen *, struct nouveau_fence **);35void nouveau_fence_cleanup(struct nouveau_screen *);36bool nouveau_fence_work(struct nouveau_fence *, void (*)(void *), void *);37void nouveau_fence_update(struct nouveau_screen *, bool flushed);38void nouveau_fence_next(struct nouveau_screen *);39bool nouveau_fence_wait(struct nouveau_fence *, struct pipe_debug_callback *);40bool nouveau_fence_signalled(struct nouveau_fence *);4142void nouveau_fence_unref_bo(void *data); /* generic unref bo callback */434445static inline void46nouveau_fence_ref(struct nouveau_fence *fence, struct nouveau_fence **ref)47{48if (fence)49++fence->ref;5051if (*ref) {52if (--(*ref)->ref == 0)53nouveau_fence_del(*ref);54}5556*ref = fence;57}5859static inline struct nouveau_fence *60nouveau_fence(struct pipe_fence_handle *fence)61{62return (struct nouveau_fence *)fence;63}6465#endif // __NOUVEAU_FENCE_H__666768