diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index fe742b71493..fae6ab06eff 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -2282,6 +2282,7 @@ class VkGenerator(object): self._generate_copyright(f, spec_file=True) f.write("@ stdcall vk_icdGetInstanceProcAddr(ptr str) wine_vk_icdGetInstanceProcAddr\n") f.write("@ stdcall vk_icdNegotiateLoaderICDInterfaceVersion(ptr) wine_vk_icdNegotiateLoaderICDInterfaceVersion\n") + f.write("@ cdecl -norelay native_vkGetInstanceProcAddrWINE(ptr str)\n") # Export symbols for all Vulkan Core functions. for func in self.registry.funcs.values(): diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 69f4c85ae4e..e588d53f3ca 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -1163,3 +1163,13 @@ static void *wine_vk_get_global_proc_addr(const char *name) } return NULL; } + +/* + * Wrapper around driver vkGetInstanceProcAddr implementation. + * Allows winelib applications to access Vulkan functions with Wine + * additions and native ABI. + */ +void *native_vkGetInstanceProcAddrWINE(VkInstance instance, const char *name) +{ + return vk_funcs->p_vkGetInstanceProcAddr(instance, name); +} diff --git a/dlls/winevulkan/winevulkan.spec b/dlls/winevulkan/winevulkan.spec index 8aab0feafc4..f979458a2c9 100644 --- a/dlls/winevulkan/winevulkan.spec +++ b/dlls/winevulkan/winevulkan.spec @@ -36,6 +36,7 @@ @ stdcall vk_icdGetInstanceProcAddr(ptr str) wine_vk_icdGetInstanceProcAddr @ stdcall vk_icdNegotiateLoaderICDInterfaceVersion(ptr) wine_vk_icdNegotiateLoaderICDInterfaceVersion +@ cdecl -norelay native_vkGetInstanceProcAddrWINE(ptr str) @ stdcall wine_vkAcquireNextImage2KHR(ptr ptr ptr) @ stdcall wine_vkAcquireNextImageKHR(ptr int64 int64 int64 int64 ptr) @ stdcall wine_vkAllocateCommandBuffers(ptr ptr ptr)