From 5ab8c8a439ca764e00d83a0d27beb2bb1a513db5 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Tue, 3 Mar 2026 08:38:51 -0800 Subject: [PATCH] lvp: avoid advertising dmabuf support for kms_swrast Lavapipe relies on true udmabuf support for dmabuf export allocation. This changes aligns the behavior with both llvmpipe_allocate_memory_fd and llvmpipe_import_memory_fd. Fixes: 7d0a631f20d ("llvmpipe: export dmabuf caps for kms_swrast") Reviewed-by: Lucas Fryzek Part-of: --- src/gallium/frontends/lavapipe/lvp_device.c | 4 ++-- src/gallium/frontends/lavapipe/lvp_formats.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index b6a3ca58f08..72975314c0c 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -342,7 +342,7 @@ lvp_device_memory_type_for_handle_types(const struct lvp_physical_device *pdevic assert(!(types & ~(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT | VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT))); -#ifdef HAVE_LIBDRM +#if defined(HAVE_LIBDRM) && defined(HAVE_LINUX_UDMABUF_H) int dmabuf_bits = DRM_PRIME_CAP_EXPORT | DRM_PRIME_CAP_IMPORT; if ((pdevice->pscreen->caps.dmabuf & dmabuf_bits) == dmabuf_bits) { /* If we have full dma-buf support, everything is a dma-buf */ @@ -1441,7 +1441,7 @@ lvp_physical_device_init(struct lvp_physical_device *device, device->max_images = device->pscreen->shader_caps[MESA_SHADER_FRAGMENT].max_shader_images; device->vk.supported_extensions = lvp_device_extensions_supported; -#ifdef HAVE_LIBDRM +#if defined(HAVE_LIBDRM) && defined(HAVE_LINUX_UDMABUF_H) int dmabuf_bits = DRM_PRIME_CAP_EXPORT | DRM_PRIME_CAP_IMPORT; int supported_dmabuf_bits = device->pscreen->caps.dmabuf; /* if import or export is supported then EXT_external_memory_dma_buf is supported */ diff --git a/src/gallium/frontends/lavapipe/lvp_formats.c b/src/gallium/frontends/lavapipe/lvp_formats.c index a78407c9952..9a1c417f29d 100644 --- a/src/gallium/frontends/lavapipe/lvp_formats.c +++ b/src/gallium/frontends/lavapipe/lvp_formats.c @@ -492,7 +492,7 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_GetPhysicalDeviceImageFormatProperties2( VkExternalMemoryHandleTypeFlags compat_flags = 0; switch (external_info->handleType) { -#ifdef HAVE_LIBDRM +#if defined(HAVE_LIBDRM) && defined(HAVE_LINUX_UDMABUF_H) case VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT: { int params = physical_device->pscreen->caps.dmabuf; flags = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT; @@ -663,7 +663,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetPhysicalDeviceExternalBufferProperties( VkExternalMemoryHandleTypeFlags export_flags = 0; VkExternalMemoryHandleTypeFlags compat_flags = 0; switch (pExternalBufferInfo->handleType) { -#ifdef HAVE_LIBDRM +#if defined(HAVE_LIBDRM) && defined(HAVE_LINUX_UDMABUF_H) case VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT: { VK_FROM_HANDLE(lvp_physical_device, physical_device, physicalDevice); int params = physical_device->pscreen->caps.dmabuf;