Module: wine
Branch: master
Commit: a0e34f16b15ffd79a0a3a395545898ba3d358edd
URL: https://gitlab.winehq.org/wine/wine/-/commit/a0e34f16b15ffd79a0a3a395545898…
Author: Jacek Caban <jacek(a)codeweavers.com>
Date: Thu Nov 3 11:30:45 2022 +0100
winevulkan: Move get_conversions implementation to VkVariable.
---
dlls/winevulkan/make_vulkan | 103 +++++++++++++++++---------------------------
1 file changed, 40 insertions(+), 63 deletions(-)
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
index be8717aa02a..dcdf2c4ab10 100755
--- a/dlls/winevulkan/make_vulkan
+++ b/dlls/winevulkan/make_vulkan
@@ -1173,6 +1173,46 @@ class VkVariable(object):
def needs_host_type(self):
return self.is_struct() and self.struct.needs_host_type()
+ def get_conversions(self, unwrap, parent_const=False):
+ """ Get a list of conversions required for this parameter if any.
+ Parameters which are structures may require conversion between win32
+ and the host platform. This function returns a list of conversions
+ required.
+ """
+
+ if self.is_struct():
+ self.struct.needs_struct_extensions_conversion()
+ for m in self.struct:
+ if m.type == self.struct.name:
+ continue
+ m.needs_struct_extensions_conversion()
+ elif not self.is_handle():
+ return []
+
+ conversions = []
+
+ # Collect any member conversions first, so we can guarantee
+ # those functions will be defined prior to usage by the
+ # 'parent' param requiring conversion.
+ if self.is_struct():
+ is_const = self.is_const() if self.is_pointer() else parent_const
+ for m in self.struct:
+ if m.type == self.struct.name:
+ continue
+ if not m.is_struct():
+ continue
+
+ conversions.extend(m.get_conversions(unwrap, is_const))
+
+ # Conversion requirements for the 'parent' parameter.
+ for conv in [False, True]:
+ if self.needs_conversion(conv, unwrap, Direction.INPUT, parent_const):
+ conversions.append(ConversionFunction(self, Direction.INPUT, conv, unwrap))
+ if self.needs_conversion(conv, unwrap, Direction.OUTPUT, parent_const):
+ conversions.append(ConversionFunction(self, Direction.OUTPUT, conv, unwrap))
+
+ return conversions
+
class VkMember(VkVariable):
def __init__(self, const=False, struct_fwd_decl=False,_type=None, pointer=None, name=None, array_len=None,
@@ -1348,34 +1388,6 @@ class VkMember(VkVariable):
return text
- def get_conversions(self, unwrap, parent_const):
- """ Return any conversion description for this member and its children when conversion is needed. """
-
- conversions = []
-
- # Collect any conversion for any member structs.
- if self.is_struct():
- struct = self.type_info["data"]
- for m in struct:
- if m.type == struct.name:
- continue
-
- m.needs_struct_extensions_conversion()
- conversions.extend(m.get_conversions(parent_const, unwrap))
-
- struct.needs_struct_extensions_conversion()
- direction = Direction.OUTPUT if struct.returnedonly else Direction.INPUT
- elif self.is_handle() or self.is_generic_handle():
- direction = Direction.INPUT
- else:
- return []
-
- for conv in [False, True]:
- if self.needs_conversion(conv, unwrap, direction, parent_const):
- conversions.append(ConversionFunction(self, direction, conv, unwrap))
-
- return conversions
-
def is_struct_forward_declaration(self):
return self.struct_fwd_decl
@@ -1595,41 +1607,6 @@ class VkParam(VkVariable):
def format_string(self):
return self.format_str
- def get_conversions(self, unwrap):
- """ Get a list of conversions required for this parameter if any.
- Parameters which are structures may require conversion between win32
- and the host platform. This function returns a list of conversions
- required.
- """
-
- if self.is_struct():
- self.struct.needs_struct_extensions_conversion()
- for m in self.struct:
- m.needs_struct_extensions_conversion()
- elif not self.is_handle():
- return []
-
- conversions = []
-
- # Collect any member conversions first, so we can guarantee
- # those functions will be defined prior to usage by the
- # 'parent' param requiring conversion.
- if self.is_struct():
- for m in self.struct:
- if not m.is_struct():
- continue
-
- conversions.extend(m.get_conversions(unwrap, False))
-
- # Conversion requirements for the 'parent' parameter.
- for conv in [False, True]:
- if self.needs_conversion(conv, unwrap, Direction.INPUT):
- conversions.append(ConversionFunction(self, Direction.INPUT, conv, unwrap))
- if self.needs_conversion(conv, unwrap, Direction.OUTPUT):
- conversions.append(ConversionFunction(self, Direction.OUTPUT, conv, unwrap))
-
- return conversions
-
def is_dispatchable(self):
if not self.is_handle():
return False