Module: wine Branch: master Commit: 395061e3675be486698d7bc6e20dcd9548b837b4 URL: https://gitlab.winehq.org/wine/wine/-/commit/395061e3675be486698d7bc6e20dcd9...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Aug 25 22:30:56 2022 +0200
winevulkan: Use __wine_unix_call for checking Vulkan functions availability.
---
dlls/winevulkan/loader.c | 18 +++++++++++++++--- dlls/winevulkan/loader_thunks.h | 2 ++ dlls/winevulkan/make_vulkan | 6 ++++-- dlls/winevulkan/vulkan.c | 10 ++++++---- dlls/winevulkan/vulkan_loader.h | 14 ++++++++++++-- dlls/winevulkan/vulkan_private.h | 4 ++-- dlls/winevulkan/vulkan_thunks.c | 4 ++-- 7 files changed, 43 insertions(+), 15 deletions(-)
diff --git a/dlls/winevulkan/loader.c b/dlls/winevulkan/loader.c index fa596c1f9e5..d3f20e0d544 100644 --- a/dlls/winevulkan/loader.c +++ b/dlls/winevulkan/loader.c @@ -88,6 +88,18 @@ static void *wine_vk_get_global_proc_addr(const char *name) return NULL; }
+static BOOL is_available_instance_function(VkInstance instance, const char *name) +{ + struct is_available_instance_function_params params = { .instance = instance, .name = name }; + return vk_unix_call(unix_is_available_instance_function, ¶ms); +} + +static BOOL is_available_device_function(VkDevice device, const char *name) +{ + struct is_available_device_function_params params = { .device = device, .name = name }; + return vk_unix_call(unix_is_available_device_function, ¶ms); +} + PFN_vkVoidFunction WINAPI vkGetInstanceProcAddr(VkInstance instance, const char *name) { void *func; @@ -111,7 +123,7 @@ PFN_vkVoidFunction WINAPI vkGetInstanceProcAddr(VkInstance instance, const char return NULL; }
- if (!unix_funcs->p_is_available_instance_function(instance, name)) + if (!is_available_instance_function(instance, name)) return NULL;
func = wine_vk_get_instance_proc_addr(name); @@ -142,7 +154,7 @@ PFN_vkVoidFunction WINAPI vkGetDeviceProcAddr(VkDevice device, const char *name) * vkCommandBuffer or vkQueue. * Loader takes care of filtering of extensions which are enabled or not. */ - if (unix_funcs->p_is_available_device_function(device, name)) + if (is_available_device_function(device, name)) { func = wine_vk_get_device_proc_addr(name); if (func) @@ -176,7 +188,7 @@ void * WINAPI vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char *n { TRACE("%p, %s\n", instance, debugstr_a(name));
- if (!unix_funcs->p_is_available_instance_function(instance, name)) + if (!is_available_instance_function(instance, name)) return NULL;
return wine_vk_get_phys_dev_proc_addr(name); diff --git a/dlls/winevulkan/loader_thunks.h b/dlls/winevulkan/loader_thunks.h index 3816b301f3a..e0c7dfafc55 100644 --- a/dlls/winevulkan/loader_thunks.h +++ b/dlls/winevulkan/loader_thunks.h @@ -15,6 +15,8 @@ enum unix_call { unix_init, + unix_is_available_instance_function, + unix_is_available_device_function, unix_vkAcquireNextImage2KHR, unix_vkAcquireNextImageKHR, unix_vkAcquirePerformanceConfigurationINTEL, diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index cb5d8b948c2..0adbd9a0d3b 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -2839,6 +2839,8 @@ class VkGenerator(object): f.write("const unixlib_entry_t __wine_unix_call_funcs[] =\n") f.write("{\n") f.write(" init_vulkan,\n") + f.write(" vk_is_available_instance_function,\n") + f.write(" vk_is_available_device_function,\n") for vk_func in self.registry.funcs.values(): if not vk_func.needs_exposing(): continue @@ -2857,8 +2859,6 @@ class VkGenerator(object): f.write("const struct unix_funcs loader_funcs =\n") f.write("{\n") f.write(" wine_vk_call,\n") - f.write(" wine_vk_is_available_instance_function,\n") - f.write(" wine_vk_is_available_device_function,\n") f.write("};\n")
def generate_thunks_h(self, f, prefix): @@ -3050,6 +3050,8 @@ class VkGenerator(object): f.write("enum unix_call\n") f.write("{\n") f.write(" unix_init,\n") + f.write(" unix_is_available_instance_function,\n") + f.write(" unix_is_available_device_function,\n") for vk_func in self.registry.funcs.values(): if not vk_func.needs_exposing(): continue diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index da89cdd5ba2..4c2350927d5 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -1872,12 +1872,14 @@ NTSTATUS wine_vkCreateRayTracingPipelinesNV(void *args) return res; }
-BOOL WINAPI wine_vk_is_available_instance_function(VkInstance instance, const char *name) +NTSTATUS vk_is_available_instance_function(void *arg) { - return !!vk_funcs->p_vkGetInstanceProcAddr(instance->instance, name); + struct is_available_instance_function_params *params = arg; + return !!vk_funcs->p_vkGetInstanceProcAddr(params->instance->instance, params->name); }
-BOOL WINAPI wine_vk_is_available_device_function(VkDevice device, const char *name) +NTSTATUS vk_is_available_device_function(void *arg) { - return !!vk_funcs->p_vkGetDeviceProcAddr(device->device, name); + struct is_available_device_function_params *params = arg; + return !!vk_funcs->p_vkGetDeviceProcAddr(params->device->device, params->name); } diff --git a/dlls/winevulkan/vulkan_loader.h b/dlls/winevulkan/vulkan_loader.h index 3ba945dbfcc..97aae6c438d 100644 --- a/dlls/winevulkan/vulkan_loader.h +++ b/dlls/winevulkan/vulkan_loader.h @@ -94,6 +94,18 @@ struct wine_vk_debug_report_params const char *message; };
+struct is_available_instance_function_params +{ + VkInstance instance; + const char *name; +}; + +struct is_available_device_function_params +{ + VkDevice device; + const char *name; +}; + extern const struct unix_funcs *unix_funcs; extern unixlib_handle_t unix_handle DECLSPEC_HIDDEN;
@@ -105,8 +117,6 @@ static inline NTSTATUS vk_unix_call(enum unix_call code, void *params) struct unix_funcs { NTSTATUS (WINAPI *p_vk_call)(enum unix_call, void *); - BOOL (WINAPI *p_is_available_instance_function)(VkInstance, const char *); - BOOL (WINAPI *p_is_available_device_function)(VkDevice, const char *); };
#endif /* __WINE_VULKAN_LOADER_H */ diff --git a/dlls/winevulkan/vulkan_private.h b/dlls/winevulkan/vulkan_private.h index 83a26988e8b..4a0f9b02a97 100644 --- a/dlls/winevulkan/vulkan_private.h +++ b/dlls/winevulkan/vulkan_private.h @@ -214,7 +214,7 @@ NTSTATUS init_vulkan(void *args) DECLSPEC_HIDDEN;
extern const struct unix_funcs loader_funcs;
-BOOL WINAPI wine_vk_is_available_instance_function(VkInstance instance, const char *name) DECLSPEC_HIDDEN; -BOOL WINAPI wine_vk_is_available_device_function(VkDevice device, const char *name) DECLSPEC_HIDDEN; +NTSTATUS vk_is_available_instance_function(void *arg) DECLSPEC_HIDDEN; +NTSTATUS vk_is_available_device_function(void *arg) DECLSPEC_HIDDEN;
#endif /* __WINE_VULKAN_PRIVATE_H */ diff --git a/dlls/winevulkan/vulkan_thunks.c b/dlls/winevulkan/vulkan_thunks.c index 91f476967a9..58c8cb44ecb 100644 --- a/dlls/winevulkan/vulkan_thunks.c +++ b/dlls/winevulkan/vulkan_thunks.c @@ -10289,6 +10289,8 @@ uint64_t wine_vk_unwrap_handle(VkObjectType type, uint64_t handle) const unixlib_entry_t __wine_unix_call_funcs[] = { init_vulkan, + vk_is_available_instance_function, + vk_is_available_device_function, wine_vkAcquireNextImage2KHR, wine_vkAcquireNextImageKHR, wine_vkAcquirePerformanceConfigurationINTEL, @@ -10757,6 +10759,4 @@ static NTSTATUS WINAPI wine_vk_call(enum unix_call code, void *params) const struct unix_funcs loader_funcs = { wine_vk_call, - wine_vk_is_available_instance_function, - wine_vk_is_available_device_function, };