Mesa (main): venus: fix opaque fd re-import
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jun 3 06:02:46 UTC 2021
Module: Mesa
Branch: main
Commit: 9814cd8153fce8c05d6274a0aac8d7dec18e1b4d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9814cd8153fce8c05d6274a0aac8d7dec18e1b4d
Author: Chia-I Wu <olvaffe at gmail.com>
Date: Wed Jun 2 18:56:58 2021 -0700
venus: fix opaque fd re-import
dEQP-VK.api.external.memory.opaque_fd.* re-imports and fails because
external_handles was VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT on
allocation and is VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT on
re-import.
Fixes: ccefcb0baf9 ("venus: fix misaligned bo_flags between import and query")
Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11154>
---
src/virtio/vulkan/vn_renderer.h | 22 ++++++++++------------
src/virtio/vulkan/vn_renderer_virtgpu.c | 18 ++++++++++--------
2 files changed, 20 insertions(+), 20 deletions(-)
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
More information about the mesa-commit
mailing list