From 865a0186b6db97afed21db6ad924c9968b437265 Mon Sep 17 00:00:00 2001 From: Liam Date: Wed, 31 May 2023 12:36:04 -0400 Subject: caches: make critical reclamation less eager and possible in more cases --- src/video_core/texture_cache/texture_cache.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/video_core/texture_cache') diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index a20c956ff..3faff0c2f 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -55,7 +55,7 @@ TextureCache
::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 ::RunGarbageCollector() {
if (num_iterations == 0) {
return true;
}
- --num_iterations;
auto& image = slot_images[image_id];
if (True(image.flags & ImageFlagBits::IsDecoding)) {
// This image is still being decoded, deleting it will invalidate the slot
@@ -96,6 +95,7 @@ void TextureCache ::RunGarbageCollector() {
if (!high_priority_mode && must_download) {
return false;
}
+ --num_iterations;
if (must_download) {
auto map = runtime.DownloadStagingBuffer(image.unswizzled_size_bytes);
const auto copies = FullDownloadCopies(image.info);
--
cgit v1.2.3
From de8a62393249e944f68eb3e73330537af02a6b0b Mon Sep 17 00:00:00 2001
From: Liam
Date: Wed, 31 May 2023 12:42:34 -0400
Subject: texture_cache: avoid overestimation of ASTC texture sizes
---
src/video_core/texture_cache/texture_cache.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'src/video_core/texture_cache')
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 3faff0c2f..5986a7680 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -1972,7 +1972,7 @@ void TextureCache ::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);
@@ -2142,7 +2142,7 @@ void TextureCache ::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;
--
cgit v1.2.3
From 368bf2211fdc58014e479db84dab5a152ebbe459 Mon Sep 17 00:00:00 2001
From: Liam
Date: Fri, 2 Jun 2023 20:10:41 -0400
Subject: texture_cache: tweak iteration tracking change
---
src/video_core/texture_cache/texture_cache.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src/video_core/texture_cache')
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 5986a7680..ca0794214 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -81,6 +81,7 @@ void TextureCache ::RunGarbageCollector() {
if (num_iterations == 0) {
return true;
}
+ --num_iterations;
auto& image = slot_images[image_id];
if (True(image.flags & ImageFlagBits::IsDecoding)) {
// This image is still being decoded, deleting it will invalidate the slot
@@ -95,7 +96,6 @@ void TextureCache ::RunGarbageCollector() {
if (!high_priority_mode && must_download) {
return false;
}
- --num_iterations;
if (must_download) {
auto map = runtime.DownloadStagingBuffer(image.unswizzled_size_bytes);
const auto copies = FullDownloadCopies(image.info);
--
cgit v1.2.3