From 15b4d6fca94bf5516c50834c5aafd91ee634d10c Mon Sep 17 00:00:00 2001 From: Calchan Date: Sun, 14 Sep 2025 15:23:06 +0200 Subject: [PATCH] [Legacy VMA] remove memory alignment, it's pointless and wastes RAM (#391) Final cleanups after new VMA. It already takes care of properly aligning, so we no longer need these. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/391 Reviewed-by: MaranBr Reviewed-by: Shinmegumi Co-authored-by: Calchan Co-committed-by: Calchan --- .../vulkan_common/vulkan_memory_allocator.cpp | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp index a317558a0c..4cd3442d97 100644 --- a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp +++ b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp @@ -242,11 +242,7 @@ namespace Vulkan { VmaAllocation allocation{}; VkMemoryPropertyFlags property_flags{}; - VkResult result = vmaCreateBuffer(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info); - if (result == VK_ERROR_OUT_OF_DEVICE_MEMORY) { - LOG_ERROR(Render_Vulkan, "Out of memory creating buffer (size: {})", ci.size); - } - vk::Check(result); + vk::Check(vmaCreateBuffer(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info)); vmaGetAllocationMemoryProperties(allocator, allocation, &property_flags); u8 *data = reinterpret_cast(alloc_info.pMappedData); @@ -260,36 +256,30 @@ namespace Vulkan { MemoryCommit MemoryAllocator::Commit(const VkMemoryRequirements &reqs, MemoryUsage usage) { - // Adreno stands firm - ensure 4KB alignment for Qualcomm GPUs - VkMemoryRequirements adjusted_reqs = reqs; - if (device.GetDriverID() == VK_DRIVER_ID_QUALCOMM_PROPRIETARY) { - adjusted_reqs.size = Common::AlignUp(reqs.size, 4096); - } - const auto vma_usage = MemoryUsageVma(usage); VmaAllocationCreateInfo ci{}; ci.flags = VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT | MemoryUsageVmaFlags(usage); ci.usage = vma_usage; - ci.memoryTypeBits = adjusted_reqs.memoryTypeBits & valid_memory_types; + ci.memoryTypeBits = reqs.memoryTypeBits & valid_memory_types; ci.requiredFlags = 0; ci.preferredFlags = MemoryUsagePreferredVmaFlags(usage); VmaAllocation a{}; VmaAllocationInfo info{}; - VkResult res = vmaAllocateMemory(allocator, &adjusted_reqs, &ci, &a, &info); + VkResult res = vmaAllocateMemory(allocator, &reqs, &ci, &a, &info); if (res != VK_SUCCESS) { // Relax 1: drop budget constraint auto ci2 = ci; ci2.flags &= ~VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT; - res = vmaAllocateMemory(allocator, &adjusted_reqs, &ci2, &a, &info); + res = vmaAllocateMemory(allocator, &reqs, &ci2, &a, &info); // Relax 2: if we preferred DEVICE_LOCAL, drop that preference if (res != VK_SUCCESS && (ci.preferredFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)) { auto ci3 = ci2; ci3.preferredFlags &= ~VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - res = vmaAllocateMemory(allocator, &adjusted_reqs, &ci3, &a, &info); + res = vmaAllocateMemory(allocator, &reqs, &ci3, &a, &info); } }