vulkan/cmd_queue: Use vk_strdup and free allocated string memory

Fixes: 9082715ab0 ("vk/cmd_queue: generate copies for string struct members")

Reviewed-by: Karmjit Mahil <karmjit.mahil@igalia.com>
Reviewed-by: Konstantin Seurer <konstantin.seurer@gmail.com>
Signed-off-by: Aitor Camacho <aitor@lunarg.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38634>
(cherry picked from commit 16c98f4f18)
This commit is contained in:
Aitor Camacho 2025-11-25 03:35:06 +09:00 committed by Eric Engestrom
parent 1846c7cc9b
commit 5153a5d8c1
2 changed files with 4 additions and 2 deletions

View file

@ -664,7 +664,7 @@
"description": "vulkan/cmd_queue: Use vk_strdup and free allocated string memory",
"nominated": true,
"nomination_type": 2,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "9082715ab014270fb8bdf555526d7e55a4890538",
"notes": null

View file

@ -564,7 +564,7 @@ def get_struct_copy(dst, src_name, src_type, size, types, level=0):
if member.len and member.len == 'struct-ptr':
member_copies += get_struct_copy("%s->%s" % (tmp_dst_name, member.name), "%s->%s" % (tmp_src_name, member.name), member.type, 'sizeof(%s)' % member.type, types, level + 1)
elif member.len and member.len == 'null-terminated':
member_copies += "%s%s->%s = strdup(%s->%s);" % (indent_sameline, tmp_dst_name, member.name, tmp_src_name, member.name)
member_copies += "%s%s->%s = vk_strdup(queue->alloc, %s->%s, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);" % (indent_sameline, tmp_dst_name, member.name, tmp_src_name, member.name)
elif member.len:
member_copies += get_array_member_copy(tmp_dst_name, tmp_src_name, member, level + 1)
elif member.name == 'pNext':
@ -586,6 +586,8 @@ def get_struct_free(field_name, struct_type, types):
member_name = "%s ? %s->%s : NULL" % (field_name, field_name, member.name)
if member.len and member.len != 'null-terminated':
member_frees += "vk_free(queue->alloc, (void*)(%s));\n" % member_name
if member.len and member.len == 'null-terminated':
member_frees += "vk_free(queue->alloc, (void*)(%s));\n" % member_name
elif member.name == 'pNext':
member_frees += get_pnext_member_free(struct_type, types, member_name)
return "%s %s\n" % (member_frees, struct_free)