From fdeaf764fe20725dfc8df86dbb813a544f5c84ce Mon Sep 17 00:00:00 2001 From: Zephyron Date: Sun, 2 Feb 2025 12:07:43 +1000 Subject: [PATCH] vulkan: Add 4KB memory alignment for AMD and Qualcomm drivers Adds special handling for memory allocation size on AMD and Qualcomm (Adreno) drivers by aligning allocations to 4KB boundaries. This fixes potential memory allocation issues on these drivers where unaligned allocations may fail or cause undefined behavior. Affected drivers: - AMD Proprietary (AMDVLK) - AMD Open Source (RADV) - Qualcomm Proprietary (Adreno) --- src/video_core/vulkan_common/vulkan_memory_allocator.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp index 54331688e3..371e13cfcf 100644 --- a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp +++ b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp @@ -303,7 +303,12 @@ bool MemoryAllocator::TryAllocMemory(VkMemoryPropertyFlags flags, u32 type_mask, vk::DeviceMemory memory = device.GetLogical().TryAllocateMemory({ .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, .pNext = nullptr, - .allocationSize = size, + /* AMD drivers (including Adreno) require 4KB alignment */ + .allocationSize = (device.GetDriverID() == VK_DRIVER_ID_AMD_PROPRIETARY || + device.GetDriverID() == VK_DRIVER_ID_AMD_OPEN_SOURCE || + device.GetDriverID() == VK_DRIVER_ID_QUALCOMM_PROPRIETARY) ? + ((size + 4095) & ~4095) : /* AMD (AMDVLK, RADV, RadeonSI) & Adreno */ + size, /* Others (NVIDIA, Intel, Mali, etc) */ .memoryTypeIndex = type, }); if (!memory) {