mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-02 19:24:12 +01:00
[dxgi] fix DxgiOutput::FindClosestMatchingMode() implementation (#157)
* remove useless checks * fix refresh rate matching and unspecified detection
This commit is contained in:
parent
bfd2b29317
commit
fa78259459
@ -93,21 +93,14 @@ namespace dxvk {
|
||||
std::vector<DXGI_MODE_DESC> modes(modesCount);
|
||||
GetDisplayModeList(pModeToMatch->Format, 0, &modesCount, modes.data());
|
||||
|
||||
//filter out modes with different scanline ordering if it was set
|
||||
if (modeToMatch.ScanlineOrdering != DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED) {
|
||||
for (auto it = modes.begin(); it != modes.end();) {
|
||||
if (it->ScanlineOrdering != modeToMatch.ScanlineOrdering)
|
||||
it = modes.erase(it);
|
||||
else
|
||||
++it;
|
||||
}
|
||||
}
|
||||
/* TODO: add scaling and scanline filter when we implement they */
|
||||
|
||||
//filter out modes with different refresh rate if it was set
|
||||
if (modeToMatch.RefreshRate.Denominator != 0 || modeToMatch.RefreshRate.Numerator != 0) {
|
||||
if (modeToMatch.RefreshRate.Denominator != 0 && modeToMatch.RefreshRate.Numerator != 0) {
|
||||
UINT targetRefreshRate = modeToMatch.RefreshRate.Numerator / modeToMatch.RefreshRate.Denominator;
|
||||
for (auto it = modes.begin(); it != modes.end();) {
|
||||
if (it->RefreshRate.Denominator != modeToMatch.RefreshRate.Denominator ||
|
||||
it->RefreshRate.Numerator != modeToMatch.RefreshRate.Numerator)
|
||||
UINT modeRefreshRate = it->RefreshRate.Numerator / it->RefreshRate.Denominator;
|
||||
if (modeRefreshRate != targetRefreshRate)
|
||||
it = modes.erase(it);
|
||||
else
|
||||
++it;
|
||||
|
Loading…
Reference in New Issue
Block a user