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: ccefcb0baf ("venus: fix misaligned bo_flags between import and query")
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11154>
This commit is contained in:
Chia-I Wu 2021-06-02 18:56:58 -07:00 committed by Marge Bot
parent 4bd7a3829e
commit 9814cd8153
2 changed files with 20 additions and 20 deletions

View file

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

View file

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