2017-10-10 23:32:13 +02:00
|
|
|
#pragma once
|
|
|
|
|
2018-08-07 16:58:16 +02:00
|
|
|
#include "../util/config/config.h"
|
2018-08-07 14:14:41 +02:00
|
|
|
|
2017-10-10 23:32:13 +02:00
|
|
|
#include "dxvk_adapter.h"
|
|
|
|
#include "dxvk_device.h"
|
2018-08-27 14:22:14 +02:00
|
|
|
#include "dxvk_device_filter.h"
|
2018-05-18 16:47:44 +02:00
|
|
|
#include "dxvk_openvr.h"
|
2017-10-10 23:32:13 +02:00
|
|
|
|
|
|
|
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<vk::InstanceFn> vki() const {
|
|
|
|
return m_vki;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief Vulkan instance handle
|
|
|
|
* \returns The instance handle
|
|
|
|
*/
|
|
|
|
VkInstance handle() {
|
|
|
|
return m_vki->instance();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-06-26 12:33:26 +02:00
|
|
|
* \brief Retrieves an adapter
|
|
|
|
*
|
|
|
|
* \param [in] index Adapter index
|
|
|
|
* \returns The adapter, or \c nullptr.
|
2017-10-10 23:32:13 +02:00
|
|
|
*/
|
2018-06-26 12:33:26 +02:00
|
|
|
Rc<DxvkAdapter> enumAdapters(
|
|
|
|
uint32_t index) const;
|
2017-10-10 23:32:13 +02:00
|
|
|
|
2018-08-07 14:14:41 +02:00
|
|
|
/**
|
|
|
|
* \brief Retrieves configuration options
|
|
|
|
*
|
|
|
|
* The configuration set contains user-defined
|
|
|
|
* options as well as app-specific options.
|
|
|
|
* \returns Configuration options
|
|
|
|
*/
|
|
|
|
const Config& config() const {
|
|
|
|
return m_config;
|
|
|
|
}
|
2017-10-10 23:32:13 +02:00
|
|
|
|
2018-08-07 14:14:41 +02:00
|
|
|
private:
|
|
|
|
|
|
|
|
Config m_config;
|
|
|
|
|
2017-10-10 23:32:13 +02:00
|
|
|
Rc<vk::LibraryFn> m_vkl;
|
|
|
|
Rc<vk::InstanceFn> m_vki;
|
2018-06-26 12:33:26 +02:00
|
|
|
|
|
|
|
std::vector<Rc<DxvkAdapter>> m_adapters;
|
2017-10-10 23:32:13 +02:00
|
|
|
|
|
|
|
VkInstance createInstance();
|
2018-06-26 12:33:26 +02:00
|
|
|
|
2018-06-26 15:51:15 +02:00
|
|
|
std::vector<Rc<DxvkAdapter>> queryAdapters();
|
2017-10-10 23:32:13 +02:00
|
|
|
|
2018-07-23 20:07:21 +02:00
|
|
|
static void logNameList(const DxvkNameList& names);
|
2017-10-11 00:27:33 +02:00
|
|
|
|
2017-10-10 23:32:13 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|