[PATCH 1/4] d3d12: Load vulkan-1.dll once.
Józef Kucia
jkucia at codeweavers.com
Fri Mar 22 03:42:02 CDT 2019
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
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 8a199aadc35f..fff3acb9cd72 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
--
2.19.2
More information about the wine-devel
mailing list