From 2b6e7f0be273bdc779ad457d6a33b063b0d14ede 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 (cherry picked from commit 5ab8c8a439ca764e00d83a0d27beb2bb1a513db5) Part-of: --- .pick_status.json | 2 +- src/gallium/frontends/lavapipe/lvp_device.c | 4 ++-- src/gallium/frontends/lavapipe/lvp_formats.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 19a81ddd487..aaa12c263c7 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1554,7 +1554,7 @@ "description": "lvp: avoid advertising dmabuf support for kms_swrast", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "7d0a631f20dc71efb1cc7adb57b2d162523fcd37", "notes": null diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index 11b8b7083a5..5594dc12d14 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -340,7 +340,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 */ @@ -1420,7 +1420,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;