From a701ea274f978d27a2be4f9987c4677924c47a9b Mon Sep 17 00:00:00 2001 From: xbzk Date: Tue, 9 Dec 2025 18:40:33 -0300 Subject: [PATCH] Minimal stopgaps for MCI to boot - Clamp staging buffer size to 2GB to prevent Vulkan allocation failures - Add size validation in MappedUploadMemory to avoid buffer overruns --- src/video_core/buffer_cache/buffer_cache.h | 3 +++ src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 5b5dc1c219..125f8049bd 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -1510,6 +1510,9 @@ void BufferCache

::MappedUploadMemory([[maybe_unused]] Buffer& buffer, if constexpr (USE_MEMORY_MAPS) { auto upload_staging = runtime.UploadStagingBuffer(total_size_bytes); const std::span staging_pointer = upload_staging.mapped_span; + if (staging_pointer.size() < total_size_bytes) { + return; + } for (BufferCopy& copy : copies) { u8* const src_pointer = staging_pointer.data() + copy.src_offset; const DAddr device_addr = buffer.CpuAddr() + copy.dst_offset; diff --git a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp index 08513d1534..02cd99918d 100644 --- a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp +++ b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp @@ -181,7 +181,7 @@ std::optional StagingBufferPool::TryGetReservedBuffer(size_t s StagingBufferRef StagingBufferPool::CreateStagingBuffer(size_t size, MemoryUsage usage, bool deferred) { - const u32 log2 = Common::Log2Ceil64(size); + const u32 log2 = (std::min)(Common::Log2Ceil64(size), 31U); VkBufferCreateInfo buffer_ci = { .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, .pNext = nullptr,