From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 174 ++++++++++++++ dlls/winevulkan/make_vulkan | 8 + dlls/winevulkan/vulkan_thunks.c | 406 +++++++++++--------------------- include/wine/vulkan_driver.h | 7 + 4 files changed, 327 insertions(+), 268 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 6255f5b46c0..fd34ce8b968 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -2091,6 +2091,79 @@ failed: return VK_ERROR_UNKNOWN; }
+static VkResult win32u_vkQueueBindSparse( VkQueue client_queue, uint32_t count, const VkBindSparseInfo *binds, VkFence client_fence ) +{ + struct vulkan_fence *fence = client_fence ? vulkan_fence_from_handle( client_fence ) : NULL; + struct vulkan_queue *queue = vulkan_queue_from_handle( client_queue ); + struct vulkan_device *device = queue->device; + + TRACE( "queue %p, count %u, binds %p, fence %p\n", queue, count, binds, fence ); + + for (uint32_t i = 0; i < count; i++) + { + VkBindSparseInfo *bind = (VkBindSparseInfo *)binds + i; /* cast away const, chain has been copied in the thunks */ + VkBaseOutStructure **next, *prev = (VkBaseOutStructure *)bind; + + for (const VkSparseBufferMemoryBindInfo *buffer = bind->pBufferBinds, *end = buffer + bind->bufferBindCount; buffer < end; buffer++) + { + for (uint32_t j = 0; j < buffer->bindCount; j++) + { + VkSparseMemoryBind *binds = (VkSparseMemoryBind *)buffer->pBinds; /* cast away const, chain has been copied in the thunks */ + struct vulkan_device_memory *memory = vulkan_device_memory_from_handle( binds[j].memory ); + if (memory) binds[j].memory = memory->host.device_memory; + } + } + + for (const VkSparseImageOpaqueMemoryBindInfo *opaque = bind->pImageOpaqueBinds, *end = opaque + bind->imageOpaqueBindCount; opaque < end; opaque++) + { + for (uint32_t j = 0; j < opaque->bindCount; j++) + { + VkSparseMemoryBind *binds = (VkSparseMemoryBind *)opaque->pBinds; /* cast away const, chain has been copied in the thunks */ + struct vulkan_device_memory *memory = vulkan_device_memory_from_handle( binds[j].memory ); + if (memory) binds[j].memory = memory->host.device_memory; + } + } + + for (const VkSparseImageMemoryBindInfo *image = bind->pImageBinds, *end = image + bind->imageBindCount; image < end; image++) + { + for (uint32_t j = 0; j < image->bindCount; j++) + { + VkSparseImageMemoryBind *binds = (VkSparseImageMemoryBind *)image->pBinds; /* cast away const, chain has been copied in the thunks */ + struct vulkan_device_memory *memory = vulkan_device_memory_from_handle( binds[j].memory ); + if (memory) binds[j].memory = memory->host.device_memory; + } + } + + for (next = &prev->pNext; *next; prev = *next, next = &(*next)->pNext) + { + switch ((*next)->sType) + { + case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO: break; + case VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT: break; + case VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM: break; + case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: break; + default: FIXME( "Unhandled sType %u.\n", (*next)->sType ); break; + } + } + + for (uint32_t j = 0; j < bind->waitSemaphoreCount; j++) + { + VkSemaphore *semaphores = (VkSemaphore *)bind->pWaitSemaphores; /* cast away const, it has been copied in the thunks */ + struct vulkan_semaphore *semaphore = vulkan_semaphore_from_handle( semaphores[j] ); + semaphores[j] = semaphore->host.semaphore; + } + + for (uint32_t j = 0; j < bind->signalSemaphoreCount; j++) + { + VkSemaphore *semaphores = (VkSemaphore *)bind->pSignalSemaphores; /* cast away const, it has been copied in the thunks */ + struct vulkan_semaphore *semaphore = vulkan_semaphore_from_handle( semaphores[j] ); + semaphores[j] = semaphore->host.semaphore; + } + } + + return device->p_vkQueueBindSparse( queue->host.queue, count, binds, fence ? fence->host.fence : 0 ); +} + static VkResult win32u_vkQueueSubmit( VkQueue client_queue, uint32_t count, const VkSubmitInfo *submits, VkFence client_fence ) { struct vulkan_fence *fence = client_fence ? vulkan_fence_from_handle( client_fence ) : NULL; @@ -2464,6 +2537,100 @@ static void win32u_vkDestroySemaphore( VkDevice client_device, VkSemaphore clien free( semaphore ); }
+static VkResult get_semaphore_counter_value( struct vulkan_device *device, struct semaphore *semaphore, uint64_t *value, + PFN_vkGetSemaphoreCounterValue p_vkGetSemaphoreCounterValue ) +{ + return p_vkGetSemaphoreCounterValue( device->host.device, semaphore->obj.host.semaphore, value ); +} + +static VkResult win32u_vkGetSemaphoreCounterValue( VkDevice client_device, VkSemaphore client_semaphore, uint64_t *value ) +{ + struct vulkan_device *device = vulkan_device_from_handle( client_device ); + struct semaphore *semaphore = semaphore_from_handle( client_semaphore ); + TRACE( "device %p, semaphore %p, value %p\n", device, semaphore, value ); + return get_semaphore_counter_value( device, semaphore, value, device->p_vkGetSemaphoreCounterValue ); +} + +static VkResult win32u_vkGetSemaphoreCounterValueKHR( VkDevice client_device, VkSemaphore client_semaphore, uint64_t *value ) +{ + struct vulkan_device *device = vulkan_device_from_handle( client_device ); + struct semaphore *semaphore = semaphore_from_handle( client_semaphore ); + TRACE( "device %p, semaphore %p, value %p\n", device, semaphore, value ); + return get_semaphore_counter_value( device, semaphore, value, device->p_vkGetSemaphoreCounterValueKHR ); +} + +static VkResult signal_semaphore( struct vulkan_device *device, const VkSemaphoreSignalInfo *signal_info, + PFN_vkSignalSemaphore p_vkSignalSemaphore ) +{ + struct semaphore *semaphore = semaphore_from_handle( signal_info->semaphore ); + VkSemaphoreSignalInfo info = *signal_info; + + if (info.pNext) FIXME( "pNext not implemented\n" ); + info.pNext = NULL; + + info.semaphore = semaphore->obj.host.semaphore; + return p_vkSignalSemaphore( device->host.device, &info ); +} + +static VkResult win32u_vkSignalSemaphore( VkDevice client_device, const VkSemaphoreSignalInfo *signal_info ) +{ + struct vulkan_device *device = vulkan_device_from_handle( client_device ); + TRACE( "device %p, signal_info %p\n", device, signal_info ); + return signal_semaphore( device, signal_info, device->p_vkSignalSemaphore ); +} + +static VkResult win32u_vkSignalSemaphoreKHR( VkDevice client_device, const VkSemaphoreSignalInfo *signal_info ) +{ + struct vulkan_device *device = vulkan_device_from_handle( client_device ); + TRACE( "device %p, signal_info %p\n", device, signal_info ); + return signal_semaphore( device, signal_info, device->p_vkSignalSemaphoreKHR ); +} + +static VkResult wait_semaphores( struct vulkan_device *device, const VkSemaphoreWaitInfo *wait_info, uint64_t timeout, + PFN_vkWaitSemaphores p_vkWaitSemaphores ) +{ + VkResult res = VK_ERROR_OUT_OF_HOST_MEMORY; + VkSemaphoreWaitInfo info = *wait_info; + struct mempool pool = {0}; + VkSemaphore *semaphores; + uint64_t *values; + + if (!(semaphores = mem_alloc( &pool, info.semaphoreCount * sizeof(semaphores) ))) return VK_ERROR_OUT_OF_HOST_MEMORY; + info.pSemaphores = memcpy( semaphores, info.pSemaphores, info.semaphoreCount * sizeof(semaphores) ); + + if (!(values = mem_alloc( &pool, info.semaphoreCount * sizeof(values) ))) goto failed; + info.pValues = memcpy( values, info.pValues, info.semaphoreCount * sizeof(values) ); + + if (info.pNext) FIXME( "pNext not implemented\n" ); + info.pNext = NULL; + + for (uint32_t i = 0; i < info.semaphoreCount; i++) + { + struct vulkan_semaphore *semaphore = vulkan_semaphore_from_handle( semaphores[i] ); + semaphores[i] = semaphore->host.semaphore; + } + + res = p_vkWaitSemaphores( device->host.device, &info, timeout ); + +failed: + mem_free( &pool ); + return res; +} + +static VkResult win32u_vkWaitSemaphores( VkDevice client_device, const VkSemaphoreWaitInfo *wait_info, uint64_t timeout ) +{ + struct vulkan_device *device = vulkan_device_from_handle( client_device ); + TRACE( "device %p, wait_info %p, timeout %jd\n", device, wait_info, (intmax_t)timeout ); + return wait_semaphores( device, wait_info, timeout, device->p_vkWaitSemaphores ); +} + +static VkResult win32u_vkWaitSemaphoresKHR( VkDevice client_device, const VkSemaphoreWaitInfo *wait_info, uint64_t timeout ) +{ + struct vulkan_device *device = vulkan_device_from_handle( client_device ); + TRACE( "device %p, wait_info %p, timeout %jd\n", device, wait_info, (intmax_t)timeout ); + return wait_semaphores( device, wait_info, timeout, device->p_vkWaitSemaphoresKHR ); +} + static VkResult win32u_vkGetSemaphoreWin32HandleKHR( VkDevice client_device, const VkSemaphoreGetWin32HandleInfoKHR *handle_info, HANDLE *handle ) { struct vulkan_device *device = vulkan_device_from_handle( client_device ); @@ -2855,17 +3022,24 @@ static struct vulkan_funcs vulkan_funcs = .p_vkGetPhysicalDeviceSurfaceFormats2KHR = win32u_vkGetPhysicalDeviceSurfaceFormats2KHR, .p_vkGetPhysicalDeviceSurfaceFormatsKHR = win32u_vkGetPhysicalDeviceSurfaceFormatsKHR, .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = win32u_vkGetPhysicalDeviceWin32PresentationSupportKHR, + .p_vkGetSemaphoreCounterValue = win32u_vkGetSemaphoreCounterValue, + .p_vkGetSemaphoreCounterValueKHR = win32u_vkGetSemaphoreCounterValueKHR, .p_vkGetSemaphoreWin32HandleKHR = win32u_vkGetSemaphoreWin32HandleKHR, .p_vkImportFenceWin32HandleKHR = win32u_vkImportFenceWin32HandleKHR, .p_vkImportSemaphoreWin32HandleKHR = win32u_vkImportSemaphoreWin32HandleKHR, .p_vkMapMemory = win32u_vkMapMemory, .p_vkMapMemory2KHR = win32u_vkMapMemory2KHR, + .p_vkQueueBindSparse = win32u_vkQueueBindSparse, .p_vkQueuePresentKHR = win32u_vkQueuePresentKHR, .p_vkQueueSubmit = win32u_vkQueueSubmit, .p_vkQueueSubmit2 = win32u_vkQueueSubmit2, .p_vkQueueSubmit2KHR = win32u_vkQueueSubmit2KHR, + .p_vkSignalSemaphore = win32u_vkSignalSemaphore, + .p_vkSignalSemaphoreKHR = win32u_vkSignalSemaphoreKHR, .p_vkUnmapMemory = win32u_vkUnmapMemory, .p_vkUnmapMemory2KHR = win32u_vkUnmapMemory2KHR, + .p_vkWaitSemaphores = win32u_vkWaitSemaphores, + .p_vkWaitSemaphoresKHR = win32u_vkWaitSemaphoresKHR, };
static VkResult nulldrv_vulkan_surface_create( HWND hwnd, const struct vulkan_instance *instance, VkSurfaceKHR *surface, diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index ba8e8695fd1..7ce993e88ab 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -227,17 +227,24 @@ USER_DRIVER_FUNCS = { "vkGetPhysicalDeviceSurfaceFormats2KHR", "vkGetPhysicalDeviceSurfaceFormatsKHR", "vkGetPhysicalDeviceWin32PresentationSupportKHR", + "vkGetSemaphoreCounterValue", + "vkGetSemaphoreCounterValueKHR", "vkGetSemaphoreWin32HandleKHR", "vkImportFenceWin32HandleKHR", "vkImportSemaphoreWin32HandleKHR", "vkMapMemory", "vkMapMemory2KHR", + "vkQueueBindSparse", "vkQueuePresentKHR", "vkQueueSubmit", "vkQueueSubmit2", "vkQueueSubmit2KHR", + "vkSignalSemaphore", + "vkSignalSemaphoreKHR", "vkUnmapMemory", "vkUnmapMemory2KHR", + "vkWaitSemaphores", + "vkWaitSemaphoresKHR", }
# functions for which the unix thunk is manually implemented @@ -307,6 +314,7 @@ STRUCT_CHAIN_CONVERSIONS = { "VkFenceCreateInfo": {}, "VkSubmitInfo": {}, "VkSubmitInfo2": {}, + "VkBindSparseInfo": {},
# Ignore to not confuse host loader. "VkDeviceCreateInfo": {"strip": ["VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"]}, diff --git a/dlls/winevulkan/vulkan_thunks.c b/dlls/winevulkan/vulkan_thunks.c index 0497c19add2..3a92999edc4 100644 --- a/dlls/winevulkan/vulkan_thunks.c +++ b/dlls/winevulkan/vulkan_thunks.c @@ -40336,7 +40336,7 @@ static void convert_VkMemoryMapInfo_win32_to_unwrapped_host(const VkMemoryMapInf }
#ifdef _WIN64 -static const VkSemaphore *convert_VkSemaphore_array_win64_to_host(struct conversion_context *ctx, const VkSemaphore *in, uint32_t count) +static const VkSemaphore *convert_VkSemaphore_array_win64_to_unwrapped_host(struct conversion_context *ctx, const VkSemaphore *in, uint32_t count) { VkSemaphore *out; unsigned int i; @@ -40346,128 +40346,7 @@ static const VkSemaphore *convert_VkSemaphore_array_win64_to_host(struct convers out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - out[i] = vulkan_semaphore_from_handle(in[i])->host.semaphore; - } - - return out; -} -#endif /* _WIN64 */ - -#ifdef _WIN64 -static void convert_VkSparseMemoryBind_win64_to_host(const VkSparseMemoryBind *in, VkSparseMemoryBind *out) -{ - if (!in) return; - - out->resourceOffset = in->resourceOffset; - out->size = in->size; - out->memory = in->memory ? vulkan_device_memory_from_handle(in->memory)->host.device_memory : 0; - out->memoryOffset = in->memoryOffset; - out->flags = in->flags; -} -#endif /* _WIN64 */ - -#ifdef _WIN64 -static const VkSparseMemoryBind *convert_VkSparseMemoryBind_array_win64_to_host(struct conversion_context *ctx, const VkSparseMemoryBind *in, uint32_t count) -{ - VkSparseMemoryBind *out; - unsigned int i; - - if (!in || !count) return NULL; - - out = conversion_context_alloc(ctx, count * sizeof(*out)); - for (i = 0; i < count; i++) - { - convert_VkSparseMemoryBind_win64_to_host(&in[i], &out[i]); - } - - return out; -} -#endif /* _WIN64 */ - -#ifdef _WIN64 -static void convert_VkSparseBufferMemoryBindInfo_win64_to_host(struct conversion_context *ctx, const VkSparseBufferMemoryBindInfo *in, VkSparseBufferMemoryBindInfo *out) -{ - if (!in) return; - - out->buffer = in->buffer; - out->bindCount = in->bindCount; - out->pBinds = convert_VkSparseMemoryBind_array_win64_to_host(ctx, in->pBinds, in->bindCount); -} -#endif /* _WIN64 */ - -#ifdef _WIN64 -static const VkSparseBufferMemoryBindInfo *convert_VkSparseBufferMemoryBindInfo_array_win64_to_host(struct conversion_context *ctx, const VkSparseBufferMemoryBindInfo *in, uint32_t count) -{ - VkSparseBufferMemoryBindInfo *out; - unsigned int i; - - if (!in || !count) return NULL; - - out = conversion_context_alloc(ctx, count * sizeof(*out)); - for (i = 0; i < count; i++) - { - convert_VkSparseBufferMemoryBindInfo_win64_to_host(ctx, &in[i], &out[i]); - } - - return out; -} -#endif /* _WIN64 */ - -#ifdef _WIN64 -static void convert_VkSparseImageOpaqueMemoryBindInfo_win64_to_host(struct conversion_context *ctx, const VkSparseImageOpaqueMemoryBindInfo *in, VkSparseImageOpaqueMemoryBindInfo *out) -{ - if (!in) return; - - out->image = in->image; - out->bindCount = in->bindCount; - out->pBinds = convert_VkSparseMemoryBind_array_win64_to_host(ctx, in->pBinds, in->bindCount); -} -#endif /* _WIN64 */ - -#ifdef _WIN64 -static const VkSparseImageOpaqueMemoryBindInfo *convert_VkSparseImageOpaqueMemoryBindInfo_array_win64_to_host(struct conversion_context *ctx, const VkSparseImageOpaqueMemoryBindInfo *in, uint32_t count) -{ - VkSparseImageOpaqueMemoryBindInfo *out; - unsigned int i; - - if (!in || !count) return NULL; - - out = conversion_context_alloc(ctx, count * sizeof(*out)); - for (i = 0; i < count; i++) - { - convert_VkSparseImageOpaqueMemoryBindInfo_win64_to_host(ctx, &in[i], &out[i]); - } - - return out; -} -#endif /* _WIN64 */ - -#ifdef _WIN64 -static void convert_VkSparseImageMemoryBind_win64_to_host(const VkSparseImageMemoryBind *in, VkSparseImageMemoryBind *out) -{ - if (!in) return; - - out->subresource = in->subresource; - out->offset = in->offset; - out->extent = in->extent; - out->memory = in->memory ? vulkan_device_memory_from_handle(in->memory)->host.device_memory : 0; - out->memoryOffset = in->memoryOffset; - out->flags = in->flags; -} -#endif /* _WIN64 */ - -#ifdef _WIN64 -static const VkSparseImageMemoryBind *convert_VkSparseImageMemoryBind_array_win64_to_host(struct conversion_context *ctx, const VkSparseImageMemoryBind *in, uint32_t count) -{ - VkSparseImageMemoryBind *out; - unsigned int i; - - if (!in || !count) return NULL; - - out = conversion_context_alloc(ctx, count * sizeof(*out)); - for (i = 0; i < count; i++) - { - convert_VkSparseImageMemoryBind_win64_to_host(&in[i], &out[i]); + out[i] = in[i]; }
return out; @@ -40475,56 +40354,97 @@ static const VkSparseImageMemoryBind *convert_VkSparseImageMemoryBind_array_win6 #endif /* _WIN64 */
#ifdef _WIN64 -static void convert_VkSparseImageMemoryBindInfo_win64_to_host(struct conversion_context *ctx, const VkSparseImageMemoryBindInfo *in, VkSparseImageMemoryBindInfo *out) -{ - if (!in) return; - - out->image = in->image; - out->bindCount = in->bindCount; - out->pBinds = convert_VkSparseImageMemoryBind_array_win64_to_host(ctx, in->pBinds, in->bindCount); -} -#endif /* _WIN64 */ - -#ifdef _WIN64 -static const VkSparseImageMemoryBindInfo *convert_VkSparseImageMemoryBindInfo_array_win64_to_host(struct conversion_context *ctx, const VkSparseImageMemoryBindInfo *in, uint32_t count) +static void convert_VkBindSparseInfo_win64_to_unwrapped_host(struct conversion_context *ctx, const VkBindSparseInfo *in, VkBindSparseInfo *out) { - VkSparseImageMemoryBindInfo *out; - unsigned int i; - - if (!in || !count) return NULL; - - out = conversion_context_alloc(ctx, count * sizeof(*out)); - for (i = 0; i < count; i++) - { - convert_VkSparseImageMemoryBindInfo_win64_to_host(ctx, &in[i], &out[i]); - } - - return out; -} -#endif /* _WIN64 */ + const VkBaseInStructure *in_header; + VkBaseOutStructure *out_header = (void *)out;
-#ifdef _WIN64 -static void convert_VkBindSparseInfo_win64_to_host(struct conversion_context *ctx, const VkBindSparseInfo *in, VkBindSparseInfo *out) -{ if (!in) return;
out->sType = in->sType; - out->pNext = in->pNext; + out->pNext = NULL; out->waitSemaphoreCount = in->waitSemaphoreCount; - out->pWaitSemaphores = convert_VkSemaphore_array_win64_to_host(ctx, in->pWaitSemaphores, in->waitSemaphoreCount); + out->pWaitSemaphores = convert_VkSemaphore_array_win64_to_unwrapped_host(ctx, in->pWaitSemaphores, in->waitSemaphoreCount); out->bufferBindCount = in->bufferBindCount; - out->pBufferBinds = convert_VkSparseBufferMemoryBindInfo_array_win64_to_host(ctx, in->pBufferBinds, in->bufferBindCount); + out->pBufferBinds = in->pBufferBinds; out->imageOpaqueBindCount = in->imageOpaqueBindCount; - out->pImageOpaqueBinds = convert_VkSparseImageOpaqueMemoryBindInfo_array_win64_to_host(ctx, in->pImageOpaqueBinds, in->imageOpaqueBindCount); + out->pImageOpaqueBinds = in->pImageOpaqueBinds; out->imageBindCount = in->imageBindCount; - out->pImageBinds = convert_VkSparseImageMemoryBindInfo_array_win64_to_host(ctx, in->pImageBinds, in->imageBindCount); + out->pImageBinds = in->pImageBinds; out->signalSemaphoreCount = in->signalSemaphoreCount; - out->pSignalSemaphores = convert_VkSemaphore_array_win64_to_host(ctx, in->pSignalSemaphores, in->signalSemaphoreCount); + out->pSignalSemaphores = convert_VkSemaphore_array_win64_to_unwrapped_host(ctx, in->pSignalSemaphores, in->signalSemaphoreCount); + + for (in_header = (void *)in->pNext; in_header; in_header = (void *)in_header->pNext) + { + switch (in_header->sType) + { + case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO: + { + VkDeviceGroupBindSparseInfo *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext)); + const VkDeviceGroupBindSparseInfo *in_ext = (const VkDeviceGroupBindSparseInfo *)in_header; + out_ext->sType = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO; + out_ext->pNext = NULL; + out_ext->resourceDeviceIndex = in_ext->resourceDeviceIndex; + out_ext->memoryDeviceIndex = in_ext->memoryDeviceIndex; + out_header->pNext = (void *)out_ext; + out_header = (void *)out_ext; + break; + } + case VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT: + { + VkFrameBoundaryEXT *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext)); + const VkFrameBoundaryEXT *in_ext = (const VkFrameBoundaryEXT *)in_header; + out_ext->sType = VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT; + out_ext->pNext = NULL; + out_ext->flags = in_ext->flags; + out_ext->frameID = in_ext->frameID; + out_ext->imageCount = in_ext->imageCount; + out_ext->pImages = in_ext->pImages; + out_ext->bufferCount = in_ext->bufferCount; + out_ext->pBuffers = in_ext->pBuffers; + out_ext->tagName = in_ext->tagName; + out_ext->tagSize = in_ext->tagSize; + out_ext->pTag = in_ext->pTag; + out_header->pNext = (void *)out_ext; + out_header = (void *)out_ext; + break; + } + case VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM: + { + VkFrameBoundaryTensorsARM *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext)); + const VkFrameBoundaryTensorsARM *in_ext = (const VkFrameBoundaryTensorsARM *)in_header; + out_ext->sType = VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM; + out_ext->pNext = NULL; + out_ext->tensorCount = in_ext->tensorCount; + out_ext->pTensors = in_ext->pTensors; + out_header->pNext = (void *)out_ext; + out_header = (void *)out_ext; + break; + } + case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: + { + VkTimelineSemaphoreSubmitInfo *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext)); + const VkTimelineSemaphoreSubmitInfo *in_ext = (const VkTimelineSemaphoreSubmitInfo *)in_header; + out_ext->sType = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO; + out_ext->pNext = NULL; + out_ext->waitSemaphoreValueCount = in_ext->waitSemaphoreValueCount; + out_ext->pWaitSemaphoreValues = in_ext->pWaitSemaphoreValues; + out_ext->signalSemaphoreValueCount = in_ext->signalSemaphoreValueCount; + out_ext->pSignalSemaphoreValues = in_ext->pSignalSemaphoreValues; + out_header->pNext = (void *)out_ext; + out_header = (void *)out_ext; + break; + } + default: + FIXME("Unhandled sType %u.\n", in_header->sType); + break; + } + } } #endif /* _WIN64 */
#ifdef _WIN64 -static const VkBindSparseInfo *convert_VkBindSparseInfo_array_win64_to_host(struct conversion_context *ctx, const VkBindSparseInfo *in, uint32_t count) +static const VkBindSparseInfo *convert_VkBindSparseInfo_array_win64_to_unwrapped_host(struct conversion_context *ctx, const VkBindSparseInfo *in, uint32_t count) { VkBindSparseInfo *out; unsigned int i; @@ -40534,14 +40454,14 @@ static const VkBindSparseInfo *convert_VkBindSparseInfo_array_win64_to_host(stru out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkBindSparseInfo_win64_to_host(ctx, &in[i], &out[i]); + convert_VkBindSparseInfo_win64_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; } #endif /* _WIN64 */
-static const VkSemaphore *convert_VkSemaphore_array_win32_to_host(struct conversion_context *ctx, const VkSemaphore *in, uint32_t count) +static const VkSemaphore *convert_VkSemaphore_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSemaphore *in, uint32_t count) { VkSemaphore *out; unsigned int i; @@ -40551,24 +40471,24 @@ static const VkSemaphore *convert_VkSemaphore_array_win32_to_host(struct convers out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - out[i] = vulkan_semaphore_from_handle(in[i])->host.semaphore; + out[i] = in[i]; }
return out; }
-static void convert_VkSparseMemoryBind_win32_to_host(const VkSparseMemoryBind32 *in, VkSparseMemoryBind *out) +static void convert_VkSparseMemoryBind_win32_to_unwrapped_host(const VkSparseMemoryBind32 *in, VkSparseMemoryBind *out) { if (!in) return;
out->resourceOffset = in->resourceOffset; out->size = in->size; - out->memory = in->memory ? vulkan_device_memory_from_handle(in->memory)->host.device_memory : 0; + out->memory = in->memory; out->memoryOffset = in->memoryOffset; out->flags = in->flags; }
-static const VkSparseMemoryBind *convert_VkSparseMemoryBind_array_win32_to_host(struct conversion_context *ctx, const VkSparseMemoryBind32 *in, uint32_t count) +static const VkSparseMemoryBind *convert_VkSparseMemoryBind_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSparseMemoryBind32 *in, uint32_t count) { VkSparseMemoryBind *out; unsigned int i; @@ -40578,22 +40498,22 @@ static const VkSparseMemoryBind *convert_VkSparseMemoryBind_array_win32_to_host( out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkSparseMemoryBind_win32_to_host(&in[i], &out[i]); + convert_VkSparseMemoryBind_win32_to_unwrapped_host(&in[i], &out[i]); }
return out; }
-static void convert_VkSparseBufferMemoryBindInfo_win32_to_host(struct conversion_context *ctx, const VkSparseBufferMemoryBindInfo32 *in, VkSparseBufferMemoryBindInfo *out) +static void convert_VkSparseBufferMemoryBindInfo_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSparseBufferMemoryBindInfo32 *in, VkSparseBufferMemoryBindInfo *out) { if (!in) return;
out->buffer = in->buffer; out->bindCount = in->bindCount; - out->pBinds = convert_VkSparseMemoryBind_array_win32_to_host(ctx, (const VkSparseMemoryBind32 *)UlongToPtr(in->pBinds), in->bindCount); + out->pBinds = convert_VkSparseMemoryBind_array_win32_to_unwrapped_host(ctx, (const VkSparseMemoryBind32 *)UlongToPtr(in->pBinds), in->bindCount); }
-static const VkSparseBufferMemoryBindInfo *convert_VkSparseBufferMemoryBindInfo_array_win32_to_host(struct conversion_context *ctx, const VkSparseBufferMemoryBindInfo32 *in, uint32_t count) +static const VkSparseBufferMemoryBindInfo *convert_VkSparseBufferMemoryBindInfo_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSparseBufferMemoryBindInfo32 *in, uint32_t count) { VkSparseBufferMemoryBindInfo *out; unsigned int i; @@ -40603,22 +40523,22 @@ static const VkSparseBufferMemoryBindInfo *convert_VkSparseBufferMemoryBindInfo_ out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkSparseBufferMemoryBindInfo_win32_to_host(ctx, &in[i], &out[i]); + convert_VkSparseBufferMemoryBindInfo_win32_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; }
-static void convert_VkSparseImageOpaqueMemoryBindInfo_win32_to_host(struct conversion_context *ctx, const VkSparseImageOpaqueMemoryBindInfo32 *in, VkSparseImageOpaqueMemoryBindInfo *out) +static void convert_VkSparseImageOpaqueMemoryBindInfo_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSparseImageOpaqueMemoryBindInfo32 *in, VkSparseImageOpaqueMemoryBindInfo *out) { if (!in) return;
out->image = in->image; out->bindCount = in->bindCount; - out->pBinds = convert_VkSparseMemoryBind_array_win32_to_host(ctx, (const VkSparseMemoryBind32 *)UlongToPtr(in->pBinds), in->bindCount); + out->pBinds = convert_VkSparseMemoryBind_array_win32_to_unwrapped_host(ctx, (const VkSparseMemoryBind32 *)UlongToPtr(in->pBinds), in->bindCount); }
-static const VkSparseImageOpaqueMemoryBindInfo *convert_VkSparseImageOpaqueMemoryBindInfo_array_win32_to_host(struct conversion_context *ctx, const VkSparseImageOpaqueMemoryBindInfo32 *in, uint32_t count) +static const VkSparseImageOpaqueMemoryBindInfo *convert_VkSparseImageOpaqueMemoryBindInfo_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSparseImageOpaqueMemoryBindInfo32 *in, uint32_t count) { VkSparseImageOpaqueMemoryBindInfo *out; unsigned int i; @@ -40628,25 +40548,25 @@ static const VkSparseImageOpaqueMemoryBindInfo *convert_VkSparseImageOpaqueMemor out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkSparseImageOpaqueMemoryBindInfo_win32_to_host(ctx, &in[i], &out[i]); + convert_VkSparseImageOpaqueMemoryBindInfo_win32_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; }
-static void convert_VkSparseImageMemoryBind_win32_to_host(const VkSparseImageMemoryBind32 *in, VkSparseImageMemoryBind *out) +static void convert_VkSparseImageMemoryBind_win32_to_unwrapped_host(const VkSparseImageMemoryBind32 *in, VkSparseImageMemoryBind *out) { if (!in) return;
out->subresource = in->subresource; out->offset = in->offset; out->extent = in->extent; - out->memory = in->memory ? vulkan_device_memory_from_handle(in->memory)->host.device_memory : 0; + out->memory = in->memory; out->memoryOffset = in->memoryOffset; out->flags = in->flags; }
-static const VkSparseImageMemoryBind *convert_VkSparseImageMemoryBind_array_win32_to_host(struct conversion_context *ctx, const VkSparseImageMemoryBind32 *in, uint32_t count) +static const VkSparseImageMemoryBind *convert_VkSparseImageMemoryBind_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSparseImageMemoryBind32 *in, uint32_t count) { VkSparseImageMemoryBind *out; unsigned int i; @@ -40656,22 +40576,22 @@ static const VkSparseImageMemoryBind *convert_VkSparseImageMemoryBind_array_win3 out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkSparseImageMemoryBind_win32_to_host(&in[i], &out[i]); + convert_VkSparseImageMemoryBind_win32_to_unwrapped_host(&in[i], &out[i]); }
return out; }
-static void convert_VkSparseImageMemoryBindInfo_win32_to_host(struct conversion_context *ctx, const VkSparseImageMemoryBindInfo32 *in, VkSparseImageMemoryBindInfo *out) +static void convert_VkSparseImageMemoryBindInfo_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSparseImageMemoryBindInfo32 *in, VkSparseImageMemoryBindInfo *out) { if (!in) return;
out->image = in->image; out->bindCount = in->bindCount; - out->pBinds = convert_VkSparseImageMemoryBind_array_win32_to_host(ctx, (const VkSparseImageMemoryBind32 *)UlongToPtr(in->pBinds), in->bindCount); + out->pBinds = convert_VkSparseImageMemoryBind_array_win32_to_unwrapped_host(ctx, (const VkSparseImageMemoryBind32 *)UlongToPtr(in->pBinds), in->bindCount); }
-static const VkSparseImageMemoryBindInfo *convert_VkSparseImageMemoryBindInfo_array_win32_to_host(struct conversion_context *ctx, const VkSparseImageMemoryBindInfo32 *in, uint32_t count) +static const VkSparseImageMemoryBindInfo *convert_VkSparseImageMemoryBindInfo_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSparseImageMemoryBindInfo32 *in, uint32_t count) { VkSparseImageMemoryBindInfo *out; unsigned int i; @@ -40681,13 +40601,13 @@ static const VkSparseImageMemoryBindInfo *convert_VkSparseImageMemoryBindInfo_ar out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkSparseImageMemoryBindInfo_win32_to_host(ctx, &in[i], &out[i]); + convert_VkSparseImageMemoryBindInfo_win32_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; }
-static void convert_VkBindSparseInfo_win32_to_host(struct conversion_context *ctx, const VkBindSparseInfo32 *in, VkBindSparseInfo *out) +static void convert_VkBindSparseInfo_win32_to_unwrapped_host(struct conversion_context *ctx, const VkBindSparseInfo32 *in, VkBindSparseInfo *out) { const VkBaseInStructure32 *in_header; VkBaseOutStructure *out_header = (void *)out; @@ -40697,15 +40617,15 @@ static void convert_VkBindSparseInfo_win32_to_host(struct conversion_context *ct out->sType = in->sType; out->pNext = NULL; out->waitSemaphoreCount = in->waitSemaphoreCount; - out->pWaitSemaphores = convert_VkSemaphore_array_win32_to_host(ctx, (const VkSemaphore *)UlongToPtr(in->pWaitSemaphores), in->waitSemaphoreCount); + out->pWaitSemaphores = convert_VkSemaphore_array_win32_to_unwrapped_host(ctx, (const VkSemaphore *)UlongToPtr(in->pWaitSemaphores), in->waitSemaphoreCount); out->bufferBindCount = in->bufferBindCount; - out->pBufferBinds = convert_VkSparseBufferMemoryBindInfo_array_win32_to_host(ctx, (const VkSparseBufferMemoryBindInfo32 *)UlongToPtr(in->pBufferBinds), in->bufferBindCount); + out->pBufferBinds = convert_VkSparseBufferMemoryBindInfo_array_win32_to_unwrapped_host(ctx, (const VkSparseBufferMemoryBindInfo32 *)UlongToPtr(in->pBufferBinds), in->bufferBindCount); out->imageOpaqueBindCount = in->imageOpaqueBindCount; - out->pImageOpaqueBinds = convert_VkSparseImageOpaqueMemoryBindInfo_array_win32_to_host(ctx, (const VkSparseImageOpaqueMemoryBindInfo32 *)UlongToPtr(in->pImageOpaqueBinds), in->imageOpaqueBindCount); + out->pImageOpaqueBinds = convert_VkSparseImageOpaqueMemoryBindInfo_array_win32_to_unwrapped_host(ctx, (const VkSparseImageOpaqueMemoryBindInfo32 *)UlongToPtr(in->pImageOpaqueBinds), in->imageOpaqueBindCount); out->imageBindCount = in->imageBindCount; - out->pImageBinds = convert_VkSparseImageMemoryBindInfo_array_win32_to_host(ctx, (const VkSparseImageMemoryBindInfo32 *)UlongToPtr(in->pImageBinds), in->imageBindCount); + out->pImageBinds = convert_VkSparseImageMemoryBindInfo_array_win32_to_unwrapped_host(ctx, (const VkSparseImageMemoryBindInfo32 *)UlongToPtr(in->pImageBinds), in->imageBindCount); out->signalSemaphoreCount = in->signalSemaphoreCount; - out->pSignalSemaphores = convert_VkSemaphore_array_win32_to_host(ctx, (const VkSemaphore *)UlongToPtr(in->pSignalSemaphores), in->signalSemaphoreCount); + out->pSignalSemaphores = convert_VkSemaphore_array_win32_to_unwrapped_host(ctx, (const VkSemaphore *)UlongToPtr(in->pSignalSemaphores), in->signalSemaphoreCount);
for (in_header = UlongToPtr(in->pNext); in_header; in_header = UlongToPtr(in_header->pNext)) { @@ -40775,7 +40695,7 @@ static void convert_VkBindSparseInfo_win32_to_host(struct conversion_context *ct } }
-static const VkBindSparseInfo *convert_VkBindSparseInfo_array_win32_to_host(struct conversion_context *ctx, const VkBindSparseInfo32 *in, uint32_t count) +static const VkBindSparseInfo *convert_VkBindSparseInfo_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkBindSparseInfo32 *in, uint32_t count) { VkBindSparseInfo *out; unsigned int i; @@ -40785,7 +40705,7 @@ static const VkBindSparseInfo *convert_VkBindSparseInfo_array_win32_to_host(stru out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkBindSparseInfo_win32_to_host(ctx, &in[i], &out[i]); + convert_VkBindSparseInfo_win32_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; @@ -40802,24 +40722,6 @@ static void convert_VkOutOfBandQueueTypeInfoNV_win32_to_host(const VkOutOfBandQu FIXME("Unexpected pNext\n"); }
-#ifdef _WIN64 -static const VkSemaphore *convert_VkSemaphore_array_win64_to_unwrapped_host(struct conversion_context *ctx, const VkSemaphore *in, uint32_t count) -{ - VkSemaphore *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] = in[i]; - } - - return out; -} -#endif /* _WIN64 */ - #ifdef _WIN64 static const VkSwapchainKHR *convert_VkSwapchainKHR_array_win64_to_unwrapped_host(struct conversion_context *ctx, const VkSwapchainKHR *in, uint32_t count) { @@ -40989,22 +40891,6 @@ static void convert_VkPresentInfoKHR_win64_to_unwrapped_host(struct conversion_c } #endif /* _WIN64 */
-static const VkSemaphore *convert_VkSemaphore_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSemaphore *in, uint32_t count) -{ - VkSemaphore *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] = in[i]; - } - - return out; -} - static const VkSwapchainKHR *convert_VkSwapchainKHR_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSwapchainKHR *in, uint32_t count) { VkSwapchainKHR *out; @@ -42257,25 +42143,13 @@ static void convert_VkLatencySleepModeInfoNV_win32_to_host(const VkLatencySleepM FIXME("Unexpected pNext\n"); }
-#ifdef _WIN64 -static void convert_VkSemaphoreSignalInfo_win64_to_host(const VkSemaphoreSignalInfo *in, VkSemaphoreSignalInfo *out) -{ - if (!in) return; - - out->sType = in->sType; - out->pNext = in->pNext; - out->semaphore = vulkan_semaphore_from_handle(in->semaphore)->host.semaphore; - out->value = in->value; -} -#endif /* _WIN64 */ - -static void convert_VkSemaphoreSignalInfo_win32_to_host(const VkSemaphoreSignalInfo32 *in, VkSemaphoreSignalInfo *out) +static void convert_VkSemaphoreSignalInfo_win32_to_unwrapped_host(const VkSemaphoreSignalInfo32 *in, VkSemaphoreSignalInfo *out) { if (!in) return;
out->sType = in->sType; out->pNext = NULL; - out->semaphore = vulkan_semaphore_from_handle(in->semaphore)->host.semaphore; + out->semaphore = in->semaphore; out->value = in->value; if (in->pNext) FIXME("Unexpected pNext\n"); @@ -42614,7 +42488,7 @@ static void convert_VkPresentWait2InfoKHR_win32_to_host(const VkPresentWait2Info }
#ifdef _WIN64 -static void convert_VkSemaphoreWaitInfo_win64_to_host(struct conversion_context *ctx, const VkSemaphoreWaitInfo *in, VkSemaphoreWaitInfo *out) +static void convert_VkSemaphoreWaitInfo_win64_to_unwrapped_host(struct conversion_context *ctx, const VkSemaphoreWaitInfo *in, VkSemaphoreWaitInfo *out) { if (!in) return;
@@ -42622,12 +42496,12 @@ static void convert_VkSemaphoreWaitInfo_win64_to_host(struct conversion_context out->pNext = in->pNext; out->flags = in->flags; out->semaphoreCount = in->semaphoreCount; - out->pSemaphores = convert_VkSemaphore_array_win64_to_host(ctx, in->pSemaphores, in->semaphoreCount); + out->pSemaphores = convert_VkSemaphore_array_win64_to_unwrapped_host(ctx, in->pSemaphores, in->semaphoreCount); out->pValues = in->pValues; } #endif /* _WIN64 */
-static void convert_VkSemaphoreWaitInfo_win32_to_host(struct conversion_context *ctx, const VkSemaphoreWaitInfo32 *in, VkSemaphoreWaitInfo *out) +static void convert_VkSemaphoreWaitInfo_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSemaphoreWaitInfo32 *in, VkSemaphoreWaitInfo *out) { if (!in) return;
@@ -42635,7 +42509,7 @@ static void convert_VkSemaphoreWaitInfo_win32_to_host(struct conversion_context out->pNext = NULL; out->flags = in->flags; out->semaphoreCount = in->semaphoreCount; - out->pSemaphores = convert_VkSemaphore_array_win32_to_host(ctx, (const VkSemaphore *)UlongToPtr(in->pSemaphores), in->semaphoreCount); + out->pSemaphores = convert_VkSemaphore_array_win32_to_unwrapped_host(ctx, (const VkSemaphore *)UlongToPtr(in->pSemaphores), in->semaphoreCount); out->pValues = UlongToPtr(in->pValues); if (in->pNext) FIXME("Unexpected pNext\n"); @@ -59536,7 +59410,7 @@ static NTSTATUS thunk64_vkGetSemaphoreCounterValue(void *args)
TRACE("%p, 0x%s, %p\n", params->device, wine_dbgstr_longlong(params->semaphore), params->pValue);
- params->result = vulkan_device_from_handle(params->device)->p_vkGetSemaphoreCounterValue(vulkan_device_from_handle(params->device)->host.device, vulkan_semaphore_from_handle(params->semaphore)->host.semaphore, params->pValue); + params->result = vk_funcs->p_vkGetSemaphoreCounterValue(params->device, params->semaphore, params->pValue); return STATUS_SUCCESS; } #endif /* _WIN64 */ @@ -59553,7 +59427,7 @@ static NTSTATUS thunk32_vkGetSemaphoreCounterValue(void *args)
TRACE("%#x, 0x%s, %#x\n", params->device, wine_dbgstr_longlong(params->semaphore), params->pValue);
- params->result = vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->p_vkGetSemaphoreCounterValue(vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->host.device, vulkan_semaphore_from_handle(params->semaphore)->host.semaphore, (uint64_t *)UlongToPtr(params->pValue)); + params->result = vk_funcs->p_vkGetSemaphoreCounterValue((VkDevice)UlongToPtr(params->device), params->semaphore, (uint64_t *)UlongToPtr(params->pValue)); return STATUS_SUCCESS; }
@@ -59564,7 +59438,7 @@ static NTSTATUS thunk64_vkGetSemaphoreCounterValueKHR(void *args)
TRACE("%p, 0x%s, %p\n", params->device, wine_dbgstr_longlong(params->semaphore), params->pValue);
- params->result = vulkan_device_from_handle(params->device)->p_vkGetSemaphoreCounterValueKHR(vulkan_device_from_handle(params->device)->host.device, vulkan_semaphore_from_handle(params->semaphore)->host.semaphore, params->pValue); + params->result = vk_funcs->p_vkGetSemaphoreCounterValueKHR(params->device, params->semaphore, params->pValue); return STATUS_SUCCESS; } #endif /* _WIN64 */ @@ -59581,7 +59455,7 @@ static NTSTATUS thunk32_vkGetSemaphoreCounterValueKHR(void *args)
TRACE("%#x, 0x%s, %#x\n", params->device, wine_dbgstr_longlong(params->semaphore), params->pValue);
- params->result = vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->p_vkGetSemaphoreCounterValueKHR(vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->host.device, vulkan_semaphore_from_handle(params->semaphore)->host.semaphore, (uint64_t *)UlongToPtr(params->pValue)); + params->result = vk_funcs->p_vkGetSemaphoreCounterValueKHR((VkDevice)UlongToPtr(params->device), params->semaphore, (uint64_t *)UlongToPtr(params->pValue)); return STATUS_SUCCESS; }
@@ -60301,8 +60175,8 @@ static NTSTATUS thunk64_vkQueueBindSparse(void *args) TRACE("%p, %u, %p, 0x%s\n", params->queue, params->bindInfoCount, params->pBindInfo, wine_dbgstr_longlong(params->fence));
init_conversion_context(ctx); - pBindInfo_host = convert_VkBindSparseInfo_array_win64_to_host(ctx, params->pBindInfo, params->bindInfoCount); - params->result = vulkan_queue_from_handle(params->queue)->device->p_vkQueueBindSparse(vulkan_queue_from_handle(params->queue)->host.queue, params->bindInfoCount, pBindInfo_host, params->fence ? vulkan_fence_from_handle(params->fence)->host.fence : 0); + pBindInfo_host = convert_VkBindSparseInfo_array_win64_to_unwrapped_host(ctx, params->pBindInfo, params->bindInfoCount); + params->result = vk_funcs->p_vkQueueBindSparse(params->queue, params->bindInfoCount, pBindInfo_host, params->fence); free_conversion_context(ctx); return STATUS_SUCCESS; } @@ -60325,8 +60199,8 @@ static NTSTATUS thunk32_vkQueueBindSparse(void *args) TRACE("%#x, %u, %#x, 0x%s\n", params->queue, params->bindInfoCount, params->pBindInfo, wine_dbgstr_longlong(params->fence));
init_conversion_context(ctx); - pBindInfo_host = convert_VkBindSparseInfo_array_win32_to_host(ctx, (const VkBindSparseInfo32 *)UlongToPtr(params->pBindInfo), params->bindInfoCount); - params->result = vulkan_queue_from_handle((VkQueue)UlongToPtr(params->queue))->device->p_vkQueueBindSparse(vulkan_queue_from_handle((VkQueue)UlongToPtr(params->queue))->host.queue, params->bindInfoCount, pBindInfo_host, params->fence ? vulkan_fence_from_handle(params->fence)->host.fence : 0); + pBindInfo_host = convert_VkBindSparseInfo_array_win32_to_unwrapped_host(ctx, (const VkBindSparseInfo32 *)UlongToPtr(params->pBindInfo), params->bindInfoCount); + params->result = vk_funcs->p_vkQueueBindSparse((VkQueue)UlongToPtr(params->queue), params->bindInfoCount, pBindInfo_host, params->fence); free_conversion_context(ctx); return STATUS_SUCCESS; } @@ -61258,12 +61132,10 @@ static NTSTATUS thunk32_vkSetPrivateDataEXT(void *args) static NTSTATUS thunk64_vkSignalSemaphore(void *args) { struct vkSignalSemaphore_params *params = args; - VkSemaphoreSignalInfo pSignalInfo_host;
TRACE("%p, %p\n", params->device, params->pSignalInfo);
- convert_VkSemaphoreSignalInfo_win64_to_host(params->pSignalInfo, &pSignalInfo_host); - params->result = vulkan_device_from_handle(params->device)->p_vkSignalSemaphore(vulkan_device_from_handle(params->device)->host.device, &pSignalInfo_host); + params->result = vk_funcs->p_vkSignalSemaphore(params->device, params->pSignalInfo); return STATUS_SUCCESS; } #endif /* _WIN64 */ @@ -61280,8 +61152,8 @@ static NTSTATUS thunk32_vkSignalSemaphore(void *args)
TRACE("%#x, %#x\n", params->device, params->pSignalInfo);
- convert_VkSemaphoreSignalInfo_win32_to_host((const VkSemaphoreSignalInfo32 *)UlongToPtr(params->pSignalInfo), &pSignalInfo_host); - params->result = vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->p_vkSignalSemaphore(vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->host.device, &pSignalInfo_host); + convert_VkSemaphoreSignalInfo_win32_to_unwrapped_host((const VkSemaphoreSignalInfo32 *)UlongToPtr(params->pSignalInfo), &pSignalInfo_host); + params->result = vk_funcs->p_vkSignalSemaphore((VkDevice)UlongToPtr(params->device), &pSignalInfo_host); return STATUS_SUCCESS; }
@@ -61289,12 +61161,10 @@ static NTSTATUS thunk32_vkSignalSemaphore(void *args) static NTSTATUS thunk64_vkSignalSemaphoreKHR(void *args) { struct vkSignalSemaphoreKHR_params *params = args; - VkSemaphoreSignalInfo pSignalInfo_host;
TRACE("%p, %p\n", params->device, params->pSignalInfo);
- convert_VkSemaphoreSignalInfo_win64_to_host(params->pSignalInfo, &pSignalInfo_host); - params->result = vulkan_device_from_handle(params->device)->p_vkSignalSemaphoreKHR(vulkan_device_from_handle(params->device)->host.device, &pSignalInfo_host); + params->result = vk_funcs->p_vkSignalSemaphoreKHR(params->device, params->pSignalInfo); return STATUS_SUCCESS; } #endif /* _WIN64 */ @@ -61311,8 +61181,8 @@ static NTSTATUS thunk32_vkSignalSemaphoreKHR(void *args)
TRACE("%#x, %#x\n", params->device, params->pSignalInfo);
- convert_VkSemaphoreSignalInfo_win32_to_host((const VkSemaphoreSignalInfo32 *)UlongToPtr(params->pSignalInfo), &pSignalInfo_host); - params->result = vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->p_vkSignalSemaphoreKHR(vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->host.device, &pSignalInfo_host); + convert_VkSemaphoreSignalInfo_win32_to_unwrapped_host((const VkSemaphoreSignalInfo32 *)UlongToPtr(params->pSignalInfo), &pSignalInfo_host); + params->result = vk_funcs->p_vkSignalSemaphoreKHR((VkDevice)UlongToPtr(params->device), &pSignalInfo_host); return STATUS_SUCCESS; }
@@ -61884,8 +61754,8 @@ static NTSTATUS thunk64_vkWaitSemaphores(void *args) TRACE("%p, %p, 0x%s\n", params->device, params->pWaitInfo, wine_dbgstr_longlong(params->timeout));
init_conversion_context(ctx); - convert_VkSemaphoreWaitInfo_win64_to_host(ctx, params->pWaitInfo, &pWaitInfo_host); - params->result = vulkan_device_from_handle(params->device)->p_vkWaitSemaphores(vulkan_device_from_handle(params->device)->host.device, &pWaitInfo_host, params->timeout); + convert_VkSemaphoreWaitInfo_win64_to_unwrapped_host(ctx, params->pWaitInfo, &pWaitInfo_host); + params->result = vk_funcs->p_vkWaitSemaphores(params->device, &pWaitInfo_host, params->timeout); free_conversion_context(ctx); return STATUS_SUCCESS; } @@ -61907,8 +61777,8 @@ static NTSTATUS thunk32_vkWaitSemaphores(void *args) TRACE("%#x, %#x, 0x%s\n", params->device, params->pWaitInfo, wine_dbgstr_longlong(params->timeout));
init_conversion_context(ctx); - convert_VkSemaphoreWaitInfo_win32_to_host(ctx, (const VkSemaphoreWaitInfo32 *)UlongToPtr(params->pWaitInfo), &pWaitInfo_host); - params->result = vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->p_vkWaitSemaphores(vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->host.device, &pWaitInfo_host, params->timeout); + convert_VkSemaphoreWaitInfo_win32_to_unwrapped_host(ctx, (const VkSemaphoreWaitInfo32 *)UlongToPtr(params->pWaitInfo), &pWaitInfo_host); + params->result = vk_funcs->p_vkWaitSemaphores((VkDevice)UlongToPtr(params->device), &pWaitInfo_host, params->timeout); free_conversion_context(ctx); return STATUS_SUCCESS; } @@ -61924,8 +61794,8 @@ static NTSTATUS thunk64_vkWaitSemaphoresKHR(void *args) TRACE("%p, %p, 0x%s\n", params->device, params->pWaitInfo, wine_dbgstr_longlong(params->timeout));
init_conversion_context(ctx); - convert_VkSemaphoreWaitInfo_win64_to_host(ctx, params->pWaitInfo, &pWaitInfo_host); - params->result = vulkan_device_from_handle(params->device)->p_vkWaitSemaphoresKHR(vulkan_device_from_handle(params->device)->host.device, &pWaitInfo_host, params->timeout); + convert_VkSemaphoreWaitInfo_win64_to_unwrapped_host(ctx, params->pWaitInfo, &pWaitInfo_host); + params->result = vk_funcs->p_vkWaitSemaphoresKHR(params->device, &pWaitInfo_host, params->timeout); free_conversion_context(ctx); return STATUS_SUCCESS; } @@ -61947,8 +61817,8 @@ static NTSTATUS thunk32_vkWaitSemaphoresKHR(void *args) TRACE("%#x, %#x, 0x%s\n", params->device, params->pWaitInfo, wine_dbgstr_longlong(params->timeout));
init_conversion_context(ctx); - convert_VkSemaphoreWaitInfo_win32_to_host(ctx, (const VkSemaphoreWaitInfo32 *)UlongToPtr(params->pWaitInfo), &pWaitInfo_host); - params->result = vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->p_vkWaitSemaphoresKHR(vulkan_device_from_handle((VkDevice)UlongToPtr(params->device))->host.device, &pWaitInfo_host, params->timeout); + convert_VkSemaphoreWaitInfo_win32_to_unwrapped_host(ctx, (const VkSemaphoreWaitInfo32 *)UlongToPtr(params->pWaitInfo), &pWaitInfo_host); + params->result = vk_funcs->p_vkWaitSemaphoresKHR((VkDevice)UlongToPtr(params->device), &pWaitInfo_host, params->timeout); free_conversion_context(ctx); return STATUS_SUCCESS; } diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index d2e2db3e360..6e37a462ef2 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -340,17 +340,24 @@ struct vulkan_funcs PFN_vkGetPhysicalDeviceSurfaceFormats2KHR p_vkGetPhysicalDeviceSurfaceFormats2KHR; PFN_vkGetPhysicalDeviceSurfaceFormatsKHR p_vkGetPhysicalDeviceSurfaceFormatsKHR; PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR p_vkGetPhysicalDeviceWin32PresentationSupportKHR; + PFN_vkGetSemaphoreCounterValue p_vkGetSemaphoreCounterValue; + PFN_vkGetSemaphoreCounterValueKHR p_vkGetSemaphoreCounterValueKHR; PFN_vkGetSemaphoreWin32HandleKHR p_vkGetSemaphoreWin32HandleKHR; PFN_vkImportFenceWin32HandleKHR p_vkImportFenceWin32HandleKHR; PFN_vkImportSemaphoreWin32HandleKHR p_vkImportSemaphoreWin32HandleKHR; PFN_vkMapMemory p_vkMapMemory; PFN_vkMapMemory2KHR p_vkMapMemory2KHR; + PFN_vkQueueBindSparse p_vkQueueBindSparse; PFN_vkQueuePresentKHR p_vkQueuePresentKHR; PFN_vkQueueSubmit p_vkQueueSubmit; PFN_vkQueueSubmit2 p_vkQueueSubmit2; PFN_vkQueueSubmit2KHR p_vkQueueSubmit2KHR; + PFN_vkSignalSemaphore p_vkSignalSemaphore; + PFN_vkSignalSemaphoreKHR p_vkSignalSemaphoreKHR; PFN_vkUnmapMemory p_vkUnmapMemory; PFN_vkUnmapMemory2KHR p_vkUnmapMemory2KHR; + PFN_vkWaitSemaphores p_vkWaitSemaphores; + PFN_vkWaitSemaphoresKHR p_vkWaitSemaphoresKHR; };
/* interface between win32u and the user drivers */