nvk/meta: Save and restore set_dynamic_buffer_start

Fixes: e0d907f56f ("nvk: Rework descriptor set binding")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29276>
This commit is contained in:
Faith Ekstrand 2024-05-17 10:17:54 -05:00 committed by Marge Bot
parent 3e9b08f417
commit 681acde6d3
1 changed files with 16 additions and 0 deletions

View File

@ -65,6 +65,7 @@ struct nvk_meta_save {
struct nvk_descriptor_set *desc0;
bool has_push_desc0;
struct nvk_push_descriptor_set push_desc0;
uint8_t set_dynamic_buffer_start[NVK_MAX_SETS];
uint8_t push[128];
};
@ -88,6 +89,12 @@ nvk_meta_begin(struct nvk_cmd_buffer *cmd,
if (save->has_push_desc0)
save->push_desc0 = *desc->push[0];
STATIC_ASSERT(sizeof(save->set_dynamic_buffer_start) ==
sizeof(desc->root.set_dynamic_buffer_start));
memcpy(save->set_dynamic_buffer_start,
desc->root.set_dynamic_buffer_start,
sizeof(save->set_dynamic_buffer_start));
STATIC_ASSERT(sizeof(save->push) == sizeof(desc->root.push));
memcpy(save->push, desc->root.push, sizeof(save->push));
@ -141,6 +148,15 @@ nvk_meta_end(struct nvk_cmd_buffer *cmd,
desc->push_dirty |= BITFIELD_BIT(0);
}
/* Restore set_dynaic_buffer_start because meta binding set 0 can disturb
* all dynamic buffers starts for all sets.
*/
STATIC_ASSERT(sizeof(save->set_dynamic_buffer_start) ==
sizeof(desc->root.set_dynamic_buffer_start));
memcpy(desc->root.set_dynamic_buffer_start,
save->set_dynamic_buffer_start,
sizeof(save->set_dynamic_buffer_start));
/* Restore the dynamic state */
assert(save->dynamic.vi == &cmd->state.gfx._dynamic_vi);
assert(save->dynamic.ms.sample_locations == &cmd->state.gfx._dynamic_sl);