From 93329102404b57b43b4330fd47cfb1266761e718 Mon Sep 17 00:00:00 2001 From: psucien Date: Sat, 10 Aug 2024 01:53:25 +0200 Subject: [PATCH] texture_cache: fix for unexpected scheduler flushes by detiler --- src/video_core/buffer_cache/buffer.h | 4 ++++ src/video_core/texture_cache/tile_manager.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/video_core/buffer_cache/buffer.h b/src/video_core/buffer_cache/buffer.h index e0d9da08..d373fbff 100644 --- a/src/video_core/buffer_cache/buffer.h +++ b/src/video_core/buffer_cache/buffer.h @@ -146,6 +146,10 @@ public: return offset; } + u64 GetFreeSize() const { + return size_bytes - offset - mapped_size; + } + private: struct Watch { u64 tick{}; diff --git a/src/video_core/texture_cache/tile_manager.cpp b/src/video_core/texture_cache/tile_manager.cpp index d3a7d796..77b67266 100644 --- a/src/video_core/texture_cache/tile_manager.cpp +++ b/src/video_core/texture_cache/tile_manager.cpp @@ -397,7 +397,7 @@ std::optional TileManager::TryDetile(Image& image) { const u32 image_size = image.info.guest_size_bytes; const auto [in_buffer, in_offset] = [&] -> std::pair { // Use stream buffer for smaller textures. - if (image_size <= StreamBufferSize) { + if (image_size <= stream_buffer.GetFreeSize()) { u32 offset = stream_buffer.Copy(image.info.guest_address, image_size); return {stream_buffer.Handle(), offset}; }