From 681acde6d3925ec05275bea60e8b38999bc0662e Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Fri, 17 May 2024 10:17:54 -0500 Subject: [PATCH] nvk/meta: Save and restore set_dynamic_buffer_start Fixes: e0d907f56fd8 ("nvk: Rework descriptor set binding") Part-of: --- src/nouveau/vulkan/nvk_cmd_meta.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/nouveau/vulkan/nvk_cmd_meta.c b/src/nouveau/vulkan/nvk_cmd_meta.c index d1d8bc3258b15..3b66f9b1f7c5b 100644 --- a/src/nouveau/vulkan/nvk_cmd_meta.c +++ b/src/nouveau/vulkan/nvk_cmd_meta.c @@ -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);