From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winevulkan/loader.c | 10 +++++++--- dlls/winevulkan/vulkan.c | 16 ++++++++-------- dlls/winevulkan/vulkan_loader.h | 24 ++++++++++++------------ dlls/winevulkan/vulkan_private.h | 10 ++++------ 4 files changed, 31 insertions(+), 29 deletions(-)
diff --git a/dlls/winevulkan/loader.c b/dlls/winevulkan/loader.c index bd49b08057d..6e372d6319e 100644 --- a/dlls/winevulkan/loader.c +++ b/dlls/winevulkan/loader.c @@ -605,15 +605,19 @@ void WINAPI vkFreeCommandBuffers(VkDevice device, VkCommandPool cmd_pool, uint32 static NTSTATUS WINAPI call_vulkan_debug_report_callback( void *args, ULONG size ) { struct wine_vk_debug_report_params *params = args; - VkBool32 ret = params->user_callback(params->flags, params->object_type, params->object_handle, params->location, - params->code, params->layer_prefix, params->message, params->user_data); + PFN_vkDebugReportCallbackEXT callback = (void *)(UINT_PTR)params->user_callback; + void *user_data = (void *)(UINT_PTR)params->user_data; + VkBool32 ret = callback(params->flags, params->object_type, params->object_handle, params->location, + params->code, params->layer_prefix, params->message, user_data); return NtCallbackReturn( &ret, sizeof(ret), STATUS_SUCCESS ); }
static NTSTATUS WINAPI call_vulkan_debug_utils_callback( void *args, ULONG size ) { struct wine_vk_debug_utils_params *params = args; - VkBool32 ret = params->user_callback(params->severity, params->message_types, ¶ms->data, params->user_data); + PFN_vkDebugUtilsMessengerCallbackEXT callback = (void *)(UINT_PTR)params->user_callback; + void *user_data = (void *)(UINT_PTR)params->user_data; + VkBool32 ret = callback(params->severity, params->message_types, ¶ms->data, user_data); return NtCallbackReturn( &ret, sizeof(ret), STATUS_SUCCESS ); }
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index f6e06bcc085..835f8edddfe 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -600,8 +600,8 @@ static VkResult wine_vk_instance_convert_create_info(struct conversion_context *
object->utils_messengers[i].instance = object; object->utils_messengers[i].host_debug_messenger = VK_NULL_HANDLE; - object->utils_messengers[i].user_callback = debug_utils_messenger->pfnUserCallback; - object->utils_messengers[i].user_data = debug_utils_messenger->pUserData; + object->utils_messengers[i].user_callback = (UINT_PTR)debug_utils_messenger->pfnUserCallback; + object->utils_messengers[i].user_data = (UINT_PTR)debug_utils_messenger->pUserData;
/* convert_VkInstanceCreateInfo_* already copied the chain, so we can modify it in-place. */ debug_utils_messenger->pfnUserCallback = (void *) &debug_utils_callback_conversion; @@ -612,8 +612,8 @@ static VkResult wine_vk_instance_convert_create_info(struct conversion_context * { object->default_callback.instance = object; object->default_callback.host_debug_callback = VK_NULL_HANDLE; - object->default_callback.user_callback = debug_report_callback->pfnCallback; - object->default_callback.user_data = debug_report_callback->pUserData; + object->default_callback.user_callback = (UINT_PTR)debug_report_callback->pfnCallback; + object->default_callback.user_data = (UINT_PTR)debug_report_callback->pUserData;
debug_report_callback->pfnCallback = (void *) &debug_report_callback_conversion; debug_report_callback->pUserData = &object->default_callback; @@ -2283,8 +2283,8 @@ VkResult wine_vkCreateDebugUtilsMessengerEXT(VkInstance handle, return VK_ERROR_OUT_OF_HOST_MEMORY;
object->instance = instance; - object->user_callback = create_info->pfnUserCallback; - object->user_data = create_info->pUserData; + object->user_callback = (UINT_PTR)create_info->pfnUserCallback; + object->user_data = (UINT_PTR)create_info->pUserData;
wine_create_info = *create_info;
@@ -2338,8 +2338,8 @@ VkResult wine_vkCreateDebugReportCallbackEXT(VkInstance handle, return VK_ERROR_OUT_OF_HOST_MEMORY;
object->instance = instance; - object->user_callback = create_info->pfnCallback; - object->user_data = create_info->pUserData; + object->user_callback = (UINT_PTR)create_info->pfnCallback; + object->user_data = (UINT_PTR)create_info->pUserData;
wine_create_info = *create_info;
diff --git a/dlls/winevulkan/vulkan_loader.h b/dlls/winevulkan/vulkan_loader.h index 710c07772fc..275aff425a7 100644 --- a/dlls/winevulkan/vulkan_loader.h +++ b/dlls/winevulkan/vulkan_loader.h @@ -109,24 +109,24 @@ void *wine_vk_get_instance_proc_addr(const char *name);
struct wine_vk_debug_utils_params { - PFN_vkDebugUtilsMessengerCallbackEXT user_callback; - void *user_data; + UINT64 user_callback; /* client pointer */ + UINT64 user_data; /* client pointer */
- VkDebugUtilsMessageSeverityFlagBitsEXT severity; - VkDebugUtilsMessageTypeFlagsEXT message_types; + UINT32 severity; + UINT32 message_types; VkDebugUtilsMessengerCallbackDataEXT data; };
struct wine_vk_debug_report_params { - PFN_vkDebugReportCallbackEXT user_callback; - void *user_data; - - VkDebugReportFlagsEXT flags; - VkDebugReportObjectTypeEXT object_type; - uint64_t object_handle; - size_t location; - int32_t code; + UINT64 user_callback; /* client pointer */ + UINT64 user_data; /* client pointer */ + + UINT32 flags; + UINT32 object_type; + UINT64 object_handle; + UINT64 location; + UINT32 code; const char *layer_prefix; const char *message; }; diff --git a/dlls/winevulkan/vulkan_private.h b/dlls/winevulkan/vulkan_private.h index 5e66a6c9670..b4cbf12c949 100644 --- a/dlls/winevulkan/vulkan_private.h +++ b/dlls/winevulkan/vulkan_private.h @@ -103,9 +103,8 @@ struct wine_debug_report_callback struct wine_instance *instance; /* parent */ VkDebugReportCallbackEXT host_debug_callback;
- /* application callback + data */ - PFN_vkDebugReportCallbackEXT user_callback; - void *user_data; + UINT64 user_callback; /* client pointer */ + UINT64 user_data; /* client pointer */
struct wrapper_entry wrapper_entry; }; @@ -200,9 +199,8 @@ struct wine_debug_utils_messenger struct wine_instance *instance; /* parent */ VkDebugUtilsMessengerEXT host_debug_messenger;
- /* application callback + data */ - PFN_vkDebugUtilsMessengerCallbackEXT user_callback; - void *user_data; + UINT64 user_callback; /* client pointer */ + UINT64 user_data; /* client pointer */
struct wrapper_entry wrapper_entry; };