diff --git a/dxvk.conf b/dxvk.conf index 83a1b0d5..a18e4d65 100644 --- a/dxvk.conf +++ b/dxvk.conf @@ -19,9 +19,10 @@ # d3d9.maxFrameLatency = 0 -# Enables a frame rate limiter, unless the game is already -# limited to the same refresh rate by vertical synchronization. -# +# Enables frame rate limiter. The main purpose of this is to work around +# bugs in games that have physics or other simulation tied to their frame +# rate, but do not provide their own limiter. +# # Supported values : Any non-negative integer # dxgi.maxFrameRate = 0 diff --git a/src/d3d11/d3d11_swapchain.cpp b/src/d3d11/d3d11_swapchain.cpp index 9cc11462..22e006c4 100644 --- a/src/d3d11/d3d11_swapchain.cpp +++ b/src/d3d11/d3d11_swapchain.cpp @@ -252,9 +252,6 @@ namespace dxvk { DXGI_RATIONAL rate = pDisplayMode->RefreshRate; m_displayRefreshRate = double(rate.Numerator) / double(rate.Denominator); } - - if (m_presenter != nullptr) - m_presenter->setFrameRateLimiterRefreshRate(m_displayRefreshRate); } @@ -407,7 +404,6 @@ namespace dxvk { presenterDesc); m_presenter->setFrameRateLimit(m_parent->GetOptions()->maxFrameRate); - m_presenter->setFrameRateLimiterRefreshRate(m_displayRefreshRate); CreateRenderTargetViews(); } diff --git a/src/d3d9/d3d9_swapchain.cpp b/src/d3d9/d3d9_swapchain.cpp index 45007078..8ffe9176 100644 --- a/src/d3d9/d3d9_swapchain.cpp +++ b/src/d3d9/d3d9_swapchain.cpp @@ -798,7 +798,6 @@ namespace dxvk { presenterDesc); m_presenter->setFrameRateLimit(m_parent->GetOptions()->maxFrameRate); - m_presenter->setFrameRateLimiterRefreshRate(m_displayRefreshRate); CreateRenderTargetViews(); } @@ -1026,9 +1025,6 @@ namespace dxvk { void D3D9SwapChainEx::NotifyDisplayRefreshRate( double RefreshRate) { m_displayRefreshRate = RefreshRate; - - if (m_presenter != nullptr) - m_presenter->setFrameRateLimiterRefreshRate(RefreshRate); } diff --git a/src/util/util_fps_limiter.cpp b/src/util/util_fps_limiter.cpp index f7255a2d..1bddcd41 100644 --- a/src/util/util_fps_limiter.cpp +++ b/src/util/util_fps_limiter.cpp @@ -44,28 +44,12 @@ namespace dxvk { } - void FpsLimiter::setDisplayRefreshRate(double refreshRate) { - std::lock_guard lock(m_mutex); - - m_refreshInterval = refreshRate > 0.0 - ? TimerDuration(int64_t(double(TimerDuration::period::den) / refreshRate)) - : TimerDuration::zero(); - } - - void FpsLimiter::delay(bool vsyncEnabled) { std::lock_guard lock(m_mutex); if (!isEnabled()) return; - // If the swap chain is known to have vsync enabled and the - // refresh rate is similar to the target frame rate, disable - // the limiter so it does not screw up frame times - if (vsyncEnabled && !m_envOverride - && m_refreshInterval * 100 > m_targetInterval * 97) - return; - auto t0 = m_lastFrame; auto t1 = dxvk::high_resolution_clock::now(); diff --git a/src/util/util_fps_limiter.h b/src/util/util_fps_limiter.h index a45f3c0e..0d2d6325 100644 --- a/src/util/util_fps_limiter.h +++ b/src/util/util_fps_limiter.h @@ -28,16 +28,6 @@ namespace dxvk { */ void setTargetFrameRate(double frameRate); - /** - * \brief Sets display refresh rate - * - * This information is used to decide whether or not - * the limiter should be active in the first place in - * case vertical synchronization is enabled. - * \param [in] refreshRate Current refresh rate - */ - void setDisplayRefreshRate(double refreshRate); - /** * \brief Stalls calling thread as necessary * @@ -75,7 +65,6 @@ namespace dxvk { dxvk::mutex m_mutex; TimerDuration m_targetInterval = TimerDuration::zero(); - TimerDuration m_refreshInterval = TimerDuration::zero(); TimerDuration m_deviation = TimerDuration::zero(); TimePoint m_lastFrame; diff --git a/src/vulkan/vulkan_presenter.cpp b/src/vulkan/vulkan_presenter.cpp index f83ed22e..b8c2d122 100644 --- a/src/vulkan/vulkan_presenter.cpp +++ b/src/vulkan/vulkan_presenter.cpp @@ -232,11 +232,6 @@ namespace dxvk::vk { } - void Presenter::setFrameRateLimiterRefreshRate(double refreshRate) { - m_fpsLimiter.setDisplayRefreshRate(refreshRate); - } - - VkResult Presenter::getSupportedFormats(std::vector& formats, const PresenterDesc& desc) { uint32_t numFormats = 0; diff --git a/src/vulkan/vulkan_presenter.h b/src/vulkan/vulkan_presenter.h index 40562f6e..8df19ea9 100644 --- a/src/vulkan/vulkan_presenter.h +++ b/src/vulkan/vulkan_presenter.h @@ -161,16 +161,6 @@ namespace dxvk::vk { */ void setFrameRateLimit(double frameRate); - /** - * \brief Notifies frame rate limiter about the display refresh rate - * - * Used to dynamically disable the frame rate limiter in case - * vertical synchronization is used and the target frame rate - * roughly equals the display's refresh rate. - * \param [in] refresnRate Current refresh rate - */ - void setFrameRateLimiterRefreshRate(double refreshRate); - /** * \brief Checks whether a Vulkan swap chain exists *