From 1bd468c7fbe5c2f1c385b1498de066df6ccf8a12 Mon Sep 17 00:00:00 2001 From: Jean-Philip Desjardins Date: Mon, 21 Apr 2025 10:37:42 -0400 Subject: [PATCH] Vulkan: Make sure we don't access RAM out of its bounds when populating copy. --- Source/gs/GSH_Vulkan/GSH_Vulkan.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/gs/GSH_Vulkan/GSH_Vulkan.cpp b/Source/gs/GSH_Vulkan/GSH_Vulkan.cpp index 322b4a077..f30b634bc 100644 --- a/Source/gs/GSH_Vulkan/GSH_Vulkan.cpp +++ b/Source/gs/GSH_Vulkan/GSH_Vulkan.cpp @@ -1537,6 +1537,13 @@ void CGSH_Vulkan::ProcessLocalToLocalTransfer() auto [transferAddress, transferSize] = GsTransfer::GetSrcRange(bltBuf, trxReg, trxPos); + //Since GetSrcRange returns values in page granularity, it's possible that we obtain an + //[address, size] pair that goes beyond RAM's range. Happens in FF12's intro level. + if((transferAddress + transferSize) > RAMSIZE) + { + transferSize = RAMSIZE - transferAddress; + } + auto commandBuffer = m_frameCommandBuffer->GetCommandBuffer(); VkBufferCopy bufferCopy = {};