diff options
| author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-01-16 20:25:51 -0300 |
|---|---|---|
| committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-02-13 02:16:21 -0300 |
| commit | 73f58a249cf20435458afcdaa76ffe938c3a34ba (patch) | |
| tree | 5afedc0e2209210d9190b25a65290917728d37eb /src/video_core/vulkan_common/vulkan_instance.cpp | |
| parent | 758731e48cb289e74b88046042cb0d617bbe896d (diff) | |
vulkan_instance: Initialize Vulkan instance in a separate thread
Workaround an issue on Nvidia where creating a Vulkan instance from an
active OpenGL thread disables threaded optimization on the driver.
This optimization is important to have good performance on Nvidia
OpenGL.
Diffstat (limited to 'src/video_core/vulkan_common/vulkan_instance.cpp')
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_instance.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/video_core/vulkan_common/vulkan_instance.cpp b/src/video_core/vulkan_common/vulkan_instance.cpp index 889ecda0c6..bfd6e6addb 100644 --- a/src/video_core/vulkan_common/vulkan_instance.cpp +++ b/src/video_core/vulkan_common/vulkan_instance.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include <algorithm> +#include <future> #include <optional> #include <span> #include <utility> @@ -140,7 +141,10 @@ vk::Instance CreateInstance(const Common::DynamicLibrary& library, vk::InstanceD VK_VERSION_MAJOR(required_version), VK_VERSION_MINOR(required_version)); throw vk::Exception(VK_ERROR_INCOMPATIBLE_DRIVER); } - vk::Instance instance = vk::Instance::Create(required_version, layers, extensions, dld); + vk::Instance instance = + std::async([&] { + return vk::Instance::Create(required_version, layers, extensions, dld); + }).get(); if (!vk::Load(*instance, dld)) { LOG_ERROR(Render_Vulkan, "Failed to load Vulkan instance function pointers"); throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED); |
