From d1d829c09b83abece97ebd4e60a4ac475fc00799 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 18 May 2018 16:47:44 +0200 Subject: [PATCH] [vr] Query Vulkan extensions for OpenVR at runtime --- src/dxvk/dxvk_adapter.cpp | 2 ++ src/dxvk/dxvk_instance.cpp | 8 ++++++++ src/dxvk/dxvk_instance.h | 12 ++++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index e1fe03985..ca6bc44b1 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -171,6 +171,8 @@ namespace dxvk { // Generate list of extensions that we're actually going to use vk::NameSet enabledExtensionSet = extensions->getEnabledExtensionNames(); + enabledExtensionSet.merge(m_instance->queryExtraDeviceExtensions(this)); + vk::NameList enabledExtensionList = enabledExtensionSet.getNameList(); Logger::info("Enabled device extensions:"); diff --git a/src/dxvk/dxvk_instance.cpp b/src/dxvk/dxvk_instance.cpp index 8a6c7cb96..fa97de8b3 100644 --- a/src/dxvk/dxvk_instance.cpp +++ b/src/dxvk/dxvk_instance.cpp @@ -1,4 +1,5 @@ #include "dxvk_instance.h" +#include "dxvk_openvr.h" #include @@ -39,6 +40,11 @@ namespace dxvk { } + vk::NameSet DxvkInstance::queryExtraDeviceExtensions(const DxvkAdapter* adapter) const { + return m_vr.queryDeviceExtensions(adapter->handle()); + } + + VkInstance DxvkInstance::createInstance() { // Query available extensions and enable the ones that are needed vk::NameSet availableExtensions = vk::NameSet::enumerateInstanceExtensions(*m_vkl); @@ -51,6 +57,8 @@ namespace dxvk { // Generate list of extensions that we're actually going to use vk::NameSet enabledExtensionSet = extensionsToEnable.getEnabledExtensionNames(); + enabledExtensionSet.merge(m_vr.queryInstanceExtensions()); + vk::NameList enabledExtensionList = enabledExtensionSet.getNameList(); Logger::info("Enabled instance extensions:"); diff --git a/src/dxvk/dxvk_instance.h b/src/dxvk/dxvk_instance.h index 844507a0e..5d1ee8590 100644 --- a/src/dxvk/dxvk_instance.h +++ b/src/dxvk/dxvk_instance.h @@ -2,6 +2,7 @@ #include "dxvk_adapter.h" #include "dxvk_device.h" +#include "dxvk_openvr.h" namespace dxvk { @@ -41,8 +42,19 @@ namespace dxvk { */ std::vector> enumAdapters(); + /** + * \brief Queries extra device extensions + * + * \param [in] adapter The device to query + * \returns Extra device extensions + */ + vk::NameSet queryExtraDeviceExtensions( + const DxvkAdapter* adapter) const; + private: + VrInstance m_vr; + Rc m_vkl; Rc m_vki;