From b796020128d3fadf568a2cafcd06d395c2627c6e Mon Sep 17 00:00:00 2001
From: Jeff <alpyne.dreams@gmail.com>
Date: Sun, 12 Jan 2025 20:06:51 -0800
Subject: [PATCH] [d3d9] Fix invalid strings returned by GetInstanceExtensions

---
 src/dxvk/dxvk_instance.cpp | 12 ++++++------
 src/dxvk/dxvk_instance.h   |  1 +
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/dxvk/dxvk_instance.cpp b/src/dxvk/dxvk_instance.cpp
index 76a8a1b4e..566c7e1d7 100644
--- a/src/dxvk/dxvk_instance.cpp
+++ b/src/dxvk/dxvk_instance.cpp
@@ -115,18 +115,18 @@ namespace dxvk {
 
   void DxvkInstance::createInstanceLoader(const DxvkInstanceImportInfo& args, DxvkInstanceFlags flags) {
     DxvkNameList layerList;
-    DxvkNameSet extensionSet;
+    m_extensionSet = DxvkNameSet();
 
     bool enablePerfEvents = false;
     bool enableValidation = false;
 
     if (args.instance) {
       m_extensionNames = DxvkNameList(args.extensionCount, args.extensionNames);
-      extensionSet = getExtensionSet(m_extensionNames);
+      m_extensionSet = getExtensionSet(m_extensionNames);
 
       auto extensionInfos = getExtensionList(m_extensions, true);
 
-      if (!extensionSet.enableExtensions(extensionInfos.size(), extensionInfos.data(), nullptr))
+      if (!m_extensionSet.enableExtensions(extensionInfos.size(), extensionInfos.data(), nullptr))
         throw DxvkError("DxvkInstance: Required instance extensions not enabled");
     } else {
       // Hide VK_EXT_debug_utils behind an environment variable.
@@ -160,14 +160,14 @@ namespace dxvk {
       auto extensionInfos = getExtensionList(m_extensions, enableDebug);
       DxvkNameSet extensionsAvailable = DxvkNameSet::enumInstanceExtensions(m_vkl);
 
-      if (!extensionsAvailable.enableExtensions(extensionInfos.size(), extensionInfos.data(), &extensionSet))
+      if (!extensionsAvailable.enableExtensions(extensionInfos.size(), extensionInfos.data(), &m_extensionSet))
         throw DxvkError("DxvkInstance: Required instance extensions not supported");
 
       for (const auto& provider : m_extProviders)
-        extensionSet.merge(provider->getInstanceExtensions());
+        m_extensionSet.merge(provider->getInstanceExtensions());
 
       // Generate list of extensions to enable
-      m_extensionNames = extensionSet.toNameList();
+      m_extensionNames = m_extensionSet.toNameList();
     }
 
     Logger::info("Enabled instance extensions:");
diff --git a/src/dxvk/dxvk_instance.h b/src/dxvk/dxvk_instance.h
index dd6e78dc7..8075e7fc6 100644
--- a/src/dxvk/dxvk_instance.h
+++ b/src/dxvk/dxvk_instance.h
@@ -165,6 +165,7 @@ namespace dxvk {
     Rc<vk::LibraryFn>       m_vkl;
     Rc<vk::InstanceFn>      m_vki;
     DxvkInstanceExtensions  m_extensions;
+    DxvkNameSet             m_extensionSet;
     DxvkNameList            m_extensionNames;
 
     VkDebugUtilsMessengerEXT m_messenger = VK_NULL_HANDLE;