Просмотр исходного кода

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.
ReinUsesLisp 5 лет назад
Родитель
Сommit
9735c34f5d
1 измененных файлов с 5 добавлено и 1 удалено
  1. 5 1
      src/video_core/vulkan_common/vulkan_instance.cpp

+ 5 - 1
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);