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 <zzyiwei@chromium.org>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11055>
This commit is contained in:
Yiwei Zhang 2021-05-27 21:56:08 +00:00 committed by Marge Bot
parent 1df4c960c6
commit ccefcb0baf
3 changed files with 9 additions and 13 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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