dxvk/src/dxvk/dxvk_device_filter.cpp

44 lines
1.2 KiB
C++

#include "dxvk_device_filter.h"
namespace dxvk {
DxvkDeviceFilter::DxvkDeviceFilter(DxvkDeviceFilterFlags flags)
: m_flags(flags) {
m_matchDeviceName = env::getEnvVar("DXVK_FILTER_DEVICE_NAME");
if (m_matchDeviceName.size() != 0)
m_flags.set(DxvkDeviceFilterFlag::MatchDeviceName);
}
DxvkDeviceFilter::~DxvkDeviceFilter() {
}
bool DxvkDeviceFilter::testAdapter(const VkPhysicalDeviceProperties& properties) const {
if (properties.apiVersion < VK_MAKE_VERSION(1, 3, 0)) {
Logger::warn(str::format("Skipping Vulkan ",
VK_VERSION_MAJOR(properties.apiVersion), ".",
VK_VERSION_MINOR(properties.apiVersion), " adapter: ",
properties.deviceName));
return false;
}
if (m_flags.test(DxvkDeviceFilterFlag::MatchDeviceName)) {
if (std::string(properties.deviceName).find(m_matchDeviceName) == std::string::npos)
return false;
}
if (m_flags.test(DxvkDeviceFilterFlag::SkipCpuDevices)) {
if (properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_CPU) {
Logger::warn(str::format("Skipping CPU adapter: ", properties.deviceName));
return false;
}
}
return true;
}
}