From 549f6cdb17d0a63e085622aca723360449db036b Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Wed, 23 Jul 2025 12:48:48 -0700 Subject: [PATCH] lavapipe: fix maint4 vkGetDeviceImageMemoryRequirements Otherwise plane aspect and dedicated alloc req are missed. Fixes: 987e8a5a0c0 ("lavapipe: implement vkGetDevice*MemoryRequirements") Reviewed-by: Lucas Fryzek Part-of: --- src/gallium/frontends/lavapipe/lvp_device.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index 8a41fdd7e67..8ebc58f5117 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -2189,8 +2189,22 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetDeviceImageMemoryRequirements( if (lvp_CreateImage(_device, pInfo->pCreateInfo, NULL, &_image) != VK_SUCCESS) return; LVP_FROM_HANDLE(lvp_image, image, _image); - pMemoryRequirements->memoryRequirements.size = image->size; - pMemoryRequirements->memoryRequirements.alignment = image->alignment; + + /* Per spec VUs of VkImageMemoryRequirementsInfo2 */ + const bool need_plane_info = + image->vk.create_flags & VK_IMAGE_CREATE_DISJOINT_BIT && + (image->plane_count > 1 || + image->vk.tiling == VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT); + const VkImagePlaneMemoryRequirementsInfo plane_info = { + .sType = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO, + .planeAspect = pInfo->planeAspect, + }; + const VkImageMemoryRequirementsInfo2 base_info = { + .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2, + .pNext = need_plane_info ? &plane_info : NULL, + .image = _image, + }; + lvp_GetImageMemoryRequirements2(_device, &base_info, pMemoryRequirements); lvp_DestroyImage(_device, _image, NULL); }