=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3d12: Load vulkan-1.dll once.

Alexandre Julliard julliard at winehq.org
Fri Mar 22 16:06:19 CDT 2019


Module: wine
Branch: master
Commit: a29e6b8b772c1f10dbfc3d82cdb44cadf00ef5b6
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a29e6b8b772c1f10dbfc3d82cdb44cadf00ef5b6

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Fri Mar 22 09:42:02 2019 +0100

d3d12: Load vulkan-1.dll once.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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




More information about the wine-cvs mailing list