mirror of https://github.com/doitsujin/dxvk
[d3d9] Add a modeHeightFilter config option
This commit is contained in:
parent
0746a3b91a
commit
76884d31f2
13
dxvk.conf
13
dxvk.conf
|
@ -555,6 +555,19 @@
|
|||
|
||||
# d3d9.forceAspectRatio = ""
|
||||
|
||||
# Mode Height Filter
|
||||
#
|
||||
# Only exposes modes with certain heights, if they are
|
||||
# also supported by the adapter. Can be used in conjunction
|
||||
# with forceAspectRatio to further restrict reported modes.
|
||||
# Useful for titles that break when too many modes are reported,
|
||||
# e.g., AquaNox, AquaNox 2: Revelation.
|
||||
#
|
||||
# Supported values:
|
||||
# - A list of mode heights, ie. "480,720,1080"
|
||||
|
||||
# d3d9.modeHeightFilter = ""
|
||||
|
||||
# Enumerate by Displays
|
||||
#
|
||||
# Whether we should enumerate D3D9 adapters by display (windows behaviour)
|
||||
|
|
|
@ -771,6 +771,14 @@ namespace dxvk {
|
|||
uint32_t modeIndex = 0;
|
||||
|
||||
const auto forcedRatio = Ratio<DWORD>(options.forceAspectRatio);
|
||||
|
||||
if (!options.modeHeightFilter.empty() && m_forcedHeights.empty()) {
|
||||
uint32_t forcedHeight;
|
||||
for (auto height : str::split(options.modeHeightFilter, ",")) {
|
||||
std::from_chars(height.data(), height.data() + height.size(), forcedHeight);
|
||||
m_forcedHeights.emplace_back(forcedHeight);
|
||||
}
|
||||
}
|
||||
|
||||
while (wsi::getDisplayMode(wsi::getDefaultMonitor(), modeIndex++, &devMode)) {
|
||||
// Skip interlaced modes altogether
|
||||
|
@ -784,6 +792,10 @@ namespace dxvk {
|
|||
if (!forcedRatio.undefined() && Ratio<DWORD>(devMode.width, devMode.height) != forcedRatio)
|
||||
continue;
|
||||
|
||||
if (!m_forcedHeights.empty() &&
|
||||
std::find(m_forcedHeights.begin(), m_forcedHeights.end(), devMode.height) == m_forcedHeights.end())
|
||||
continue;
|
||||
|
||||
D3DDISPLAYMODEEX mode = ConvertDisplayMode(devMode);
|
||||
// Fix up the D3DFORMAT to match what we are enumerating
|
||||
mode.Format = static_cast<D3DFORMAT>(Format);
|
||||
|
|
|
@ -107,6 +107,8 @@ namespace dxvk {
|
|||
|
||||
const D3D9VkFormatTable m_d3d9Formats;
|
||||
|
||||
std::vector<uint32_t> m_forcedHeights;
|
||||
|
||||
};
|
||||
|
||||
}
|
|
@ -66,6 +66,7 @@ namespace dxvk {
|
|||
this->forceSwapchainMSAA = config.getOption<int32_t> ("d3d9.forceSwapchainMSAA", -1);
|
||||
this->forceSampleRateShading = config.getOption<bool> ("d3d9.forceSampleRateShading", false);
|
||||
this->forceAspectRatio = config.getOption<std::string> ("d3d9.forceAspectRatio", "");
|
||||
this->modeHeightFilter = config.getOption<std::string> ("d3d9.modeHeightFilter", "");
|
||||
this->enumerateByDisplays = config.getOption<bool> ("d3d9.enumerateByDisplays", true);
|
||||
this->longMad = config.getOption<bool> ("d3d9.longMad", false);
|
||||
this->cachedDynamicBuffers = config.getOption<bool> ("d3d9.cachedDynamicBuffers", false);
|
||||
|
|
|
@ -103,6 +103,9 @@ namespace dxvk {
|
|||
/// Forced aspect ratio, disable other modes
|
||||
std::string forceAspectRatio;
|
||||
|
||||
/// Restrict modes based on height
|
||||
std::string modeHeightFilter;
|
||||
|
||||
/// Enable dialog mode (ie. no exclusive fullscreen)
|
||||
bool enableDialogMode;
|
||||
|
||||
|
|
Loading…
Reference in New Issue