Merge pull request #7744 from stenzek/vsync

Renderer: Fix throttle-disable (TAB) hotkey when vsync is enabled
This commit is contained in:
JosJuice 2019-01-31 22:44:10 +01:00 committed by GitHub
commit c1492aeb45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 18 additions and 16 deletions

View File

@ -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)

View File

@ -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();

View File

@ -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.

View File

@ -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.");

View File

@ -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;

View File

@ -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 ||

View File

@ -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;