From c38b8911d0056d58611ca5277ee1d16653259782 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 ddd940c6d2..912b0615c5 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -1574,6 +1574,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,