Module: wine Branch: master Commit: df8fc0b33bbd83d330e4722172af5c809bc275aa URL: https://gitlab.winehq.org/wine/wine/-/commit/df8fc0b33bbd83d330e4722172af5c8...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Sep 6 21:55:24 2022 +0200
winevulkan: Introduce VkVariable.
---
dlls/winevulkan/make_vulkan | 166 ++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 92 deletions(-)
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index 381fe281b4d..99bad6b4c57 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -1139,20 +1139,83 @@ class VkHandle(object): def needs_unwrapping(self): return self.is_wrapped()
-class VkMember(object): - def __init__(self, const=False, struct_fwd_decl=False,_type=None, pointer=None, name=None, array_len=None, - dyn_array_len=None, optional=False, values=None, object_type=None, bit_width=None): +class VkVariable(object): + def __init__(self, const=False, type_info=None, type=None, name=None, pointer=None, array_len=None, + dyn_array_len=None, object_type=None): self.const = const - self.struct_fwd_decl = struct_fwd_decl + self.type_info = type_info + self.type = type self.name = name self.pointer = pointer - self.type = _type - self.type_info = None self.array_len = array_len self.dyn_array_len = dyn_array_len + self.object_type = object_type + if type_info: + self.set_type_info(type_info) + + def set_type_info(self, type_info): + """ Helper function to set type information from the type registry. + This is needed, because not all type data is available at time of + parsing. + """ + self.type_info = type_info + self.handle = type_info["data"] if type_info["category"] == "handle" else None + self.struct = type_info["data"] if type_info["category"] == "struct" else None + + def is_const(self): + return self.const + + def is_pointer(self): + return self.pointer is not None + + def is_handle(self): + return self.handle is not None + + def is_struct(self): + return self.struct is not None + + def is_dynamic_array(self): + """ Returns if the member is an array element. + Vulkan uses this for dynamically sized arrays for which + there is a 'count' parameter. + """ + return self.dyn_array_len is not None + + def is_static_array(self): + """ Returns if the member is an array. + Vulkan uses this often for fixed size arrays in which the + length is part of the member. + """ + return self.array_len is not None + + def needs_alignment(self): + """ Check if this member needs alignment for 64-bit data. + Various structures need alignment on 64-bit variables due + to compiler differences on 32-bit between Win32 and Linux. + """ + + if self.is_pointer(): + return False + elif self.type == "size_t": + return False + elif self.type in ["uint64_t", "VkDeviceSize"]: + return True + elif self.is_struct(): + return self.struct.needs_alignment() + elif self.is_handle(): + # Dispatchable handles are pointers to objects, while + # non-dispatchable are uint64_t and hence need alignment. + return not self.handle.is_dispatchable() + return False + +class VkMember(VkVariable): + def __init__(self, const=False, struct_fwd_decl=False,_type=None, pointer=None, name=None, array_len=None, + dyn_array_len=None, optional=False, values=None, object_type=None, bit_width=None): + VkVariable.__init__(self, const=const, type=_type, name=name, pointer=pointer, array_len=array_len, + dyn_array_len=dyn_array_len, object_type=object_type) + self.struct_fwd_decl = struct_fwd_decl self.optional = optional self.values = values - self.object_type = object_type self.bit_width = bit_width
def __eq__(self, other): @@ -1379,32 +1442,6 @@ class VkMember(object):
return conversions
- def is_const(self): - return self.const - - def is_dynamic_array(self): - """ Returns if the member is an array element. - Vulkan uses this for dynamically sized arrays for which - there is a 'count' parameter. - """ - return self.dyn_array_len is not None - - def is_handle(self): - return self.type_info["category"] == "handle" - - def is_pointer(self): - return self.pointer is not None - - def is_static_array(self): - """ Returns if the member is an array. - Vulkan uses this often for fixed size arrays in which the - length is part of the member. - """ - return self.array_len is not None - - def is_struct(self): - return self.type_info["category"] == "struct" - def is_struct_forward_declaration(self): return self.struct_fwd_decl
@@ -1421,28 +1458,6 @@ class VkMember(object): def is_bit_field(self): return self.bit_width is not None
- def needs_alignment(self): - """ Check if this member needs alignment for 64-bit data. - Various structures need alignment on 64-bit variables due - to compiler differences on 32-bit between Win32 and Linux. - """ - - if self.is_pointer(): - return False - elif self.type == "size_t": - return False - elif self.type in ["uint64_t", "VkDeviceSize"]: - return True - elif self.is_struct(): - struct = self.type_info["data"] - return struct.needs_alignment() - elif self.is_handle(): - # Dispatchable handles are pointers to objects, while - # non-dispatchable are uint64_t and hence need alignment. - handle = self.type_info["data"] - return False if handle.is_dispatchable() else True - return False - def needs_conversion(self): """ Structures requiring alignment, need conversion between win32 and host. """
@@ -1486,28 +1501,13 @@ class VkMember(object): struct = self.type_info["data"] return struct.needs_struct_extensions_conversion()
- def set_type_info(self, type_info): - """ Helper function to set type information from the type registry. - This is needed, because not all type data is available at time of - parsing. - """ - self.type_info = type_info - - -class VkParam(object): +class VkParam(VkVariable): """ Helper class which describes a parameter to a function call. """
def __init__(self, type_info, const=None, pointer=None, name=None, array_len=None, dyn_array_len=None, object_type=None): - self.const = const - self.name = name - self.array_len = array_len - self.dyn_array_len = dyn_array_len - self.pointer = pointer - self.object_type = object_type - self.type_info = type_info - self.type = type_info["name"] # For convenience - self.handle = type_info["data"] if type_info["category"] == "handle" else None - self.struct = type_info["data"] if type_info["category"] == "struct" else None + VkVariable.__init__(self, const=const, type_info=type_info, type=type_info["name"], name=name, + pointer=pointer, array_len=array_len, dyn_array_len=dyn_array_len, + object_type=object_type)
self._set_direction() self._set_format_string() @@ -1767,30 +1767,12 @@ class VkParam(object):
return conversions
- def is_const(self): - return self.const is not None - - def is_dynamic_array(self): - return self.dyn_array_len is not None - def is_dispatchable(self): if not self.is_handle(): return False
return self.handle.is_dispatchable()
- def is_handle(self): - return self.handle is not None - - def is_pointer(self): - return self.pointer is not None - - def is_static_array(self): - return self.array_len is not None - - def is_struct(self): - return self.struct is not None - def needs_conversion(self): """ Returns if parameter needs conversion between win32 and host. """