#pragma once #include "dxvk_adapter.h" #include "dxvk_device.h" namespace dxvk { /** * \brief DXVK instance * * Manages a Vulkan instance and stores a list * of adapters. This also provides methods for * device creation. */ class DxvkInstance : public RcObject { public: DxvkInstance(); ~DxvkInstance(); /** * \brief Vulkan instance functions * \returns Vulkan instance functions */ Rc vki() const { return m_vki; } /** * \brief Vulkan instance handle * \returns The instance handle */ VkInstance handle() { return m_vki->instance(); } /** * \brief Retrieves a list of adapters * \returns List of adapter objects */ std::vector> enumAdapters(); private: Rc m_vkl; Rc m_vki; VkInstance createInstance(); vk::NameList getLayers(); vk::NameList getExtensions(const vk::NameList& layers); void logNameList(const vk::NameList& names); }; }