From 842031a2eb0b4bac4a351db914530296812962d1 Mon Sep 17 00:00:00 2001 From: SachinVin Date: Sun, 16 May 2021 14:15:02 +0530 Subject: [PATCH] Fix Disk shader cache when accurate multiplication is off (#5711) * renderer_opengl.cpp: fix sanitize_mul check for disk shader cache * Partially revert "Band-aid solution for 'Disk Shader Cache' (#5188)" This reverts commit 2e0ce86c9ef82b92f98695e8ab49e5485e796513. * Disable `disk_shader_cache` checkbox when `hw_renderer` is off --- .../configuration/configure_graphics.cpp | 18 ++++++------------ .../configuration/configure_graphics.ui | 2 +- .../renderer_opengl/gl_shader_disk_cache.cpp | 4 ++-- .../renderer_opengl/gl_shader_manager.cpp | 5 +++-- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/citra_qt/configuration/configure_graphics.cpp b/src/citra_qt/configuration/configure_graphics.cpp index 44290f783..75602a8b4 100644 --- a/src/citra_qt/configuration/configure_graphics.cpp +++ b/src/citra_qt/configuration/configure_graphics.cpp @@ -23,25 +23,19 @@ ConfigureGraphics::ConfigureGraphics(QWidget* parent) connect(ui->toggle_hw_renderer, &QCheckBox::toggled, this, [this] { auto checked = ui->toggle_hw_renderer->isChecked(); ui->hw_renderer_group->setEnabled(checked); + ui->toggle_disk_shader_cache->setEnabled(checked && ui->toggle_hw_shader->isChecked()); }); ui->hw_shader_group->setEnabled(ui->toggle_hw_shader->isChecked()); - connect(ui->toggle_hw_shader, &QCheckBox::toggled, ui->hw_shader_group, &QWidget::setEnabled); + ui->toggle_disk_shader_cache->setEnabled(ui->toggle_hw_renderer->isChecked() && + ui->toggle_hw_shader->isChecked()); - ui->toggle_disk_shader_cache->setEnabled(ui->toggle_hw_shader->isChecked() && - ui->toggle_accurate_mul->isChecked()); connect(ui->toggle_hw_shader, &QCheckBox::toggled, this, [this] { - ui->toggle_disk_shader_cache->setEnabled(ui->toggle_hw_shader->isChecked() && - ui->toggle_accurate_mul->isChecked()); - if (!ui->toggle_disk_shader_cache->isEnabled()) - ui->toggle_disk_shader_cache->setChecked(false); + auto checked = ui->toggle_hw_shader->isChecked(); + ui->hw_shader_group->setEnabled(checked); + ui->toggle_disk_shader_cache->setEnabled(checked); }); - connect(ui->toggle_accurate_mul, &QCheckBox::toggled, this, [this] { - ui->toggle_disk_shader_cache->setEnabled(ui->toggle_accurate_mul->isChecked()); - if (!ui->toggle_disk_shader_cache->isEnabled()) - ui->toggle_disk_shader_cache->setChecked(false); - }); #ifdef __APPLE__ connect(ui->toggle_hw_shader, &QCheckBox::stateChanged, this, [this](int state) { if (state == Qt::Checked) { diff --git a/src/citra_qt/configuration/configure_graphics.ui b/src/citra_qt/configuration/configure_graphics.ui index c9eb552a1..5616e1d42 100644 --- a/src/citra_qt/configuration/configure_graphics.ui +++ b/src/citra_qt/configuration/configure_graphics.ui @@ -121,7 +121,7 @@ - <html><head/><body><p>Reduce stuttering by storing and loading generated shaders to disk.</p><p>It cannot be used without Enable Hardware Shader or Accurate Multiplication.</p></body></html> + <html><head/><body><p>Reduce stuttering by storing and loading generated shaders to disk.</p></body></html> Use Disk Shader Cache diff --git a/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp b/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp index 58730d6ee..a44fc299d 100644 --- a/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp @@ -106,8 +106,8 @@ ShaderDiskCache::ShaderDiskCache(bool separable) : separable{separable} {} std::optional> ShaderDiskCache::LoadTransferable() { const bool has_title_id = GetProgramID() != 0; - if (!Settings::values.use_hw_shader || !Settings::values.shaders_accurate_mul || - !Settings::values.use_disk_shader_cache || !has_title_id) { + if (!Settings::values.use_hw_shader || !Settings::values.use_disk_shader_cache || + !has_title_id) { return std::nullopt; } tried_to_load = true; diff --git a/src/video_core/renderer_opengl/gl_shader_manager.cpp b/src/video_core/renderer_opengl/gl_shader_manager.cpp index ccbcc8875..8a878b65a 100644 --- a/src/video_core/renderer_opengl/gl_shader_manager.cpp +++ b/src/video_core/renderer_opengl/gl_shader_manager.cpp @@ -496,7 +496,8 @@ void ShaderProgramManager::LoadDiskCache(const std::atomic_bool& stop_loading, if (dump != dump_map.end() && decomp != decompiled_map.end()) { // Only load this shader if its sanitize_mul setting matches - if (decomp->second.sanitize_mul == VideoCore::g_hw_shader_accurate_mul) { + if (raw.GetProgramType() == ProgramType::VS && + decomp->second.sanitize_mul != VideoCore::g_hw_shader_accurate_mul) { continue; } @@ -617,6 +618,6 @@ void ShaderProgramManager::LoadDiskCache(const std::atomic_bool& stop_loading, if (precompiled_cache_altered) { disk_cache.SaveVirtualPrecompiledFile(); } -} // namespace OpenGL +} } // namespace OpenGL