From e83f1a70d776361acb25a25f57b75fed52165c3d Mon Sep 17 00:00:00 2001 From: liuwenfeng Date: Mon, 7 Jul 2025 17:44:05 +0800 Subject: [PATCH 1/4] append index on name collision Signed-off-by: liuwenfeng --- .../drivers/zink/nir_to_spirv/nir_to_spirv.c | 2 ++ .../drivers/zink/nir_to_spirv/spirv_builder.c | 18 +++++++++++++++++- .../drivers/zink/nir_to_spirv/spirv_builder.h | 3 +++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index ca0b698253f..2370926eee2 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -4720,6 +4720,8 @@ nir_to_spirv(struct nir_shader *s, const struct zink_shader_info *sinfo, const s struct ntv_context ctx = {0}; ctx.mem_ctx = ralloc_context(NULL); + ctx.builder.name_syms = _mesa_set_create(NULL, _mesa_hash_string, _mesa_key_string_equal); + ctx.builder.name_symcs_index = 0; ctx.nir = s; ctx.builder.mem_ctx = ctx.mem_ctx; assert(spirv_version >= SPIRV_VERSION(1, 0)); diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c index 7c0d62db329..d5b174e1ac4 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c @@ -218,12 +218,28 @@ spirv_builder_emit_name(struct spirv_builder *b, SpvId target, ptr[i] = '_'; } } + char *new_name = NULL; + struct set_entry *entry = _mesa_set_search(b->name_syms, ptr); + if (entry != NULL) { + /* we have a collision with another name, append an _ + a unique index */ + asprintf(&new_name, "%s_%u", ptr, b->name_symcs_index++); + } else { + /* Mark this one as seen */ + _mesa_set_add(b->name_syms, ptr); + } size_t pos = b->debug_names.num_words; spirv_buffer_prepare(&b->debug_names, b->mem_ctx, 2); spirv_buffer_emit_word(&b->debug_names, SpvOpName); spirv_buffer_emit_word(&b->debug_names, target); - int len = spirv_buffer_emit_string(&b->debug_names, b->mem_ctx, name); + int len = 0; + if (new_name != NULL) { + spirv_buffer_emit_string(&b->debug_names, b->mem_ctx, new_name); + free(new_name); + new_name = NULL; + } else { + spirv_buffer_emit_string(&b->debug_names, b->mem_ctx, name); + } b->debug_names.words[pos] |= (2 + len) << 16; } diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h index 73facbe8d63..885ab3a7ddc 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h @@ -60,6 +60,9 @@ struct spirv_builder { struct spirv_buffer instructions; SpvId prev_id; unsigned local_vars_begin; + + struct set* name_syms; + int name_symcs_index; }; struct spriv_tex_src { -- Gitee From 5f8a115c6dfff11a3a1562bf9719b96980a52e6d Mon Sep 17 00:00:00 2001 From: liuwenfeng Date: Mon, 7 Jul 2025 17:45:41 +0800 Subject: [PATCH 2/4] fix compile error Signed-off-by: liuwenfeng --- README.OpenSource | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.OpenSource b/README.OpenSource index 19b7ba50dc9..3a2651e0bf9 100644 --- a/README.OpenSource +++ b/README.OpenSource @@ -6,7 +6,7 @@ "Version Number": "25.0.1", "Owner": "liaosirui@huawei.com", "Upstream URL": "https://gitlab.freedesktop.org/mesa/mesa", - "Description": "mesa is an open-source software implementation of OpenGL, Vulkan, and other graphics API specifications." + "Description": "mesa is an open-source software implementation of OpenGL, Vulkan, and other graphics API specifications.", "Dependencies": [ "zlib" ] } ] \ No newline at end of file -- Gitee From a2d35bda95609332a098493b41cb935ae7ebcb66 Mon Sep 17 00:00:00 2001 From: liuwenfeng Date: Tue, 8 Jul 2025 08:31:44 +0800 Subject: [PATCH 3/4] fix len error Signed-off-by: liuwenfeng --- src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c index d5b174e1ac4..e936547f68e 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c @@ -234,11 +234,11 @@ spirv_builder_emit_name(struct spirv_builder *b, SpvId target, spirv_buffer_emit_word(&b->debug_names, target); int len = 0; if (new_name != NULL) { - spirv_buffer_emit_string(&b->debug_names, b->mem_ctx, new_name); + len = spirv_buffer_emit_string(&b->debug_names, b->mem_ctx, new_name); free(new_name); new_name = NULL; } else { - spirv_buffer_emit_string(&b->debug_names, b->mem_ctx, name); + len = spirv_buffer_emit_string(&b->debug_names, b->mem_ctx, name); } b->debug_names.words[pos] |= (2 + len) << 16; } -- Gitee From 1699a6da3d678a644bad7518e3359fcd224e5433 Mon Sep 17 00:00:00 2001 From: liuwenfeng Date: Tue, 8 Jul 2025 10:29:21 +0800 Subject: [PATCH 4/4] rename name_syms_index Signed-off-by: liuwenfeng --- src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 2 +- src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c | 2 +- src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index 2370926eee2..43a5c55d3ef 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -4721,7 +4721,7 @@ nir_to_spirv(struct nir_shader *s, const struct zink_shader_info *sinfo, const s struct ntv_context ctx = {0}; ctx.mem_ctx = ralloc_context(NULL); ctx.builder.name_syms = _mesa_set_create(NULL, _mesa_hash_string, _mesa_key_string_equal); - ctx.builder.name_symcs_index = 0; + ctx.builder.name_syms_index = 0; ctx.nir = s; ctx.builder.mem_ctx = ctx.mem_ctx; assert(spirv_version >= SPIRV_VERSION(1, 0)); diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c index e936547f68e..c1d5a79d44f 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c @@ -222,7 +222,7 @@ spirv_builder_emit_name(struct spirv_builder *b, SpvId target, struct set_entry *entry = _mesa_set_search(b->name_syms, ptr); if (entry != NULL) { /* we have a collision with another name, append an _ + a unique index */ - asprintf(&new_name, "%s_%u", ptr, b->name_symcs_index++); + asprintf(&new_name, "%s_%u", ptr, b->name_syms_index++); } else { /* Mark this one as seen */ _mesa_set_add(b->name_syms, ptr); diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h index 885ab3a7ddc..c0e08e604fb 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h @@ -62,7 +62,7 @@ struct spirv_builder { unsigned local_vars_begin; struct set* name_syms; - int name_symcs_index; + int name_syms_index; }; struct spriv_tex_src { -- Gitee