venus: move async_set_allocation check outside helpers

This is to balance with other checks against it, and meanwhile making it
explicit that real descriptor free shouldn't call the free helper.

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28563>
This commit is contained in:
Yiwei Zhang
2024-04-03 13:51:29 -07:00
committed by Marge Bot
parent 7d5c046c80
commit 0f47d43eee

View File

@@ -462,10 +462,9 @@ vn_descriptor_pool_alloc_descriptors(
const struct vn_descriptor_set_layout *layout, const struct vn_descriptor_set_layout *layout,
uint32_t last_binding_descriptor_count) uint32_t last_binding_descriptor_count)
{ {
struct vn_descriptor_pool_state recovery; assert(pool->async_set_allocation);
if (!pool->async_set_allocation) struct vn_descriptor_pool_state recovery;
return true;
if (pool->used.set_count == pool->max.set_count) if (pool->used.set_count == pool->max.set_count)
return false; return false;
@@ -541,8 +540,7 @@ vn_descriptor_pool_free_descriptors(
const struct vn_descriptor_set_layout *layout, const struct vn_descriptor_set_layout *layout,
uint32_t last_binding_descriptor_count) uint32_t last_binding_descriptor_count)
{ {
if (!pool->async_set_allocation) assert(pool->async_set_allocation);
return;
vn_pool_restore_mutable_states(pool, layout, layout->last_binding, vn_pool_restore_mutable_states(pool, layout, layout->last_binding,
last_binding_descriptor_count); last_binding_descriptor_count);
@@ -567,8 +565,7 @@ vn_descriptor_pool_free_descriptors(
static void static void
vn_descriptor_pool_reset_descriptors(struct vn_descriptor_pool *pool) vn_descriptor_pool_reset_descriptors(struct vn_descriptor_pool *pool)
{ {
if (!pool->async_set_allocation) assert(pool->async_set_allocation);
return;
memset(&pool->used, 0, sizeof(pool->used)); memset(&pool->used, 0, sizeof(pool->used));
@@ -594,7 +591,8 @@ vn_ResetDescriptorPool(VkDevice device,
&pool->descriptor_sets, head) &pool->descriptor_sets, head)
vn_descriptor_set_destroy(dev, set, alloc); vn_descriptor_set_destroy(dev, set, alloc);
vn_descriptor_pool_reset_descriptors(pool); if (pool->async_set_allocation)
vn_descriptor_pool_reset_descriptors(pool);
return VK_SUCCESS; return VK_SUCCESS;
} }
@@ -645,7 +643,8 @@ vn_AllocateDescriptorSets(VkDevice device,
last_binding_descriptor_count = variable_info->pDescriptorCounts[i]; last_binding_descriptor_count = variable_info->pDescriptorCounts[i];
} }
if (!vn_descriptor_pool_alloc_descriptors( if (pool->async_set_allocation &&
!vn_descriptor_pool_alloc_descriptors(
pool, layout, last_binding_descriptor_count)) { pool, layout, last_binding_descriptor_count)) {
pDescriptorSets[i] = VK_NULL_HANDLE; pDescriptorSets[i] = VK_NULL_HANDLE;
result = VK_ERROR_OUT_OF_POOL_MEMORY; result = VK_ERROR_OUT_OF_POOL_MEMORY;
@@ -655,8 +654,10 @@ vn_AllocateDescriptorSets(VkDevice device,
set = vk_zalloc(alloc, sizeof(*set), VN_DEFAULT_ALIGN, set = vk_zalloc(alloc, sizeof(*set), VN_DEFAULT_ALIGN,
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
if (!set) { if (!set) {
vn_descriptor_pool_free_descriptors(pool, layout, if (pool->async_set_allocation) {
last_binding_descriptor_count); vn_descriptor_pool_free_descriptors(
pool, layout, last_binding_descriptor_count);
}
pDescriptorSets[i] = VK_NULL_HANDLE; pDescriptorSets[i] = VK_NULL_HANDLE;
result = VK_ERROR_OUT_OF_HOST_MEMORY; result = VK_ERROR_OUT_OF_HOST_MEMORY;
goto fail; goto fail;
@@ -706,8 +707,10 @@ fail:
if (!set) if (!set)
break; break;
vn_descriptor_pool_free_descriptors(pool, set->layout, if (pool->async_set_allocation) {
set->last_binding_descriptor_count); vn_descriptor_pool_free_descriptors(
pool, set->layout, set->last_binding_descriptor_count);
}
vn_descriptor_set_destroy(dev, set, alloc); vn_descriptor_set_destroy(dev, set, alloc);
} }
@@ -729,6 +732,8 @@ vn_FreeDescriptorSets(VkDevice device,
vn_descriptor_pool_from_handle(descriptorPool); vn_descriptor_pool_from_handle(descriptorPool);
const VkAllocationCallbacks *alloc = &pool->allocator; const VkAllocationCallbacks *alloc = &pool->allocator;
assert(!pool->async_set_allocation);
vn_async_vkFreeDescriptorSets(dev->primary_ring, device, descriptorPool, vn_async_vkFreeDescriptorSets(dev->primary_ring, device, descriptorPool,
descriptorSetCount, pDescriptorSets); descriptorSetCount, pDescriptorSets);