mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-10 08:09:26 +01:00
Merge pull request #7744 from stenzek/vsync
Renderer: Fix throttle-disable (TAB) hotkey when vsync is enabled
This commit is contained in:
commit
c1492aeb45
@ -601,7 +601,7 @@ void Present()
|
|||||||
// flag when it is supported, even when presenting in windowed mode.
|
// flag when it is supported, even when presenting in windowed mode.
|
||||||
// However, this flag cannot be used if the app is in fullscreen mode as a
|
// However, this flag cannot be used if the app is in fullscreen mode as a
|
||||||
// result of calling SetFullscreenState.
|
// result of calling SetFullscreenState.
|
||||||
if (AllowTearingSupported() && !g_ActiveConfig.IsVSync() && !GetFullscreenState())
|
if (AllowTearingSupported() && !g_ActiveConfig.bVSyncActive && !GetFullscreenState())
|
||||||
present_flags |= DXGI_PRESENT_ALLOW_TEARING;
|
present_flags |= DXGI_PRESENT_ALLOW_TEARING;
|
||||||
|
|
||||||
if (swapchain->IsTemporaryMonoSupported() && g_ActiveConfig.stereo_mode != StereoMode::QuadBuffer)
|
if (swapchain->IsTemporaryMonoSupported() && g_ActiveConfig.stereo_mode != StereoMode::QuadBuffer)
|
||||||
@ -610,7 +610,7 @@ void Present()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Is 1 the correct value for vsyncing?
|
// TODO: Is 1 the correct value for vsyncing?
|
||||||
swapchain->Present(static_cast<UINT>(g_ActiveConfig.IsVSync()), present_flags);
|
swapchain->Present(static_cast<UINT>(g_ActiveConfig.bVSyncActive), present_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT SetFullscreenState(bool enable_fullscreen)
|
HRESULT SetFullscreenState(bool enable_fullscreen)
|
||||||
|
@ -751,7 +751,7 @@ Renderer::Renderer(std::unique_ptr<GLContext> main_gl_context, float backbuffer_
|
|||||||
|
|
||||||
// Handle VSync on/off
|
// Handle VSync on/off
|
||||||
if (!DriverDetails::HasBug(DriverDetails::BUG_BROKEN_VSYNC))
|
if (!DriverDetails::HasBug(DriverDetails::BUG_BROKEN_VSYNC))
|
||||||
m_main_gl_context->SwapInterval(g_ActiveConfig.IsVSync());
|
m_main_gl_context->SwapInterval(g_ActiveConfig.bVSyncActive);
|
||||||
|
|
||||||
// Because of the fixed framebuffer size we need to disable the resolution
|
// Because of the fixed framebuffer size we need to disable the resolution
|
||||||
// options while running
|
// options while running
|
||||||
@ -1439,7 +1439,7 @@ void Renderer::OnConfigChanged(u32 bits)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (bits & CONFIG_CHANGE_BIT_VSYNC && !DriverDetails::HasBug(DriverDetails::BUG_BROKEN_VSYNC))
|
if (bits & CONFIG_CHANGE_BIT_VSYNC && !DriverDetails::HasBug(DriverDetails::BUG_BROKEN_VSYNC))
|
||||||
m_main_gl_context->SwapInterval(g_ActiveConfig.IsVSync());
|
m_main_gl_context->SwapInterval(g_ActiveConfig.bVSyncActive);
|
||||||
|
|
||||||
if (bits & CONFIG_CHANGE_BIT_ANISOTROPY)
|
if (bits & CONFIG_CHANGE_BIT_ANISOTROPY)
|
||||||
g_sampler_cache->Clear();
|
g_sampler_cache->Clear();
|
||||||
|
@ -735,7 +735,7 @@ void Renderer::OnConfigChanged(u32 bits)
|
|||||||
if (m_swap_chain && bits & CONFIG_CHANGE_BIT_VSYNC)
|
if (m_swap_chain && bits & CONFIG_CHANGE_BIT_VSYNC)
|
||||||
{
|
{
|
||||||
g_command_buffer_mgr->WaitForGPUIdle();
|
g_command_buffer_mgr->WaitForGPUIdle();
|
||||||
m_swap_chain->SetVSync(g_ActiveConfig.IsVSync());
|
m_swap_chain->SetVSync(g_ActiveConfig.bVSyncActive);
|
||||||
}
|
}
|
||||||
|
|
||||||
// For quad-buffered stereo we need to change the layer count, so recreate the swap chain.
|
// For quad-buffered stereo we need to change the layer count, so recreate the swap chain.
|
||||||
|
@ -213,8 +213,8 @@ bool VideoBackend::Initialize(const WindowSystemInfo& wsi)
|
|||||||
std::unique_ptr<SwapChain> swap_chain;
|
std::unique_ptr<SwapChain> swap_chain;
|
||||||
if (surface != VK_NULL_HANDLE)
|
if (surface != VK_NULL_HANDLE)
|
||||||
{
|
{
|
||||||
swap_chain =
|
swap_chain = SwapChain::Create(wsi.display_connection, wsi.render_surface, surface,
|
||||||
SwapChain::Create(wsi.display_connection, wsi.render_surface, surface, g_Config.IsVSync());
|
g_ActiveConfig.bVSyncActive);
|
||||||
if (!swap_chain)
|
if (!swap_chain)
|
||||||
{
|
{
|
||||||
PanicAlert("Failed to create Vulkan swap chain.");
|
PanicAlert("Failed to create Vulkan swap chain.");
|
||||||
|
@ -243,7 +243,7 @@ void Renderer::CheckForConfigChanges()
|
|||||||
const u32 old_multisamples = g_ActiveConfig.iMultisamples;
|
const u32 old_multisamples = g_ActiveConfig.iMultisamples;
|
||||||
const int old_anisotropy = g_ActiveConfig.iMaxAnisotropy;
|
const int old_anisotropy = g_ActiveConfig.iMaxAnisotropy;
|
||||||
const bool old_force_filtering = g_ActiveConfig.bForceFiltering;
|
const bool old_force_filtering = g_ActiveConfig.bForceFiltering;
|
||||||
const bool old_vsync = g_ActiveConfig.IsVSync();
|
const bool old_vsync = g_ActiveConfig.bVSyncActive;
|
||||||
const bool old_bbox = g_ActiveConfig.bBBoxEnable;
|
const bool old_bbox = g_ActiveConfig.bBBoxEnable;
|
||||||
|
|
||||||
UpdateActiveConfig();
|
UpdateActiveConfig();
|
||||||
@ -264,7 +264,7 @@ void Renderer::CheckForConfigChanges()
|
|||||||
changed_bits |= CONFIG_CHANGE_BIT_ANISOTROPY;
|
changed_bits |= CONFIG_CHANGE_BIT_ANISOTROPY;
|
||||||
if (old_force_filtering != g_ActiveConfig.bForceFiltering)
|
if (old_force_filtering != g_ActiveConfig.bForceFiltering)
|
||||||
changed_bits |= CONFIG_CHANGE_BIT_FORCE_TEXTURE_FILTERING;
|
changed_bits |= CONFIG_CHANGE_BIT_FORCE_TEXTURE_FILTERING;
|
||||||
if (old_vsync != g_ActiveConfig.IsVSync())
|
if (old_vsync != g_ActiveConfig.bVSyncActive)
|
||||||
changed_bits |= CONFIG_CHANGE_BIT_VSYNC;
|
changed_bits |= CONFIG_CHANGE_BIT_VSYNC;
|
||||||
if (old_bbox != g_ActiveConfig.bBBoxEnable)
|
if (old_bbox != g_ActiveConfig.bBBoxEnable)
|
||||||
changed_bits |= CONFIG_CHANGE_BIT_BBOX;
|
changed_bits |= CONFIG_CHANGE_BIT_BBOX;
|
||||||
|
@ -19,11 +19,19 @@ VideoConfig g_Config;
|
|||||||
VideoConfig g_ActiveConfig;
|
VideoConfig g_ActiveConfig;
|
||||||
static bool s_has_registered_callback = false;
|
static bool s_has_registered_callback = false;
|
||||||
|
|
||||||
|
static bool IsVSyncActive(bool enabled)
|
||||||
|
{
|
||||||
|
// Vsync is disabled when the throttler is disabled by the tab key.
|
||||||
|
return enabled && !Core::GetIsThrottlerTempDisabled() &&
|
||||||
|
SConfig::GetInstance().m_EmulationSpeed == 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
void UpdateActiveConfig()
|
void UpdateActiveConfig()
|
||||||
{
|
{
|
||||||
if (Movie::IsPlayingInput() && Movie::IsConfigSaved())
|
if (Movie::IsPlayingInput() && Movie::IsConfigSaved())
|
||||||
Movie::SetGraphicsConfig();
|
Movie::SetGraphicsConfig();
|
||||||
g_ActiveConfig = g_Config;
|
g_ActiveConfig = g_Config;
|
||||||
|
g_ActiveConfig.bVSyncActive = IsVSyncActive(g_ActiveConfig.bVSync);
|
||||||
}
|
}
|
||||||
|
|
||||||
VideoConfig::VideoConfig()
|
VideoConfig::VideoConfig()
|
||||||
@ -175,12 +183,6 @@ void VideoConfig::VerifyValidity()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VideoConfig::IsVSync() const
|
|
||||||
{
|
|
||||||
return bVSync && !Core::GetIsThrottlerTempDisabled() &&
|
|
||||||
SConfig::GetInstance().m_EmulationSpeed == 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VideoConfig::UsingUberShaders() const
|
bool VideoConfig::UsingUberShaders() const
|
||||||
{
|
{
|
||||||
return iShaderCompilationMode == ShaderCompilationMode::SynchronousUberShaders ||
|
return iShaderCompilationMode == ShaderCompilationMode::SynchronousUberShaders ||
|
||||||
|
@ -56,10 +56,10 @@ struct VideoConfig final
|
|||||||
VideoConfig();
|
VideoConfig();
|
||||||
void Refresh();
|
void Refresh();
|
||||||
void VerifyValidity();
|
void VerifyValidity();
|
||||||
bool IsVSync() const;
|
|
||||||
|
|
||||||
// General
|
// General
|
||||||
bool bVSync;
|
bool bVSync;
|
||||||
|
bool bVSyncActive;
|
||||||
bool bWidescreenHack;
|
bool bWidescreenHack;
|
||||||
AspectMode aspect_mode;
|
AspectMode aspect_mode;
|
||||||
AspectMode suggested_aspect_mode;
|
AspectMode suggested_aspect_mode;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user