nvk: Don't store the descriptor pool BO in the set

Instead, store an address, size, and mapped pointer.  This is more
consistent with how things like images work.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25357>
This commit is contained in:
Faith Ekstrand 2023-09-25 18:08:50 -05:00 committed by Marge Bot
parent 8a1602f187
commit ebf9d6d9c3
2 changed files with 15 additions and 20 deletions

View file

@ -30,10 +30,10 @@ desc_ubo_data(struct nvk_descriptor_set *set, uint32_t binding,
&set->layout->binding[binding];
uint32_t offset = binding_layout->offset + elem * binding_layout->stride;
assert(offset < set->bo_size);
assert(offset < set->size);
if (size_out != NULL)
*size_out = set->bo_size - offset;
*size_out = set->size - offset;
return (char *)set->mapped_ptr + offset;
}
@ -293,7 +293,7 @@ nvk_push_descriptor_set_update(struct nvk_push_descriptor_set *push_set,
assert(layout->non_variable_descriptor_buffer_size < sizeof(push_set->data));
struct nvk_descriptor_set set = {
.layout = layout,
.bo_size = sizeof(push_set->data),
.size = sizeof(push_set->data),
.mapped_ptr = push_set->data,
};
@ -476,28 +476,27 @@ nvk_descriptor_set_create(struct nvk_device *dev,
if (pool->entry_count == pool->max_entry_count)
return VK_ERROR_OUT_OF_POOL_MEMORY;
set->bo_size = layout->non_variable_descriptor_buffer_size;
set->size = layout->non_variable_descriptor_buffer_size;
if (layout->binding_count > 0 &&
(layout->binding[layout->binding_count - 1].flags &
VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT)) {
uint32_t stride = layout->binding[layout->binding_count-1].stride;
set->bo_size += stride * variable_count;
set->size += stride * variable_count;
}
if (set->bo_size > 0) {
if (pool->current_offset + set->bo_size > pool->size)
if (set->size > 0) {
if (pool->current_offset + set->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;
set->addr = pool->bo->offset + pool->current_offset;
}
pool->entries[pool->entry_count].offset = set->bo_offset;
pool->entries[pool->entry_count].size = set->bo_size;
pool->entries[pool->entry_count].offset = pool->current_offset;
pool->entries[pool->entry_count].size = set->size;
pool->entries[pool->entry_count].set = set;
pool->current_offset += ALIGN(set->bo_size, NVK_MIN_UBO_ALIGNMENT);
pool->current_offset += ALIGN(set->size, NVK_MIN_UBO_ALIGNMENT);
pool->entry_count++;
vk_descriptor_set_layout_ref(&layout->vk);
@ -717,7 +716,7 @@ nvk_push_descriptor_set_update_template(
{
struct nvk_descriptor_set tmp_set = {
.layout = layout,
.bo_size = sizeof(push_set->data),
.size = sizeof(push_set->data),
.mapped_ptr = push_set->data,
};
nvk_descriptor_set_write_template(&tmp_set, template, data);

View file

@ -52,10 +52,9 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_pool, base, VkDescriptorPool,
struct nvk_descriptor_set {
struct vk_object_base base;
struct nvk_descriptor_set_layout *layout;
uint32_t bo_offset;
uint32_t bo_size;
struct nouveau_ws_bo *bo;
void *mapped_ptr;
uint64_t addr;
uint32_t size;
struct nvk_buffer_address dynamic_buffers[];
};
@ -66,10 +65,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_set, base, VkDescriptorSet,
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;
return set->addr;
}
struct nvk_push_descriptor_set {