Jacek Caban : winevulkan: Move Vulkan calls to Unix lib.

Alexandre Julliard julliard at winehq.org
Fri Apr 16 15:56:23 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Apr 16 15:49:18 2021 +0200

winevulkan: Move Vulkan calls to Unix lib.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winevulkan/loader.c        | 11 +++++------
 dlls/winevulkan/make_vulkan     |  5 +++++
 dlls/winevulkan/vulkan.c        | 13 +++++++++++--
 dlls/winevulkan/vulkan_thunks.c |  4 ++++
 4 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/dlls/winevulkan/loader.c b/dlls/winevulkan/loader.c
index 29c8f5902d3..769724fe20d 100644
--- a/dlls/winevulkan/loader.c
+++ b/dlls/winevulkan/loader.c
@@ -21,6 +21,7 @@
 
 #include "windef.h"
 #include "winbase.h"
+#include "winternl.h"
 #include "winreg.h"
 #include "winuser.h"
 #include "initguid.h"
@@ -218,10 +219,8 @@ static BOOL WINAPI wine_vk_init(INIT_ONCE *once, void *param, void **context)
     ReleaseDC(0, hdc);
     if (!driver)
         ERR("Failed to load Wine graphics driver supporting Vulkan.\n");
-    else
-        unix_funcs = unix_vk_init(driver);
 
-    return driver != NULL;
+    return driver && !__wine_init_unix_lib(hinstance, DLL_PROCESS_ATTACH, driver, &unix_funcs);
 }
 
 static BOOL  wine_vk_init_once(void)
@@ -239,7 +238,7 @@ VkResult WINAPI wine_vkCreateInstance(const VkInstanceCreateInfo *create_info,
     if(!wine_vk_init_once())
         return VK_ERROR_INITIALIZATION_FAILED;
 
-    return unix_vkCreateInstance(create_info, allocator, instance);
+    return unix_funcs->p_vkCreateInstance(create_info, allocator, instance);
 }
 
 VkResult WINAPI wine_vkEnumerateInstanceExtensionProperties(const char *layer_name,
@@ -259,7 +258,7 @@ VkResult WINAPI wine_vkEnumerateInstanceExtensionProperties(const char *layer_na
         return VK_SUCCESS;
     }
 
-    return unix_vkEnumerateInstanceExtensionProperties(layer_name, count, properties);
+    return unix_funcs->p_vkEnumerateInstanceExtensionProperties(layer_name, count, properties);
 }
 
 VkResult WINAPI wine_vkEnumerateInstanceVersion(uint32_t *version)
@@ -272,7 +271,7 @@ VkResult WINAPI wine_vkEnumerateInstanceVersion(uint32_t *version)
         return VK_SUCCESS;
     }
 
-    return unix_vkEnumerateInstanceVersion(version);
+    return unix_funcs->p_vkEnumerateInstanceVersion(version);
 }
 
 static HANDLE get_display_device_init_mutex(void)
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
index fad07d8cc8e..ef24cbfd262 100755
--- a/dlls/winevulkan/make_vulkan
+++ b/dlls/winevulkan/make_vulkan
@@ -2263,6 +2263,11 @@ class VkGenerator(object):
 
     def generate_thunks_c(self, f, prefix):
         self._generate_copyright(f)
+
+        f.write("#if 0\n")
+        f.write("#pragma makedep unix\n")
+        f.write("#endif\n\n")
+
         f.write("#include \"config.h\"\n")
         f.write("#include \"wine/port.h\"\n\n")
 
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
index f5876587b5a..1070ccec115 100644
--- a/dlls/winevulkan/vulkan.c
+++ b/dlls/winevulkan/vulkan.c
@@ -17,11 +17,17 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#if 0
+#pragma makedep unix
+#endif
+
 #include "config.h"
 #include <time.h>
 #include <stdarg.h>
 #include <stdlib.h>
 
+#include "ntstatus.h"
+#define WIN32_NO_STATUS
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
@@ -448,11 +454,14 @@ static void wine_vk_device_free(struct VkDevice_T *device)
     free(device);
 }
 
-const struct unix_funcs *unix_vk_init(const struct vulkan_funcs *driver)
+NTSTATUS CDECL __wine_init_unix_lib(HMODULE module, DWORD reason, const void *driver, void *ptr_out)
 {
+    if (reason != DLL_PROCESS_ATTACH) return STATUS_SUCCESS;
+
     vk_funcs = driver;
     p_vkEnumerateInstanceVersion = vk_funcs->p_vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceVersion");
-    return &loader_funcs;
+    *(const struct unix_funcs **)ptr_out = &loader_funcs;
+    return STATUS_SUCCESS;
 }
 
 /* Helper function for converting between win32 and host compatible VkInstanceCreateInfo.
diff --git a/dlls/winevulkan/vulkan_thunks.c b/dlls/winevulkan/vulkan_thunks.c
index ec20a7a24fe..2880e98d8b1 100644
--- a/dlls/winevulkan/vulkan_thunks.c
+++ b/dlls/winevulkan/vulkan_thunks.c
@@ -9,6 +9,10 @@
  *
  */
 
+#if 0
+#pragma makedep unix
+#endif
+
 #include "config.h"
 #include "wine/port.h"
 




More information about the wine-cvs mailing list