Vulkan-Loader-revert-pr260.patch 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. diff --git a/thirdparty/vulkan/loader/loader.c b/thirdparty/vulkan/loader/loader.c
  2. index 87d08d5116..c7cdb47122 100644
  3. --- a/thirdparty/vulkan/loader/loader.c
  4. +++ b/thirdparty/vulkan/loader/loader.c
  5. @@ -7330,7 +7330,7 @@ out:
  6. return result;
  7. }
  8. -#if defined(_WIN32)
  9. +#if defined(_WIN32) && defined(LOADER_DYNAMIC_LIB)
  10. BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved) {
  11. switch (reason) {
  12. case DLL_PROCESS_ATTACH:
  13. diff --git a/thirdparty/vulkan/loader/loader.h b/thirdparty/vulkan/loader/loader.h
  14. index 5e9495521b..56745a968d 100644
  15. --- a/thirdparty/vulkan/loader/loader.h
  16. +++ b/thirdparty/vulkan/loader/loader.h
  17. @@ -420,6 +420,9 @@ static inline void loader_init_dispatch(void *obj, const void *data) {
  18. // Global variables used across files
  19. extern struct loader_struct loader;
  20. extern THREAD_LOCAL_DECL struct loader_instance *tls_instance;
  21. +#if defined(_WIN32) && !defined(LOADER_DYNAMIC_LIB)
  22. +extern LOADER_PLATFORM_THREAD_ONCE_DEFINITION(once_init);
  23. +#endif
  24. extern loader_platform_thread_mutex loader_lock;
  25. extern loader_platform_thread_mutex loader_json_lock;
  26. diff --git a/thirdparty/vulkan/loader/vk_loader_platform.h b/thirdparty/vulkan/loader/vk_loader_platform.h
  27. index 7824e35d6b..62e8e3ae09 100644
  28. --- a/thirdparty/vulkan/loader/vk_loader_platform.h
  29. +++ b/thirdparty/vulkan/loader/vk_loader_platform.h
  30. @@ -330,9 +330,25 @@ typedef HANDLE loader_platform_thread;
  31. // The once init functionality is not used when building a DLL on Windows. This is because there is no way to clean up the
  32. // resources allocated by anything allocated by once init. This isn't a problem for static libraries, but it is for dynamic
  33. // ones. When building a DLL, we use DllMain() instead to allow properly cleaning up resources.
  34. +#if defined(LOADER_DYNAMIC_LIB)
  35. #define LOADER_PLATFORM_THREAD_ONCE_DECLARATION(var)
  36. #define LOADER_PLATFORM_THREAD_ONCE_DEFINITION(var)
  37. #define LOADER_PLATFORM_THREAD_ONCE(ctl, func)
  38. +#else
  39. +#define LOADER_PLATFORM_THREAD_ONCE_DECLARATION(var) INIT_ONCE var = INIT_ONCE_STATIC_INIT;
  40. +#define LOADER_PLATFORM_THREAD_ONCE_DEFINITION(var) INIT_ONCE var;
  41. +#define LOADER_PLATFORM_THREAD_ONCE(ctl, func) loader_platform_thread_once_fn(ctl, func)
  42. +static BOOL CALLBACK InitFuncWrapper(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context) {
  43. + void (*func)(void) = (void (*)(void))Parameter;
  44. + func();
  45. + return TRUE;
  46. +}
  47. +static void loader_platform_thread_once_fn(void *ctl, void (*func)(void)) {
  48. + assert(func != NULL);
  49. + assert(ctl != NULL);
  50. + InitOnceExecuteOnce((PINIT_ONCE)ctl, InitFuncWrapper, (void *)func, NULL);
  51. +}
  52. +#endif
  53. // Thread IDs:
  54. typedef DWORD loader_platform_thread_id;