citra-emu
/
citra-canary
Archived
1
0
Fork 0

Only add shaders to precompiled cache if they are new

This commit is contained in:
James Rowe 2019-09-09 19:05:20 -06:00
parent 061a33477f
commit 7092ba8480
1 changed files with 10 additions and 7 deletions

View File

@ -573,20 +573,23 @@ void ShaderProgramManager::LoadDiskCache(const std::atomic_bool& stop_loading,
result = r; result = r;
} else { } else {
// Unsupported shader type got stored somehow so nuke the cache // Unsupported shader type got stored somehow so nuke the cache
LOG_CRITICAL(Frontend, "failed to load raw programtype {}", LOG_ERROR(Frontend, "failed to load raw programtype {}",
static_cast<u32>(raw.GetProgramType())); static_cast<u32>(raw.GetProgramType()));
compilation_failed = true; compilation_failed = true;
return; return;
} }
if (handle == 0) { if (handle == 0) {
LOG_CRITICAL(Frontend, "compilation from raw failed {:x} {:x}", LOG_ERROR(Frontend, "compilation from raw failed {:x} {:x}",
raw.GetProgramCode().at(0), raw.GetProgramCode().at(1)); raw.GetProgramCode().at(0), raw.GetProgramCode().at(1));
compilation_failed = true; compilation_failed = true;
return; return;
} }
disk_cache.SaveDecompiled(unique_identifier, *result); // If this is a new shader, add it the precompiled cache
disk_cache.SaveDump(unique_identifier, handle); if (result) {
precompiled_cache_altered = true; disk_cache.SaveDecompiled(unique_identifier, *result);
disk_cache.SaveDump(unique_identifier, handle);
precompiled_cache_altered = true;
}
if (callback) { if (callback) {
callback(VideoCore::LoadCallbackStage::Build, i, raws.size()); callback(VideoCore::LoadCallbackStage::Build, i, raws.size());