From 09a56edd479ae432315b1619928ae649cf14efcf Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Wed, 1 Oct 2025 19:25:56 +0200 Subject: [PATCH] vulkan: enforce that dmabuf buffers are aligned to 4 bytes --- src/gfx_apis/vulkan.rs | 2 ++ src/gfx_apis/vulkan/dmabuf_buffer.rs | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/src/gfx_apis/vulkan.rs b/src/gfx_apis/vulkan.rs index 1c512929..e0436747 100644 --- a/src/gfx_apis/vulkan.rs +++ b/src/gfx_apis/vulkan.rs @@ -223,6 +223,8 @@ pub enum VulkanError { GetFl(#[source] OsError), #[error("GBM implementation cannot be used with software renderer")] SoftwareRendererNotUsable, + #[error("DMABUF buffer offsets must be aligned to 4 bytes")] + DmaBufBufferOffsetAlignment, } impl From for GfxError { diff --git a/src/gfx_apis/vulkan/dmabuf_buffer.rs b/src/gfx_apis/vulkan/dmabuf_buffer.rs index 3856ffd3..b8cf7ed1 100644 --- a/src/gfx_apis/vulkan/dmabuf_buffer.rs +++ b/src/gfx_apis/vulkan/dmabuf_buffer.rs @@ -16,6 +16,8 @@ use { uapi::OwnedFd, }; +pub(super) const TRANSFER_QUEUE_BUFFER_ALIGNMENT: u64 = 4; + pub struct VulkanDmabufBuffer { pub(super) device: Rc, pub(super) size: u64, @@ -31,6 +33,9 @@ impl VulkanDevice { offset: u64, size: u64, ) -> Result, VulkanError> { + if offset % TRANSFER_QUEUE_BUFFER_ALIGNMENT != 0 { + return Err(VulkanError::DmaBufBufferOffsetAlignment); + } let mut memory_fd_properties = MemoryFdPropertiesKHR::default(); unsafe { self.external_memory_fd