mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
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:
parent
1df4c960c6
commit
ccefcb0baf
3 changed files with 9 additions and 13 deletions
|
|
@ -179,8 +179,6 @@ vn_device_memory_import_dma_buf(struct vn_device *dev,
|
||||||
{
|
{
|
||||||
VkDevice device = vn_device_to_handle(dev);
|
VkDevice device = vn_device_to_handle(dev);
|
||||||
VkDeviceMemory memory = vn_device_memory_to_handle(mem);
|
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 =
|
const VkPhysicalDeviceMemoryProperties *mem_props =
|
||||||
&dev->physical_device->memory_properties.memoryProperties;
|
&dev->physical_device->memory_properties.memoryProperties;
|
||||||
const VkMemoryType *mem_type =
|
const VkMemoryType *mem_type =
|
||||||
|
|
@ -188,9 +186,9 @@ vn_device_memory_import_dma_buf(struct vn_device *dev,
|
||||||
struct vn_renderer_bo *bo;
|
struct vn_renderer_bo *bo;
|
||||||
VkResult result = VK_SUCCESS;
|
VkResult result = VK_SUCCESS;
|
||||||
|
|
||||||
result = vn_renderer_bo_create_from_dma_buf(
|
result = vn_renderer_bo_create_from_dma_buf(dev->renderer,
|
||||||
dev->renderer, alloc_info->allocationSize, fd, mem_type->propertyFlags,
|
alloc_info->allocationSize, fd,
|
||||||
export_info ? export_info->handleTypes : 0, &bo);
|
mem_type->propertyFlags, &bo);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
|
@ -480,8 +478,8 @@ vn_GetMemoryFdPropertiesKHR(VkDevice device,
|
||||||
return vn_error(dev->instance, VK_ERROR_INVALID_EXTERNAL_HANDLE);
|
return vn_error(dev->instance, VK_ERROR_INVALID_EXTERNAL_HANDLE);
|
||||||
|
|
||||||
struct vn_renderer_bo *bo;
|
struct vn_renderer_bo *bo;
|
||||||
VkResult result = vn_renderer_bo_create_from_dma_buf(dev->renderer, 0, fd,
|
VkResult result =
|
||||||
0, handleType, &bo);
|
vn_renderer_bo_create_from_dma_buf(dev->renderer, 0, fd, 0, &bo);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
return vn_error(dev->instance, result);
|
return vn_error(dev->instance, result);
|
||||||
vn_instance_roundtrip(dev->instance);
|
vn_instance_roundtrip(dev->instance);
|
||||||
|
|
|
||||||
|
|
@ -185,7 +185,6 @@ struct vn_renderer_bo_ops {
|
||||||
VkDeviceSize size,
|
VkDeviceSize size,
|
||||||
int fd,
|
int fd,
|
||||||
VkMemoryPropertyFlags flags,
|
VkMemoryPropertyFlags flags,
|
||||||
VkExternalMemoryHandleTypeFlags external_handles,
|
|
||||||
struct vn_renderer_bo **out_bo);
|
struct vn_renderer_bo **out_bo);
|
||||||
|
|
||||||
bool (*destroy)(struct vn_renderer *renderer, struct vn_renderer_bo *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,
|
VkDeviceSize size,
|
||||||
int fd,
|
int fd,
|
||||||
VkMemoryPropertyFlags flags,
|
VkMemoryPropertyFlags flags,
|
||||||
VkExternalMemoryHandleTypeFlags external_handles,
|
|
||||||
struct vn_renderer_bo **out_bo)
|
struct vn_renderer_bo **out_bo)
|
||||||
{
|
{
|
||||||
struct vn_renderer_bo *bo;
|
struct vn_renderer_bo *bo;
|
||||||
VkResult result = renderer->bo_ops.create_from_dma_buf(
|
VkResult result =
|
||||||
renderer, size, fd, flags, external_handles, &bo);
|
renderer->bo_ops.create_from_dma_buf(renderer, size, fd, flags, &bo);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1148,7 +1148,6 @@ virtgpu_bo_create_from_dma_buf(
|
||||||
VkDeviceSize size,
|
VkDeviceSize size,
|
||||||
int fd,
|
int fd,
|
||||||
VkMemoryPropertyFlags flags,
|
VkMemoryPropertyFlags flags,
|
||||||
VkExternalMemoryHandleTypeFlags external_handles,
|
|
||||||
struct vn_renderer_bo **out_bo)
|
struct vn_renderer_bo **out_bo)
|
||||||
{
|
{
|
||||||
struct virtgpu *gpu = (struct virtgpu *)renderer;
|
struct virtgpu *gpu = (struct virtgpu *)renderer;
|
||||||
|
|
@ -1176,7 +1175,8 @@ virtgpu_bo_create_from_dma_buf(
|
||||||
if (info.size < size)
|
if (info.size < size)
|
||||||
goto fail;
|
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;
|
mmap_size = size;
|
||||||
} else {
|
} else {
|
||||||
/* must be classic resource here
|
/* must be classic resource here
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue