OSDN Git Service

freedreno: move ring_cache behind fd_bo_del()
[android-x86/external-libdrm.git] / freedreno / freedreno_priv.h
index a0957fa..84dbc5c 100644 (file)
 #ifndef FREEDRENO_PRIV_H_
 #define FREEDRENO_PRIV_H_
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
@@ -102,6 +98,7 @@ struct fd_device {
        const struct fd_device_funcs *funcs;
 
        struct fd_bo_cache bo_cache;
+       struct fd_bo_cache ring_cache;
 
        int closefd;        /* call close(fd) upon destruction */
 
@@ -118,8 +115,13 @@ drm_private int fd_bo_cache_free(struct fd_bo_cache *cache, struct fd_bo *bo);
 /* for where @table_lock is already held: */
 drm_private void fd_device_del_locked(struct fd_device *dev);
 
+enum fd_ringbuffer_flags {
+       FD_RINGBUFFER_OBJECT = 0x1,
+};
+
 struct fd_pipe_funcs {
-       struct fd_ringbuffer * (*ringbuffer_new)(struct fd_pipe *pipe, uint32_t size);
+       struct fd_ringbuffer * (*ringbuffer_new)(struct fd_pipe *pipe, uint32_t size,
+                       enum fd_ringbuffer_flags flags);
        int (*get_param)(struct fd_pipe *pipe, enum fd_param_id param, uint64_t *value);
        int (*wait)(struct fd_pipe *pipe, uint32_t timestamp, uint64_t timeout);
        void (*destroy)(struct fd_pipe *pipe);
@@ -129,6 +131,7 @@ struct fd_pipe {
        struct fd_device *dev;
        enum fd_pipe_id id;
        uint32_t gpu_id;
+       atomic_t refcnt;
        const struct fd_pipe_funcs *funcs;
 };
 
@@ -170,11 +173,19 @@ struct fd_bo {
        atomic_t refcnt;
        const struct fd_bo_funcs *funcs;
 
-       int bo_reuse;
+       enum {
+               NO_CACHE = 0,
+               BO_CACHE = 1,
+               RING_CACHE = 2,
+       } bo_reuse;
+
        struct list_head list;   /* bucket-list entry */
        time_t free_time;        /* time when added to bucket-list */
 };
 
+drm_private struct fd_bo *fd_bo_new_ring(struct fd_device *dev,
+               uint32_t size, uint32_t flags);
+
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
 
 #define enable_debug 0  /* TODO make dynamic */