nvk: Don't store the descriptor pool BO in the set
authorFaith Ekstrand <faith.ekstrand@collabora.com>
Mon, 25 Sep 2023 23:08:50 +0000 (18:08 -0500)
committerMarge Bot <emma+marge@anholt.net>
Tue, 26 Sep 2023 05:05:27 +0000 (05:05 +0000)
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>

src/nouveau/vulkan/nvk_descriptor_set.c
src/nouveau/vulkan/nvk_descriptor_set.h

index a05e924..5452624 100644 (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);
index 00d90ed..4af417a 100644 (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 {