This commit is contained in:
Winter Snowfall 2024-04-28 13:15:56 +00:00 committed by GitHub
commit b4d664dbf6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 31 additions and 0 deletions

View File

@ -592,6 +592,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)

View File

@ -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);

View File

@ -107,6 +107,8 @@ namespace dxvk {
const D3D9VkFormatTable m_d3d9Formats;
std::vector<uint32_t> m_forcedHeights;
};
}

View File

@ -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);

View File

@ -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;