From 36ba2672ca9168a97b30d8e85ea9a7db975c5e90 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 26 Nov 2025 16:30:38 +0200 Subject: [PATCH] anv: reintroduce non independent sets dynamic descriptor optimization Signed-off-by: Lionel Landwerlin Acked-by: Alyssa Rosenzweig Part-of: --- src/intel/vulkan/anv_shader_compile.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/intel/vulkan/anv_shader_compile.c b/src/intel/vulkan/anv_shader_compile.c index 58332976fca..80de47171dc 100644 --- a/src/intel/vulkan/anv_shader_compile.c +++ b/src/intel/vulkan/anv_shader_compile.c @@ -1452,10 +1452,22 @@ anv_shader_lower_nir(struct anv_device *device, if (nir->info.stage == MESA_SHADER_FRAGMENT) anv_shader_compute_fragment_rts(compiler, state, shader_data); + + uint32_t dynamic_descriptors_offset = 0; + uint32_t dynamic_descriptors_offsets[MAX_SETS] = {}; + for (uint32_t i = 0; i < set_layout_count; i++) { + dynamic_descriptors_offsets[i] = dynamic_descriptors_offset; + dynamic_descriptors_offset += set_layouts[i] != NULL ? + set_layouts[i]->vk.dynamic_descriptor_count : 0; + } + /* Apply the actual pipeline layout to UBOs, SSBOs, and textures */ NIR_PASS(_, nir, anv_nir_apply_pipeline_layout, pdevice, shader_data->key.base.robust_flags, - set_layouts, set_layout_count, NULL, /* TODO? */ + set_layouts, set_layout_count, + (shader_data->info->flags & + VK_SHADER_CREATE_INDEPENDENT_SETS_BIT_MESA) ? NULL: + dynamic_descriptors_offsets, &shader_data->bind_map, &shader_data->push_map, mem_ctx); NIR_PASS(_, nir, anv_nir_lower_driver_values, pdevice);