mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 11:40:10 +01:00
vk/cmd_queue: generate copies for string struct members
this includes e.g., debug labels, which previously was garbage data Reviewed-by: Konstantin Seurer <konstantin.seurer@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34534>
This commit is contained in:
parent
26cdd7ebd6
commit
9082715ab0
1 changed files with 5 additions and 3 deletions
|
|
@ -529,19 +529,21 @@ def get_struct_copy(dst, src_name, src_type, size, types, level=0):
|
||||||
tmp_dst = "%s *%s = (void *) %s; (void) %s;" % (src_type, tmp_dst_name, dst, tmp_dst_name)
|
tmp_dst = "%s *%s = (void *) %s; (void) %s;" % (src_type, tmp_dst_name, dst, tmp_dst_name)
|
||||||
tmp_src = "%s *%s = (void *) %s; (void) %s;" % (src_type, tmp_src_name, src_name, tmp_src_name)
|
tmp_src = "%s *%s = (void *) %s; (void) %s;" % (src_type, tmp_src_name, src_name, tmp_src_name)
|
||||||
member_copies = ""
|
member_copies = ""
|
||||||
|
indent = "\n%s" % (" " * (level + 1))
|
||||||
|
indent_sameline = "\n%s" % (" " * level)
|
||||||
if src_type in types:
|
if src_type in types:
|
||||||
for member in types[src_type].members:
|
for member in types[src_type].members:
|
||||||
if member.len and member.len == 'struct-ptr':
|
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)
|
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':
|
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)
|
||||||
|
elif member.len:
|
||||||
member_copies += get_array_member_copy(tmp_dst_name, tmp_src_name, member, level + 1)
|
member_copies += get_array_member_copy(tmp_dst_name, tmp_src_name, member, level + 1)
|
||||||
elif member.name == 'pNext':
|
elif member.name == 'pNext':
|
||||||
member_copies += get_pnext_member_copy(tmp_dst_name, src_type, member, types, level + 1)
|
member_copies += get_pnext_member_copy(tmp_dst_name, src_type, member, types, level + 1)
|
||||||
|
|
||||||
null_assignment = "%s = NULL;" % dst
|
null_assignment = "%s = NULL;" % dst
|
||||||
if_stmt = "if (%s) {" % src_name
|
if_stmt = "if (%s) {" % src_name
|
||||||
indent = "\n%s" % (" " * (level + 1))
|
|
||||||
indent_sameline = "\n%s" % (" " * level)
|
|
||||||
return "%s%s%s%s%s%s%s%s%s%s%s%s} else {%s%s%s}" % (if_stmt, indent, allocation, indent, copy, indent, tmp_dst, indent, tmp_src, indent, member_copies, indent_sameline, indent, null_assignment, indent_sameline)
|
return "%s%s%s%s%s%s%s%s%s%s%s%s} else {%s%s%s}" % (if_stmt, indent, allocation, indent, copy, indent, tmp_dst, indent, tmp_src, indent, member_copies, indent_sameline, indent, null_assignment, indent_sameline)
|
||||||
|
|
||||||
def get_struct_free(command, param, types):
|
def get_struct_free(command, param, types):
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue