Lines Matching defs:suballoc

28 tu_bo_suballocator_init(struct tu_suballocator *suballoc,
32 suballoc->dev = dev;
33 suballoc->default_size = default_size;
34 suballoc->flags = flags;
35 suballoc->bo = NULL;
36 suballoc->cached_bo = NULL;
40 tu_bo_suballocator_finish(struct tu_suballocator *suballoc)
42 if (suballoc->bo)
43 tu_bo_finish(suballoc->dev, suballoc->bo);
44 if (suballoc->cached_bo)
45 tu_bo_finish(suballoc->dev, suballoc->cached_bo);
50 struct tu_suballocator *suballoc,
53 struct tu_bo *bo = suballoc->bo;
55 uint32_t offset = ALIGN(suballoc->next_offset, align);
61 suballoc->next_offset = offset + size;
64 tu_bo_finish(suballoc->dev, bo);
65 suballoc->bo = NULL;
69 uint32_t alloc_size = MAX2(size, suballoc->default_size);
71 /* Reuse a recycled suballoc BO if we have one and it's big enough, otherwise free it. */
72 if (suballoc->cached_bo) {
73 if (alloc_size <= suballoc->cached_bo->size)
74 suballoc->bo = suballoc->cached_bo;
76 tu_bo_finish(suballoc->dev, suballoc->cached_bo);
77 suballoc->cached_bo = NULL;
81 if (!suballoc->bo) {
82 VkResult result = tu_bo_init_new(suballoc->dev, &suballoc->bo,
84 suballoc->flags);
89 VkResult result = tu_bo_map(suballoc->dev, suballoc->bo);
91 tu_bo_finish(suballoc->dev, suballoc->bo);
95 suballoc_bo->bo = tu_bo_get_ref(suballoc->bo);
98 suballoc->next_offset = size;
104 tu_suballoc_bo_free(struct tu_suballocator *suballoc, struct tu_suballoc_bo *bo)
112 if (p_atomic_read(&bo->bo->refcnt) == 1 && !suballoc->cached_bo) {
113 suballoc->cached_bo = bo->bo;
118 tu_bo_finish(suballoc->dev, bo->bo);