Module: wine Branch: master Commit: a29e6b8b772c1f10dbfc3d82cdb44cadf00ef5b6 URL: https://source.winehq.org/git/wine.git/?a=commit;h=a29e6b8b772c1f10dbfc3d82c...
Author: Józef Kucia jkucia@codeweavers.com Date: Fri Mar 22 09:42:02 2019 +0100
d3d12: Load vulkan-1.dll once.
Signed-off-by: Józef Kucia jkucia@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/d3d12/d3d12_main.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d12/d3d12_main.c b/dlls/d3d12/d3d12_main.c index 8a199aa..fff3acb 100644 --- a/dlls/d3d12/d3d12_main.c +++ b/dlls/d3d12/d3d12_main.c @@ -47,11 +47,25 @@ WINE_DECLARE_DEBUG_CHANNEL(winediag);
#ifdef USE_WIN32_VULKAN
+static HMODULE vulkan_module; + /* FIXME: We should unload vulkan-1.dll. */ +static BOOL WINAPI load_vulkan_dll_once(INIT_ONCE *once, void *param, void **context) +{ + vulkan_module = LoadLibraryA("vulkan-1.dll"); + return TRUE; +} + static PFN_vkGetInstanceProcAddr load_vulkan(void) { - HMODULE vulkan = LoadLibraryA("vulkan-1.dll"); - return (void *)GetProcAddress(vulkan, "vkGetInstanceProcAddr"); + static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT; + + InitOnceExecuteOnce(&init_once, load_vulkan_dll_once, NULL, NULL); + + if (vulkan_module) + return (void *)GetProcAddress(vulkan_module, "vkGetInstanceProcAddr"); + + return NULL; }
#else