mirror of https://gitlab.freedesktop.org/mesa/mesa
nvk: Store an nvk_buffer_address for each set in the root table.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29276>
This commit is contained in:
parent
0e417df499
commit
54ce220f10
|
@ -632,13 +632,8 @@ 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_addrs[s] = (struct nvk_buffer_address) {
|
||||
.base_addr = nvk_descriptor_set_addr(set),
|
||||
.size = set->size,
|
||||
};
|
||||
} else {
|
||||
desc->root.sets[s] = 0;
|
||||
desc->set_addrs[s] = (struct nvk_buffer_address) { .size = 0 };
|
||||
desc->root.sets[s] = NVK_BUFFER_ADDRESS_NULL;
|
||||
}
|
||||
desc->sets[s] = set;
|
||||
}
|
||||
|
@ -796,8 +791,7 @@ nvk_cmd_buffer_flush_push_descriptors(struct nvk_cmd_buffer *cmd,
|
|||
return;
|
||||
}
|
||||
|
||||
desc->root.sets[set_idx] = push_set_addr;
|
||||
desc->set_addrs[set_idx] = (struct nvk_buffer_address) {
|
||||
desc->root.sets[set_idx] = (struct nvk_buffer_address) {
|
||||
.base_addr = push_set_addr,
|
||||
.size = sizeof(push_set->data),
|
||||
};
|
||||
|
@ -828,7 +822,7 @@ nvk_cmd_buffer_get_cbuf_descriptor(struct nvk_cmd_buffer *cmd,
|
|||
return true;
|
||||
|
||||
case NVK_CBUF_TYPE_DESC_SET:
|
||||
*desc_out = desc->set_addrs[cbuf->desc_set];
|
||||
*desc_out = desc->root.sets[cbuf->desc_set];
|
||||
return true;
|
||||
|
||||
case NVK_CBUF_TYPE_DYNAMIC_UBO: {
|
||||
|
@ -864,8 +858,8 @@ 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_addrs[cbuf->desc_set].size);
|
||||
return desc->root.sets[cbuf->desc_set] + cbuf->desc_offset;
|
||||
assert(cbuf->desc_offset < desc->root.sets[cbuf->desc_set].size);
|
||||
return desc->root.sets[cbuf->desc_set].base_addr + cbuf->desc_offset;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -53,8 +53,8 @@ struct nvk_root_descriptor_table {
|
|||
/* Client push constants */
|
||||
uint8_t push[NVK_MAX_PUSH_SIZE];
|
||||
|
||||
/* Descriptor set base addresses */
|
||||
uint64_t sets[NVK_MAX_SETS];
|
||||
/* Descriptor set addresses */
|
||||
struct nvk_buffer_address sets[NVK_MAX_SETS];
|
||||
|
||||
/* Dynamic buffer bindings */
|
||||
struct nvk_buffer_address dynamic_buffers[NVK_MAX_DYNAMIC_BUFFERS];
|
||||
|
@ -63,7 +63,7 @@ struct nvk_root_descriptor_table {
|
|||
uint8_t set_dynamic_buffer_start[NVK_MAX_SETS];
|
||||
|
||||
/* enfore alignment to 0x100 as needed pre pascal */
|
||||
uint8_t __padding[0x18];
|
||||
uint8_t __padding[0xd8];
|
||||
};
|
||||
|
||||
/* helper macro for computing root descriptor byte offsets */
|
||||
|
@ -73,7 +73,6 @@ struct nvk_root_descriptor_table {
|
|||
struct nvk_descriptor_state {
|
||||
struct nvk_root_descriptor_table root;
|
||||
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;
|
||||
};
|
||||
|
|
|
@ -135,10 +135,6 @@ nvk_meta_end(struct nvk_cmd_buffer *cmd,
|
|||
if (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) {
|
||||
*desc->push[0] = save->push_desc0;
|
||||
desc->push_dirty |= BITFIELD_BIT(0);
|
||||
|
|
|
@ -64,6 +64,8 @@ PRAGMA_DIAGNOSTIC_POP
|
|||
static_assert(sizeof(struct nvk_buffer_address) == 16,
|
||||
"nvk_buffer_address has no holes");
|
||||
|
||||
#define NVK_BUFFER_ADDRESS_NULL ((struct nvk_buffer_address) { .size = 0 })
|
||||
|
||||
struct nvk_descriptor_pool {
|
||||
struct vk_object_base base;
|
||||
|
||||
|
@ -94,10 +96,13 @@ struct nvk_descriptor_set {
|
|||
VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_set, base, VkDescriptorSet,
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_SET)
|
||||
|
||||
static inline uint64_t
|
||||
static inline struct nvk_buffer_address
|
||||
nvk_descriptor_set_addr(const struct nvk_descriptor_set *set)
|
||||
{
|
||||
return set->addr;
|
||||
return (struct nvk_buffer_address) {
|
||||
.base_addr = set->addr,
|
||||
.size = set->size,
|
||||
};
|
||||
}
|
||||
|
||||
struct nvk_push_descriptor_set {
|
||||
|
|
|
@ -532,8 +532,8 @@ static nir_def *
|
|||
load_descriptor_set_addr(nir_builder *b, uint32_t set,
|
||||
UNUSED const struct lower_descriptors_ctx *ctx)
|
||||
{
|
||||
uint32_t set_addr_offset =
|
||||
nvk_root_descriptor_offset(sets) + set * sizeof(uint64_t);
|
||||
uint32_t set_addr_offset = nvk_root_descriptor_offset(sets) +
|
||||
set * sizeof(struct nvk_buffer_address);
|
||||
|
||||
return nir_load_ubo(b, 1, 64, nir_imm_int(b, 0),
|
||||
nir_imm_int(b, set_addr_offset),
|
||||
|
|
Loading…
Reference in New Issue