a8abb01a9ed82ace71acecb8ff4663094284ca85
[mesa.git] / src / gallium / winsys / drm / intel / gem / intel_be_fence.h
1
2 #ifndef INTEL_BE_FENCE_H
3 #define INTEL_BE_FENCE_H
4
5 #include "pipe/p_defines.h"
6
7 #include "drm.h"
8 #include "intel_bufmgr.h"
9
10 /**
11 * Because gem does not have fence's we have to create our own fences.
12 *
13 * They work by keeping the batchbuffer around and checking if that has
14 * been idled. If bo is NULL fence has expired.
15 */
16 struct intel_be_fence
17 {
18 struct pipe_reference reference;
19 drm_intel_bo *bo;
20 };
21
22 static INLINE void
23 intel_be_fence_reference(struct intel_be_fence **ptr, struct intel_be_fence *f)
24 {
25 struct intel_be_fence *old_fence = *ptr;
26
27 if (pipe_reference((struct pipe_reference**)ptr, &f->reference)) {
28 if (old_fence->bo)
29 drm_intel_bo_unreference(old_fence->bo);
30 free(old_fence);
31 }
32 }
33
34 #endif