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: Add precompiled load
This commit is contained in:
		
							parent
							
								
									57fb15d2a3
								
							
						
					
					
						commit
						a1faed9950
					
				| @ -121,6 +121,45 @@ bool ShaderDiskCacheOpenGL::LoadTransferable(std::vector<ShaderDiskCacheRaw>& ra | |||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | std::vector<ShaderDiskCachePrecompiledEntry> ShaderDiskCacheOpenGL::LoadPrecompiled() { | ||||||
|  |     FileUtil::IOFile file(GetPrecompiledPath(), "rb"); | ||||||
|  |     if (!file.IsOpen()) { | ||||||
|  |         LOG_INFO(Render_OpenGL, "No precompiled shader cache found for game with title id={}", | ||||||
|  |                  GetTitleID()); | ||||||
|  |         return {}; | ||||||
|  |     } | ||||||
|  |     const u64 file_size = file.GetSize(); | ||||||
|  | 
 | ||||||
|  |     u64 precompiled_hash{}; | ||||||
|  |     file.ReadBytes(&precompiled_hash, sizeof(precompiled_hash)); | ||||||
|  |     if (precompiled_hash != PrecompiledHash) { | ||||||
|  |         LOG_INFO(Render_OpenGL, "Precompiled cache is from another version of yuzu - removing"); | ||||||
|  |         file.Close(); | ||||||
|  |         InvalidatePrecompiled(); | ||||||
|  |         return {}; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     std::vector<ShaderDiskCachePrecompiledEntry> precompiled; | ||||||
|  |     while (file.Tell() < file_size) { | ||||||
|  |         ShaderDiskCachePrecompiledEntry entry; | ||||||
|  |         file.ReadBytes(&entry.usage, sizeof(entry.usage)); | ||||||
|  | 
 | ||||||
|  |         file.ReadBytes(&entry.binary_format, sizeof(u32)); | ||||||
|  | 
 | ||||||
|  |         u32 binary_length{}; | ||||||
|  |         file.ReadBytes(&binary_length, sizeof(u32)); | ||||||
|  |         entry.binary.resize(binary_length); | ||||||
|  |         file.ReadBytes(entry.binary.data(), entry.binary.size()); | ||||||
|  | 
 | ||||||
|  |         precompiled.push_back(entry); | ||||||
|  |     } | ||||||
|  |     return precompiled; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ShaderDiskCacheOpenGL::InvalidatePrecompiled() const { | ||||||
|  |     FileUtil::Delete(GetPrecompiledPath()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void ShaderDiskCacheOpenGL::SaveRaw(const ShaderDiskCacheRaw& entry) { | void ShaderDiskCacheOpenGL::SaveRaw(const ShaderDiskCacheRaw& entry) { | ||||||
|     const u64 id = entry.GetUniqueIdentifier(); |     const u64 id = entry.GetUniqueIdentifier(); | ||||||
|     if (transferable.find(id) != transferable.end()) { |     if (transferable.find(id) != transferable.end()) { | ||||||
|  | |||||||
| @ -144,6 +144,12 @@ public: | |||||||
|     bool LoadTransferable(std::vector<ShaderDiskCacheRaw>& raws, |     bool LoadTransferable(std::vector<ShaderDiskCacheRaw>& raws, | ||||||
|                           std::vector<ShaderDiskCacheUsage>& usages); |                           std::vector<ShaderDiskCacheUsage>& usages); | ||||||
| 
 | 
 | ||||||
|  |     /// Loads current game's precompiled cache. Invalidates if emulator's version has changed.
 | ||||||
|  |     std::vector<ShaderDiskCachePrecompiledEntry> LoadPrecompiled(); | ||||||
|  | 
 | ||||||
|  |     /// Removes the precompiled cache file.
 | ||||||
|  |     void InvalidatePrecompiled() const; | ||||||
|  | 
 | ||||||
|     /// Saves a raw dump to the transferable file. Checks for collisions.
 |     /// Saves a raw dump to the transferable file. Checks for collisions.
 | ||||||
|     void SaveRaw(const ShaderDiskCacheRaw& entry); |     void SaveRaw(const ShaderDiskCacheRaw& entry); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 ReinUsesLisp
						ReinUsesLisp