From 9d59a6aab7981e80f8374dd74c494e6f20efad4b Mon Sep 17 00:00:00 2001 From: Forrest Mark X Date: Tue, 7 Jul 2026 16:39:36 -0500 Subject: [PATCH] Prevent sparse texture failure due to buffer overflows --- src/video_core/texture_cache/texture_cache.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index e874024f66..ca5082b1f1 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -1472,6 +1472,7 @@ void TextureCache

::TickAsyncUnswizzle() { if (swizzle_chunk_size > 0 && !task.is_incremental && copy_amount < remaining) { copy_amount = (copy_amount / task.bytes_per_slice) * task.bytes_per_slice; if (copy_amount == 0) copy_amount = task.bytes_per_slice; + copy_amount = (std::min)(copy_amount, remaining); } u8* const staging_base = task.staging_buffer.mapped_span.data(); @@ -1583,7 +1584,8 @@ void TextureCache

::TickAsyncUnswizzle() { // Check if complete const u32 slices_submitted = static_cast(task.last_submitted_offset / task.bytes_per_slice); - const bool all_submitted = slices_submitted >= total_slices; + const bool all_submitted = slices_submitted >= total_slices || + (is_final_batch && bytes_ready < task.bytes_per_slice); if (is_final_batch && all_submitted) { /*if (task.is_sparse && !task.is_incremental) {