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)
This commit is contained in:
Zephyron 2025-02-02 12:07:43 +10:00
parent a1cbcee7ab
commit cf43fd8038
No known key found for this signature in database
GPG key ID: 2177ADED8AC966AF

View file

@ -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) {