diff --git a/src/virtio/vulkan/vn_renderer.h b/src/virtio/vulkan/vn_renderer.h index c59f61edb46..6f818a5753b 100644 --- a/src/virtio/vulkan/vn_renderer.h +++ b/src/virtio/vulkan/vn_renderer.h @@ -180,12 +180,11 @@ struct vn_renderer_bo_ops { VkExternalMemoryHandleTypeFlags external_handles, struct vn_renderer_bo **out_bo); - VkResult (*create_from_dma_buf)( - struct vn_renderer *renderer, - VkDeviceSize size, - int fd, - VkMemoryPropertyFlags flags, - struct vn_renderer_bo **out_bo); + VkResult (*create_from_dma_buf)(struct vn_renderer *renderer, + VkDeviceSize size, + int fd, + VkMemoryPropertyFlags flags, + struct vn_renderer_bo **out_bo); bool (*destroy)(struct vn_renderer *renderer, struct vn_renderer_bo *bo); @@ -343,12 +342,11 @@ vn_renderer_bo_create_from_device_memory( } static inline VkResult -vn_renderer_bo_create_from_dma_buf( - struct vn_renderer *renderer, - VkDeviceSize size, - int fd, - VkMemoryPropertyFlags flags, - struct vn_renderer_bo **out_bo) +vn_renderer_bo_create_from_dma_buf(struct vn_renderer *renderer, + VkDeviceSize size, + int fd, + VkMemoryPropertyFlags flags, + struct vn_renderer_bo **out_bo) { struct vn_renderer_bo *bo; VkResult result = diff --git a/src/virtio/vulkan/vn_renderer_virtgpu.c b/src/virtio/vulkan/vn_renderer_virtgpu.c index 66596e1a413..3889b37d047 100644 --- a/src/virtio/vulkan/vn_renderer_virtgpu.c +++ b/src/virtio/vulkan/vn_renderer_virtgpu.c @@ -1143,12 +1143,11 @@ virtgpu_bo_blob_flags(VkMemoryPropertyFlags flags, } static VkResult -virtgpu_bo_create_from_dma_buf( - struct vn_renderer *renderer, - VkDeviceSize size, - int fd, - VkMemoryPropertyFlags flags, - struct vn_renderer_bo **out_bo) +virtgpu_bo_create_from_dma_buf(struct vn_renderer *renderer, + VkDeviceSize size, + int fd, + VkMemoryPropertyFlags flags, + struct vn_renderer_bo **out_bo) { struct virtgpu *gpu = (struct virtgpu *)renderer; struct drm_virtgpu_resource_info info; @@ -1175,8 +1174,11 @@ virtgpu_bo_create_from_dma_buf( if (info.size < size) goto fail; - blob_flags = virtgpu_bo_blob_flags( - flags, VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT); + /* blob_flags is not passed to the kernel and is only for internal use + * on imports. Set it to what works best for us. + */ + blob_flags = virtgpu_bo_blob_flags(flags, 0); + blob_flags |= VIRTGPU_BLOB_FLAG_USE_SHAREABLE; mmap_size = size; } else { /* must be classic resource here