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 2e0ce86c9e.

* Disable `disk_shader_cache` checkbox when `hw_renderer` is off
This commit is contained in:
SachinVin 2021-05-16 14:15:02 +05:30 committed by GitHub
parent 82aedb9900
commit 842031a2eb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 12 additions and 17 deletions

View file

@ -23,25 +23,19 @@ ConfigureGraphics::ConfigureGraphics(QWidget* parent)
connect(ui->toggle_hw_renderer, &QCheckBox::toggled, this, [this] { connect(ui->toggle_hw_renderer, &QCheckBox::toggled, this, [this] {
auto checked = ui->toggle_hw_renderer->isChecked(); auto checked = ui->toggle_hw_renderer->isChecked();
ui->hw_renderer_group->setEnabled(checked); 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()); 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] { connect(ui->toggle_hw_shader, &QCheckBox::toggled, this, [this] {
ui->toggle_disk_shader_cache->setEnabled(ui->toggle_hw_shader->isChecked() && auto checked = ui->toggle_hw_shader->isChecked();
ui->toggle_accurate_mul->isChecked()); ui->hw_shader_group->setEnabled(checked);
if (!ui->toggle_disk_shader_cache->isEnabled()) ui->toggle_disk_shader_cache->setEnabled(checked);
ui->toggle_disk_shader_cache->setChecked(false);
}); });
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__ #ifdef __APPLE__
connect(ui->toggle_hw_shader, &QCheckBox::stateChanged, this, [this](int state) { connect(ui->toggle_hw_shader, &QCheckBox::stateChanged, this, [this](int state) {
if (state == Qt::Checked) { if (state == Qt::Checked) {

View file

@ -121,7 +121,7 @@
<item> <item>
<widget class="QCheckBox" name="toggle_disk_shader_cache"> <widget class="QCheckBox" name="toggle_disk_shader_cache">
<property name="toolTip"> <property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Reduce stuttering by storing and loading generated shaders to disk.&lt;/p&gt;&lt;p&gt;It cannot be used without Enable Hardware Shader or Accurate Multiplication.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Reduce stuttering by storing and loading generated shaders to disk.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="text"> <property name="text">
<string>Use Disk Shader Cache</string> <string>Use Disk Shader Cache</string>

View file

@ -106,8 +106,8 @@ ShaderDiskCache::ShaderDiskCache(bool separable) : separable{separable} {}
std::optional<std::vector<ShaderDiskCacheRaw>> ShaderDiskCache::LoadTransferable() { std::optional<std::vector<ShaderDiskCacheRaw>> ShaderDiskCache::LoadTransferable() {
const bool has_title_id = GetProgramID() != 0; const bool has_title_id = GetProgramID() != 0;
if (!Settings::values.use_hw_shader || !Settings::values.shaders_accurate_mul || if (!Settings::values.use_hw_shader || !Settings::values.use_disk_shader_cache ||
!Settings::values.use_disk_shader_cache || !has_title_id) { !has_title_id) {
return std::nullopt; return std::nullopt;
} }
tried_to_load = true; tried_to_load = true;

View file

@ -496,7 +496,8 @@ void ShaderProgramManager::LoadDiskCache(const std::atomic_bool& stop_loading,
if (dump != dump_map.end() && decomp != decompiled_map.end()) { if (dump != dump_map.end() && decomp != decompiled_map.end()) {
// Only load this shader if its sanitize_mul setting matches // 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; continue;
} }
@ -617,6 +618,6 @@ void ShaderProgramManager::LoadDiskCache(const std::atomic_bool& stop_loading,
if (precompiled_cache_altered) { if (precompiled_cache_altered) {
disk_cache.SaveVirtualPrecompiledFile(); disk_cache.SaveVirtualPrecompiledFile();
} }
} // namespace OpenGL }
} // namespace OpenGL } // namespace OpenGL