mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	gl_shader_disk_cache: Properly ignore existing cache
Previously old entries where appended to the file even if the shader cache was ignored at boot. Address that issue.
This commit is contained in:
		
							parent
							
								
									deecd7f074
								
							
						
					
					
						commit
						58b597c5ec
					
				| @ -112,14 +112,15 @@ std::optional<std::pair<std::vector<ShaderDiskCacheRaw>, std::vector<ShaderDiskC | |||||||
| ShaderDiskCacheOpenGL::LoadTransferable() { | ShaderDiskCacheOpenGL::LoadTransferable() { | ||||||
|     // Skip games without title id
 |     // Skip games without title id
 | ||||||
|     const bool has_title_id = system.CurrentProcess()->GetTitleID() != 0; |     const bool has_title_id = system.CurrentProcess()->GetTitleID() != 0; | ||||||
|     if (!Settings::values.use_disk_shader_cache || !has_title_id) |     if (!Settings::values.use_disk_shader_cache || !has_title_id) { | ||||||
|         return {}; |         return {}; | ||||||
|     tried_to_load = true; |     } | ||||||
| 
 | 
 | ||||||
|     FileUtil::IOFile file(GetTransferablePath(), "rb"); |     FileUtil::IOFile file(GetTransferablePath(), "rb"); | ||||||
|     if (!file.IsOpen()) { |     if (!file.IsOpen()) { | ||||||
|         LOG_INFO(Render_OpenGL, "No transferable shader cache found for game with title id={}", |         LOG_INFO(Render_OpenGL, "No transferable shader cache found for game with title id={}", | ||||||
|                  GetTitleID()); |                  GetTitleID()); | ||||||
|  |         is_usable = true; | ||||||
|         return {}; |         return {}; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -135,6 +136,7 @@ ShaderDiskCacheOpenGL::LoadTransferable() { | |||||||
|         LOG_INFO(Render_OpenGL, "Transferable shader cache is old - removing"); |         LOG_INFO(Render_OpenGL, "Transferable shader cache is old - removing"); | ||||||
|         file.Close(); |         file.Close(); | ||||||
|         InvalidateTransferable(); |         InvalidateTransferable(); | ||||||
|  |         is_usable = true; | ||||||
|         return {}; |         return {}; | ||||||
|     } |     } | ||||||
|     if (version > NativeVersion) { |     if (version > NativeVersion) { | ||||||
| @ -180,13 +182,15 @@ ShaderDiskCacheOpenGL::LoadTransferable() { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return {{raws, usages}}; |     is_usable = true; | ||||||
|  |     return {{std::move(raws), std::move(usages)}}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::pair<std::unordered_map<u64, ShaderDiskCacheDecompiled>, ShaderDumpsMap> | std::pair<std::unordered_map<u64, ShaderDiskCacheDecompiled>, ShaderDumpsMap> | ||||||
| ShaderDiskCacheOpenGL::LoadPrecompiled() { | ShaderDiskCacheOpenGL::LoadPrecompiled() { | ||||||
|     if (!IsUsable()) |     if (!is_usable) { | ||||||
|         return {}; |         return {}; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     FileUtil::IOFile file(GetPrecompiledPath(), "rb"); |     FileUtil::IOFile file(GetPrecompiledPath(), "rb"); | ||||||
|     if (!file.IsOpen()) { |     if (!file.IsOpen()) { | ||||||
| @ -479,8 +483,9 @@ void ShaderDiskCacheOpenGL::InvalidatePrecompiled() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ShaderDiskCacheOpenGL::SaveRaw(const ShaderDiskCacheRaw& entry) { | void ShaderDiskCacheOpenGL::SaveRaw(const ShaderDiskCacheRaw& entry) { | ||||||
|     if (!IsUsable()) |     if (!is_usable) { | ||||||
|         return; |         return; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     const u64 id = entry.GetUniqueIdentifier(); |     const u64 id = entry.GetUniqueIdentifier(); | ||||||
|     if (transferable.find(id) != transferable.end()) { |     if (transferable.find(id) != transferable.end()) { | ||||||
| @ -501,8 +506,9 @@ void ShaderDiskCacheOpenGL::SaveRaw(const ShaderDiskCacheRaw& entry) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ShaderDiskCacheOpenGL::SaveUsage(const ShaderDiskCacheUsage& usage) { | void ShaderDiskCacheOpenGL::SaveUsage(const ShaderDiskCacheUsage& usage) { | ||||||
|     if (!IsUsable()) |     if (!is_usable) { | ||||||
|         return; |         return; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     const auto it = transferable.find(usage.unique_identifier); |     const auto it = transferable.find(usage.unique_identifier); | ||||||
|     ASSERT_MSG(it != transferable.end(), "Saving shader usage without storing raw previously"); |     ASSERT_MSG(it != transferable.end(), "Saving shader usage without storing raw previously"); | ||||||
| @ -528,8 +534,9 @@ void ShaderDiskCacheOpenGL::SaveUsage(const ShaderDiskCacheUsage& usage) { | |||||||
| 
 | 
 | ||||||
| void ShaderDiskCacheOpenGL::SaveDecompiled(u64 unique_identifier, const std::string& code, | void ShaderDiskCacheOpenGL::SaveDecompiled(u64 unique_identifier, const std::string& code, | ||||||
|                                            const GLShader::ShaderEntries& entries) { |                                            const GLShader::ShaderEntries& entries) { | ||||||
|     if (!IsUsable()) |     if (!is_usable) { | ||||||
|         return; |         return; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     if (precompiled_cache_virtual_file.GetSize() == 0) { |     if (precompiled_cache_virtual_file.GetSize() == 0) { | ||||||
|         SavePrecompiledHeaderToVirtualPrecompiledCache(); |         SavePrecompiledHeaderToVirtualPrecompiledCache(); | ||||||
| @ -543,8 +550,9 @@ void ShaderDiskCacheOpenGL::SaveDecompiled(u64 unique_identifier, const std::str | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ShaderDiskCacheOpenGL::SaveDump(const ShaderDiskCacheUsage& usage, GLuint program) { | void ShaderDiskCacheOpenGL::SaveDump(const ShaderDiskCacheUsage& usage, GLuint program) { | ||||||
|     if (!IsUsable()) |     if (!is_usable) { | ||||||
|         return; |         return; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     GLint binary_length{}; |     GLint binary_length{}; | ||||||
|     glGetProgramiv(program, GL_PROGRAM_BINARY_LENGTH, &binary_length); |     glGetProgramiv(program, GL_PROGRAM_BINARY_LENGTH, &binary_length); | ||||||
| @ -565,10 +573,6 @@ void ShaderDiskCacheOpenGL::SaveDump(const ShaderDiskCacheUsage& usage, GLuint p | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool ShaderDiskCacheOpenGL::IsUsable() const { |  | ||||||
|     return tried_to_load && Settings::values.use_disk_shader_cache; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| FileUtil::IOFile ShaderDiskCacheOpenGL::AppendTransferableFile() const { | FileUtil::IOFile ShaderDiskCacheOpenGL::AppendTransferableFile() const { | ||||||
|     if (!EnsureDirectories()) |     if (!EnsureDirectories()) | ||||||
|         return {}; |         return {}; | ||||||
|  | |||||||
| @ -224,9 +224,6 @@ private: | |||||||
|     bool SaveDecompiledFile(u64 unique_identifier, const std::string& code, |     bool SaveDecompiledFile(u64 unique_identifier, const std::string& code, | ||||||
|                             const GLShader::ShaderEntries& entries); |                             const GLShader::ShaderEntries& entries); | ||||||
| 
 | 
 | ||||||
|     /// Returns if the cache can be used
 |  | ||||||
|     bool IsUsable() const; |  | ||||||
| 
 |  | ||||||
|     /// Opens current game's transferable file and write it's header if it doesn't exist
 |     /// Opens current game's transferable file and write it's header if it doesn't exist
 | ||||||
|     FileUtil::IOFile AppendTransferableFile() const; |     FileUtil::IOFile AppendTransferableFile() const; | ||||||
| 
 | 
 | ||||||
| @ -297,7 +294,7 @@ private: | |||||||
|     std::unordered_map<u64, std::unordered_set<ShaderDiskCacheUsage>> transferable; |     std::unordered_map<u64, std::unordered_set<ShaderDiskCacheUsage>> transferable; | ||||||
| 
 | 
 | ||||||
|     // The cache has been loaded at boot
 |     // The cache has been loaded at boot
 | ||||||
|     bool tried_to_load{}; |     bool is_usable{}; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace OpenGL
 | } // namespace OpenGL
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 ReinUsesLisp
						ReinUsesLisp