diff --git a/src/core/system.cpp b/src/core/system.cpp index 95acf7948..869ec1883 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -78,6 +78,11 @@ bool System::RecreateGPU() return true; } +void System::UpdateGPUSettings() +{ + m_gpu->UpdateSettings(); +} + bool System::Boot(const char* filename) { // Load CD image up and detect region. diff --git a/src/core/system.h b/src/core/system.h index 2b193f6cb..8aaf7b12c 100644 --- a/src/core/system.h +++ b/src/core/system.h @@ -70,6 +70,9 @@ public: /// Recreates the GPU component, saving/loading the state so it is preserved. Call when the GPU renderer changes. bool RecreateGPU(); + /// Updates GPU settings, without recreating the renderer. + void UpdateGPUSettings(); + void RunFrame(); bool LoadEXE(const char* filename, std::vector& bios_image); diff --git a/src/duckstation-qt/qthostinterface.cpp b/src/duckstation-qt/qthostinterface.cpp index e485a717e..d037a507a 100644 --- a/src/duckstation-qt/qthostinterface.cpp +++ b/src/duckstation-qt/qthostinterface.cpp @@ -110,6 +110,10 @@ void QtHostInterface::applySettings() // TODO: Should we move this to the base class? const GPURenderer old_gpu_renderer = m_settings.gpu_renderer; + const u32 old_gpu_resolution_scale = m_settings.gpu_resolution_scale; + const bool old_gpu_true_color = m_settings.gpu_true_color; + const bool old_gpu_texture_filtering = m_settings.gpu_texture_filtering; + const bool old_gpu_force_progressive_scan = m_settings.gpu_force_progressive_scan; const bool old_vsync_enabled = m_settings.video_sync_enabled; const bool old_audio_sync_enabled = m_settings.audio_sync_enabled; const bool old_speed_limiter_enabled = m_settings.speed_limiter_enabled; @@ -120,15 +124,22 @@ void QtHostInterface::applySettings() m_settings.Load(si); } + // TODO: Fast path for hardware->software switches + if (m_settings.gpu_renderer != old_gpu_renderer) + switchGPURenderer(); + if (m_settings.video_sync_enabled != old_vsync_enabled || m_settings.audio_sync_enabled != old_audio_sync_enabled || m_settings.speed_limiter_enabled != old_speed_limiter_enabled) { UpdateSpeedLimiterState(); } - // TODO: Fast path for hardware->software switches - if (m_settings.gpu_renderer != old_gpu_renderer) - switchGPURenderer(); + if (m_settings.gpu_resolution_scale != old_gpu_resolution_scale || m_settings.gpu_true_color != old_gpu_true_color || + m_settings.gpu_texture_filtering != old_gpu_texture_filtering || + m_settings.gpu_force_progressive_scan != old_gpu_force_progressive_scan) + { + m_system->UpdateGPUSettings(); + } } void QtHostInterface::checkSettings()