mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 19:30:12 +01:00
nvk: Store descriptor set addresses in descriptor state
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29276>
This commit is contained in:
parent
f55c51a343
commit
6fcfcd2625
3 changed files with 23 additions and 15 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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, {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue