Commit ad7945eb authored by Alexandros Frantzis's avatar Alexandros Frantzis Committed by Alexandre Julliard

winevulkan: Generate "in_ext" definition on demand.

There are cases in StructConversionFunction.definition where we will generate copy code for extension struct members, without emitting the definition of "in_ext" variable used in the copy code. This issue is triggered by mismatches in the condition that guards the generation of the "in_ext" definitions, and the condition(s) that govern the generation of the member copy code (e.g., in StructConversionFunction.member_needs_copy and VkMember.needs_conversion). In order to avoid such mismatches and the burden of having to keep the conditions in sync, this commit generates the definition on demand, by checking if it's actually needed by the member copy code. Signed-off-by: 's avatarAlexandros Frantzis <alexandros.frantzis@collabora.com>
parent d95885ba
......@@ -2199,20 +2199,25 @@ class StructConversionFunction(object):
body += ident + "{0} *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext));\n".format(out_type)
else:
body += ident + "{0} *out_ext = find_next_struct(out_header, {1});\n".format(out_type, stype)
if self.direction == Direction.OUTPUT or not ext.returnedonly:
body += ident + "{0} *in_ext = ({0} *)in_header;\n".format(in_type)
copy_body = ""
for m in ext:
if m.name == "sType":
body += ident + "out_ext->sType = {0};\n".format(stype)
copy_body += ident + "out_ext->sType = {0};\n".format(stype)
continue
if not self.member_needs_copy(ext, m):
continue
if m.name == "pNext":
body += ident + "out_ext->pNext = NULL;\n"
copy_body += ident + "out_ext->pNext = NULL;\n"
continue
body += ident + m.copy("in_ext->", "out_ext->", self.direction, self.conv, True)
copy_body += ident + m.copy("in_ext->", "out_ext->", self.direction, self.conv, True)
# Generate the definition of "in_ext" if we need it
if "in_ext->" in copy_body:
body += ident + "{0} *in_ext = ({0} *)in_header;\n".format(in_type)
body += copy_body
if self.direction == Direction.INPUT:
body += ident + "out_header->pNext = (void *)out_ext;\n"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment