mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-02 05:23:38 +00:00
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: Alexandros Frantzis <alexandros.frantzis@collabora.com>
This commit is contained in:
parent
d95885ba0b
commit
ad7945eb41
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue