summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nvc0/nvc0_fence.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/nvc0/nvc0_fence.h')
-rw-r--r--src/gallium/drivers/nvc0/nvc0_fence.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/gallium/drivers/nvc0/nvc0_fence.h b/src/gallium/drivers/nvc0/nvc0_fence.h
new file mode 100644
index 0000000000..513ac07c1a
--- /dev/null
+++ b/src/gallium/drivers/nvc0/nvc0_fence.h
@@ -0,0 +1,40 @@
+
+#ifndef __NVC0_FENCE_H__
+#define __NVC0_FENCE_H__
+
+#include "util/u_inlines.h"
+
+struct nvc0_fence_trigger {
+ void (*func)(void *);
+ void *arg;
+ struct nvc0_fence_trigger *next;
+};
+
+#define NVC0_FENCE_STATE_EMITTED 1
+#define NVC0_FENCE_STATE_SIGNALLED 2
+
+/* reference first, so pipe_reference works directly */
+struct nvc0_fence {
+ struct pipe_reference reference;
+ struct nvc0_fence *next;
+ struct nvc0_screen *screen;
+ int state;
+ uint32_t sequence;
+ struct nvc0_fence_trigger trigger;
+};
+
+void nvc0_fence_emit(struct nvc0_fence *);
+void nvc0_fence_del(struct nvc0_fence *);
+
+boolean nvc0_fence_wait(struct nvc0_fence *);
+
+static INLINE void
+nvc0_fence_reference(struct nvc0_fence **ref, struct nvc0_fence *fence)
+{
+ if (pipe_reference(&(*ref)->reference, &fence->reference))
+ nvc0_fence_del(*ref);
+
+ *ref = fence;
+}
+
+#endif // __NVC0_FENCE_H__