summaryrefslogtreecommitdiff
path: root/src/panfrost/vulkan/panvk_mempool.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/panfrost/vulkan/panvk_mempool.h')
-rw-r--r--src/panfrost/vulkan/panvk_mempool.h42
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