aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/texture_cache/texture_cache.h
diff options
context:
space:
mode:
authorkraibse <33869366+kraibse@users.noreply.github.com>2026-11-01 17:17:54 +0100
committerkraibse <33869366+kraibse@users.noreply.github.com>2026-11-01 17:29:56 +0100
commit3d6156434a96c75e30fc4cfa65409fb2800d737a (patch)
tree62f4f1e510128f403e6f9f669b2bc62fa23a6d64 /src/video_core/texture_cache/texture_cache.h
parent130c255ed91e2bf8f726b38101cc5fc2abcf3935 (diff)
nx2: guard empty and overflowing 216 map requests, log failed whole-backing
A zero-size request at a region start wrapped last_block and wrote past the region's blocks; the offset + size memory bounds check could overflow. Both are guest-controlled. Also log an error when a sparse tiled image sharing the zeroed block can't be backed whole before a GPU write.
Diffstat (limited to 'src/video_core/texture_cache/texture_cache.h')
-rw-r--r--src/video_core/texture_cache/texture_cache.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 5f655e5b60..33ca051482 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -3113,6 +3113,11 @@ void TextureCache<P>::PrepareImage(ImageId image_id, bool is_modification, bool
if (BackSparseTilesWhole(image)) {
image.dirty_ranges.clear();
RefreshSparseTiles(image);
+ } else {
+ LOG_ERROR(HW_GPU,
+ "Sparse tiled image {:#x}: out of memory backing it whole, the GPU "
+ "write lands in the shared zeroed block",
+ image.gpu_addr);
}
}
}