mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-22 23:21:29 +00:00
[idd] config: retain four-decimal refresh rates
This commit is contained in:
@@ -440,7 +440,7 @@ void CDeviceContext::OnSwapChainReady()
|
||||
m_monitorManager.QueueReplug();
|
||||
else if (action.setMode)
|
||||
g_pipe.SetDisplayMode(
|
||||
action.mode.width, action.mode.height, action.mode.refreshMilliHz);
|
||||
action.mode.width, action.mode.height, action.mode.refresh100uHz);
|
||||
}
|
||||
|
||||
// Display configuration
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include "CDebug.h"
|
||||
#include "CSRWLock.h"
|
||||
#include "RefreshRate.h"
|
||||
|
||||
#include <iterator>
|
||||
#include <utility>
|
||||
@@ -66,24 +67,26 @@ bool CDisplayConfiguration::LoadModes(const FrameCaps& caps)
|
||||
{
|
||||
configuredMode.width,
|
||||
configuredMode.height,
|
||||
configuredMode.refreshMilliHz,
|
||||
configuredMode.refresh100uHz,
|
||||
};
|
||||
if (!frameMode.width || !frameMode.height ||
|
||||
!frameMode.refreshMilliHz)
|
||||
!frameMode.refresh100uHz)
|
||||
{
|
||||
DEBUG_WARN("Filtering invalid %s mode %ux%u@%.3f",
|
||||
DEBUG_WARN("Filtering invalid %s mode %ux%u@%.4f",
|
||||
configuredMode.extraMode ? "extra" : "configured",
|
||||
configuredMode.width, configuredMode.height,
|
||||
configuredMode.refreshMilliHz / 1000.0);
|
||||
configuredMode.refresh100uHz /
|
||||
static_cast<double>(LG_REFRESH_RATE_SCALE));
|
||||
continue;
|
||||
}
|
||||
if (!caps.CanUseMode(frameMode))
|
||||
{
|
||||
DEBUG_WARN(
|
||||
"Filtering unsupported %s mode %ux%u@%.3f",
|
||||
"Filtering unsupported %s mode %ux%u@%.4f",
|
||||
configuredMode.extraMode ? "extra" : "configured",
|
||||
configuredMode.width, configuredMode.height,
|
||||
configuredMode.refreshMilliHz / 1000.0);
|
||||
configuredMode.refresh100uHz /
|
||||
static_cast<double>(LG_REFRESH_RATE_SCALE));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -128,11 +131,11 @@ bool CDisplayConfiguration::ReloadSettings(
|
||||
CSettings::DisplayMode extraMode = {};
|
||||
if (m_settings.GetExtraMode(extraMode))
|
||||
{
|
||||
const unsigned refreshMilliHz =
|
||||
m_settings.GetDefaultRefreshMilliHz();
|
||||
if (extraMode.refreshMilliHz != refreshMilliHz)
|
||||
const unsigned refresh100uHz =
|
||||
m_settings.GetDefaultRefresh100uHz();
|
||||
if (extraMode.refresh100uHz != refresh100uHz)
|
||||
{
|
||||
extraMode.refreshMilliHz = refreshMilliHz;
|
||||
extraMode.refresh100uHz = refresh100uHz;
|
||||
settingsUpdated = m_settings.SetExtraMode(extraMode);
|
||||
}
|
||||
}
|
||||
@@ -155,10 +158,10 @@ CDisplayConfiguration::SetResolution(
|
||||
CSettings::DisplayMode mode = {};
|
||||
mode.width = width;
|
||||
mode.height = height;
|
||||
mode.refreshMilliHz = m_settings.GetDefaultRefreshMilliHz();
|
||||
mode.refresh100uHz = m_settings.GetDefaultRefresh100uHz();
|
||||
mode.preferred = true;
|
||||
|
||||
if (!mode.width || !mode.height || !mode.refreshMilliHz)
|
||||
if (!mode.width || !mode.height || !mode.refresh100uHz)
|
||||
{
|
||||
DEBUG_WARN("Ignoring invalid resolution request: %ux%u", width, height);
|
||||
return result;
|
||||
@@ -168,7 +171,7 @@ CDisplayConfiguration::SetResolution(
|
||||
{
|
||||
mode.width,
|
||||
mode.height,
|
||||
mode.refreshMilliHz,
|
||||
mode.refresh100uHz,
|
||||
};
|
||||
if (!caps.CanUseMode(frameMode, &result.requiredMiB))
|
||||
{
|
||||
@@ -289,9 +292,11 @@ static inline void FillSignalInfo(DISPLAYCONFIG_VIDEO_SIGNAL_INFO& signal,
|
||||
signal.AdditionalSignalInfo.vSyncFreqDivider = monitorMode ? 0 : 1;
|
||||
signal.AdditionalSignalInfo.videoStandard = 255;
|
||||
|
||||
SetSignalRate(signal.vSyncFreq, mode.refreshMilliHz, 1000);
|
||||
SetSignalRate(signal.vSyncFreq, mode.refresh100uHz,
|
||||
LG_REFRESH_RATE_SCALE);
|
||||
SetSignalRate(signal.hSyncFreq,
|
||||
(UINT64)mode.refreshMilliHz * signal.totalSize.cy, 1000);
|
||||
(UINT64)mode.refresh100uHz * signal.totalSize.cy,
|
||||
LG_REFRESH_RATE_SCALE);
|
||||
|
||||
signal.scanLineOrdering = DISPLAYCONFIG_SCANLINE_ORDERING_PROGRESSIVE;
|
||||
signal.pixelRate = timing.pixelClock;
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
|
||||
#include "display/CEdid.h"
|
||||
|
||||
#include "RefreshRate.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <string.h>
|
||||
|
||||
@@ -367,7 +369,7 @@ bool CEdid::GetTiming(Timing& timing, const CSettings::DisplayMode& mode)
|
||||
timing.vActive = mode.height;
|
||||
|
||||
if (timing.hActive == 0 || timing.vActive == 0 ||
|
||||
mode.refreshMilliHz == 0)
|
||||
mode.refresh100uHz == 0)
|
||||
return false;
|
||||
|
||||
timing.hBlank = std::max<DWORD>(160,
|
||||
@@ -391,11 +393,12 @@ bool CEdid::GetTiming(Timing& timing, const CSettings::DisplayMode& mode)
|
||||
if (timing.vFront + timing.vSync >= timing.vBlank)
|
||||
return false;
|
||||
|
||||
const UINT64 pixelClockMilliHz =
|
||||
const UINT64 pixelClock100uHz =
|
||||
(UINT64)(timing.hActive + timing.hBlank) *
|
||||
(UINT64)(timing.vActive + timing.vBlank) *
|
||||
(UINT64)mode.refreshMilliHz;
|
||||
timing.pixelClock = (pixelClockMilliHz + 500) / 1000;
|
||||
(UINT64)mode.refresh100uHz;
|
||||
timing.pixelClock = (pixelClock100uHz + LG_REFRESH_RATE_SCALE / 2) /
|
||||
LG_REFRESH_RATE_SCALE;
|
||||
return timing.pixelClock != 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user