diff --git a/src/dxvk/dxvk_extension_provider.cpp b/src/dxvk/dxvk_extension_provider.cpp deleted file mode 100644 index 4e35eeb57..000000000 --- a/src/dxvk/dxvk_extension_provider.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "dxvk_extension_provider.h" - -#include "dxvk_openvr.h" -#include "dxvk_platform_exts.h" - -namespace dxvk { - - DxvkExtensionProviderList DxvkExtensionProvider::s_extensionProviders = { - &DxvkPlatformExts::s_instance, - &VrInstance::s_instance, - }; - - const DxvkExtensionProviderList& DxvkExtensionProvider::getExtensionProviders() { - return s_extensionProviders; - } - -} \ No newline at end of file diff --git a/src/dxvk/dxvk_extension_provider.h b/src/dxvk/dxvk_extension_provider.h index dce426e2e..090d56d3f 100644 --- a/src/dxvk/dxvk_extension_provider.h +++ b/src/dxvk/dxvk_extension_provider.h @@ -11,8 +11,6 @@ namespace dxvk { class DxvkInstance; class DxvkExtensionProvider; - using DxvkExtensionProviderList = std::vector; - /** * \brief Extension provider base * @@ -64,15 +62,6 @@ namespace dxvk { virtual void initDeviceExtensions( const DxvkInstance* instance) = 0; - /** - * \brief Get list of ptrs to the extension providers - */ - static const DxvkExtensionProviderList& getExtensionProviders(); - - private: - - static DxvkExtensionProviderList s_extensionProviders; - }; } \ No newline at end of file diff --git a/src/dxvk/dxvk_instance.cpp b/src/dxvk/dxvk_instance.cpp index 8d1b17f81..14544ec03 100644 --- a/src/dxvk/dxvk_instance.cpp +++ b/src/dxvk/dxvk_instance.cpp @@ -1,7 +1,8 @@ #include #include "dxvk_instance.h" -#include "dxvk_extension_provider.h" +#include "dxvk_openvr.h" +#include "dxvk_platform_exts.h" #include @@ -15,13 +16,16 @@ namespace dxvk { m_config.merge(Config::getAppConfig(env::getExePath())); m_config.logOptions(); - const auto& extProviders = DxvkExtensionProvider::getExtensionProviders(); + m_options = DxvkOptions(m_config); + + m_extProviders.push_back(&DxvkPlatformExts::s_instance); + m_extProviders.push_back(&VrInstance::s_instance); Logger::info("Built-in extension providers:"); - for (const auto& provider : extProviders) + for (const auto& provider : m_extProviders) Logger::info(str::format(" ", provider->getName())); - for (const auto& provider : extProviders) + for (const auto& provider : m_extProviders) provider->initInstanceExtensions(); m_vkl = new vk::LibraryFn(); @@ -29,17 +33,15 @@ namespace dxvk { m_adapters = this->queryAdapters(); - for (const auto& provider : extProviders) + for (const auto& provider : m_extProviders) provider->initDeviceExtensions(this); for (uint32_t i = 0; i < m_adapters.size(); i++) { - for (const auto& provider : extProviders) { + for (const auto& provider : m_extProviders) { m_adapters[i]->enableExtensions( provider->getDeviceExtensions(i)); } } - - m_options = DxvkOptions(m_config); } @@ -97,11 +99,10 @@ namespace dxvk { extensionsEnabled)) throw DxvkError("DxvkInstance: Failed to create instance"); - const auto& extProviders = DxvkExtensionProvider::getExtensionProviders(); - // Enable additional extensions if necessary - for (const auto& provider : extProviders) + for (const auto& provider : m_extProviders) extensionsEnabled.merge(provider->getInstanceExtensions()); + DxvkNameList extensionNameList = extensionsEnabled.toNameList(); Logger::info("Enabled instance extensions:"); diff --git a/src/dxvk/dxvk_instance.h b/src/dxvk/dxvk_instance.h index 389bff038..e3d9737c5 100644 --- a/src/dxvk/dxvk_instance.h +++ b/src/dxvk/dxvk_instance.h @@ -4,6 +4,7 @@ #include "dxvk_adapter.h" #include "dxvk_device_filter.h" +#include "dxvk_extension_provider.h" #include "dxvk_options.h" namespace dxvk { @@ -105,6 +106,7 @@ namespace dxvk { Rc m_vkl; Rc m_vki; + std::vector m_extProviders; std::vector> m_adapters; VkInstance createInstance(); diff --git a/src/dxvk/meson.build b/src/dxvk/meson.build index 8b14592b8..149ed7575 100644 --- a/src/dxvk/meson.build +++ b/src/dxvk/meson.build @@ -98,7 +98,6 @@ dxvk_src = files([ 'dxvk_stats.cpp', 'dxvk_unbound.cpp', 'dxvk_util.cpp', - 'dxvk_extension_provider.cpp', 'platform/dxvk_win32_exts.cpp',