From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/winevulkan/loader.c | 5 ++++- dlls/winevulkan/loader_thunks.h | 1 - dlls/winevulkan/make_vulkan | 15 +-------------- dlls/winevulkan/vulkan.c | 8 +++----- dlls/winevulkan/vulkan_thunks.c | 5 ++--- dlls/winevulkan/vulkan_thunks.h | 2 +- 6 files changed, 11 insertions(+), 25 deletions(-) diff --git a/dlls/winevulkan/loader.c b/dlls/winevulkan/loader.c index 649aec5448c..684d201339f 100644 --- a/dlls/winevulkan/loader.c +++ b/dlls/winevulkan/loader.c @@ -688,16 +688,19 @@ VkResult WINAPI vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateIn if (!(cmd_pool = vulkan_client_object_create(sizeof(*cmd_pool)))) return VK_ERROR_OUT_OF_HOST_MEMORY; list_init(&cmd_pool->command_buffers); + *ret = (UINT_PTR)cmd_pool; params.device = device; params.pCreateInfo = create_info; params.pAllocator = allocator; params.pCommandPool = ret; - params.client_ptr = cmd_pool; status = UNIX_CALL(vkCreateCommandPool, ¶ms); assert(!status); if (params.result) + { free(cmd_pool); + *ret = 0; + } return params.result; } diff --git a/dlls/winevulkan/loader_thunks.h b/dlls/winevulkan/loader_thunks.h index e07b48101df..574cd3380bb 100644 --- a/dlls/winevulkan/loader_thunks.h +++ b/dlls/winevulkan/loader_thunks.h @@ -3081,7 +3081,6 @@ struct vkCreateCommandPool_params const VkCommandPoolCreateInfo *pCreateInfo; const VkAllocationCallbacks *pAllocator; VkCommandPool *pCommandPool; - void *client_ptr; VkResult result; }; diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index ac2cfeff1b9..b0ef5acb376 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -180,7 +180,6 @@ PERF_CRITICAL_FUNCTIONS = [ # - dispatch (default: True): set whether we need a function pointer in the device / instance dispatch table. FUNCTION_OVERRIDES = { # Device functions - "vkCreateCommandPool" : {"extra_param" : "client_ptr"}, "vkGetDeviceProcAddr" : {"dispatch" : False}, } @@ -603,7 +602,6 @@ class Function(object): # For some functions we need some extra metadata from FUNCTION_OVERRIDES. func_info = FUNCTION_OVERRIDES.get(self.name, {}) self.dispatch = func_info.get("dispatch", True) - self.extra_param = func_info.get("extra_param", None) # Required is set while parsing which APIs and types are required # and is used by the code generation. @@ -718,10 +716,8 @@ class Function(object): return pfn def prototype(self, call_conv="", prefix="", is_thunk=False, suffix=""): - extra = [f"void *{self.extra_param}"] if is_thunk and self.extra_param else [] params = [p.definition() for p in self.params] - params = ", ".join(params + extra) - + params = ", ".join(params) return f"{self.type} {call_conv}{prefix}{self.name}({params}){suffix}" def loader_body(self): @@ -802,11 +798,6 @@ class Function(object): # The param itself knows if conversion is needed and applies it when we set conv=True. unwrap = Unwrap.NONE if self.name in MANUAL_UNIX_THUNKS else self.unwrap params = ", ".join([p.variable(conv, unwrap, params_prefix) for p in self.params]) - if self.extra_param: - if conv: - params += ", UlongToPtr({0}{1})".format(params_prefix, self.extra_param) - else: - params += ", {0}{1}".format(params_prefix, self.extra_param) if self.name in MANUAL_UNIX_THUNKS: func_prefix = "wine_" @@ -873,8 +864,6 @@ class Function(object): thunk += " {\n" for p in self.params: thunk += " {0};\n".format(p.definition(conv=True, is_member=True)) - if self.extra_param: - thunk += " PTR32 {0};\n".format(self.extra_param) if self.type != "void": thunk += " {0} result;\n".format(self.type) thunk += " } *params = args;\n" @@ -2767,8 +2756,6 @@ class Generator(object): f.write("{\n"); for p in vk_func.params: f.write(" {0};\n".format(p.definition(is_member=True))) - if vk_func.extra_param: - f.write(" void *{0};\n".format(vk_func.extra_param)) if vk_func.type != "void": f.write(" {0} result;\n".format(vk_func.type)) f.write("};\n\n"); diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 0f49148ee15..5484c6d7f4d 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -470,13 +470,12 @@ void wine_vkFreeCommandBuffers(VkDevice client_device, VkCommandPool command_poo wine_vk_free_command_buffers(device, pool, count, buffers); } -VkResult wine_vkCreateCommandPool(VkDevice client_device, const VkCommandPoolCreateInfo *info, - const VkAllocationCallbacks *allocator, VkCommandPool *command_pool, - void *client_ptr) +VkResult wine_vkCreateCommandPool(VkDevice client_device, const VkCommandPoolCreateInfo *info, const VkAllocationCallbacks *allocator, + VkCommandPool *client_command_pool_ptr) { + struct vk_command_pool *client_command_pool = command_pool_from_handle(*client_command_pool_ptr); struct vulkan_device *device = vulkan_device_from_handle(client_device); struct vulkan_instance *instance = device->physical_device->instance; - struct vk_command_pool *client_command_pool = client_ptr; VkCommandPool host_command_pool; struct wine_cmd_pool *object; VkResult res; @@ -497,7 +496,6 @@ VkResult wine_vkCreateCommandPool(VkDevice client_device, const VkCommandPoolCre vulkan_object_init_ptr(&object->obj, host_command_pool, &client_command_pool->obj); instance->p_insert_object(instance, &object->obj); - *command_pool = object->client.command_pool; return VK_SUCCESS; } diff --git a/dlls/winevulkan/vulkan_thunks.c b/dlls/winevulkan/vulkan_thunks.c index ba411b02c84..b7ae0b562d1 100644 --- a/dlls/winevulkan/vulkan_thunks.c +++ b/dlls/winevulkan/vulkan_thunks.c @@ -50719,7 +50719,7 @@ static NTSTATUS thunk64_vkCreateCommandPool(void *args) TRACE("%p, %p, %p, %p\n", params->device, params->pCreateInfo, params->pAllocator, params->pCommandPool); - params->result = wine_vkCreateCommandPool(params->device, params->pCreateInfo, params->pAllocator, params->pCommandPool, params->client_ptr); + params->result = wine_vkCreateCommandPool(params->device, params->pCreateInfo, params->pAllocator, params->pCommandPool); return STATUS_SUCCESS; } #endif /* _WIN64 */ @@ -50732,7 +50732,6 @@ static NTSTATUS thunk32_vkCreateCommandPool(void *args) PTR32 pCreateInfo; PTR32 pAllocator; PTR32 pCommandPool; - PTR32 client_ptr; VkResult result; } *params = args; VkCommandPoolCreateInfo pCreateInfo_host; @@ -50743,7 +50742,7 @@ static NTSTATUS thunk32_vkCreateCommandPool(void *args) init_conversion_context(ctx); convert_VkCommandPoolCreateInfo_win32_to_host(ctx, (const VkCommandPoolCreateInfo32 *)UlongToPtr(params->pCreateInfo), &pCreateInfo_host); - params->result = wine_vkCreateCommandPool((VkDevice)UlongToPtr(params->device), &pCreateInfo_host, (const VkAllocationCallbacks *)UlongToPtr(params->pAllocator), (VkCommandPool *)UlongToPtr(params->pCommandPool), UlongToPtr(params->client_ptr)); + params->result = wine_vkCreateCommandPool((VkDevice)UlongToPtr(params->device), &pCreateInfo_host, (const VkAllocationCallbacks *)UlongToPtr(params->pAllocator), (VkCommandPool *)UlongToPtr(params->pCommandPool)); free_conversion_context(ctx); return STATUS_SUCCESS; } diff --git a/dlls/winevulkan/vulkan_thunks.h b/dlls/winevulkan/vulkan_thunks.h index 52af356d5c6..cf07f953eff 100644 --- a/dlls/winevulkan/vulkan_thunks.h +++ b/dlls/winevulkan/vulkan_thunks.h @@ -22,7 +22,7 @@ /* Functions for which we have custom implementations outside of the thunks. */ VkResult wine_vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo *pAllocateInfo, VkCommandBuffer *pCommandBuffers); -VkResult wine_vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkCommandPool *pCommandPool, void *client_ptr); +VkResult wine_vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkCommandPool *pCommandPool); VkResult wine_vkCreateDebugReportCallbackEXT(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDebugReportCallbackEXT *pCallback); VkResult wine_vkCreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerEXT *pMessenger); VkResult wine_vkCreateDeferredOperationKHR(VkDevice device, const VkAllocationCallbacks *pAllocator, VkDeferredOperationKHR *pDeferredOperation); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9942