mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-24 13:54:17 +01:00
[d3d9] Pass display refresh rate around in windowed mode
This commit is contained in:
parent
a295c32b37
commit
066aedf085
@ -171,6 +171,7 @@ namespace dxvk {
|
|||||||
// We aren't going to device loss simply because
|
// We aren't going to device loss simply because
|
||||||
// 99% of D3D9 games don't handle this properly and
|
// 99% of D3D9 games don't handle this properly and
|
||||||
// just end up crashing (like with alt-tab loss)
|
// just end up crashing (like with alt-tab loss)
|
||||||
|
UpdateDisplayRefreshRate();
|
||||||
UpdateTargetFrameRate(presentInterval);
|
UpdateTargetFrameRate(presentInterval);
|
||||||
PresentImage(presentInterval);
|
PresentImage(presentInterval);
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
@ -980,7 +981,11 @@ namespace dxvk {
|
|||||||
m_latencyTracker = m_device->createLatencyTracker(entry->second.presenter);
|
m_latencyTracker = m_device->createLatencyTracker(entry->second.presenter);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_wctx = &entry->second;
|
if (m_wctx != &entry->second) {
|
||||||
|
m_wctx = &entry->second;
|
||||||
|
m_displayRefreshRateDirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1168,9 +1173,35 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void D3D9SwapChainEx::NotifyDisplayRefreshRate(
|
void D3D9SwapChainEx::UpdateDisplayRefreshRate() {
|
||||||
double RefreshRate) {
|
if (!m_displayRefreshRateDirty)
|
||||||
m_displayRefreshRate = RefreshRate;
|
return;
|
||||||
|
|
||||||
|
m_displayRefreshRateDirty = false;
|
||||||
|
|
||||||
|
if (!m_monitor && m_window != m_presentParams.hDeviceWindow) {
|
||||||
|
m_displayRefreshRate = 0.0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
HMONITOR monitor = m_monitor;
|
||||||
|
|
||||||
|
if (!monitor)
|
||||||
|
monitor = wsi::getWindowMonitor(m_window);
|
||||||
|
|
||||||
|
if (!monitor) {
|
||||||
|
m_displayRefreshRate = 0.0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wsi::WsiMode wsiMode = { };
|
||||||
|
|
||||||
|
if (wsi::getCurrentDisplayMode(monitor, &wsiMode)) {
|
||||||
|
m_displayRefreshRate = double(wsiMode.refreshRate.numerator)
|
||||||
|
/ double(wsiMode.refreshRate.denominator);
|
||||||
|
} else {
|
||||||
|
m_displayRefreshRate = 0.0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1250,11 +1281,7 @@ namespace dxvk {
|
|||||||
if (!wsi::setWindowMode(monitor, m_window, &m_windowState, wsiMode))
|
if (!wsi::setWindowMode(monitor, m_window, &m_windowState, wsiMode))
|
||||||
return D3DERR_NOTAVAILABLE;
|
return D3DERR_NOTAVAILABLE;
|
||||||
|
|
||||||
if (wsi::getCurrentDisplayMode(monitor, &wsiMode))
|
m_displayRefreshRateDirty = true;
|
||||||
NotifyDisplayRefreshRate(double(wsiMode.refreshRate.numerator) / double(wsiMode.refreshRate.denominator));
|
|
||||||
else
|
|
||||||
NotifyDisplayRefreshRate(0.0);
|
|
||||||
|
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1266,7 +1293,7 @@ namespace dxvk {
|
|||||||
if (!wsi::restoreDisplayMode())
|
if (!wsi::restoreDisplayMode())
|
||||||
return D3DERR_NOTAVAILABLE;
|
return D3DERR_NOTAVAILABLE;
|
||||||
|
|
||||||
NotifyDisplayRefreshRate(0.0);
|
m_displayRefreshRateDirty = true;
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,6 +173,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
wsi::DxvkWindowState m_windowState;
|
wsi::DxvkWindowState m_windowState;
|
||||||
|
|
||||||
|
bool m_displayRefreshRateDirty = true;
|
||||||
double m_displayRefreshRate = 0.0;
|
double m_displayRefreshRate = 0.0;
|
||||||
double m_targetFrameRate = 0.0;
|
double m_targetFrameRate = 0.0;
|
||||||
|
|
||||||
@ -215,8 +216,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
void NormalizePresentParameters(D3DPRESENT_PARAMETERS* pPresentParams);
|
void NormalizePresentParameters(D3DPRESENT_PARAMETERS* pPresentParams);
|
||||||
|
|
||||||
void NotifyDisplayRefreshRate(
|
void UpdateDisplayRefreshRate();
|
||||||
double RefreshRate);
|
|
||||||
|
|
||||||
HRESULT EnterFullscreenMode(
|
HRESULT EnterFullscreenMode(
|
||||||
D3DPRESENT_PARAMETERS* pPresentParams,
|
D3DPRESENT_PARAMETERS* pPresentParams,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user