From 4d15f0afead343b500295169befa94b150b2b548 Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Mon, 1 Dec 2025 18:15:03 +0900 Subject: [PATCH] [Vulkan] Implement same vastcpy upload_buffer optimization as d3d12 --- src/xenia/gpu/vulkan/vulkan_shared_memory.cc | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/xenia/gpu/vulkan/vulkan_shared_memory.cc b/src/xenia/gpu/vulkan/vulkan_shared_memory.cc index d4e8cdafd..d3197b7c3 100644 --- a/src/xenia/gpu/vulkan/vulkan_shared_memory.cc +++ b/src/xenia/gpu/vulkan/vulkan_shared_memory.cc @@ -413,10 +413,19 @@ bool VulkanSharedMemory::UploadRanges( } MakeRangeValid(upload_range_start << page_size_log2(), uint32_t(upload_buffer_size), false, false); - std::memcpy( - upload_buffer_mapping, - memory().TranslatePhysical(upload_range_start << page_size_log2()), - upload_buffer_size); + + if (upload_buffer_size < (1ULL << 32) && upload_buffer_size > 8192) { + memory::vastcpy( + upload_buffer_mapping, + memory().TranslatePhysical(upload_range_start << page_size_log2()), + static_cast(upload_buffer_size)); + swcache::WriteFence(); + } else { + std::memcpy( + upload_buffer_mapping, + memory().TranslatePhysical(upload_range_start << page_size_log2()), + upload_buffer_size); + } if (upload_buffer_previous != upload_buffer && !upload_regions_.empty()) { assert_true(upload_buffer_previous != VK_NULL_HANDLE); command_buffer.CmdVkCopyBuffer(upload_buffer_previous, buffer_,