diff options
author | Rob Clark <robclark@freedesktop.org> | 2018-10-09 15:33:39 -0400 |
---|---|---|
committer | Rob Clark <robclark@freedesktop.org> | 2018-10-13 17:18:43 -0400 |
commit | a8a006192634d1390acf3a09d4edec27084c8507 (patch) | |
tree | a684c232c2c5e5ad8b15e47c32b9fa5e012d9b3e /freedreno/freedreno_ringbuffer.h | |
parent | 566b1d9f93e4922edf5b13b80cb46179e9d85802 (diff) | |
download | drm-a8a006192634d1390acf3a09d4edec27084c8507.tar.gz |
freedreno: expose refcnt'ing on ringbuffers
Move this out of msm_ringbuffer backend so that the gallium driver can
refcnt rb's
Signed-off-by: Rob Clark <robclark@freedesktop.org>
Diffstat (limited to 'freedreno/freedreno_ringbuffer.h')
-rw-r--r-- | freedreno/freedreno_ringbuffer.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/freedreno/freedreno_ringbuffer.h b/freedreno/freedreno_ringbuffer.h index 69e7ed99..b2e8024d 100644 --- a/freedreno/freedreno_ringbuffer.h +++ b/freedreno/freedreno_ringbuffer.h @@ -53,6 +53,19 @@ struct fd_ringbuffer { void *user; uint32_t flags; + + /* This is a bit gross, but we can't use atomic_t in exported + * headers. OTOH, we don't need the refcnt to be publicly + * visible. The only reason that this struct is exported is + * because fd_ringbuffer_emit needs to be something that can + * be inlined for performance reasons. + */ + union { +#ifdef HAS_ATOMIC_OPS + atomic_t refcnt; +#endif + uint64_t __pad; + }; }; struct fd_ringbuffer * fd_ringbuffer_new(struct fd_pipe *pipe, @@ -60,6 +73,7 @@ struct fd_ringbuffer * fd_ringbuffer_new(struct fd_pipe *pipe, struct fd_ringbuffer * fd_ringbuffer_new_object(struct fd_pipe *pipe, uint32_t size); +struct fd_ringbuffer *fd_ringbuffer_ref(struct fd_ringbuffer *ring); void fd_ringbuffer_del(struct fd_ringbuffer *ring); void fd_ringbuffer_set_parent(struct fd_ringbuffer *ring, struct fd_ringbuffer *parent); |