mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-02 02:53:38 +00:00
winevulkan: Fix handling unions in needs_alignment().
This commit is contained in:
parent
19a23b7838
commit
8463c4f123
|
@ -1145,6 +1145,9 @@ class VkVariable(object):
|
|||
def is_struct(self):
|
||||
return self.struct is not None
|
||||
|
||||
def is_union(self):
|
||||
return self.type_info["category"] == "union"
|
||||
|
||||
def is_dynamic_array(self):
|
||||
""" Returns if the member is an array element.
|
||||
Vulkan uses this for dynamically sized arrays for which
|
||||
|
@ -1177,8 +1180,8 @@ class VkVariable(object):
|
|||
return False
|
||||
elif self.type in ["uint64_t", "VkDeviceAddress", "VkDeviceSize"]:
|
||||
return True
|
||||
elif self.is_struct():
|
||||
return self.struct.needs_alignment()
|
||||
elif self.is_struct() or self.is_union():
|
||||
return self.type_info["data"].needs_alignment()
|
||||
elif self.is_handle():
|
||||
# Dispatchable handles are pointers to objects, while
|
||||
# non-dispatchable are uint64_t and hence need alignment.
|
||||
|
@ -1399,9 +1402,6 @@ class VkMember(VkVariable):
|
|||
def is_struct_forward_declaration(self):
|
||||
return self.struct_fwd_decl
|
||||
|
||||
def is_union(self):
|
||||
return self.type_info["category"] == "union"
|
||||
|
||||
def is_bit_field(self):
|
||||
return self.bit_width is not None
|
||||
|
||||
|
@ -2009,6 +2009,10 @@ class VkStruct(Sequence):
|
|||
return False
|
||||
|
||||
def needs_host_type(self):
|
||||
# FIXME: needs pointer array support
|
||||
if self.name == "VkAccelerationStructureGeometryKHR":
|
||||
return False
|
||||
|
||||
for m in self.members:
|
||||
if self.name == m.type:
|
||||
continue
|
||||
|
|
|
@ -7949,6 +7949,26 @@ static inline void convert_VkMicromapBuildSizesInfoEXT_host_to_win32(const VkMic
|
|||
}
|
||||
#endif /* USE_STRUCT_CONVERSION */
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
static inline void convert_VkPerformanceValueINTEL_win32_to_host(const VkPerformanceValueINTEL *in, VkPerformanceValueINTEL_host *out)
|
||||
{
|
||||
if (!in) return;
|
||||
|
||||
out->type = in->type;
|
||||
out->data = in->data;
|
||||
}
|
||||
#endif /* USE_STRUCT_CONVERSION */
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
static inline void convert_VkPerformanceValueINTEL_host_to_win32(const VkPerformanceValueINTEL_host *in, VkPerformanceValueINTEL *out)
|
||||
{
|
||||
if (!in) return;
|
||||
|
||||
out->type = in->type;
|
||||
out->data = in->data;
|
||||
}
|
||||
#endif /* USE_STRUCT_CONVERSION */
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
static inline void convert_VkPhysicalDeviceExternalSemaphoreInfo_win32_to_host(struct conversion_context *ctx, const VkPhysicalDeviceExternalSemaphoreInfo *in, VkPhysicalDeviceExternalSemaphoreInfo *out)
|
||||
{
|
||||
|
@ -9866,6 +9886,60 @@ static inline void convert_VkPipelineInfoKHR_win32_to_host(const VkPipelineInfoK
|
|||
}
|
||||
#endif /* USE_STRUCT_CONVERSION */
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
static inline void convert_VkPipelineExecutableStatisticKHR_win32_to_host(const VkPipelineExecutableStatisticKHR *in, VkPipelineExecutableStatisticKHR_host *out)
|
||||
{
|
||||
if (!in) return;
|
||||
|
||||
out->sType = in->sType;
|
||||
out->pNext = in->pNext;
|
||||
}
|
||||
#endif /* USE_STRUCT_CONVERSION */
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
static inline void convert_VkPipelineExecutableStatisticKHR_host_to_win32(const VkPipelineExecutableStatisticKHR_host *in, VkPipelineExecutableStatisticKHR *out)
|
||||
{
|
||||
if (!in) return;
|
||||
|
||||
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;
|
||||
}
|
||||
#endif /* USE_STRUCT_CONVERSION */
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
static inline VkPipelineExecutableStatisticKHR_host *convert_VkPipelineExecutableStatisticKHR_array_win32_to_host(struct conversion_context *ctx, const VkPipelineExecutableStatisticKHR *in, uint32_t count)
|
||||
{
|
||||
VkPipelineExecutableStatisticKHR_host *out;
|
||||
unsigned int i;
|
||||
|
||||
if (!in || !count) return NULL;
|
||||
|
||||
out = conversion_context_alloc(ctx, count * sizeof(*out));
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
convert_VkPipelineExecutableStatisticKHR_win32_to_host(&in[i], &out[i]);
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
#endif /* USE_STRUCT_CONVERSION */
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
static inline void convert_VkPipelineExecutableStatisticKHR_array_host_to_win32(const VkPipelineExecutableStatisticKHR_host *in, VkPipelineExecutableStatisticKHR *out, uint32_t count)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (!in) return;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
convert_VkPipelineExecutableStatisticKHR_host_to_win32(&in[i], &out[i]);
|
||||
}
|
||||
}
|
||||
#endif /* USE_STRUCT_CONVERSION */
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
static inline void convert_VkPipelineInfoEXT_win32_to_host(const VkPipelineInfoEXT *in, VkPipelineInfoEXT_host *out)
|
||||
{
|
||||
|
@ -21547,10 +21621,13 @@ static NTSTATUS thunk64_vkGetPerformanceParameterINTEL(void *args)
|
|||
static NTSTATUS thunk32_vkGetPerformanceParameterINTEL(void *args)
|
||||
{
|
||||
struct vkGetPerformanceParameterINTEL_params *params = args;
|
||||
VkPerformanceValueINTEL_host pValue_host;
|
||||
|
||||
TRACE("%p, %#x, %p\n", params->device, params->parameter, params->pValue);
|
||||
|
||||
params->result = wine_device_from_handle(params->device)->funcs.p_vkGetPerformanceParameterINTEL(wine_device_from_handle(params->device)->device, params->parameter, params->pValue);
|
||||
convert_VkPerformanceValueINTEL_win32_to_host(params->pValue, &pValue_host);
|
||||
params->result = wine_device_from_handle(params->device)->funcs.p_vkGetPerformanceParameterINTEL(wine_device_from_handle(params->device)->device, params->parameter, &pValue_host);
|
||||
convert_VkPerformanceValueINTEL_host_to_win32(&pValue_host, params->pValue);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -22852,11 +22929,17 @@ static NTSTATUS thunk32_vkGetPipelineExecutableStatisticsKHR(void *args)
|
|||
{
|
||||
struct vkGetPipelineExecutableStatisticsKHR_params *params = args;
|
||||
VkPipelineExecutableInfoKHR_host pExecutableInfo_host;
|
||||
VkPipelineExecutableStatisticKHR_host *pStatistics_host;
|
||||
struct conversion_context ctx;
|
||||
|
||||
TRACE("%p, %p, %p, %p\n", params->device, params->pExecutableInfo, params->pStatisticCount, params->pStatistics);
|
||||
|
||||
init_conversion_context(&ctx);
|
||||
convert_VkPipelineExecutableInfoKHR_win32_to_host(params->pExecutableInfo, &pExecutableInfo_host);
|
||||
params->result = wine_device_from_handle(params->device)->funcs.p_vkGetPipelineExecutableStatisticsKHR(wine_device_from_handle(params->device)->device, &pExecutableInfo_host, params->pStatisticCount, params->pStatistics);
|
||||
pStatistics_host = convert_VkPipelineExecutableStatisticKHR_array_win32_to_host(&ctx, params->pStatistics, *params->pStatisticCount);
|
||||
params->result = wine_device_from_handle(params->device)->funcs.p_vkGetPipelineExecutableStatisticsKHR(wine_device_from_handle(params->device)->device, &pExecutableInfo_host, params->pStatisticCount, pStatistics_host);
|
||||
convert_VkPipelineExecutableStatisticKHR_array_host_to_win32(pStatistics_host, params->pStatistics, *params->pStatisticCount);
|
||||
free_conversion_context(&ctx);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -1669,6 +1669,16 @@ typedef struct VkMicromapBuildSizesInfoEXT_host
|
|||
typedef VkMicromapBuildSizesInfoEXT VkMicromapBuildSizesInfoEXT_host;
|
||||
#endif
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
typedef struct VkPerformanceValueINTEL_host
|
||||
{
|
||||
VkPerformanceValueTypeINTEL type;
|
||||
VkPerformanceValueDataINTEL data;
|
||||
} VkPerformanceValueINTEL_host;
|
||||
#else
|
||||
typedef VkPerformanceValueINTEL VkPerformanceValueINTEL_host;
|
||||
#endif
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
typedef struct VkImageFormatProperties_host
|
||||
{
|
||||
|
@ -2216,6 +2226,20 @@ typedef VkPipelineInfoKHR VkPipelineInfoEXT;
|
|||
typedef VkPipelineInfoKHR VkPipelineInfoKHR_host;
|
||||
#endif
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
typedef struct VkPipelineExecutableStatisticKHR_host
|
||||
{
|
||||
VkStructureType sType;
|
||||
void *pNext;
|
||||
char name[VK_MAX_DESCRIPTION_SIZE];
|
||||
char description[VK_MAX_DESCRIPTION_SIZE];
|
||||
VkPipelineExecutableStatisticFormatKHR format;
|
||||
VkPipelineExecutableStatisticValueKHR value;
|
||||
} VkPipelineExecutableStatisticKHR_host;
|
||||
#else
|
||||
typedef VkPipelineExecutableStatisticKHR VkPipelineExecutableStatisticKHR_host;
|
||||
#endif
|
||||
|
||||
#if defined(USE_STRUCT_CONVERSION)
|
||||
typedef struct VkPipelineInfoEXT_host
|
||||
{
|
||||
|
@ -2847,11 +2871,11 @@ struct vulkan_device_funcs
|
|||
uint32_t (*p_vkGetImageViewHandleNVX)(VkDevice, const VkImageViewHandleInfoNVX_host *);
|
||||
VkResult (*p_vkGetMemoryHostPointerPropertiesEXT)(VkDevice, VkExternalMemoryHandleTypeFlagBits, const void *, VkMemoryHostPointerPropertiesEXT *);
|
||||
void (*p_vkGetMicromapBuildSizesEXT)(VkDevice, VkAccelerationStructureBuildTypeKHR, const VkMicromapBuildInfoEXT_host *, VkMicromapBuildSizesInfoEXT_host *);
|
||||
VkResult (*p_vkGetPerformanceParameterINTEL)(VkDevice, VkPerformanceParameterTypeINTEL, VkPerformanceValueINTEL *);
|
||||
VkResult (*p_vkGetPerformanceParameterINTEL)(VkDevice, VkPerformanceParameterTypeINTEL, VkPerformanceValueINTEL_host *);
|
||||
VkResult (*p_vkGetPipelineCacheData)(VkDevice, VkPipelineCache, size_t *, void *);
|
||||
VkResult (*p_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice, const VkPipelineExecutableInfoKHR_host *, uint32_t *, VkPipelineExecutableInternalRepresentationKHR *);
|
||||
VkResult (*p_vkGetPipelineExecutablePropertiesKHR)(VkDevice, const VkPipelineInfoKHR_host *, uint32_t *, VkPipelineExecutablePropertiesKHR *);
|
||||
VkResult (*p_vkGetPipelineExecutableStatisticsKHR)(VkDevice, const VkPipelineExecutableInfoKHR_host *, uint32_t *, VkPipelineExecutableStatisticKHR *);
|
||||
VkResult (*p_vkGetPipelineExecutableStatisticsKHR)(VkDevice, const VkPipelineExecutableInfoKHR_host *, uint32_t *, VkPipelineExecutableStatisticKHR_host *);
|
||||
VkResult (*p_vkGetPipelinePropertiesEXT)(VkDevice, const VkPipelineInfoEXT_host *, VkBaseOutStructure *);
|
||||
void (*p_vkGetPrivateData)(VkDevice, VkObjectType, uint64_t, VkPrivateDataSlot, uint64_t *);
|
||||
void (*p_vkGetPrivateDataEXT)(VkDevice, VkObjectType, uint64_t, VkPrivateDataSlot, uint64_t *);
|
||||
|
|
|
@ -6583,7 +6583,7 @@ typedef union VkPerformanceValueDataINTEL
|
|||
typedef struct VkPerformanceValueINTEL
|
||||
{
|
||||
VkPerformanceValueTypeINTEL type;
|
||||
VkPerformanceValueDataINTEL data;
|
||||
VkPerformanceValueDataINTEL WINE_VK_ALIGN(8) data;
|
||||
} VkPerformanceValueINTEL;
|
||||
|
||||
typedef struct VkPhysicalDevice16BitStorageFeatures
|
||||
|
@ -10288,7 +10288,7 @@ typedef struct VkAccelerationStructureGeometryAabbsDataKHR
|
|||
{
|
||||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkDeviceOrHostAddressConstKHR data;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) data;
|
||||
VkDeviceSize WINE_VK_ALIGN(8) stride;
|
||||
} VkAccelerationStructureGeometryAabbsDataKHR;
|
||||
|
||||
|
@ -10297,14 +10297,14 @@ typedef struct VkAccelerationStructureGeometryInstancesDataKHR
|
|||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkBool32 arrayOfPointers;
|
||||
VkDeviceOrHostAddressConstKHR data;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) data;
|
||||
} VkAccelerationStructureGeometryInstancesDataKHR;
|
||||
|
||||
typedef struct VkAccelerationStructureGeometryMotionTrianglesDataNV
|
||||
{
|
||||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkDeviceOrHostAddressConstKHR vertexData;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) vertexData;
|
||||
} VkAccelerationStructureGeometryMotionTrianglesDataNV;
|
||||
|
||||
typedef struct VkAccelerationStructureGeometryTrianglesDataKHR
|
||||
|
@ -10312,12 +10312,12 @@ typedef struct VkAccelerationStructureGeometryTrianglesDataKHR
|
|||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkFormat vertexFormat;
|
||||
VkDeviceOrHostAddressConstKHR vertexData;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) vertexData;
|
||||
VkDeviceSize WINE_VK_ALIGN(8) vertexStride;
|
||||
uint32_t maxVertex;
|
||||
VkIndexType indexType;
|
||||
VkDeviceOrHostAddressConstKHR indexData;
|
||||
VkDeviceOrHostAddressConstKHR transformData;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) indexData;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) transformData;
|
||||
} VkAccelerationStructureGeometryTrianglesDataKHR;
|
||||
|
||||
typedef struct VkAccelerationStructureInstanceKHR
|
||||
|
@ -10358,7 +10358,7 @@ typedef struct VkAccelerationStructureTrianglesOpacityMicromapEXT
|
|||
VkStructureType sType;
|
||||
void *pNext;
|
||||
VkIndexType indexType;
|
||||
VkDeviceOrHostAddressConstKHR indexBuffer;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) indexBuffer;
|
||||
VkDeviceSize WINE_VK_ALIGN(8) indexStride;
|
||||
uint32_t baseTriangle;
|
||||
uint32_t usageCountsCount;
|
||||
|
@ -10451,7 +10451,7 @@ typedef struct VkCopyAccelerationStructureToMemoryInfoKHR
|
|||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkAccelerationStructureKHR WINE_VK_ALIGN(8) src;
|
||||
VkDeviceOrHostAddressKHR dst;
|
||||
VkDeviceOrHostAddressKHR WINE_VK_ALIGN(8) dst;
|
||||
VkCopyAccelerationStructureModeKHR mode;
|
||||
} VkCopyAccelerationStructureToMemoryInfoKHR;
|
||||
|
||||
|
@ -10483,7 +10483,7 @@ typedef struct VkCopyMemoryToAccelerationStructureInfoKHR
|
|||
{
|
||||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkDeviceOrHostAddressConstKHR src;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) src;
|
||||
VkAccelerationStructureKHR WINE_VK_ALIGN(8) dst;
|
||||
VkCopyAccelerationStructureModeKHR mode;
|
||||
} VkCopyMemoryToAccelerationStructureInfoKHR;
|
||||
|
@ -10502,7 +10502,7 @@ typedef struct VkCopyMemoryToMicromapInfoEXT
|
|||
{
|
||||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkDeviceOrHostAddressConstKHR src;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) src;
|
||||
VkMicromapEXT WINE_VK_ALIGN(8) dst;
|
||||
VkCopyMicromapModeEXT mode;
|
||||
} VkCopyMemoryToMicromapInfoEXT;
|
||||
|
@ -10512,7 +10512,7 @@ typedef struct VkCopyMicromapToMemoryInfoEXT
|
|||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkMicromapEXT WINE_VK_ALIGN(8) src;
|
||||
VkDeviceOrHostAddressKHR dst;
|
||||
VkDeviceOrHostAddressKHR WINE_VK_ALIGN(8) dst;
|
||||
VkCopyMicromapModeEXT mode;
|
||||
} VkCopyMicromapToMemoryInfoEXT;
|
||||
|
||||
|
@ -10774,9 +10774,9 @@ typedef struct VkMicromapBuildInfoEXT
|
|||
uint32_t usageCountsCount;
|
||||
const VkMicromapUsageEXT *pUsageCounts;
|
||||
const VkMicromapUsageEXT * const*ppUsageCounts;
|
||||
VkDeviceOrHostAddressConstKHR data;
|
||||
VkDeviceOrHostAddressKHR scratchData;
|
||||
VkDeviceOrHostAddressConstKHR triangleArray;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) data;
|
||||
VkDeviceOrHostAddressKHR WINE_VK_ALIGN(8) scratchData;
|
||||
VkDeviceOrHostAddressConstKHR WINE_VK_ALIGN(8) triangleArray;
|
||||
VkDeviceSize WINE_VK_ALIGN(8) triangleArrayStride;
|
||||
} VkMicromapBuildInfoEXT;
|
||||
|
||||
|
@ -10852,7 +10852,7 @@ typedef struct VkPipelineExecutableStatisticKHR
|
|||
char name[VK_MAX_DESCRIPTION_SIZE];
|
||||
char description[VK_MAX_DESCRIPTION_SIZE];
|
||||
VkPipelineExecutableStatisticFormatKHR format;
|
||||
VkPipelineExecutableStatisticValueKHR value;
|
||||
VkPipelineExecutableStatisticValueKHR WINE_VK_ALIGN(8) value;
|
||||
} VkPipelineExecutableStatisticKHR;
|
||||
|
||||
typedef struct VkPipelineLayoutCreateInfo
|
||||
|
@ -11059,7 +11059,7 @@ typedef union VkAccelerationStructureGeometryDataKHR
|
|||
{
|
||||
VkAccelerationStructureGeometryTrianglesDataKHR WINE_VK_ALIGN(8) triangles;
|
||||
VkAccelerationStructureGeometryAabbsDataKHR WINE_VK_ALIGN(8) aabbs;
|
||||
VkAccelerationStructureGeometryInstancesDataKHR instances;
|
||||
VkAccelerationStructureGeometryInstancesDataKHR WINE_VK_ALIGN(8) instances;
|
||||
} VkAccelerationStructureGeometryDataKHR;
|
||||
|
||||
typedef struct VkAccelerationStructureGeometryKHR
|
||||
|
@ -11067,7 +11067,7 @@ typedef struct VkAccelerationStructureGeometryKHR
|
|||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkGeometryTypeKHR geometryType;
|
||||
VkAccelerationStructureGeometryDataKHR geometry;
|
||||
VkAccelerationStructureGeometryDataKHR WINE_VK_ALIGN(8) geometry;
|
||||
VkGeometryFlagsKHR flags;
|
||||
} VkAccelerationStructureGeometryKHR;
|
||||
|
||||
|
@ -11093,7 +11093,7 @@ typedef struct VkAccelerationStructureMotionInstanceNV
|
|||
{
|
||||
VkAccelerationStructureMotionInstanceTypeNV type;
|
||||
VkAccelerationStructureMotionInstanceFlagsNV flags;
|
||||
VkAccelerationStructureMotionInstanceDataNV data;
|
||||
VkAccelerationStructureMotionInstanceDataNV WINE_VK_ALIGN(8) data;
|
||||
} VkAccelerationStructureMotionInstanceNV;
|
||||
|
||||
typedef struct VkBindSparseInfo
|
||||
|
@ -11209,7 +11209,7 @@ typedef struct VkAccelerationStructureBuildGeometryInfoKHR
|
|||
uint32_t geometryCount;
|
||||
const VkAccelerationStructureGeometryKHR *pGeometries;
|
||||
const VkAccelerationStructureGeometryKHR * const*ppGeometries;
|
||||
VkDeviceOrHostAddressKHR scratchData;
|
||||
VkDeviceOrHostAddressKHR WINE_VK_ALIGN(8) scratchData;
|
||||
} VkAccelerationStructureBuildGeometryInfoKHR;
|
||||
|
||||
typedef struct VkAccelerationStructureCreateInfoNV
|
||||
|
|
Loading…
Reference in a new issue