mirror of https://github.com/doitsujin/dxvk
Merge 8e117058f0
into ab715a8876
This commit is contained in:
commit
e995db0823
|
@ -1,13 +1,24 @@
|
|||
#include "dxvk_device_filter.h"
|
||||
|
||||
std::string convertUUID(const uint8_t uuid[VK_UUID_SIZE]) {
|
||||
std::ostringstream stream;
|
||||
for (unsigned int i = 0; i < VK_UUID_SIZE; i++) {
|
||||
stream << static_cast<uint32_t>(uuid[i]);
|
||||
}
|
||||
return stream.str();
|
||||
}
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkDeviceFilter::DxvkDeviceFilter(DxvkDeviceFilterFlags flags)
|
||||
: m_flags(flags) {
|
||||
m_matchDeviceName = env::getEnvVar("DXVK_FILTER_DEVICE_NAME");
|
||||
m_matchDeviceUUID = env::getEnvVar("DXVK_FILTER_DEVICE_UUID");
|
||||
|
||||
if (m_matchDeviceName.size() != 0)
|
||||
m_flags.set(DxvkDeviceFilterFlag::MatchDeviceName);
|
||||
if (m_matchDeviceUUID.size() != 0)
|
||||
m_flags.set(DxvkDeviceFilterFlag::MatchDeviceUUID);
|
||||
}
|
||||
|
||||
|
||||
|
@ -40,4 +51,13 @@ namespace dxvk {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool DxvkDeviceFilter::testCreatedAdapter(const DxvkDeviceInfo& deviceInfo) const {
|
||||
if (m_flags.test(DxvkDeviceFilterFlag::MatchDeviceUUID)) {
|
||||
if (convertUUID(deviceInfo.coreDeviceId.deviceUUID).find(m_matchDeviceUUID) == std::string::npos)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,7 +13,8 @@ namespace dxvk {
|
|||
*/
|
||||
enum class DxvkDeviceFilterFlag {
|
||||
MatchDeviceName = 0,
|
||||
SkipCpuDevices = 1,
|
||||
MatchDeviceUUID = 1,
|
||||
SkipCpuDevices = 2,
|
||||
};
|
||||
|
||||
using DxvkDeviceFilterFlags = Flags<DxvkDeviceFilterFlag>;
|
||||
|
@ -43,11 +44,21 @@ namespace dxvk {
|
|||
bool testAdapter(
|
||||
const VkPhysicalDeviceProperties& properties) const;
|
||||
|
||||
/**
|
||||
* \brief Tests a created adapter
|
||||
*
|
||||
* \param [in] properties Adapter properties
|
||||
* \returns \c true if the test passes
|
||||
*/
|
||||
bool testCreatedAdapter(
|
||||
const DxvkDeviceInfo& deviceInfo) const;
|
||||
|
||||
private:
|
||||
|
||||
DxvkDeviceFilterFlags m_flags;
|
||||
|
||||
std::string m_matchDeviceName;
|
||||
std::string m_matchDeviceUUID;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -258,9 +258,11 @@ namespace dxvk {
|
|||
uint32_t numIGPU = 0;
|
||||
|
||||
for (uint32_t i = 0; i < numAdapters; i++) {
|
||||
if (filter.testAdapter(deviceProperties[i])) {
|
||||
if (filter.testAdapter(deviceProperties[i]))
|
||||
result.push_back(new DxvkAdapter(m_vki, adapters[i]));
|
||||
|
||||
if (!filter.testCreatedAdapter(result.back()->devicePropertiesExt())) {
|
||||
result.pop_back();
|
||||
} else {
|
||||
if (deviceProperties[i].deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
|
||||
numDGPU += 1;
|
||||
else if (deviceProperties[i].deviceType == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU)
|
||||
|
|
Loading…
Reference in New Issue