From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 77 ++++++++++++++++++++++++++++ dlls/winevulkan/make_vulkan | 3 ++ dlls/winevulkan/vulkan_thunks.c | 90 ++++++++++++++++++++------------- include/wine/vulkan_driver.h | 5 +- 4 files changed, 138 insertions(+), 37 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index da86d34732e..8517e7217f9 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -1041,6 +1041,80 @@ static VkResult win32u_vkQueuePresentKHR( VkQueue client_queue, const VkPresentI return res; }
+static VkResult win32u_vkQueueSubmit( VkQueue client_queue, uint32_t count, const VkSubmitInfo *submits, VkFence fence ) +{ + struct vulkan_queue *queue = vulkan_queue_from_handle( client_queue ); + struct vulkan_device *device = queue->device; + + TRACE( "queue %p, count %u, submits %p, fence 0x%s\n", queue, count, submits, wine_dbgstr_longlong( fence ) ); + + for (uint32_t i = 0; i < count; i++) + { + VkSubmitInfo *submit = (VkSubmitInfo *)submits + i; /* cast away const, chain has been copied in the thunks */ + VkBaseOutStructure **next, *prev = (VkBaseOutStructure *)submit; + + for (uint32_t j = 0; j < submit->commandBufferCount; j++) + { + VkCommandBuffer *command_buffers = (VkCommandBuffer *)submit->pCommandBuffers; /* cast away const, chain has been copied in the thunks */ + struct vulkan_command_buffer *command_buffer = vulkan_command_buffer_from_handle( command_buffers[j] ); + command_buffers[j] = command_buffer->host.command_buffer; + } + + for (next = &prev->pNext; *next; prev = *next, next = &(*next)->pNext) + { + switch ((*next)->sType) + { + case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO: break; + case VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT: break; + case VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM: break; + case VK_STRUCTURE_TYPE_LATENCY_SUBMISSION_PRESENT_ID_NV: break; + case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR: break; + case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO: break; + case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO: break; + default: FIXME( "Unhandled sType %u.\n", (*next)->sType ); break; + } + } + } + + return device->p_vkQueueSubmit( queue->host.queue, count, submits, fence ); +} + +static VkResult win32u_vkQueueSubmit2( VkQueue client_queue, uint32_t count, const VkSubmitInfo2 *submits, VkFence fence ) +{ + struct vulkan_queue *queue = vulkan_queue_from_handle( client_queue ); + struct vulkan_device *device = queue->device; + + TRACE( "queue %p, count %u, submits %p, fence 0x%s\n", queue, count, submits, wine_dbgstr_longlong( fence ) ); + + for (uint32_t i = 0; i < count; i++) + { + VkSubmitInfo2 *submit = (VkSubmitInfo2 *)submits + i; /* cast away const, chain has been copied in the thunks */ + VkBaseOutStructure **next, *prev = (VkBaseOutStructure *)submit; + + for (uint32_t j = 0; j < submit->commandBufferInfoCount; j++) + { + VkCommandBufferSubmitInfoKHR *command_buffer_infos = (VkCommandBufferSubmitInfoKHR *)submit->pCommandBufferInfos; /* cast away const, chain has been copied in the thunks */ + struct vulkan_command_buffer *command_buffer = vulkan_command_buffer_from_handle( command_buffer_infos[j].commandBuffer ); + command_buffer_infos[j].commandBuffer = command_buffer->host.command_buffer; + if (command_buffer_infos->pNext) FIXME( "Unhandled struct chain\n" ); + } + + for (next = &prev->pNext; *next; prev = *next, next = &(*next)->pNext) + { + switch ((*next)->sType) + { + case VK_STRUCTURE_TYPE_FRAME_BOUNDARY_EXT: break; + case VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM: break; + case VK_STRUCTURE_TYPE_LATENCY_SUBMISSION_PRESENT_ID_NV: break; + case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR: break; + default: FIXME( "Unhandled sType %u.\n", (*next)->sType ); break; + } + } + } + + return device->p_vkQueueSubmit2( queue->host.queue, count, submits, fence ); +} + static const char *win32u_get_host_surface_extension(void) { return driver_funcs->p_get_host_surface_extension(); @@ -1076,6 +1150,9 @@ static struct vulkan_funcs vulkan_funcs = .p_vkMapMemory = win32u_vkMapMemory, .p_vkMapMemory2KHR = win32u_vkMapMemory2KHR, .p_vkQueuePresentKHR = win32u_vkQueuePresentKHR, + .p_vkQueueSubmit = win32u_vkQueueSubmit, + .p_vkQueueSubmit2 = win32u_vkQueueSubmit2, + .p_vkQueueSubmit2KHR = win32u_vkQueueSubmit2, .p_vkUnmapMemory = win32u_vkUnmapMemory, .p_vkUnmapMemory2KHR = win32u_vkUnmapMemory2KHR, .p_get_host_surface_extension = win32u_get_host_surface_extension, diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index e3506d5eb97..2e71d01d1a8 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -236,6 +236,9 @@ USER_DRIVER_FUNCS = { "vkMapMemory", "vkMapMemory2KHR", "vkQueuePresentKHR", + "vkQueueSubmit", + "vkQueueSubmit2", + "vkQueueSubmit2KHR", "vkUnmapMemory", "vkUnmapMemory2KHR", } diff --git a/dlls/winevulkan/vulkan_thunks.c b/dlls/winevulkan/vulkan_thunks.c index edeff6d780b..9edf176e8d6 100644 --- a/dlls/winevulkan/vulkan_thunks.c +++ b/dlls/winevulkan/vulkan_thunks.c @@ -39517,7 +39517,25 @@ static void convert_VkPresentInfoKHR_win32_to_unwrapped_host(struct conversion_c }
#ifdef _WIN64 -static void convert_VkSubmitInfo_win64_to_host(struct conversion_context *ctx, const VkSubmitInfo *in, VkSubmitInfo *out) +static const VkCommandBuffer *convert_VkCommandBuffer_array_win64_to_unwrapped_host(struct conversion_context *ctx, const VkCommandBuffer *in, uint32_t count) +{ + VkCommandBuffer *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 void convert_VkSubmitInfo_win64_to_unwrapped_host(struct conversion_context *ctx, const VkSubmitInfo *in, VkSubmitInfo *out) { const VkBaseInStructure *in_header; VkBaseOutStructure *out_header = (void *)out; @@ -39530,7 +39548,7 @@ static void convert_VkSubmitInfo_win64_to_host(struct conversion_context *ctx, c out->pWaitSemaphores = in->pWaitSemaphores; out->pWaitDstStageMask = in->pWaitDstStageMask; out->commandBufferCount = in->commandBufferCount; - out->pCommandBuffers = convert_VkCommandBuffer_array_win64_to_host(ctx, in->pCommandBuffers, in->commandBufferCount); + out->pCommandBuffers = convert_VkCommandBuffer_array_win64_to_unwrapped_host(ctx, in->pCommandBuffers, in->commandBufferCount); out->signalSemaphoreCount = in->signalSemaphoreCount; out->pSignalSemaphores = in->pSignalSemaphores;
@@ -39641,7 +39659,7 @@ static void convert_VkSubmitInfo_win64_to_host(struct conversion_context *ctx, c #endif /* _WIN64 */
#ifdef _WIN64 -static const VkSubmitInfo *convert_VkSubmitInfo_array_win64_to_host(struct conversion_context *ctx, const VkSubmitInfo *in, uint32_t count) +static const VkSubmitInfo *convert_VkSubmitInfo_array_win64_to_unwrapped_host(struct conversion_context *ctx, const VkSubmitInfo *in, uint32_t count) { VkSubmitInfo *out; unsigned int i; @@ -39651,14 +39669,14 @@ static const VkSubmitInfo *convert_VkSubmitInfo_array_win64_to_host(struct conve out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkSubmitInfo_win64_to_host(ctx, &in[i], &out[i]); + convert_VkSubmitInfo_win64_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; } #endif /* _WIN64 */
-static void convert_VkSubmitInfo_win32_to_host(struct conversion_context *ctx, const VkSubmitInfo32 *in, VkSubmitInfo *out) +static void convert_VkSubmitInfo_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSubmitInfo32 *in, VkSubmitInfo *out) { const VkBaseInStructure32 *in_header; VkBaseOutStructure *out_header = (void *)out; @@ -39671,7 +39689,7 @@ static void convert_VkSubmitInfo_win32_to_host(struct conversion_context *ctx, c out->pWaitSemaphores = UlongToPtr(in->pWaitSemaphores); out->pWaitDstStageMask = UlongToPtr(in->pWaitDstStageMask); out->commandBufferCount = in->commandBufferCount; - out->pCommandBuffers = convert_VkCommandBuffer_array_win32_to_host(ctx, (const PTR32 *)UlongToPtr(in->pCommandBuffers), in->commandBufferCount); + out->pCommandBuffers = convert_VkCommandBuffer_array_win32_to_unwrapped_host(ctx, (const PTR32 *)UlongToPtr(in->pCommandBuffers), in->commandBufferCount); out->signalSemaphoreCount = in->signalSemaphoreCount; out->pSignalSemaphores = UlongToPtr(in->pSignalSemaphores);
@@ -39780,7 +39798,7 @@ static void convert_VkSubmitInfo_win32_to_host(struct conversion_context *ctx, c } }
-static const VkSubmitInfo *convert_VkSubmitInfo_array_win32_to_host(struct conversion_context *ctx, const VkSubmitInfo32 *in, uint32_t count) +static const VkSubmitInfo *convert_VkSubmitInfo_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSubmitInfo32 *in, uint32_t count) { VkSubmitInfo *out; unsigned int i; @@ -39790,14 +39808,14 @@ static const VkSubmitInfo *convert_VkSubmitInfo_array_win32_to_host(struct conve out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkSubmitInfo_win32_to_host(ctx, &in[i], &out[i]); + convert_VkSubmitInfo_win32_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; }
#ifdef _WIN64 -static void convert_VkCommandBufferSubmitInfo_win64_to_host(struct conversion_context *ctx, const VkCommandBufferSubmitInfo *in, VkCommandBufferSubmitInfo *out) +static void convert_VkCommandBufferSubmitInfo_win64_to_unwrapped_host(struct conversion_context *ctx, const VkCommandBufferSubmitInfo *in, VkCommandBufferSubmitInfo *out) { const VkBaseInStructure *in_header; VkBaseOutStructure *out_header = (void *)out; @@ -39806,7 +39824,7 @@ static void convert_VkCommandBufferSubmitInfo_win64_to_host(struct conversion_co
out->sType = in->sType; out->pNext = NULL; - out->commandBuffer = vulkan_command_buffer_from_handle(in->commandBuffer)->host.command_buffer; + out->commandBuffer = in->commandBuffer; out->deviceMask = in->deviceMask;
for (in_header = (void *)in->pNext; in_header; in_header = (void *)in_header->pNext) @@ -39834,7 +39852,7 @@ static void convert_VkCommandBufferSubmitInfo_win64_to_host(struct conversion_co #endif /* _WIN64 */
#ifdef _WIN64 -static const VkCommandBufferSubmitInfo *convert_VkCommandBufferSubmitInfo_array_win64_to_host(struct conversion_context *ctx, const VkCommandBufferSubmitInfo *in, uint32_t count) +static const VkCommandBufferSubmitInfo *convert_VkCommandBufferSubmitInfo_array_win64_to_unwrapped_host(struct conversion_context *ctx, const VkCommandBufferSubmitInfo *in, uint32_t count) { VkCommandBufferSubmitInfo *out; unsigned int i; @@ -39844,7 +39862,7 @@ static const VkCommandBufferSubmitInfo *convert_VkCommandBufferSubmitInfo_array_ out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkCommandBufferSubmitInfo_win64_to_host(ctx, &in[i], &out[i]); + convert_VkCommandBufferSubmitInfo_win64_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; @@ -39852,7 +39870,7 @@ static const VkCommandBufferSubmitInfo *convert_VkCommandBufferSubmitInfo_array_ #endif /* _WIN64 */
#ifdef _WIN64 -static void convert_VkSubmitInfo2_win64_to_host(struct conversion_context *ctx, const VkSubmitInfo2 *in, VkSubmitInfo2 *out) +static void convert_VkSubmitInfo2_win64_to_unwrapped_host(struct conversion_context *ctx, const VkSubmitInfo2 *in, VkSubmitInfo2 *out) { const VkBaseInStructure *in_header; VkBaseOutStructure *out_header = (void *)out; @@ -39865,7 +39883,7 @@ static void convert_VkSubmitInfo2_win64_to_host(struct conversion_context *ctx, out->waitSemaphoreInfoCount = in->waitSemaphoreInfoCount; out->pWaitSemaphoreInfos = in->pWaitSemaphoreInfos; out->commandBufferInfoCount = in->commandBufferInfoCount; - out->pCommandBufferInfos = convert_VkCommandBufferSubmitInfo_array_win64_to_host(ctx, in->pCommandBufferInfos, in->commandBufferInfoCount); + out->pCommandBufferInfos = convert_VkCommandBufferSubmitInfo_array_win64_to_unwrapped_host(ctx, in->pCommandBufferInfos, in->commandBufferInfoCount); out->signalSemaphoreInfoCount = in->signalSemaphoreInfoCount; out->pSignalSemaphoreInfos = in->pSignalSemaphoreInfos;
@@ -39935,7 +39953,7 @@ static void convert_VkSubmitInfo2_win64_to_host(struct conversion_context *ctx, #endif /* _WIN64 */
#ifdef _WIN64 -static const VkSubmitInfo2 *convert_VkSubmitInfo2_array_win64_to_host(struct conversion_context *ctx, const VkSubmitInfo2 *in, uint32_t count) +static const VkSubmitInfo2 *convert_VkSubmitInfo2_array_win64_to_unwrapped_host(struct conversion_context *ctx, const VkSubmitInfo2 *in, uint32_t count) { VkSubmitInfo2 *out; unsigned int i; @@ -39945,7 +39963,7 @@ static const VkSubmitInfo2 *convert_VkSubmitInfo2_array_win64_to_host(struct con out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkSubmitInfo2_win64_to_host(ctx, &in[i], &out[i]); + convert_VkSubmitInfo2_win64_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; @@ -39982,7 +40000,7 @@ static const VkSemaphoreSubmitInfo *convert_VkSemaphoreSubmitInfo_array_win32_to return out; }
-static void convert_VkCommandBufferSubmitInfo_win32_to_host(struct conversion_context *ctx, const VkCommandBufferSubmitInfo32 *in, VkCommandBufferSubmitInfo *out) +static void convert_VkCommandBufferSubmitInfo_win32_to_unwrapped_host(struct conversion_context *ctx, const VkCommandBufferSubmitInfo32 *in, VkCommandBufferSubmitInfo *out) { const VkBaseInStructure32 *in_header; VkBaseOutStructure *out_header = (void *)out; @@ -39991,7 +40009,7 @@ static void convert_VkCommandBufferSubmitInfo_win32_to_host(struct conversion_co
out->sType = in->sType; out->pNext = NULL; - out->commandBuffer = vulkan_command_buffer_from_handle((VkCommandBuffer)UlongToPtr(in->commandBuffer))->host.command_buffer; + out->commandBuffer = (VkCommandBuffer)UlongToPtr(in->commandBuffer); out->deviceMask = in->deviceMask;
for (in_header = UlongToPtr(in->pNext); in_header; in_header = UlongToPtr(in_header->pNext)) @@ -40017,7 +40035,7 @@ static void convert_VkCommandBufferSubmitInfo_win32_to_host(struct conversion_co } }
-static const VkCommandBufferSubmitInfo *convert_VkCommandBufferSubmitInfo_array_win32_to_host(struct conversion_context *ctx, const VkCommandBufferSubmitInfo32 *in, uint32_t count) +static const VkCommandBufferSubmitInfo *convert_VkCommandBufferSubmitInfo_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkCommandBufferSubmitInfo32 *in, uint32_t count) { VkCommandBufferSubmitInfo *out; unsigned int i; @@ -40027,13 +40045,13 @@ static const VkCommandBufferSubmitInfo *convert_VkCommandBufferSubmitInfo_array_ out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkCommandBufferSubmitInfo_win32_to_host(ctx, &in[i], &out[i]); + convert_VkCommandBufferSubmitInfo_win32_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; }
-static void convert_VkSubmitInfo2_win32_to_host(struct conversion_context *ctx, const VkSubmitInfo232 *in, VkSubmitInfo2 *out) +static void convert_VkSubmitInfo2_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSubmitInfo232 *in, VkSubmitInfo2 *out) { const VkBaseInStructure32 *in_header; VkBaseOutStructure *out_header = (void *)out; @@ -40046,7 +40064,7 @@ static void convert_VkSubmitInfo2_win32_to_host(struct conversion_context *ctx, out->waitSemaphoreInfoCount = in->waitSemaphoreInfoCount; out->pWaitSemaphoreInfos = convert_VkSemaphoreSubmitInfo_array_win32_to_host(ctx, (const VkSemaphoreSubmitInfo32 *)UlongToPtr(in->pWaitSemaphoreInfos), in->waitSemaphoreInfoCount); out->commandBufferInfoCount = in->commandBufferInfoCount; - out->pCommandBufferInfos = convert_VkCommandBufferSubmitInfo_array_win32_to_host(ctx, (const VkCommandBufferSubmitInfo32 *)UlongToPtr(in->pCommandBufferInfos), in->commandBufferInfoCount); + out->pCommandBufferInfos = convert_VkCommandBufferSubmitInfo_array_win32_to_unwrapped_host(ctx, (const VkCommandBufferSubmitInfo32 *)UlongToPtr(in->pCommandBufferInfos), in->commandBufferInfoCount); out->signalSemaphoreInfoCount = in->signalSemaphoreInfoCount; out->pSignalSemaphoreInfos = convert_VkSemaphoreSubmitInfo_array_win32_to_host(ctx, (const VkSemaphoreSubmitInfo32 *)UlongToPtr(in->pSignalSemaphoreInfos), in->signalSemaphoreInfoCount);
@@ -40114,7 +40132,7 @@ static void convert_VkSubmitInfo2_win32_to_host(struct conversion_context *ctx, } }
-static const VkSubmitInfo2 *convert_VkSubmitInfo2_array_win32_to_host(struct conversion_context *ctx, const VkSubmitInfo232 *in, uint32_t count) +static const VkSubmitInfo2 *convert_VkSubmitInfo2_array_win32_to_unwrapped_host(struct conversion_context *ctx, const VkSubmitInfo232 *in, uint32_t count) { VkSubmitInfo2 *out; unsigned int i; @@ -40124,7 +40142,7 @@ static const VkSubmitInfo2 *convert_VkSubmitInfo2_array_win32_to_host(struct con out = conversion_context_alloc(ctx, count * sizeof(*out)); for (i = 0; i < count; i++) { - convert_VkSubmitInfo2_win32_to_host(ctx, &in[i], &out[i]); + convert_VkSubmitInfo2_win32_to_unwrapped_host(ctx, &in[i], &out[i]); }
return out; @@ -58180,8 +58198,8 @@ static NTSTATUS thunk64_vkQueueSubmit(void *args) TRACE("%p, %u, %p, 0x%s\n", params->queue, params->submitCount, params->pSubmits, wine_dbgstr_longlong(params->fence));
init_conversion_context(ctx); - pSubmits_host = convert_VkSubmitInfo_array_win64_to_host(ctx, params->pSubmits, params->submitCount); - params->result = vulkan_queue_from_handle(params->queue)->device->p_vkQueueSubmit(vulkan_queue_from_handle(params->queue)->host.queue, params->submitCount, pSubmits_host, params->fence); + pSubmits_host = convert_VkSubmitInfo_array_win64_to_unwrapped_host(ctx, params->pSubmits, params->submitCount); + params->result = vk_funcs->p_vkQueueSubmit(params->queue, params->submitCount, pSubmits_host, params->fence); free_conversion_context(ctx); return STATUS_SUCCESS; } @@ -58204,8 +58222,8 @@ static NTSTATUS thunk32_vkQueueSubmit(void *args) TRACE("%#x, %u, %#x, 0x%s\n", params->queue, params->submitCount, params->pSubmits, wine_dbgstr_longlong(params->fence));
init_conversion_context(ctx); - pSubmits_host = convert_VkSubmitInfo_array_win32_to_host(ctx, (const VkSubmitInfo32 *)UlongToPtr(params->pSubmits), params->submitCount); - params->result = vulkan_queue_from_handle((VkQueue)UlongToPtr(params->queue))->device->p_vkQueueSubmit(vulkan_queue_from_handle((VkQueue)UlongToPtr(params->queue))->host.queue, params->submitCount, pSubmits_host, params->fence); + pSubmits_host = convert_VkSubmitInfo_array_win32_to_unwrapped_host(ctx, (const VkSubmitInfo32 *)UlongToPtr(params->pSubmits), params->submitCount); + params->result = vk_funcs->p_vkQueueSubmit((VkQueue)UlongToPtr(params->queue), params->submitCount, pSubmits_host, params->fence); free_conversion_context(ctx); return STATUS_SUCCESS; } @@ -58221,8 +58239,8 @@ static NTSTATUS thunk64_vkQueueSubmit2(void *args) TRACE("%p, %u, %p, 0x%s\n", params->queue, params->submitCount, params->pSubmits, wine_dbgstr_longlong(params->fence));
init_conversion_context(ctx); - pSubmits_host = convert_VkSubmitInfo2_array_win64_to_host(ctx, params->pSubmits, params->submitCount); - params->result = vulkan_queue_from_handle(params->queue)->device->p_vkQueueSubmit2(vulkan_queue_from_handle(params->queue)->host.queue, params->submitCount, pSubmits_host, params->fence); + pSubmits_host = convert_VkSubmitInfo2_array_win64_to_unwrapped_host(ctx, params->pSubmits, params->submitCount); + params->result = vk_funcs->p_vkQueueSubmit2(params->queue, params->submitCount, pSubmits_host, params->fence); free_conversion_context(ctx); return STATUS_SUCCESS; } @@ -58245,8 +58263,8 @@ static NTSTATUS thunk32_vkQueueSubmit2(void *args) TRACE("%#x, %u, %#x, 0x%s\n", params->queue, params->submitCount, params->pSubmits, wine_dbgstr_longlong(params->fence));
init_conversion_context(ctx); - pSubmits_host = convert_VkSubmitInfo2_array_win32_to_host(ctx, (const VkSubmitInfo232 *)UlongToPtr(params->pSubmits), params->submitCount); - params->result = vulkan_queue_from_handle((VkQueue)UlongToPtr(params->queue))->device->p_vkQueueSubmit2(vulkan_queue_from_handle((VkQueue)UlongToPtr(params->queue))->host.queue, params->submitCount, pSubmits_host, params->fence); + pSubmits_host = convert_VkSubmitInfo2_array_win32_to_unwrapped_host(ctx, (const VkSubmitInfo232 *)UlongToPtr(params->pSubmits), params->submitCount); + params->result = vk_funcs->p_vkQueueSubmit2((VkQueue)UlongToPtr(params->queue), params->submitCount, pSubmits_host, params->fence); free_conversion_context(ctx); return STATUS_SUCCESS; } @@ -58262,8 +58280,8 @@ static NTSTATUS thunk64_vkQueueSubmit2KHR(void *args) TRACE("%p, %u, %p, 0x%s\n", params->queue, params->submitCount, params->pSubmits, wine_dbgstr_longlong(params->fence));
init_conversion_context(ctx); - pSubmits_host = convert_VkSubmitInfo2_array_win64_to_host(ctx, params->pSubmits, params->submitCount); - params->result = vulkan_queue_from_handle(params->queue)->device->p_vkQueueSubmit2KHR(vulkan_queue_from_handle(params->queue)->host.queue, params->submitCount, pSubmits_host, params->fence); + pSubmits_host = convert_VkSubmitInfo2_array_win64_to_unwrapped_host(ctx, params->pSubmits, params->submitCount); + params->result = vk_funcs->p_vkQueueSubmit2KHR(params->queue, params->submitCount, pSubmits_host, params->fence); free_conversion_context(ctx); return STATUS_SUCCESS; } @@ -58286,8 +58304,8 @@ static NTSTATUS thunk32_vkQueueSubmit2KHR(void *args) TRACE("%#x, %u, %#x, 0x%s\n", params->queue, params->submitCount, params->pSubmits, wine_dbgstr_longlong(params->fence));
init_conversion_context(ctx); - pSubmits_host = convert_VkSubmitInfo2_array_win32_to_host(ctx, (const VkSubmitInfo232 *)UlongToPtr(params->pSubmits), params->submitCount); - params->result = vulkan_queue_from_handle((VkQueue)UlongToPtr(params->queue))->device->p_vkQueueSubmit2KHR(vulkan_queue_from_handle((VkQueue)UlongToPtr(params->queue))->host.queue, params->submitCount, pSubmits_host, params->fence); + pSubmits_host = convert_VkSubmitInfo2_array_win32_to_unwrapped_host(ctx, (const VkSubmitInfo232 *)UlongToPtr(params->pSubmits), params->submitCount); + params->result = vk_funcs->p_vkQueueSubmit2KHR((VkQueue)UlongToPtr(params->queue), params->submitCount, pSubmits_host, params->fence); free_conversion_context(ctx); return STATUS_SUCCESS; } diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index 2c373e08807..32947caa96a 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -47,7 +47,7 @@ struct vulkan_client_object #include "wine/rbtree.h"
/* Wine internal vulkan driver version, needs to be bumped upon vulkan_funcs changes. */ -#define WINE_VULKAN_DRIVER_VERSION 40 +#define WINE_VULKAN_DRIVER_VERSION 41
struct vulkan_object { @@ -217,6 +217,9 @@ struct vulkan_funcs PFN_vkMapMemory p_vkMapMemory; PFN_vkMapMemory2KHR p_vkMapMemory2KHR; PFN_vkQueuePresentKHR p_vkQueuePresentKHR; + PFN_vkQueueSubmit p_vkQueueSubmit; + PFN_vkQueueSubmit2 p_vkQueueSubmit2; + PFN_vkQueueSubmit2KHR p_vkQueueSubmit2KHR; PFN_vkUnmapMemory p_vkUnmapMemory; PFN_vkUnmapMemory2KHR p_vkUnmapMemory2KHR;