From 0a071f94c9863f88f960f3b09b8b177e17a0be20 Mon Sep 17 00:00:00 2001
From: Dave Houlton <euclid@lindenlab.com>
Date: Wed, 6 May 2020 11:55:02 -0600
Subject: [PATCH] DRTVWR-510 cache vulkan-detect result

---
 indra/newview/llviewerstats.cpp | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index eccbefcd3e3..04172adde99 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -588,16 +588,22 @@ void send_stats()
     // False-positives and false-negatives are possible, but unlikely. We'll get a good
     // approximation of Vulkan capability within current user systems from this. More
     // detailed information on versions and extensions can come later.
-    HMODULE vulkanDll = LoadLibraryExA("vulkan-1.dll", NULL, LOAD_LIBRARY_AS_DATAFILE);
-    if (NULL == vulkanDll)
-    {
-        misc["string_1"] = llformat("No Vulkan driver detected");
-    }
-    else
+    static bool vulkan_oneshot = false;
+    static bool vulkan_detected = false;
+
+    if (!vulkan_oneshot)
     {
-        misc["string_1"] = llformat("Vulkan driver is detected");
-        FreeLibrary(vulkanDll);
+        HMODULE vulkan_loader = LoadLibraryExA("vulkan-1.dll", NULL, LOAD_LIBRARY_AS_DATAFILE);
+        if (NULL != vulkan_loader)
+        {
+            vulkan_detected = true;
+            FreeLibrary(vulkan_loader);
+        }
+        vulkan_oneshot = true;
     }
+
+    misc["string_1"] = vulkan_detected ? llformat("Vulkan driver is detected") : llformat("No Vulkan driver detected");
+
 #else
     misc["string_1"] = llformat("Unused");
 #endif // LL_WINDOWS
-- 
GitLab