mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-28 16:10:23 +01:00
turnip: Drop references to layout of all sets on pool reset/destruction
We dropped the references only for non-host_memory_base pools.
Create a list of alive descriptor to account for all of them.
Fixes: 1b513f49 ("tu: add reference counting for descriptor set layouts")
Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14235>
This commit is contained in:
parent
bdb8e615d1
commit
da7a475138
2 changed files with 17 additions and 4 deletions
|
|
@ -562,6 +562,7 @@ tu_descriptor_set_create(struct tu_device *device,
|
|||
}
|
||||
|
||||
tu_descriptor_set_layout_ref(layout);
|
||||
list_addtail(&set->pool_link, &pool->desc_sets);
|
||||
|
||||
*out_set = set;
|
||||
return VK_SUCCESS;
|
||||
|
|
@ -588,6 +589,8 @@ tu_descriptor_set_destroy(struct tu_device *device,
|
|||
}
|
||||
}
|
||||
|
||||
list_del(&set->pool_link);
|
||||
|
||||
vk_object_free(&device->vk, NULL, set);
|
||||
}
|
||||
|
||||
|
|
@ -680,6 +683,8 @@ tu_CreateDescriptorPool(VkDevice _device,
|
|||
pool->size = bo_size;
|
||||
pool->max_entry_count = pCreateInfo->maxSets;
|
||||
|
||||
list_inithead(&pool->desc_sets);
|
||||
|
||||
*pDescriptorPool = tu_descriptor_pool_to_handle(pool);
|
||||
return VK_SUCCESS;
|
||||
|
||||
|
|
@ -701,8 +706,9 @@ tu_DestroyDescriptorPool(VkDevice _device,
|
|||
if (!pool)
|
||||
return;
|
||||
|
||||
for(int i = 0; i < pool->entry_count; ++i) {
|
||||
tu_descriptor_set_layout_unref(device, pool->entries[i].set->layout);
|
||||
list_for_each_entry_safe(struct tu_descriptor_set, set,
|
||||
&pool->desc_sets, pool_link) {
|
||||
tu_descriptor_set_layout_unref(device, set->layout);
|
||||
}
|
||||
|
||||
if (!pool->host_memory_base) {
|
||||
|
|
@ -729,9 +735,11 @@ tu_ResetDescriptorPool(VkDevice _device,
|
|||
TU_FROM_HANDLE(tu_device, device, _device);
|
||||
TU_FROM_HANDLE(tu_descriptor_pool, pool, descriptorPool);
|
||||
|
||||
for(int i = 0; i < pool->entry_count; ++i) {
|
||||
tu_descriptor_set_layout_unref(device, pool->entries[i].set->layout);
|
||||
list_for_each_entry_safe(struct tu_descriptor_set, set,
|
||||
&pool->desc_sets, pool_link) {
|
||||
tu_descriptor_set_layout_unref(device, set->layout);
|
||||
}
|
||||
list_inithead(&pool->desc_sets);
|
||||
|
||||
if (!pool->host_memory_base) {
|
||||
for(int i = 0; i < pool->entry_count; ++i) {
|
||||
|
|
|
|||
|
|
@ -658,6 +658,9 @@ struct tu_descriptor_set
|
|||
{
|
||||
struct vk_object_base base;
|
||||
|
||||
/* Link to descriptor pool's desc_sets list . */
|
||||
struct list_head pool_link;
|
||||
|
||||
struct tu_descriptor_set_layout *layout;
|
||||
struct tu_descriptor_pool *pool;
|
||||
uint32_t size;
|
||||
|
|
@ -688,6 +691,8 @@ struct tu_descriptor_pool
|
|||
uint8_t *host_memory_end;
|
||||
uint8_t *host_bo;
|
||||
|
||||
struct list_head desc_sets;
|
||||
|
||||
uint32_t entry_count;
|
||||
uint32_t max_entry_count;
|
||||
struct tu_descriptor_pool_entry entries[0];
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue