mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 23:06:43 +08:00 
			
		
		
		
	texture_cache: Refactor scaled image size calculation
This commit is contained in:
		
							parent
							
								
									237a43004f
								
							
						
					
					
						commit
						88ef04dbaf
					
				| @ -852,18 +852,23 @@ void TextureCache<P>::InvalidateScale(Image& image) { | ||||
|     has_deleted_images = true; | ||||
| } | ||||
| 
 | ||||
| template <class P> | ||||
| u64 TextureCache<P>::GetScaledImageSizeBytes(Image& image) { | ||||
|     const f32 add_to_size = Settings::values.resolution_info.up_factor - 1.0f; | ||||
|     const bool sign = std::signbit(add_to_size); | ||||
|     const u32 image_size_bytes = std::max(image.guest_size_bytes, image.unswizzled_size_bytes); | ||||
|     const u64 tentative_size = static_cast<u64>(image_size_bytes * std::abs(add_to_size)); | ||||
|     const u64 fitted_size = Common::AlignUp(tentative_size, 1024); | ||||
|     return sign ? -fitted_size : fitted_size; | ||||
| } | ||||
| 
 | ||||
| template <class P> | ||||
| bool TextureCache<P>::ScaleUp(Image& image) { | ||||
|     const bool rescaled = image.ScaleUp(); | ||||
|     if (!rescaled) { | ||||
|         return false; | ||||
|     } | ||||
|     const auto& add_to_size = Settings::values.resolution_info.up_factor - 1.0f; | ||||
|     const auto sign = std::signbit(add_to_size); | ||||
|     const u64 tentative_size = static_cast<u64>( | ||||
|         std::max(image.guest_size_bytes, image.unswizzled_size_bytes) * std::abs(add_to_size)); | ||||
|     const u64 fitted_size = Common::AlignUp(tentative_size, 1024); | ||||
|     total_used_memory += sign ? -fitted_size : fitted_size; | ||||
|     total_used_memory += GetScaledImageSizeBytes(image); | ||||
|     InvalidateScale(image); | ||||
|     return true; | ||||
| } | ||||
| @ -874,12 +879,7 @@ bool TextureCache<P>::ScaleDown(Image& image) { | ||||
|     if (!rescaled) { | ||||
|         return false; | ||||
|     } | ||||
|     const auto& add_to_size = Settings::values.resolution_info.up_factor - 1.0f; | ||||
|     const auto sign = std::signbit(add_to_size); | ||||
|     const u64 tentative_size = static_cast<u64>( | ||||
|         std::max(image.guest_size_bytes, image.unswizzled_size_bytes) * std::abs(add_to_size)); | ||||
|     const u64 fitted_size = Common::AlignUp(tentative_size, 1024); | ||||
|     total_used_memory += sign ? fitted_size : -fitted_size; | ||||
|     total_used_memory += GetScaledImageSizeBytes(image); | ||||
|     InvalidateScale(image); | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| @ -339,6 +339,7 @@ private: | ||||
|     void InvalidateScale(Image& image); | ||||
|     bool ScaleUp(Image& image); | ||||
|     bool ScaleDown(Image& image); | ||||
|     u64 GetScaledImageSizeBytes(Image& image); | ||||
| 
 | ||||
|     Runtime& runtime; | ||||
|     VideoCore::RasterizerInterface& rasterizer; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user