mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-30 18:24:15 +01:00 
			
		
		
		
	Merge pull request #10529 from liamwhite/critical-spacing
caches: make critical reclamation less eager and possible in more cases
This commit is contained in:
		
						commit
						e0c17a2113
					
				| @ -35,7 +35,7 @@ BufferCache<P>::BufferCache(Tegra::MaxwellDeviceMemoryManager& device_memory_, R | ||||
|     const s64 min_spacing_critical = device_local_memory - 512_MiB; | ||||
|     const s64 mem_threshold = std::min(device_local_memory, TARGET_THRESHOLD); | ||||
|     const s64 min_vacancy_expected = (6 * mem_threshold) / 10; | ||||
|     const s64 min_vacancy_critical = (3 * mem_threshold) / 10; | ||||
|     const s64 min_vacancy_critical = (2 * mem_threshold) / 10; | ||||
|     minimum_memory = static_cast<u64>( | ||||
|         std::max(std::min(device_local_memory - min_vacancy_expected, min_spacing_expected), | ||||
|                  DEFAULT_EXPECTED_MEMORY)); | ||||
|  | ||||
| @ -3,6 +3,7 @@ | ||||
| 
 | ||||
| #include "common/common_types.h" | ||||
| #include "common/math_util.h" | ||||
| #include "common/settings.h" | ||||
| #include "video_core/surface.h" | ||||
| 
 | ||||
| namespace VideoCore::Surface { | ||||
| @ -400,11 +401,20 @@ std::pair<u32, u32> GetASTCBlockSize(PixelFormat format) { | ||||
|     return {DefaultBlockWidth(format), DefaultBlockHeight(format)}; | ||||
| } | ||||
| 
 | ||||
| u64 EstimatedDecompressedSize(u64 base_size, PixelFormat format) { | ||||
| u64 TranscodedAstcSize(u64 base_size, PixelFormat format) { | ||||
|     constexpr u64 RGBA8_PIXEL_SIZE = 4; | ||||
|     const u64 base_block_size = static_cast<u64>(DefaultBlockWidth(format)) * | ||||
|                                 static_cast<u64>(DefaultBlockHeight(format)) * RGBA8_PIXEL_SIZE; | ||||
|     return (base_size * base_block_size) / BytesPerBlock(format); | ||||
|     const u64 uncompressed_size = (base_size * base_block_size) / BytesPerBlock(format); | ||||
| 
 | ||||
|     switch (Settings::values.astc_recompression.GetValue()) { | ||||
|     case Settings::AstcRecompression::Bc1: | ||||
|         return uncompressed_size / 8; | ||||
|     case Settings::AstcRecompression::Bc3: | ||||
|         return uncompressed_size / 4; | ||||
|     default: | ||||
|         return uncompressed_size; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| } // namespace VideoCore::Surface
 | ||||
|  | ||||
| @ -517,6 +517,6 @@ size_t PixelComponentSizeBitsInteger(PixelFormat format); | ||||
| 
 | ||||
| std::pair<u32, u32> GetASTCBlockSize(PixelFormat format); | ||||
| 
 | ||||
| u64 EstimatedDecompressedSize(u64 base_size, PixelFormat format); | ||||
| u64 TranscodedAstcSize(u64 base_size, PixelFormat format); | ||||
| 
 | ||||
| } // namespace VideoCore::Surface
 | ||||
|  | ||||
| @ -55,7 +55,7 @@ TextureCache<P>::TextureCache(Runtime& runtime_, Tegra::MaxwellDeviceMemoryManag | ||||
|         const s64 min_spacing_critical = device_local_memory - 512_MiB; | ||||
|         const s64 mem_threshold = std::min(device_local_memory, TARGET_THRESHOLD); | ||||
|         const s64 min_vacancy_expected = (6 * mem_threshold) / 10; | ||||
|         const s64 min_vacancy_critical = (3 * mem_threshold) / 10; | ||||
|         const s64 min_vacancy_critical = (2 * mem_threshold) / 10; | ||||
|         expected_memory = static_cast<u64>( | ||||
|             std::max(std::min(device_local_memory - min_vacancy_expected, min_spacing_expected), | ||||
|                      DEFAULT_EXPECTED_MEMORY)); | ||||
| @ -1979,7 +1979,7 @@ void TextureCache<P>::RegisterImage(ImageId image_id) { | ||||
|     if ((IsPixelFormatASTC(image.info.format) && | ||||
|          True(image.flags & ImageFlagBits::AcceleratedUpload)) || | ||||
|         True(image.flags & ImageFlagBits::Converted)) { | ||||
|         tentative_size = EstimatedDecompressedSize(tentative_size, image.info.format); | ||||
|         tentative_size = TranscodedAstcSize(tentative_size, image.info.format); | ||||
|     } | ||||
|     total_used_memory += Common::AlignUp(tentative_size, 1024); | ||||
|     image.lru_index = lru_cache.Insert(image_id, frame_tick); | ||||
| @ -2149,7 +2149,7 @@ void TextureCache<P>::DeleteImage(ImageId image_id, bool immediate_delete) { | ||||
|     if ((IsPixelFormatASTC(image.info.format) && | ||||
|          True(image.flags & ImageFlagBits::AcceleratedUpload)) || | ||||
|         True(image.flags & ImageFlagBits::Converted)) { | ||||
|         tentative_size = EstimatedDecompressedSize(tentative_size, image.info.format); | ||||
|         tentative_size = TranscodedAstcSize(tentative_size, image.info.format); | ||||
|     } | ||||
|     total_used_memory -= Common::AlignUp(tentative_size, 1024); | ||||
|     const GPUVAddr gpu_addr = image.gpu_addr; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user