winevulkan: Convert unions when nessecary.

This commit is contained in:
Georg Lehmann 2022-11-21 20:40:31 +01:00 committed by Alexandre Julliard
parent 9e5825ce81
commit 3759dbd645
2 changed files with 305 additions and 59 deletions

View file

@ -1105,7 +1105,8 @@ class VkHandle(object):
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, optional=False, returnedonly=False, parent=None):
dyn_array_len=None, object_type=None, optional=False, returnedonly=False, parent=None,
selection=None, selector=None):
self.const = const
self.type_info = type_info
self.type = type
@ -1114,6 +1115,8 @@ class VkVariable(object):
self.object_type = object_type
self.optional = optional
self.returnedonly = returnedonly
self.selection = selection
self.selector = selector
self.pointer = pointer
self.array_len = array_len
@ -1139,7 +1142,7 @@ class VkVariable(object):
"""
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
self.struct = type_info["data"] if type_info["category"] == "struct" or type_info["category"] == "union" else None
def get_dyn_array_len(self, prefix, conv):
if isinstance(self.dyn_array_len, int):
@ -1189,7 +1192,7 @@ class VkVariable(object):
return self.handle is not None
def is_struct(self):
return self.struct is not None
return self.type_info["category"] == "struct"
def is_union(self):
return self.type_info["category"] == "union"
@ -1264,10 +1267,10 @@ class VkVariable(object):
return self.needs_conversion(conv, unwrap, Direction.INPUT, False) \
or self.needs_conversion(conv, unwrap, Direction.OUTPUT, False)
return self.is_struct() and self.struct.needs_alloc(conv, unwrap)
return (self.is_struct() or self.is_union()) and self.struct.needs_alloc(conv, unwrap)
def needs_host_type(self):
return self.is_struct() and self.struct.needs_host_type()
return (self.is_struct() or self.is_union()) 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.
@ -1281,7 +1284,7 @@ class VkVariable(object):
# 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():
if self.is_struct() or self.is_union():
struct = self.struct
is_const = self.is_const() if self.is_pointer() else parent_const
@ -1335,10 +1338,10 @@ class VkVariable(object):
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,
returnedonly=False, parent=None):
returnedonly=False, parent=None, selection=None, selector=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, optional=optional,
returnedonly=returnedonly, parent=parent)
returnedonly=returnedonly, parent=parent, selection=selection, selector=selector)
self.struct_fwd_decl = struct_fwd_decl
self.values = values
self.bit_width = bit_width
@ -1411,10 +1414,13 @@ class VkMember(VkVariable):
LOGGER.debug("Found bit field")
bit_width = int(name_elem.tail[1:])
selection = member.get("selection").split(',') if member.get("selection") else None
selector = member.get("selector", None)
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, bit_width=bit_width, returnedonly=returnedonly,
parent=parent)
parent=parent, selection=selection, selector=selector)
def copy(self, input, output, direction, conv, unwrap):
""" Helper method for use by conversion logic to generate a C-code statement to copy this member.
@ -1457,12 +1463,13 @@ class VkMember(VkVariable):
else:
return "{0}{1} = wine_vk_unwrap_handle({2}{3}, {2}{1});\n".format(output, self.name, input, self.object_type)
else:
selector_part = ", {0}{1}".format(input, self.selector) if self.selector else ""
if direction == Direction.OUTPUT:
return "convert_{0}_host_to_{4}(&{2}{1}, &{3}{1});\n".format(self.type, self.name, input, output, win_type)
return "convert_{0}_host_to_{4}(&{2}{1}, &{3}{1}{5});\n".format(self.type, self.name, input, output, win_type, selector_part)
else:
ctx_param = "ctx, " if self.needs_alloc(conv, unwrap) else ""
host_part = "host" if unwrap else "unwrapped_host"
return "convert_{0}_{4}_to_{6}({5}&{2}{1}, &{3}{1});\n".format(self.type, self.name, input, output, win_type, ctx_param, host_part)
return "convert_{0}_{4}_to_{6}({5}&{2}{1}, &{3}{1}{7});\n".format(self.type, self.name, input, output, win_type, ctx_param, host_part, selector_part)
elif self.is_static_array():
bytes_count = "{0} * sizeof({1})".format(self.array_len, self.type)
return "memcpy({0}{1}, {2}{1}, {3});\n".format(output, self.name, input, bytes_count)
@ -1548,7 +1555,7 @@ class VkMember(VkVariable):
elif self.is_generic_handle():
if unwrap:
return True
elif self.is_struct():
elif self.is_struct() or self.is_union():
if self.struct.needs_conversion(conv, unwrap, direction, is_const):
return True
@ -1895,7 +1902,8 @@ class VkStruct(Sequence):
# Those structs don't have returnedonly in spec, but they could (should?).
if name in ["VkSurfaceCapabilitiesPresentBarrierNV",
"VkCooperativeMatrixPropertiesNV"]:
"VkCooperativeMatrixPropertiesNV",
"VkPerformanceValueINTEL"]:
returnedonly = True
structextends = struct.attrib.get("structextends")
@ -2135,7 +2143,7 @@ class VkStruct(Sequence):
return True
if m.needs_alignment():
return True
if m.is_struct() and m.struct.needs_host_type():
if (m.is_struct() or m.is_union()) and m.struct.needs_host_type():
return True
def set_type_info(self, types):
@ -2230,6 +2238,9 @@ class StructConversionFunction(object):
else:
params = ["const {0} *in".format(win_type), "{0} *out".format(self.type)]
if self.operand[0].selection:
params.append("VkFlags selector")
# Generate parameter list
if needs_alloc:
body += "struct conversion_context *ctx, "
@ -2273,6 +2284,11 @@ class StructConversionFunction(object):
body += " out->pNext = NULL;\n"
continue
if m.selection:
body += " if ("
body += " || ".join("selector == {}".format(s) for s in m.selection)
body += ")\n "
body += " " + m.copy("in->", "out->", self.direction, self.conv, self.unwrap)
if needs_extensions:

View file

@ -308,15 +308,84 @@ typedef struct VkBindImageMemoryInfo32
} VkBindImageMemoryInfo32;
typedef VkBindImageMemoryInfo32 VkBindImageMemoryInfoKHR32;
typedef union VkDeviceOrHostAddressConstKHR32
{
VkDeviceAddress DECLSPEC_ALIGN(8) deviceAddress;
PTR32 hostAddress;
} VkDeviceOrHostAddressConstKHR32;
typedef struct VkAccelerationStructureGeometryMotionTrianglesDataNV32
{
VkStructureType sType;
PTR32 pNext;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) vertexData;
} VkAccelerationStructureGeometryMotionTrianglesDataNV32;
typedef struct VkAccelerationStructureTrianglesOpacityMicromapEXT32
{
VkStructureType sType;
PTR32 pNext;
VkIndexType indexType;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) indexBuffer;
VkDeviceSize DECLSPEC_ALIGN(8) indexStride;
uint32_t baseTriangle;
uint32_t usageCountsCount;
PTR32 pUsageCounts;
PTR32 ppUsageCounts;
VkMicromapEXT DECLSPEC_ALIGN(8) micromap;
} VkAccelerationStructureTrianglesOpacityMicromapEXT32;
typedef struct VkAccelerationStructureGeometryTrianglesDataKHR32
{
VkStructureType sType;
PTR32 pNext;
VkFormat vertexFormat;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) vertexData;
VkDeviceSize DECLSPEC_ALIGN(8) vertexStride;
uint32_t maxVertex;
VkIndexType indexType;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) indexData;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) transformData;
} VkAccelerationStructureGeometryTrianglesDataKHR32;
typedef struct VkAccelerationStructureGeometryAabbsDataKHR32
{
VkStructureType sType;
PTR32 pNext;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) data;
VkDeviceSize DECLSPEC_ALIGN(8) stride;
} VkAccelerationStructureGeometryAabbsDataKHR32;
typedef struct VkAccelerationStructureGeometryInstancesDataKHR32
{
VkStructureType sType;
PTR32 pNext;
VkBool32 arrayOfPointers;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) data;
} VkAccelerationStructureGeometryInstancesDataKHR32;
typedef union VkAccelerationStructureGeometryDataKHR32
{
VkAccelerationStructureGeometryTrianglesDataKHR32 DECLSPEC_ALIGN(8) triangles;
VkAccelerationStructureGeometryAabbsDataKHR32 DECLSPEC_ALIGN(8) aabbs;
VkAccelerationStructureGeometryInstancesDataKHR32 DECLSPEC_ALIGN(8) instances;
} VkAccelerationStructureGeometryDataKHR32;
typedef struct VkAccelerationStructureGeometryKHR32
{
VkStructureType sType;
PTR32 pNext;
VkGeometryTypeKHR geometryType;
VkAccelerationStructureGeometryDataKHR DECLSPEC_ALIGN(8) geometry;
VkAccelerationStructureGeometryDataKHR32 DECLSPEC_ALIGN(8) geometry;
VkGeometryFlagsKHR flags;
} VkAccelerationStructureGeometryKHR32;
typedef union VkDeviceOrHostAddressKHR32
{
VkDeviceAddress DECLSPEC_ALIGN(8) deviceAddress;
PTR32 hostAddress;
} VkDeviceOrHostAddressKHR32;
typedef struct VkAccelerationStructureBuildGeometryInfoKHR32
{
VkStructureType sType;
@ -329,7 +398,7 @@ typedef struct VkAccelerationStructureBuildGeometryInfoKHR32
uint32_t geometryCount;
PTR32 pGeometries;
PTR32 ppGeometries;
VkDeviceOrHostAddressKHR DECLSPEC_ALIGN(8) scratchData;
VkDeviceOrHostAddressKHR32 DECLSPEC_ALIGN(8) scratchData;
} VkAccelerationStructureBuildGeometryInfoKHR32;
typedef struct VkMicromapBuildInfoEXT32
@ -343,9 +412,9 @@ typedef struct VkMicromapBuildInfoEXT32
uint32_t usageCountsCount;
PTR32 pUsageCounts;
PTR32 ppUsageCounts;
VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) data;
VkDeviceOrHostAddressKHR DECLSPEC_ALIGN(8) scratchData;
VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) triangleArray;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) data;
VkDeviceOrHostAddressKHR32 DECLSPEC_ALIGN(8) scratchData;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) triangleArray;
VkDeviceSize DECLSPEC_ALIGN(8) triangleArrayStride;
} VkMicromapBuildInfoEXT32;
@ -597,7 +666,7 @@ typedef struct VkCopyAccelerationStructureToMemoryInfoKHR32
VkStructureType sType;
PTR32 pNext;
VkAccelerationStructureKHR DECLSPEC_ALIGN(8) src;
VkDeviceOrHostAddressKHR DECLSPEC_ALIGN(8) dst;
VkDeviceOrHostAddressKHR32 DECLSPEC_ALIGN(8) dst;
VkCopyAccelerationStructureModeKHR mode;
} VkCopyAccelerationStructureToMemoryInfoKHR32;
@ -705,7 +774,7 @@ typedef struct VkCopyMemoryToAccelerationStructureInfoKHR32
{
VkStructureType sType;
PTR32 pNext;
VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) src;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) src;
VkAccelerationStructureKHR DECLSPEC_ALIGN(8) dst;
VkCopyAccelerationStructureModeKHR mode;
} VkCopyMemoryToAccelerationStructureInfoKHR32;
@ -714,7 +783,7 @@ typedef struct VkCopyMemoryToMicromapInfoEXT32
{
VkStructureType sType;
PTR32 pNext;
VkDeviceOrHostAddressConstKHR DECLSPEC_ALIGN(8) src;
VkDeviceOrHostAddressConstKHR32 DECLSPEC_ALIGN(8) src;
VkMicromapEXT DECLSPEC_ALIGN(8) dst;
VkCopyMicromapModeEXT mode;
} VkCopyMemoryToMicromapInfoEXT32;
@ -733,7 +802,7 @@ typedef struct VkCopyMicromapToMemoryInfoEXT32
VkStructureType sType;
PTR32 pNext;
VkMicromapEXT DECLSPEC_ALIGN(8) src;
VkDeviceOrHostAddressKHR DECLSPEC_ALIGN(8) dst;
VkDeviceOrHostAddressKHR32 DECLSPEC_ALIGN(8) dst;
VkCopyMicromapModeEXT mode;
} VkCopyMicromapToMemoryInfoEXT32;
@ -4168,10 +4237,19 @@ typedef struct VkMicromapBuildSizesInfoEXT32
VkBool32 discardable;
} VkMicromapBuildSizesInfoEXT32;
typedef union VkPerformanceValueDataINTEL32
{
uint32_t value32;
uint64_t DECLSPEC_ALIGN(8) value64;
float valueFloat;
VkBool32 valueBool;
PTR32 valueString;
} VkPerformanceValueDataINTEL32;
typedef struct VkPerformanceValueINTEL32
{
VkPerformanceValueTypeINTEL type;
VkPerformanceValueDataINTEL DECLSPEC_ALIGN(8) data;
VkPerformanceValueDataINTEL32 DECLSPEC_ALIGN(8) data;
} VkPerformanceValueINTEL32;
typedef struct VkCooperativeMatrixPropertiesNV32
@ -5486,6 +5564,14 @@ typedef struct VkPipelineExecutablePropertiesKHR32
uint32_t subgroupSize;
} VkPipelineExecutablePropertiesKHR32;
typedef union VkPipelineExecutableStatisticValueKHR32
{
VkBool32 b32;
int64_t i64;
uint64_t DECLSPEC_ALIGN(8) u64;
double f64;
} VkPipelineExecutableStatisticValueKHR32;
typedef struct VkPipelineExecutableStatisticKHR32
{
VkStructureType sType;
@ -5493,7 +5579,7 @@ typedef struct VkPipelineExecutableStatisticKHR32
char name[VK_MAX_DESCRIPTION_SIZE];
char description[VK_MAX_DESCRIPTION_SIZE];
VkPipelineExecutableStatisticFormatKHR format;
VkPipelineExecutableStatisticValueKHR DECLSPEC_ALIGN(8) value;
VkPipelineExecutableStatisticValueKHR32 DECLSPEC_ALIGN(8) value;
} VkPipelineExecutableStatisticKHR32;
@ -6366,14 +6452,131 @@ static inline const VkBindImageMemoryInfo *convert_VkBindImageMemoryInfo_array_w
return out;
}
static inline void convert_VkAccelerationStructureGeometryKHR_win32_to_host(const VkAccelerationStructureGeometryKHR32 *in, VkAccelerationStructureGeometryKHR *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)
{
VkMicromapUsageEXT **out;
unsigned int i;
if (!in || !count) return NULL;
out = conversion_context_alloc(ctx, count * sizeof(*out));
for (i = 0; i < count; i++)
{
out[i] = UlongToPtr(in[i]);
}
return (void *)out;
}
static inline void convert_VkAccelerationStructureGeometryTrianglesDataKHR_win32_to_host(struct conversion_context *ctx, const VkAccelerationStructureGeometryTrianglesDataKHR32 *in, VkAccelerationStructureGeometryTrianglesDataKHR *out)
{
const VkBaseInStructure32 *in_header;
VkBaseOutStructure *out_header = (void *)out;
if (!in) return;
out->sType = in->sType;
out->pNext = NULL;
out->vertexFormat = in->vertexFormat;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->vertexData, &out->vertexData);
out->vertexStride = in->vertexStride;
out->maxVertex = in->maxVertex;
out->indexType = in->indexType;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->indexData, &out->indexData);
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->transformData, &out->transformData);
for (in_header = UlongToPtr(in->pNext); in_header; in_header = UlongToPtr(in_header->pNext))
{
switch (in_header->sType)
{
case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV:
{
VkAccelerationStructureGeometryMotionTrianglesDataNV *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext));
const VkAccelerationStructureGeometryMotionTrianglesDataNV32 *in_ext = (const VkAccelerationStructureGeometryMotionTrianglesDataNV32 *)in_header;
out_ext->sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV;
out_ext->pNext = NULL;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in_ext->vertexData, &out_ext->vertexData);
out_header->pNext = (void *)out_ext;
out_header = (void *)out_ext;
break;
}
case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT:
{
VkAccelerationStructureTrianglesOpacityMicromapEXT *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext));
const VkAccelerationStructureTrianglesOpacityMicromapEXT32 *in_ext = (const VkAccelerationStructureTrianglesOpacityMicromapEXT32 *)in_header;
out_ext->sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT;
out_ext->pNext = NULL;
out_ext->indexType = in_ext->indexType;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in_ext->indexBuffer, &out_ext->indexBuffer);
out_ext->indexStride = in_ext->indexStride;
out_ext->baseTriangle = in_ext->baseTriangle;
out_ext->usageCountsCount = in_ext->usageCountsCount;
out_ext->pUsageCounts = (const VkMicromapUsageEXT *)UlongToPtr(in_ext->pUsageCounts);
out_ext->ppUsageCounts = convert_VkMicromapUsageEXT_pointer_array_win32_to_host(ctx, (const PTR32 *)UlongToPtr(in_ext->ppUsageCounts), in_ext->usageCountsCount);
out_ext->micromap = in_ext->micromap;
out_header->pNext = (void *)out_ext;
out_header = (void *)out_ext;
break;
}
default:
FIXME("Unhandled sType %u.", in_header->sType);
break;
}
}
}
static inline void convert_VkAccelerationStructureGeometryAabbsDataKHR_win32_to_host(const VkAccelerationStructureGeometryAabbsDataKHR32 *in, VkAccelerationStructureGeometryAabbsDataKHR *out)
{
if (!in) return;
out->sType = in->sType;
out->pNext = NULL;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->data, &out->data);
out->stride = in->stride;
if (in->pNext)
FIXME("Unexpected pNext\n");
}
static inline void convert_VkAccelerationStructureGeometryInstancesDataKHR_win32_to_host(const VkAccelerationStructureGeometryInstancesDataKHR32 *in, VkAccelerationStructureGeometryInstancesDataKHR *out)
{
if (!in) return;
out->sType = in->sType;
out->pNext = NULL;
out->arrayOfPointers = in->arrayOfPointers;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->data, &out->data);
if (in->pNext)
FIXME("Unexpected pNext\n");
}
static inline void convert_VkAccelerationStructureGeometryDataKHR_win32_to_host(struct conversion_context *ctx, const VkAccelerationStructureGeometryDataKHR32 *in, VkAccelerationStructureGeometryDataKHR *out, VkFlags selector)
{
if (!in) return;
if (selector == VK_GEOMETRY_TYPE_TRIANGLES_KHR)
convert_VkAccelerationStructureGeometryTrianglesDataKHR_win32_to_host(ctx, &in->triangles, &out->triangles);
if (selector == VK_GEOMETRY_TYPE_AABBS_KHR)
convert_VkAccelerationStructureGeometryAabbsDataKHR_win32_to_host(&in->aabbs, &out->aabbs);
if (selector == VK_GEOMETRY_TYPE_INSTANCES_KHR)
convert_VkAccelerationStructureGeometryInstancesDataKHR_win32_to_host(&in->instances, &out->instances);
}
static inline void convert_VkAccelerationStructureGeometryKHR_win32_to_host(struct conversion_context *ctx, const VkAccelerationStructureGeometryKHR32 *in, VkAccelerationStructureGeometryKHR *out)
{
if (!in) return;
out->sType = in->sType;
out->pNext = NULL;
out->geometryType = in->geometryType;
out->geometry = in->geometry;
convert_VkAccelerationStructureGeometryDataKHR_win32_to_host(ctx, &in->geometry, &out->geometry, in->geometryType);
out->flags = in->flags;
if (in->pNext)
FIXME("Unexpected pNext\n");
@ -6389,7 +6592,7 @@ static inline const VkAccelerationStructureGeometryKHR *convert_VkAccelerationSt
out = conversion_context_alloc(ctx, count * sizeof(*out));
for (i = 0; i < count; i++)
{
convert_VkAccelerationStructureGeometryKHR_win32_to_host(&in[i], &out[i]);
convert_VkAccelerationStructureGeometryKHR_win32_to_host(ctx, &in[i], &out[i]);
}
return out;
@ -6408,7 +6611,7 @@ static inline const VkAccelerationStructureGeometryKHR * const*convert_VkAcceler
if (in[i])
{
out[i] = conversion_context_alloc(ctx, sizeof(*out[i]));
convert_VkAccelerationStructureGeometryKHR_win32_to_host((VkAccelerationStructureGeometryKHR32 *)UlongToPtr(in[i]), out[i]);
convert_VkAccelerationStructureGeometryKHR_win32_to_host(ctx, (VkAccelerationStructureGeometryKHR32 *)UlongToPtr(in[i]), out[i]);
}
else
out[i] = NULL;
@ -6417,6 +6620,14 @@ static inline const VkAccelerationStructureGeometryKHR * const*convert_VkAcceler
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)
{
if (!in) return;
@ -6431,7 +6642,7 @@ static inline void convert_VkAccelerationStructureBuildGeometryInfoKHR_win32_to_
out->geometryCount = 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->scratchData = in->scratchData;
convert_VkDeviceOrHostAddressKHR_win32_to_host(&in->scratchData, &out->scratchData);
if (in->pNext)
FIXME("Unexpected pNext\n");
}
@ -6452,22 +6663,6 @@ static inline const VkAccelerationStructureBuildGeometryInfoKHR *convert_VkAccel
return out;
}
static inline const VkMicromapUsageEXT * const*convert_VkMicromapUsageEXT_pointer_array_win32_to_host(struct conversion_context *ctx, const PTR32 *in, uint32_t count)
{
VkMicromapUsageEXT **out;
unsigned int i;
if (!in || !count) return NULL;
out = conversion_context_alloc(ctx, count * sizeof(*out));
for (i = 0; i < count; i++)
{
out[i] = UlongToPtr(in[i]);
}
return (void *)out;
}
static inline void convert_VkMicromapBuildInfoEXT_win32_to_host(struct conversion_context *ctx, const VkMicromapBuildInfoEXT32 *in, VkMicromapBuildInfoEXT *out)
{
if (!in) return;
@ -6481,9 +6676,9 @@ static inline void convert_VkMicromapBuildInfoEXT_win32_to_host(struct conversio
out->usageCountsCount = in->usageCountsCount;
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->data = in->data;
out->scratchData = in->scratchData;
out->triangleArray = in->triangleArray;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->data, &out->data);
convert_VkDeviceOrHostAddressKHR_win32_to_host(&in->scratchData, &out->scratchData);
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->triangleArray, &out->triangleArray);
out->triangleArrayStride = in->triangleArrayStride;
if (in->pNext)
FIXME("Unexpected pNext\n");
@ -6980,7 +7175,7 @@ static inline void convert_VkCopyAccelerationStructureToMemoryInfoKHR_win32_to_h
out->sType = in->sType;
out->pNext = NULL;
out->src = in->src;
out->dst = in->dst;
convert_VkDeviceOrHostAddressKHR_win32_to_host(&in->dst, &out->dst);
out->mode = in->mode;
if (in->pNext)
FIXME("Unexpected pNext\n");
@ -7219,7 +7414,7 @@ static inline void convert_VkCopyMemoryToAccelerationStructureInfoKHR_win32_to_h
out->sType = in->sType;
out->pNext = NULL;
out->src = in->src;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->src, &out->src);
out->dst = in->dst;
out->mode = in->mode;
if (in->pNext)
@ -7232,7 +7427,7 @@ static inline void convert_VkCopyMemoryToMicromapInfoEXT_win32_to_host(const VkC
out->sType = in->sType;
out->pNext = NULL;
out->src = in->src;
convert_VkDeviceOrHostAddressConstKHR_win32_to_host(&in->src, &out->src);
out->dst = in->dst;
out->mode = in->mode;
if (in->pNext)
@ -7259,7 +7454,7 @@ static inline void convert_VkCopyMicromapToMemoryInfoEXT_win32_to_host(const VkC
out->sType = in->sType;
out->pNext = NULL;
out->src = in->src;
out->dst = in->dst;
convert_VkDeviceOrHostAddressKHR_win32_to_host(&in->dst, &out->dst);
out->mode = in->mode;
if (in->pNext)
FIXME("Unexpected pNext\n");
@ -16788,12 +16983,34 @@ static inline void convert_VkMicromapBuildSizesInfoEXT_host_to_win32(const VkMic
out->discardable = in->discardable;
}
static inline void convert_VkPerformanceValueINTEL_win32_to_host(const VkPerformanceValueINTEL32 *in, VkPerformanceValueINTEL *out)
static inline void convert_VkPerformanceValueDataINTEL_win32_to_host(const VkPerformanceValueDataINTEL32 *in, VkPerformanceValueDataINTEL *out, VkFlags selector)
{
if (!in) return;
out->type = in->type;
out->data = in->data;
if (selector == VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL)
out->value32 = in->value32;
if (selector == VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL)
out->value64 = in->value64;
if (selector == VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL)
out->valueFloat = in->valueFloat;
if (selector == VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL)
out->valueBool = in->valueBool;
if (selector == VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL)
out->valueString = (const char *)UlongToPtr(in->valueString);
}
static inline void convert_VkPerformanceValueDataINTEL_host_to_win32(const VkPerformanceValueDataINTEL *in, VkPerformanceValueDataINTEL32 *out, VkFlags selector)
{
if (!in) return;
if (selector == VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL)
out->value32 = in->value32;
if (selector == VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL)
out->value64 = in->value64;
if (selector == VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL)
out->valueFloat = in->valueFloat;
if (selector == VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL)
out->valueBool = in->valueBool;
}
static inline void convert_VkPerformanceValueINTEL_host_to_win32(const VkPerformanceValueINTEL *in, VkPerformanceValueINTEL32 *out)
@ -16801,7 +17018,7 @@ static inline void convert_VkPerformanceValueINTEL_host_to_win32(const VkPerform
if (!in) return;
out->type = in->type;
out->data = in->data;
convert_VkPerformanceValueDataINTEL_host_to_win32(&in->data, &out->data, in->type);
}
static inline void convert_VkCooperativeMatrixPropertiesNV_win32_to_host(const VkCooperativeMatrixPropertiesNV32 *in, VkCooperativeMatrixPropertiesNV *out)
@ -22992,6 +23209,20 @@ static inline void convert_VkPipelineExecutablePropertiesKHR_array_host_to_win32
}
}
static inline void convert_VkPipelineExecutableStatisticValueKHR_host_to_win32(const VkPipelineExecutableStatisticValueKHR *in, VkPipelineExecutableStatisticValueKHR32 *out, VkFlags selector)
{
if (!in) return;
if (selector == VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR)
out->b32 = in->b32;
if (selector == VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR)
out->i64 = in->i64;
if (selector == VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR)
out->u64 = in->u64;
if (selector == VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR)
out->f64 = in->f64;
}
static inline void convert_VkPipelineExecutableStatisticKHR_win32_to_host(const VkPipelineExecutableStatisticKHR32 *in, VkPipelineExecutableStatisticKHR *out)
{
if (!in) return;
@ -23009,7 +23240,7 @@ static inline void convert_VkPipelineExecutableStatisticKHR_host_to_win32(const
memcpy(out->name, in->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
memcpy(out->description, in->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
out->format = in->format;
out->value = in->value;
convert_VkPipelineExecutableStatisticValueKHR_host_to_win32(&in->value, &out->value, in->format);
}
static inline VkPipelineExecutableStatisticKHR *convert_VkPipelineExecutableStatisticKHR_array_win32_to_host(struct conversion_context *ctx, const VkPipelineExecutableStatisticKHR32 *in, uint32_t count)
@ -36057,7 +36288,6 @@ static NTSTATUS thunk32_vkGetPerformanceParameterINTEL(void *args)
TRACE("%#x, %#x, %#x\n", params->device, params->parameter, params->pValue);
convert_VkPerformanceValueINTEL_win32_to_host((VkPerformanceValueINTEL32 *)UlongToPtr(params->pValue), &pValue_host);
params->result = wine_device_from_handle((VkDevice)UlongToPtr(params->device))->funcs.p_vkGetPerformanceParameterINTEL(wine_device_from_handle((VkDevice)UlongToPtr(params->device))->device, params->parameter, &pValue_host);
convert_VkPerformanceValueINTEL_host_to_win32(&pValue_host, (VkPerformanceValueINTEL32 *)UlongToPtr(params->pValue));
return STATUS_SUCCESS;