From 6fcfcd26259d35d2c7d56444daca66e3aee792fc Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 13 May 2024 20:20:59 -0500 Subject: [PATCH] nvk: Store descriptor set addresses in descriptor state Part-of: --- src/nouveau/vulkan/nvk_cmd_buffer.c | 19 +++++++++++-------- src/nouveau/vulkan/nvk_cmd_buffer.h | 2 +- src/nouveau/vulkan/nvk_cmd_meta.c | 17 +++++++++++------ 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.c b/src/nouveau/vulkan/nvk_cmd_buffer.c index 61784f9239d..750a66c5b20 100644 --- a/src/nouveau/vulkan/nvk_cmd_buffer.c +++ b/src/nouveau/vulkan/nvk_cmd_buffer.c @@ -632,10 +632,13 @@ nvk_bind_descriptor_sets(UNUSED struct nvk_cmd_buffer *cmd, if (desc->sets[s] != set) { if (set != NULL) { desc->root.sets[s] = nvk_descriptor_set_addr(set); - desc->set_sizes[s] = set->size; + desc->set_addrs[s] = (struct nvk_buffer_address) { + .base_addr = nvk_descriptor_set_addr(set), + .size = set->size, + }; } else { desc->root.sets[s] = 0; - desc->set_sizes[s] = 0; + desc->set_addrs[s] = (struct nvk_buffer_address) { .size = 0 }; } desc->sets[s] = set; } @@ -794,7 +797,10 @@ nvk_cmd_buffer_flush_push_descriptors(struct nvk_cmd_buffer *cmd, } desc->root.sets[set_idx] = push_set_addr; - desc->set_sizes[set_idx] = sizeof(push_set->data); + desc->set_addrs[set_idx] = (struct nvk_buffer_address) { + .base_addr = push_set_addr, + .size = sizeof(push_set->data), + }; } } @@ -822,10 +828,7 @@ nvk_cmd_buffer_get_cbuf_descriptor(struct nvk_cmd_buffer *cmd, return true; case NVK_CBUF_TYPE_DESC_SET: - *desc_out = (struct nvk_buffer_address) { - .base_addr = desc->root.sets[cbuf->desc_set], - .size = desc->set_sizes[cbuf->desc_set], - }; + *desc_out = desc->set_addrs[cbuf->desc_set]; return true; case NVK_CBUF_TYPE_DYNAMIC_UBO: { @@ -861,7 +864,7 @@ nvk_cmd_buffer_get_cbuf_descriptor_addr(struct nvk_cmd_buffer *cmd, { assert(cbuf->type == NVK_CBUF_TYPE_UBO_DESC); - assert(cbuf->desc_offset < desc->set_sizes[cbuf->desc_set]); + assert(cbuf->desc_offset < desc->set_addrs[cbuf->desc_set].size); return desc->root.sets[cbuf->desc_set] + cbuf->desc_offset; } diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.h b/src/nouveau/vulkan/nvk_cmd_buffer.h index d09ab5edacd..e9e14af3b15 100644 --- a/src/nouveau/vulkan/nvk_cmd_buffer.h +++ b/src/nouveau/vulkan/nvk_cmd_buffer.h @@ -72,8 +72,8 @@ struct nvk_root_descriptor_table { struct nvk_descriptor_state { struct nvk_root_descriptor_table root; - uint32_t set_sizes[NVK_MAX_SETS]; struct nvk_descriptor_set *sets[NVK_MAX_SETS]; + struct nvk_buffer_address set_addrs[NVK_MAX_SETS]; struct nvk_push_descriptor_set *push[NVK_MAX_SETS]; uint32_t push_dirty; }; diff --git a/src/nouveau/vulkan/nvk_cmd_meta.c b/src/nouveau/vulkan/nvk_cmd_meta.c index da08c04327e..1af4f261677 100644 --- a/src/nouveau/vulkan/nvk_cmd_meta.c +++ b/src/nouveau/vulkan/nvk_cmd_meta.c @@ -130,13 +130,18 @@ static void nvk_meta_end(struct nvk_cmd_buffer *cmd, struct nvk_meta_save *save) { + struct nvk_descriptor_state *desc = &cmd->state.gfx.descriptors; + if (save->desc0) { - cmd->state.gfx.descriptors.sets[0] = save->desc0; - cmd->state.gfx.descriptors.set_sizes[0] = save->desc0->size; - cmd->state.gfx.descriptors.root.sets[0] = nvk_descriptor_set_addr(save->desc0); + desc->sets[0] = save->desc0; + desc->root.sets[0] = nvk_descriptor_set_addr(save->desc0); + desc->set_addrs[0] = (struct nvk_buffer_address) { + .base_addr = nvk_descriptor_set_addr(save->desc0), + .size = save->desc0->size, + }; } else if (save->has_push_desc0) { - *cmd->state.gfx.descriptors.push[0] = save->push_desc0; - cmd->state.gfx.descriptors.push_dirty |= BITFIELD_BIT(0); + *desc->push[0] = save->push_desc0; + desc->push_dirty |= BITFIELD_BIT(0); } /* Restore the dynamic state */ @@ -158,7 +163,7 @@ nvk_meta_end(struct nvk_cmd_buffer *cmd, nvk_cmd_bind_vertex_buffer(cmd, 0, save->vb0); - memcpy(cmd->state.gfx.descriptors.root.push, save->push, sizeof(save->push)); + memcpy(desc->root.push, save->push, sizeof(save->push)); struct nv_push *p = nvk_cmd_buffer_push(cmd, 2); P_IMMD(p, NV9097, SET_STATISTICS_COUNTER, {