#include "dxgi_options.h" #include namespace dxvk { static int32_t parsePciId(const std::string& str) { if (str.size() != 4) return -1; int32_t id = 0; for (size_t i = 0; i < str.size(); i++) { id *= 16; if (str[i] >= '0' && str[i] <= '9') id += str[i] - '0'; else if (str[i] >= 'A' && str[i] <= 'F') id += str[i] - 'A' + 10; else if (str[i] >= 'a' && str[i] <= 'f') id += str[i] - 'a' + 10; else return -1; } return id; } DxgiOptions::DxgiOptions(const Config& config) { // Fetch these as a string representing a hexadecimal number and parse it. this->customVendorId = parsePciId(config.getOption("dxgi.customVendorId")); this->customDeviceId = parsePciId(config.getOption("dxgi.customDeviceId")); this->customDeviceDesc = config.getOption("dxgi.customDeviceDesc", ""); // Emulate a UMA device this->emulateUMA = config.getOption("dxgi.emulateUMA", false); // Interpret the memory limits as Megabytes this->maxDeviceMemory = VkDeviceSize(config.getOption("dxgi.maxDeviceMemory", 0)) << 20; this->maxSharedMemory = VkDeviceSize(config.getOption("dxgi.maxSharedMemory", 0)) << 20; // Force nvapiHack to be disabled if NvAPI is enabled in environment if (env::getEnvVar("DXVK_ENABLE_NVAPI") == "1") this->nvapiHack = false; else this->nvapiHack = config.getOption("dxgi.nvapiHack", true); } }