mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-25 05:50:25 +01:00
nvk: Rework OOM handling for descriptor pools
We now properly return VK_ERROR_OUT_OF_POOL_MEMORY if we run out instead of silently assigning a NULL bo and map. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
parent
933d487313
commit
61e910bde0
2 changed files with 15 additions and 7 deletions
|
|
@ -331,21 +331,26 @@ nvk_descriptor_set_create(struct nvk_device *device, struct nvk_descriptor_pool
|
|||
vk_object_base_init(&device->vk, &set->base, VK_OBJECT_TYPE_DESCRIPTOR_SET);
|
||||
|
||||
set->layout = layout;
|
||||
if (pool->entry_count == pool->max_entry_count) {
|
||||
if (pool->entry_count == pool->max_entry_count)
|
||||
return VK_ERROR_OUT_OF_POOL_MEMORY;
|
||||
}
|
||||
|
||||
if (pool->current_offset + layout->descriptor_buffer_size <= pool->size) {
|
||||
if (layout->descriptor_buffer_size > 0) {
|
||||
if (pool->current_offset + layout->descriptor_buffer_size > pool->size)
|
||||
return VK_ERROR_OUT_OF_POOL_MEMORY;
|
||||
|
||||
set->bo = pool->bo;
|
||||
set->mapped_ptr = (uint32_t *)(pool->mapped_ptr + pool->current_offset);
|
||||
set->bo_offset = pool->current_offset;
|
||||
pool->entries[pool->entry_count].offset = pool->current_offset;
|
||||
pool->entries[pool->entry_count].size = layout->descriptor_buffer_size;
|
||||
pool->entries[pool->entry_count].set = set;
|
||||
pool->current_offset += layout->descriptor_buffer_size;
|
||||
}
|
||||
|
||||
pool->entries[pool->entry_count].offset = set->bo_offset;
|
||||
pool->entries[pool->entry_count].size = layout->descriptor_buffer_size;
|
||||
pool->entries[pool->entry_count].set = set;
|
||||
pool->current_offset += layout->descriptor_buffer_size;
|
||||
pool->entry_count++;
|
||||
|
||||
*out_set = set;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,9 @@ nvk_push_descriptor_set_ref(struct nouveau_ws_push *push,
|
|||
static inline uint64_t
|
||||
nvk_descriptor_set_addr(const struct nvk_descriptor_set *set)
|
||||
{
|
||||
if (set->bo == NULL)
|
||||
return 0;
|
||||
|
||||
return set->bo->offset + set->bo_offset;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue