winevulkan: Don't try to convert unions without selectors.

This commit is contained in:
Jacek Caban 2022-11-24 22:04:36 +01:00 committed by Alexandre Julliard
parent 81a6c8c882
commit 274a9db57a
2 changed files with 38 additions and 62 deletions

View file

@ -1267,10 +1267,10 @@ class VkVariable(object):
return self.needs_conversion(conv, unwrap, Direction.INPUT, False) \ return self.needs_conversion(conv, unwrap, Direction.INPUT, False) \
or self.needs_conversion(conv, unwrap, Direction.OUTPUT, False) or self.needs_conversion(conv, unwrap, Direction.OUTPUT, False)
return (self.is_struct() or self.is_union()) and self.struct.needs_alloc(conv, unwrap) return (self.is_struct() or (self.is_union() and self.selector)) and self.struct.needs_alloc(conv, unwrap)
def needs_host_type(self): def needs_host_type(self):
return (self.is_struct() or self.is_union()) and self.struct.needs_host_type() return (self.is_struct() or (self.is_union() and self.selector)) and self.struct.needs_host_type()
def get_conversions(self, unwrap, parent_const=False): def get_conversions(self, unwrap, parent_const=False):
""" Get a list of conversions required for this parameter if any. """ Get a list of conversions required for this parameter if any.
@ -1284,7 +1284,7 @@ class VkVariable(object):
# Collect any member conversions first, so we can guarantee # Collect any member conversions first, so we can guarantee
# those functions will be defined prior to usage by the # those functions will be defined prior to usage by the
# 'parent' param requiring conversion. # 'parent' param requiring conversion.
if self.is_struct() or self.is_union(): if self.is_struct() or (self.is_union() and self.selector):
struct = self.struct struct = self.struct
is_const = self.is_const() if self.is_pointer() else parent_const is_const = self.is_const() if self.is_pointer() else parent_const
@ -1533,6 +1533,10 @@ class VkMember(VkVariable):
def needs_conversion(self, conv, unwrap, direction, struct_const): def needs_conversion(self, conv, unwrap, direction, struct_const):
""" Check if member needs conversion. """ """ Check if member needs conversion. """
# we can't convert unions if we don't have a selector
if self.is_union() and not self.selector:
return False
is_const = self.is_const() if self.is_pointer() else struct_const is_const = self.is_const() if self.is_pointer() else struct_const
# const members don't needs output conversion unless they are structs with non-const pointers # const members don't needs output conversion unless they are structs with non-const pointers
@ -2239,7 +2243,7 @@ class StructConversionFunction(object):
else: else:
params = ["const {0} *in".format(win_type), "{0} *out".format(self.type)] params = ["const {0} *in".format(win_type), "{0} *out".format(self.type)]
if self.operand[0].selection: if self.operand.union:
params.append("VkFlags selector") params.append("VkFlags selector")
# Generate parameter list # Generate parameter list

View file

@ -308,17 +308,11 @@ typedef struct VkBindImageMemoryInfo32
} VkBindImageMemoryInfo32; } VkBindImageMemoryInfo32;
typedef VkBindImageMemoryInfo32 VkBindImageMemoryInfoKHR32; typedef VkBindImageMemoryInfo32 VkBindImageMemoryInfoKHR32;
typedef union VkDeviceOrHostAddressConstKHR32
{
VkDeviceAddress DECLSPEC_ALIGN(8) deviceAddress;
PTR32 hostAddress;
} VkDeviceOrHostAddressConstKHR32;
typedef struct VkAccelerationStructureGeometryMotionTrianglesDataNV32 typedef struct VkAccelerationStructureGeometryMotionTrianglesDataNV32
{ {
VkStructureType sType; VkStructureType sType;
PTR32 pNext; PTR32 pNext;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) vertexData; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) vertexData;
} VkAccelerationStructureGeometryMotionTrianglesDataNV32; } VkAccelerationStructureGeometryMotionTrianglesDataNV32;
typedef struct VkAccelerationStructureTrianglesOpacityMicromapEXT32 typedef struct VkAccelerationStructureTrianglesOpacityMicromapEXT32
@ -326,7 +320,7 @@ typedef struct VkAccelerationStructureTrianglesOpacityMicromapEXT32
VkStructureType sType; VkStructureType sType;
PTR32 pNext; PTR32 pNext;
VkIndexType indexType; VkIndexType indexType;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) indexBuffer; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) indexBuffer;
VkDeviceSize DECLSPEC_ALIGN(8) indexStride; VkDeviceSize DECLSPEC_ALIGN(8) indexStride;
uint32_t baseTriangle; uint32_t baseTriangle;
uint32_t usageCountsCount; uint32_t usageCountsCount;
@ -340,19 +334,19 @@ typedef struct VkAccelerationStructureGeometryTrianglesDataKHR32
VkStructureType sType; VkStructureType sType;
PTR32 pNext; PTR32 pNext;
VkFormat vertexFormat; VkFormat vertexFormat;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) vertexData; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) vertexData;
VkDeviceSize DECLSPEC_ALIGN(8) vertexStride; VkDeviceSize DECLSPEC_ALIGN(8) vertexStride;
uint32_t maxVertex; uint32_t maxVertex;
VkIndexType indexType; VkIndexType indexType;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) indexData; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) indexData;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) transformData; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) transformData;
} VkAccelerationStructureGeometryTrianglesDataKHR32; } VkAccelerationStructureGeometryTrianglesDataKHR32;
typedef struct VkAccelerationStructureGeometryAabbsDataKHR32 typedef struct VkAccelerationStructureGeometryAabbsDataKHR32
{ {
VkStructureType sType; VkStructureType sType;
PTR32 pNext; PTR32 pNext;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) data; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) data;
VkDeviceSize DECLSPEC_ALIGN(8) stride; VkDeviceSize DECLSPEC_ALIGN(8) stride;
} VkAccelerationStructureGeometryAabbsDataKHR32; } VkAccelerationStructureGeometryAabbsDataKHR32;
@ -361,7 +355,7 @@ typedef struct VkAccelerationStructureGeometryInstancesDataKHR32
VkStructureType sType; VkStructureType sType;
PTR32 pNext; PTR32 pNext;
VkBool32 arrayOfPointers; VkBool32 arrayOfPointers;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) data; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) data;
} VkAccelerationStructureGeometryInstancesDataKHR32; } VkAccelerationStructureGeometryInstancesDataKHR32;
typedef union VkAccelerationStructureGeometryDataKHR32 typedef union VkAccelerationStructureGeometryDataKHR32
@ -380,12 +374,6 @@ typedef struct VkAccelerationStructureGeometryKHR32
VkGeometryFlagsKHR flags; VkGeometryFlagsKHR flags;
} VkAccelerationStructureGeometryKHR32; } VkAccelerationStructureGeometryKHR32;
typedef union VkDeviceOrHostAddressKHR32
{
VkDeviceAddress DECLSPEC_ALIGN(8) deviceAddress;
PTR32 hostAddress;
} VkDeviceOrHostAddressKHR32;
typedef struct VkAccelerationStructureBuildGeometryInfoKHR32 typedef struct VkAccelerationStructureBuildGeometryInfoKHR32
{ {
VkStructureType sType; VkStructureType sType;
@ -398,7 +386,7 @@ typedef struct VkAccelerationStructureBuildGeometryInfoKHR32
uint32_t geometryCount; uint32_t geometryCount;
PTR32 pGeometries; PTR32 pGeometries;
PTR32 ppGeometries; PTR32 ppGeometries;
VkDeviceOrHostAddressKHR32 DECLSPEC_ALIGN(8) scratchData; VkDeviceOrHostAddressKHR DECLSPEC_ALIGN(8) scratchData;
} VkAccelerationStructureBuildGeometryInfoKHR32; } VkAccelerationStructureBuildGeometryInfoKHR32;
typedef struct VkMicromapBuildInfoEXT32 typedef struct VkMicromapBuildInfoEXT32
@ -412,9 +400,9 @@ typedef struct VkMicromapBuildInfoEXT32
uint32_t usageCountsCount; uint32_t usageCountsCount;
PTR32 pUsageCounts; PTR32 pUsageCounts;
PTR32 ppUsageCounts; PTR32 ppUsageCounts;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) data; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) data;
VkDeviceOrHostAddressKHR32 DECLSPEC_ALIGN(8) scratchData; VkDeviceOrHostAddressKHR DECLSPEC_ALIGN(8) scratchData;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) triangleArray; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) triangleArray;
VkDeviceSize DECLSPEC_ALIGN(8) triangleArrayStride; VkDeviceSize DECLSPEC_ALIGN(8) triangleArrayStride;
} VkMicromapBuildInfoEXT32; } VkMicromapBuildInfoEXT32;
@ -681,7 +669,7 @@ typedef struct VkCopyAccelerationStructureToMemoryInfoKHR32
VkStructureType sType; VkStructureType sType;
PTR32 pNext; PTR32 pNext;
VkAccelerationStructureKHR DECLSPEC_ALIGN(8) src; VkAccelerationStructureKHR DECLSPEC_ALIGN(8) src;
VkDeviceOrHostAddressKHR32 DECLSPEC_ALIGN(8) dst; VkDeviceOrHostAddressKHR DECLSPEC_ALIGN(8) dst;
VkCopyAccelerationStructureModeKHR mode; VkCopyAccelerationStructureModeKHR mode;
} VkCopyAccelerationStructureToMemoryInfoKHR32; } VkCopyAccelerationStructureToMemoryInfoKHR32;
@ -789,7 +777,7 @@ typedef struct VkCopyMemoryToAccelerationStructureInfoKHR32
{ {
VkStructureType sType; VkStructureType sType;
PTR32 pNext; PTR32 pNext;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) src; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) src;
VkAccelerationStructureKHR DECLSPEC_ALIGN(8) dst; VkAccelerationStructureKHR DECLSPEC_ALIGN(8) dst;
VkCopyAccelerationStructureModeKHR mode; VkCopyAccelerationStructureModeKHR mode;
} VkCopyMemoryToAccelerationStructureInfoKHR32; } VkCopyMemoryToAccelerationStructureInfoKHR32;
@ -798,7 +786,7 @@ typedef struct VkCopyMemoryToMicromapInfoEXT32
{ {
VkStructureType sType; VkStructureType sType;
PTR32 pNext; PTR32 pNext;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) src; VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) src;
VkMicromapEXT DECLSPEC_ALIGN(8) dst; VkMicromapEXT DECLSPEC_ALIGN(8) dst;
VkCopyMicromapModeEXT mode; VkCopyMicromapModeEXT mode;
} VkCopyMemoryToMicromapInfoEXT32; } VkCopyMemoryToMicromapInfoEXT32;
@ -817,7 +805,7 @@ typedef struct VkCopyMicromapToMemoryInfoEXT32
VkStructureType sType; VkStructureType sType;
PTR32 pNext; PTR32 pNext;
VkMicromapEXT DECLSPEC_ALIGN(8) src; VkMicromapEXT DECLSPEC_ALIGN(8) src;
VkDeviceOrHostAddressKHR32 DECLSPEC_ALIGN(8) dst; VkDeviceOrHostAddressKHR DECLSPEC_ALIGN(8) dst;
VkCopyMicromapModeEXT mode; VkCopyMicromapModeEXT mode;
} VkCopyMicromapToMemoryInfoEXT32; } VkCopyMicromapToMemoryInfoEXT32;
@ -6597,14 +6585,6 @@ static inline const VkBindImageMemoryInfo *convert_VkBindImageMemoryInfo_array_w
return out; return out;
} }
static inline void convert_VkDeviceOrHostAddressConstKHR_win32_to_host(const VkDeviceOrHostAddressConstKHR32 *in, VkDeviceOrHostAddressConstKHR *out)
{
if (!in) return;
out->deviceAddress = in->deviceAddress;
out->hostAddress = (const void *)UlongToPtr(in->hostAddress);
}
static inline const VkMicromapUsageEXT * const*convert_VkMicromapUsageEXT_pointer_array_win32_to_host(struct conversion_context *ctx, const PTR32 *in, uint32_t count) static inline const VkMicromapUsageEXT * const*convert_VkMicromapUsageEXT_pointer_array_win32_to_host(struct conversion_context *ctx, const PTR32 *in, uint32_t count)
{ {
VkMicromapUsageEXT **out; VkMicromapUsageEXT **out;
@ -6631,12 +6611,12 @@ static inline void convert_VkAccelerationStructureGeometryTrianglesDataKHR_win32
out->sType = in->sType; out->sType = in->sType;
out->pNext = NULL; out->pNext = NULL;
out->vertexFormat = in->vertexFormat; out->vertexFormat = in->vertexFormat;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->vertexData, &out->vertexData); out->vertexData = in->vertexData;
out->vertexStride = in->vertexStride; out->vertexStride = in->vertexStride;
out->maxVertex = in->maxVertex; out->maxVertex = in->maxVertex;
out->indexType = in->indexType; out->indexType = in->indexType;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->indexData, &out->indexData); out->indexData = in->indexData;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->transformData, &out->transformData); out->transformData = in->transformData;
for (in_header = UlongToPtr(in->pNext); in_header; in_header = UlongToPtr(in_header->pNext)) for (in_header = UlongToPtr(in->pNext); in_header; in_header = UlongToPtr(in_header->pNext))
{ {
@ -6648,7 +6628,7 @@ static inline void convert_VkAccelerationStructureGeometryTrianglesDataKHR_win32
const VkAccelerationStructureGeometryMotionTrianglesDataNV32 *in_ext = (const VkAccelerationStructureGeometryMotionTrianglesDataNV32 *)in_header; const VkAccelerationStructureGeometryMotionTrianglesDataNV32 *in_ext = (const VkAccelerationStructureGeometryMotionTrianglesDataNV32 *)in_header;
out_ext->sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV; out_ext->sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV;
out_ext->pNext = NULL; out_ext->pNext = NULL;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in_ext->vertexData, &out_ext->vertexData); out_ext->vertexData = in_ext->vertexData;
out_header->pNext = (void *)out_ext; out_header->pNext = (void *)out_ext;
out_header = (void *)out_ext; out_header = (void *)out_ext;
break; break;
@ -6660,7 +6640,7 @@ static inline void convert_VkAccelerationStructureGeometryTrianglesDataKHR_win32
out_ext->sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT; out_ext->sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT;
out_ext->pNext = NULL; out_ext->pNext = NULL;
out_ext->indexType = in_ext->indexType; out_ext->indexType = in_ext->indexType;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in_ext->indexBuffer, &out_ext->indexBuffer); out_ext->indexBuffer = in_ext->indexBuffer;
out_ext->indexStride = in_ext->indexStride; out_ext->indexStride = in_ext->indexStride;
out_ext->baseTriangle = in_ext->baseTriangle; out_ext->baseTriangle = in_ext->baseTriangle;
out_ext->usageCountsCount = in_ext->usageCountsCount; out_ext->usageCountsCount = in_ext->usageCountsCount;
@ -6684,7 +6664,7 @@ static inline void convert_VkAccelerationStructureGeometryAabbsDataKHR_win32_to_
out->sType = in->sType; out->sType = in->sType;
out->pNext = NULL; out->pNext = NULL;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->data, &out->data); out->data = in->data;
out->stride = in->stride; out->stride = in->stride;
if (in->pNext) if (in->pNext)
FIXME("Unexpected pNext\n"); FIXME("Unexpected pNext\n");
@ -6697,7 +6677,7 @@ static inline void convert_VkAccelerationStructureGeometryInstancesDataKHR_win32
out->sType = in->sType; out->sType = in->sType;
out->pNext = NULL; out->pNext = NULL;
out->arrayOfPointers = in->arrayOfPointers; out->arrayOfPointers = in->arrayOfPointers;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->data, &out->data); out->data = in->data;
if (in->pNext) if (in->pNext)
FIXME("Unexpected pNext\n"); FIXME("Unexpected pNext\n");
} }
@ -6765,14 +6745,6 @@ static inline const VkAccelerationStructureGeometryKHR * const*convert_VkAcceler
return (void *)out; return (void *)out;
} }
static inline void convert_VkDeviceOrHostAddressKHR_win32_to_host(const VkDeviceOrHostAddressKHR32 *in, VkDeviceOrHostAddressKHR *out)
{
if (!in) return;
out->deviceAddress = in->deviceAddress;
out->hostAddress = (void *)UlongToPtr(in->hostAddress);
}
static inline void convert_VkAccelerationStructureBuildGeometryInfoKHR_win32_to_host(struct conversion_context *ctx, const VkAccelerationStructureBuildGeometryInfoKHR32 *in, VkAccelerationStructureBuildGeometryInfoKHR *out) static inline void convert_VkAccelerationStructureBuildGeometryInfoKHR_win32_to_host(struct conversion_context *ctx, const VkAccelerationStructureBuildGeometryInfoKHR32 *in, VkAccelerationStructureBuildGeometryInfoKHR *out)
{ {
if (!in) return; if (!in) return;
@ -6787,7 +6759,7 @@ static inline void convert_VkAccelerationStructureBuildGeometryInfoKHR_win32_to_
out->geometryCount = in->geometryCount; out->geometryCount = in->geometryCount;
out->pGeometries = convert_VkAccelerationStructureGeometryKHR_array_win32_to_host(ctx, (const VkAccelerationStructureGeometryKHR32 *)UlongToPtr(in->pGeometries), in->geometryCount); out->pGeometries = convert_VkAccelerationStructureGeometryKHR_array_win32_to_host(ctx, (const VkAccelerationStructureGeometryKHR32 *)UlongToPtr(in->pGeometries), in->geometryCount);
out->ppGeometries = convert_VkAccelerationStructureGeometryKHR_pointer_array_win32_to_host(ctx, (const PTR32 *)UlongToPtr(in->ppGeometries), in->geometryCount); out->ppGeometries = convert_VkAccelerationStructureGeometryKHR_pointer_array_win32_to_host(ctx, (const PTR32 *)UlongToPtr(in->ppGeometries), in->geometryCount);
convert_VkDeviceOrHostAddressKHR_win32_to_host(&in->scratchData, &out->scratchData); out->scratchData = in->scratchData;
if (in->pNext) if (in->pNext)
FIXME("Unexpected pNext\n"); FIXME("Unexpected pNext\n");
} }
@ -6821,9 +6793,9 @@ static inline void convert_VkMicromapBuildInfoEXT_win32_to_host(struct conversio
out->usageCountsCount = in->usageCountsCount; out->usageCountsCount = in->usageCountsCount;
out->pUsageCounts = (const VkMicromapUsageEXT *)UlongToPtr(in->pUsageCounts); out->pUsageCounts = (const VkMicromapUsageEXT *)UlongToPtr(in->pUsageCounts);
out->ppUsageCounts = convert_VkMicromapUsageEXT_pointer_array_win32_to_host(ctx, (const PTR32 *)UlongToPtr(in->ppUsageCounts), in->usageCountsCount); out->ppUsageCounts = convert_VkMicromapUsageEXT_pointer_array_win32_to_host(ctx, (const PTR32 *)UlongToPtr(in->ppUsageCounts), in->usageCountsCount);
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->data, &out->data); out->data = in->data;
convert_VkDeviceOrHostAddressKHR_win32_to_host(&in->scratchData, &out->scratchData); out->scratchData = in->scratchData;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->triangleArray, &out->triangleArray); out->triangleArray = in->triangleArray;
out->triangleArrayStride = in->triangleArrayStride; out->triangleArrayStride = in->triangleArrayStride;
if (in->pNext) if (in->pNext)
FIXME("Unexpected pNext\n"); FIXME("Unexpected pNext\n");
@ -7370,7 +7342,7 @@ static inline void convert_VkCopyAccelerationStructureToMemoryInfoKHR_win32_to_h
out->sType = in->sType; out->sType = in->sType;
out->pNext = NULL; out->pNext = NULL;
out->src = in->src; out->src = in->src;
convert_VkDeviceOrHostAddressKHR_win32_to_host(&in->dst, &out->dst); out->dst = in->dst;
out->mode = in->mode; out->mode = in->mode;
if (in->pNext) if (in->pNext)
FIXME("Unexpected pNext\n"); FIXME("Unexpected pNext\n");
@ -7609,7 +7581,7 @@ static inline void convert_VkCopyMemoryToAccelerationStructureInfoKHR_win32_to_h
out->sType = in->sType; out->sType = in->sType;
out->pNext = NULL; out->pNext = NULL;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->src, &out->src); out->src = in->src;
out->dst = in->dst; out->dst = in->dst;
out->mode = in->mode; out->mode = in->mode;
if (in->pNext) if (in->pNext)
@ -7622,7 +7594,7 @@ static inline void convert_VkCopyMemoryToMicromapInfoEXT_win32_to_host(const VkC
out->sType = in->sType; out->sType = in->sType;
out->pNext = NULL; out->pNext = NULL;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->src, &out->src); out->src = in->src;
out->dst = in->dst; out->dst = in->dst;
out->mode = in->mode; out->mode = in->mode;
if (in->pNext) if (in->pNext)
@ -7649,7 +7621,7 @@ static inline void convert_VkCopyMicromapToMemoryInfoEXT_win32_to_host(const VkC
out->sType = in->sType; out->sType = in->sType;
out->pNext = NULL; out->pNext = NULL;
out->src = in->src; out->src = in->src;
convert_VkDeviceOrHostAddressKHR_win32_to_host(&in->dst, &out->dst); out->dst = in->dst;
out->mode = in->mode; out->mode = in->mode;
if (in->pNext) if (in->pNext)
FIXME("Unexpected pNext\n"); FIXME("Unexpected pNext\n");