diff options
Diffstat (limited to 'src/panfrost/vulkan/panvk_mempool.h')
-rw-r--r-- | src/panfrost/vulkan/panvk_mempool.h | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/src/panfrost/vulkan/panvk_mempool.h b/src/panfrost/vulkan/panvk_mempool.h index b56c240ca57..796046fed62 100644 --- a/src/panfrost/vulkan/panvk_mempool.h +++ b/src/panfrost/vulkan/panvk_mempool.h @@ -27,21 +27,19 @@ #include "pan_pool.h" +struct panvk_priv_bo; + struct panvk_bo_pool { struct util_dynarray free_bos; }; -static inline void panvk_bo_pool_init(struct panvk_bo_pool *bo_pool) +static inline void +panvk_bo_pool_init(struct panvk_bo_pool *bo_pool) { util_dynarray_init(&bo_pool->free_bos, NULL); } -static inline void panvk_bo_pool_cleanup(struct panvk_bo_pool *bo_pool) -{ - util_dynarray_foreach(&bo_pool->free_bos, struct panfrost_bo *, bo) - panfrost_bo_unreference(*bo); - util_dynarray_fini(&bo_pool->free_bos); -} +void panvk_bo_pool_cleanup(struct panvk_bo_pool *bo_pool); /* Represents grow-only memory. It may be owned by the batch (OpenGL), or may be unowned for persistent uploads. */ @@ -50,6 +48,15 @@ struct panvk_pool { /* Inherit from pan_pool */ struct pan_pool base; + /* Parent device for allocation */ + struct panvk_device *dev; + + /* Label for created BOs */ + const char *label; + + /* BO flags to use in the pool */ + unsigned create_flags; + /* Before allocating a new BO, check if the BO pool has free BOs. * When returning BOs, if bo_pool != NULL, return them to this bo_pool. */ @@ -57,9 +64,10 @@ struct panvk_pool { /* BOs allocated by this pool */ struct util_dynarray bos; + struct util_dynarray big_bos; /* Current transient BO */ - struct panfrost_bo *transient_bo; + struct panvk_priv_bo *transient_bo; /* Within the topmost transient BO, how much has been used? */ unsigned transient_offset; @@ -71,24 +79,20 @@ to_panvk_pool(struct pan_pool *pool) return container_of(pool, struct panvk_pool, base); } -void -panvk_pool_init(struct panvk_pool *pool, struct panfrost_device *dev, - struct panvk_bo_pool *bo_pool, unsigned create_flags, - size_t slab_size, const char *label, bool prealloc); +void panvk_pool_init(struct panvk_pool *pool, struct panvk_device *dev, + struct panvk_bo_pool *bo_pool, unsigned create_flags, + size_t slab_size, const char *label, bool prealloc); -void -panvk_pool_reset(struct panvk_pool *pool); +void panvk_pool_reset(struct panvk_pool *pool); -void -panvk_pool_cleanup(struct panvk_pool *pool); +void panvk_pool_cleanup(struct panvk_pool *pool); static inline unsigned panvk_pool_num_bos(struct panvk_pool *pool) { - return util_dynarray_num_elements(&pool->bos, struct panfrost_bo *); + return util_dynarray_num_elements(&pool->bos, struct panvk_priv_bo *); } -void -panvk_pool_get_bo_handles(struct panvk_pool *pool, uint32_t *handles); +void panvk_pool_get_bo_handles(struct panvk_pool *pool, uint32_t *handles); #endif |