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:
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user