Georg Lehmann : winevulkan: Fix bit field struct members.
Module: wine Branch: master Commit: afa49b18ca145830ffa31fa4a7c808833ab12b3a URL: https://source.winehq.org/git/wine.git/?a=commit;h=afa49b18ca145830ffa31fa4a... Author: Georg Lehmann <dadschoorse(a)gmail.com> Date: Tue Jun 22 12:15:41 2021 +0200 winevulkan: Fix bit field struct members. Signed-off-by: Georg Lehmann <dadschoorse(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winevulkan/make_vulkan | 18 ++++++++++++++++-- include/wine/vulkan.h | 24 ++++++++++++------------ 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index b7d57b8218d..e8534cbd5f5 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -1078,7 +1078,7 @@ class VkHandle(object): 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): + dyn_array_len=None, optional=False, values=None, object_type=None, bit_width=None): self.const = const self.struct_fwd_decl = struct_fwd_decl self.name = name @@ -1090,6 +1090,7 @@ class VkMember(object): self.optional = optional self.values = values self.object_type = object_type + self.bit_width = bit_width def __eq__(self, other): """ Compare member based on name against a string. @@ -1116,6 +1117,7 @@ class VkMember(object): member_type = None pointer = None array_len = None + bit_width = None values = member.get("values") @@ -1161,8 +1163,14 @@ class VkMember(object): object_type = member.get("objecttype", None) + # Some members are bit field values: + # <member><type>uint32_t</type> <name>mask</name>:8</member> + if name_elem.tail and name_elem.tail[0] == ':': + LOGGER.debug("Found bit field") + bit_width = int(name_elem.tail[1:]) + return VkMember(const=const, struct_fwd_decl=struct_fwd_decl, _type=member_type, pointer=pointer, name=name_elem.text, - array_len=array_len, dyn_array_len=dyn_array_len, optional=optional, values=values, object_type=object_type) + array_len=array_len, dyn_array_len=dyn_array_len, optional=optional, values=values, object_type=object_type, bit_width=bit_width) def copy(self, input, output, direction, conv): """ Helper method for use by conversion logic to generate a C-code statement to copy this member. @@ -1267,6 +1275,9 @@ class VkMember(object): if self.is_static_array(): text += "[{0}]".format(self.array_len) + if self.is_bit_field(): + text += ":{}".format(self.bit_width) + return text def get_conversions(self): @@ -1344,6 +1355,9 @@ class VkMember(object): return self.object_type != None and self.type == "uint64_t" + 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 diff --git a/include/wine/vulkan.h b/include/wine/vulkan.h index eb72a0cdf34..7a3ccab9758 100644 --- a/include/wine/vulkan.h +++ b/include/wine/vulkan.h @@ -5752,10 +5752,10 @@ typedef struct VkAccelerationStructureGeometryMotionTrianglesDataNV typedef struct VkAccelerationStructureInstanceKHR { VkTransformMatrixKHR transform; - uint32_t instanceCustomIndex; - uint32_t mask; - uint32_t instanceShaderBindingTableRecordOffset; - VkGeometryInstanceFlagsKHR flags; + uint32_t instanceCustomIndex:24; + uint32_t mask:8; + uint32_t instanceShaderBindingTableRecordOffset:24; + VkGeometryInstanceFlagsKHR flags:8; uint64_t WINE_VK_ALIGN(8) accelerationStructureReference; } VkAccelerationStructureInstanceKHR; typedef VkAccelerationStructureInstanceKHR VkAccelerationStructureInstanceNV; @@ -5772,10 +5772,10 @@ typedef struct VkAccelerationStructureSRTMotionInstanceNV { VkSRTDataNV transformT0; VkSRTDataNV transformT1; - uint32_t instanceCustomIndex; - uint32_t mask; - uint32_t instanceShaderBindingTableRecordOffset; - VkGeometryInstanceFlagsKHR flags; + uint32_t instanceCustomIndex:24; + uint32_t mask:8; + uint32_t instanceShaderBindingTableRecordOffset:24; + VkGeometryInstanceFlagsKHR flags:8; uint64_t WINE_VK_ALIGN(8) accelerationStructureReference; } VkAccelerationStructureSRTMotionInstanceNV; @@ -7033,10 +7033,10 @@ typedef struct VkAccelerationStructureMatrixMotionInstanceNV { VkTransformMatrixKHR transformT0; VkTransformMatrixKHR transformT1; - uint32_t instanceCustomIndex; - uint32_t mask; - uint32_t instanceShaderBindingTableRecordOffset; - VkGeometryInstanceFlagsKHR flags; + uint32_t instanceCustomIndex:24; + uint32_t mask:8; + uint32_t instanceShaderBindingTableRecordOffset:24; + VkGeometryInstanceFlagsKHR flags:8; uint64_t WINE_VK_ALIGN(8) accelerationStructureReference; } VkAccelerationStructureMatrixMotionInstanceNV;
participants (1)
-
Alexandre Julliard