From ccefcb0baf995c05ed201a6059a259abf4b321a6 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Thu, 27 May 2021 21:56:08 +0000 Subject: [PATCH] venus: fix misaligned bo_flags between import and query For importing an dma_buf fd, export info is not required. Leaving the bo_flags missing VIRTGPU_BLOB_FLAG_USE_SHAREABLE bit as well as the VIRTGPU_BLOB_FLAG_USE_CROSS_DEVICE bit. Upon querying fd properties, DMA_BUF handle type will be specified which generates a new bo_flags not matching the prior one. This patch aligns the above 2 bits for the dma_buf import path. Test: vkGetAndroidHardwareBufferPropertiesANDROID should succeed with a valid AHB with AHARDWAREBUFFER_FORMAT_BLOB format. Signed-off-by: Yiwei Zhang Reviewed-by: Chia-I Wu Part-of: --- src/virtio/vulkan/vn_device_memory.c | 12 +++++------- src/virtio/vulkan/vn_renderer.h | 6 ++---- src/virtio/vulkan/vn_renderer_virtgpu.c | 4 ++-- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/virtio/vulkan/vn_device_memory.c b/src/virtio/vulkan/vn_device_memory.c index fbb6512..639887f 100644 --- a/src/virtio/vulkan/vn_device_memory.c +++ b/src/virtio/vulkan/vn_device_memory.c @@ -179,8 +179,6 @@ vn_device_memory_import_dma_buf(struct vn_device *dev, { VkDevice device = vn_device_to_handle(dev); VkDeviceMemory memory = vn_device_memory_to_handle(mem); - const VkExportMemoryAllocateInfo *export_info = - vk_find_struct_const(alloc_info->pNext, EXPORT_MEMORY_ALLOCATE_INFO); const VkPhysicalDeviceMemoryProperties *mem_props = &dev->physical_device->memory_properties.memoryProperties; const VkMemoryType *mem_type = @@ -188,9 +186,9 @@ vn_device_memory_import_dma_buf(struct vn_device *dev, struct vn_renderer_bo *bo; VkResult result = VK_SUCCESS; - result = vn_renderer_bo_create_from_dma_buf( - dev->renderer, alloc_info->allocationSize, fd, mem_type->propertyFlags, - export_info ? export_info->handleTypes : 0, &bo); + result = vn_renderer_bo_create_from_dma_buf(dev->renderer, + alloc_info->allocationSize, fd, + mem_type->propertyFlags, &bo); if (result != VK_SUCCESS) return result; @@ -480,8 +478,8 @@ vn_GetMemoryFdPropertiesKHR(VkDevice device, return vn_error(dev->instance, VK_ERROR_INVALID_EXTERNAL_HANDLE); struct vn_renderer_bo *bo; - VkResult result = vn_renderer_bo_create_from_dma_buf(dev->renderer, 0, fd, - 0, handleType, &bo); + VkResult result = + vn_renderer_bo_create_from_dma_buf(dev->renderer, 0, fd, 0, &bo); if (result != VK_SUCCESS) return vn_error(dev->instance, result); vn_instance_roundtrip(dev->instance); diff --git a/src/virtio/vulkan/vn_renderer.h b/src/virtio/vulkan/vn_renderer.h index 7206832..c59f61e 100644 --- a/src/virtio/vulkan/vn_renderer.h +++ b/src/virtio/vulkan/vn_renderer.h @@ -185,7 +185,6 @@ struct vn_renderer_bo_ops { VkDeviceSize size, int fd, VkMemoryPropertyFlags flags, - VkExternalMemoryHandleTypeFlags external_handles, struct vn_renderer_bo **out_bo); bool (*destroy)(struct vn_renderer *renderer, struct vn_renderer_bo *bo); @@ -349,12 +348,11 @@ vn_renderer_bo_create_from_dma_buf( VkDeviceSize size, int fd, VkMemoryPropertyFlags flags, - VkExternalMemoryHandleTypeFlags external_handles, struct vn_renderer_bo **out_bo) { struct vn_renderer_bo *bo; - VkResult result = renderer->bo_ops.create_from_dma_buf( - renderer, size, fd, flags, external_handles, &bo); + VkResult result = + renderer->bo_ops.create_from_dma_buf(renderer, size, fd, flags, &bo); if (result != VK_SUCCESS) return result; diff --git a/src/virtio/vulkan/vn_renderer_virtgpu.c b/src/virtio/vulkan/vn_renderer_virtgpu.c index 3614930..66596e1 100644 --- a/src/virtio/vulkan/vn_renderer_virtgpu.c +++ b/src/virtio/vulkan/vn_renderer_virtgpu.c @@ -1148,7 +1148,6 @@ virtgpu_bo_create_from_dma_buf( VkDeviceSize size, int fd, VkMemoryPropertyFlags flags, - VkExternalMemoryHandleTypeFlags external_handles, struct vn_renderer_bo **out_bo) { struct virtgpu *gpu = (struct virtgpu *)renderer; @@ -1176,7 +1175,8 @@ virtgpu_bo_create_from_dma_buf( if (info.size < size) goto fail; - blob_flags = virtgpu_bo_blob_flags(flags, external_handles); + blob_flags = virtgpu_bo_blob_flags( + flags, VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT); mmap_size = size; } else { /* must be classic resource here -- 2.7.4