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