Lines Matching +full:dlclose +full:- +full:skip
3 * SPDX-License-Identifier: MIT
19 #include "drm-uapi/drm_fourcc.h"
59 if (strcmp(gralloc->common.name, CROS_GRALLOC_MODULE_NAME) != 0) { in vn_android_gralloc_init()
60 dlclose(gralloc->common.dso); in vn_android_gralloc_init()
61 vn_log(NULL, "unexpected gralloc (name: %s)", gralloc->common.name); in vn_android_gralloc_init()
62 return -1; in vn_android_gralloc_init()
65 if (!gralloc->perform) { in vn_android_gralloc_init()
66 dlclose(gralloc->common.dso); in vn_android_gralloc_init()
68 return -1; in vn_android_gralloc_init()
71 if (gralloc->perform(gralloc, CROS_GRALLOC_DRM_GET_USAGE, in vn_android_gralloc_init()
86 dlclose(_vn_android_gralloc.module->common.dso); in vn_android_gralloc_fini()
120 if (gralloc->perform(gralloc, CROS_GRALLOC_DRM_GET_BUFFER_INFO, handle, in vn_android_gralloc_get_buffer_properties()
131 out_props->drm_fourcc = info.drm_fourcc; in vn_android_gralloc_get_buffer_properties()
133 out_props->stride[i] = info.stride[i]; in vn_android_gralloc_get_buffer_properties()
134 out_props->offset[i] = info.offset[i]; in vn_android_gralloc_get_buffer_properties()
142 out_props->stride[1] = info.stride[2]; in vn_android_gralloc_get_buffer_properties()
143 out_props->offset[1] = info.offset[2]; in vn_android_gralloc_get_buffer_properties()
144 out_props->stride[2] = info.stride[1]; in vn_android_gralloc_get_buffer_properties()
145 out_props->offset[2] = info.offset[1]; in vn_android_gralloc_get_buffer_properties()
148 out_props->modifier = info.modifier; in vn_android_gralloc_get_buffer_properties()
157 * expect the 1st one pointing to the dma_buf. For multi-planar format, in vn_android_gralloc_get_dma_buf_fd()
164 if (handle->numFds < 1) { in vn_android_gralloc_get_dma_buf_fd()
165 vn_log(NULL, "handle->numFds is %d, expected >= 1", handle->numFds); in vn_android_gralloc_get_dma_buf_fd()
166 return -1; in vn_android_gralloc_get_dma_buf_fd()
169 if (handle->data[0] < 0) { in vn_android_gralloc_get_dma_buf_fd()
170 vn_log(NULL, "handle->data[0] < 0"); in vn_android_gralloc_get_dma_buf_fd()
171 return -1; in vn_android_gralloc_get_dma_buf_fd()
174 return handle->data[0]; in vn_android_gralloc_get_dma_buf_fd()
243 /* Only non-external AHB compatible formats are expected at: in vn_android_ahb_format_from_vk_format()
244 * - image format query in vn_android_ahb_format_from_vk_format()
245 * - memory export allocation in vn_android_ahb_format_from_vk_format()
270 * to be mutable no more than sRGB-ness, and the implementations can fail in vn_android_format_to_view_formats()
374 vn_log(dev->instance, in vn_GetSwapchainGrallocUsage2ANDROID()
404 vn_physical_device_to_handle(dev->physical_device); in vn_android_get_modifier_properties()
422 vn_log(dev->instance, "No compatible modifier for VkFormat(%u)", in vn_android_get_modifier_properties()
448 vn_log(dev->instance, in vn_android_get_modifier_properties()
483 create_info->pNext, in vn_android_get_image_builder()
485 assert(!vk_find_struct_const(create_info->pNext, in vn_android_get_image_builder()
492 dev, create_info->format, buf_props.modifier, alloc, &mod_props); in vn_android_get_image_builder()
498 out_builder->create = *create_info; in vn_android_get_image_builder()
499 out_builder->create.tiling = VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT; in vn_android_get_image_builder()
503 out_builder->layouts[i].offset = buf_props.offset[i]; in vn_android_get_image_builder()
504 out_builder->layouts[i].rowPitch = buf_props.stride[i]; in vn_android_get_image_builder()
506 out_builder->modifier = (VkImageDrmFormatModifierExplicitCreateInfoEXT){ in vn_android_get_image_builder()
509 .pNext = out_builder->create.pNext, in vn_android_get_image_builder()
512 .pPlaneLayouts = out_builder->layouts, in vn_android_get_image_builder()
514 out_builder->create.pNext = &out_builder->modifier; in vn_android_get_image_builder()
517 out_builder->external = (VkExternalMemoryImageCreateInfo){ in vn_android_get_image_builder()
519 .pNext = out_builder->create.pNext, in vn_android_get_image_builder()
522 out_builder->create.pNext = &out_builder->external; in vn_android_get_image_builder()
527 * non-zero viewFormatCount, and that stored struct will be respected. in vn_android_get_image_builder()
529 if ((create_info->flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) && in vn_android_get_image_builder()
530 !vk_find_struct_const(create_info->pNext, in vn_android_get_image_builder()
536 * must include a VkImageFormatListCreateInfo structure with non-zero in vn_android_get_image_builder()
540 vn_android_format_to_view_formats(create_info->format, &vcount); in vn_android_get_image_builder()
543 vformats = &out_builder->create.format; in vn_android_get_image_builder()
546 out_builder->list = (VkImageFormatListCreateInfo){ in vn_android_get_image_builder()
548 .pNext = out_builder->create.pNext, in vn_android_get_image_builder()
552 out_builder->create.pNext = &out_builder->list; in vn_android_get_image_builder()
565 /* If anb_info->handle points to a classic resouce created from in vn_android_image_from_anb()
566 * virtio_gpu_cmd_resource_create_3d, anb_info->stride is the stride of the in vn_android_image_from_anb()
581 int dma_buf_fd = -1; in vn_android_image_from_anb()
582 int dup_fd = -1; in vn_android_image_from_anb()
586 dma_buf_fd = vn_android_gralloc_get_dma_buf_fd(anb_info->handle); in vn_android_image_from_anb()
592 assert(!(create_info->flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)); in vn_android_image_from_anb()
593 assert(!vk_find_struct_const(create_info->pNext, in vn_android_image_from_anb()
595 assert(!vk_find_struct_const(create_info->pNext, in vn_android_image_from_anb()
602 anb_info->handle, alloc, &builder); in vn_android_image_from_anb()
610 vn_log(dev->instance, "vn_image_create failed"); in vn_android_image_from_anb()
617 &img->requirements[0].memory.memoryRequirements; in vn_android_image_from_anb()
618 if (!mem_req->memoryTypeBits) { in vn_android_image_from_anb()
620 vn_log(dev->instance, "mem_req->memoryTypeBits cannot be zero"); in vn_android_image_from_anb()
631 vn_log(dev->instance, in vn_android_image_from_anb()
634 mem_req->size, alloc_size, mem_req->memoryTypeBits, in vn_android_image_from_anb()
638 if (alloc_size < mem_req->size) { in vn_android_image_from_anb()
640 vn_log(dev->instance, in vn_android_image_from_anb()
641 "alloc_size(%" PRIu64 ") mem_req->size(%" PRIu64 ")", in vn_android_image_from_anb()
642 alloc_size, mem_req->size); in vn_android_image_from_anb()
648 mem_type_bits &= mem_req->memoryTypeBits; in vn_android_image_from_anb()
670 .allocationSize = mem_req->size, in vn_android_image_from_anb()
671 .memoryTypeIndex = ffs(mem_type_bits) - 1, in vn_android_image_from_anb()
691 img->wsi.is_wsi = true; in vn_android_image_from_anb()
692 img->wsi.tiling_override = builder.create.tiling; in vn_android_image_from_anb()
693 img->wsi.drm_format_modifier = builder.modifier.drmFormatModifier; in vn_android_image_from_anb()
695 img->wsi.memory = vn_device_memory_from_handle(memory); in vn_android_image_from_anb()
696 img->wsi.memory_owned = true; in vn_android_image_from_anb()
706 return vn_error(dev->instance, result); in vn_android_image_from_anb()
720 if (dev->instance->experimental.globalFencing == VK_FALSE) { in vn_AcquireImageANDROID()
726 int ret = sync_wait(nativeFenceFd, -1); in vn_AcquireImageANDROID()
730 return vn_error(dev->instance, VK_ERROR_SURFACE_LOST_KHR); in vn_AcquireImageANDROID()
742 int semaphore_fd = -1; in vn_AcquireImageANDROID()
743 int fence_fd = -1; in vn_AcquireImageANDROID()
752 return vn_error(dev->instance, result); in vn_AcquireImageANDROID()
774 semaphore_fd = -1; in vn_AcquireImageANDROID()
788 fence_fd = -1; in vn_AcquireImageANDROID()
796 return vn_result(dev->instance, result); in vn_AcquireImageANDROID()
808 struct vn_device *dev = que->device; in vn_QueueSignalReleaseImageANDROID()
809 const VkAllocationCallbacks *alloc = &dev->base.base.alloc; in vn_QueueSignalReleaseImageANDROID()
814 int fd = -1; in vn_QueueSignalReleaseImageANDROID()
817 *pNativeFenceFd = -1; in vn_QueueSignalReleaseImageANDROID()
826 return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY); in vn_QueueSignalReleaseImageANDROID()
849 dev->instance->experimental.globalFencing == VK_TRUE ? VK_NULL_HANDLE in vn_QueueSignalReleaseImageANDROID()
850 : que->wait_fence); in vn_QueueSignalReleaseImageANDROID()
856 return vn_error(dev->instance, result); in vn_QueueSignalReleaseImageANDROID()
858 if (dev->instance->experimental.globalFencing == VK_TRUE) { in vn_QueueSignalReleaseImageANDROID()
862 * Skip ring wait if async queue submit is disabled. in vn_QueueSignalReleaseImageANDROID()
865 vn_instance_ring_wait(dev->instance); in vn_QueueSignalReleaseImageANDROID()
870 .fence = que->wait_fence, in vn_QueueSignalReleaseImageANDROID()
876 vn_WaitForFences(device, 1, &que->wait_fence, VK_TRUE, UINT64_MAX); in vn_QueueSignalReleaseImageANDROID()
878 return vn_error(dev->instance, result); in vn_QueueSignalReleaseImageANDROID()
880 result = vn_ResetFences(device, 1, &que->wait_fence); in vn_QueueSignalReleaseImageANDROID()
884 return vn_error(dev->instance, result); in vn_QueueSignalReleaseImageANDROID()
906 vn_log(dev->instance, in vn_android_get_ahb_format_properties()
914 out_props->format = VK_FORMAT_UNDEFINED; in vn_android_get_ahb_format_properties()
929 vn_log(dev->instance, "Unknown drm_fourcc(%u) from AHB format(0x%X)", in vn_android_get_ahb_format_properties()
935 dev, format, buf_props.modifier, &dev->base.base.alloc, &mod_props); in vn_android_get_ahb_format_properties()
963 * - AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420 (DRM_FORMAT_NV12) in vn_android_get_ahb_format_properties()
964 * - AHARDWAREBUFFER_FORMAT_YV12 (DRM_FORMAT_YVU420) in vn_android_get_ahb_format_properties()
970 .sType = out_props->sType, in vn_android_get_ahb_format_properties()
971 .pNext = out_props->pNext, in vn_android_get_ahb_format_properties()
1000 int dma_buf_fd = -1; in vn_GetAndroidHardwareBufferPropertiesANDROID()
1005 vk_find_struct(pProperties->pNext, in vn_GetAndroidHardwareBufferPropertiesANDROID()
1011 return vn_error(dev->instance, result); in vn_GetAndroidHardwareBufferPropertiesANDROID()
1017 return vn_error(dev->instance, VK_ERROR_INVALID_EXTERNAL_HANDLE); in vn_GetAndroidHardwareBufferPropertiesANDROID()
1022 return vn_error(dev->instance, result); in vn_GetAndroidHardwareBufferPropertiesANDROID()
1024 pProperties->allocationSize = alloc_size; in vn_GetAndroidHardwareBufferPropertiesANDROID()
1025 pProperties->memoryTypeBits = mem_type_bits; in vn_GetAndroidHardwareBufferPropertiesANDROID()
1075 assert(format_info->tiling == VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT); in vn_android_get_drm_format_modifier_info()
1077 format = vn_android_ahb_format_from_vk_format(format_info->format); in vn_android_get_drm_format_modifier_info()
1081 usage = vn_android_get_ahb_usage(format_info->usage, format_info->flags); in vn_android_get_drm_format_modifier_info()
1113 vk_find_struct_const(create_info->pNext, EXTERNAL_FORMAT_ANDROID); in vn_android_image_from_ahb()
1116 if (ext_info && ext_info->externalFormat) { in vn_android_image_from_ahb()
1117 assert(create_info->format == VK_FORMAT_UNDEFINED); in vn_android_image_from_ahb()
1118 assert(create_info->imageType == VK_IMAGE_TYPE_2D); in vn_android_image_from_ahb()
1119 assert(create_info->usage == VK_IMAGE_USAGE_SAMPLED_BIT); in vn_android_image_from_ahb()
1120 assert(create_info->tiling == VK_IMAGE_TILING_OPTIMAL); in vn_android_image_from_ahb()
1121 assert(!(create_info->flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)); in vn_android_image_from_ahb()
1125 vn_android_drm_format_to_vk_format(ext_info->externalFormat); in vn_android_image_from_ahb()
1141 vk_find_struct_const(alloc_info->pNext, MEMORY_DEDICATED_ALLOCATE_INFO); in vn_android_device_import_ahb()
1143 int dma_buf_fd = -1; in vn_android_device_import_ahb()
1144 int dup_fd = -1; in vn_android_device_import_ahb()
1147 uint32_t mem_type_index = alloc_info->memoryTypeIndex; in vn_android_device_import_ahb()
1162 if (dedicated_info && dedicated_info->image != VK_NULL_HANDLE) { in vn_android_device_import_ahb()
1163 struct vn_image *img = vn_image_from_handle(dedicated_info->image); in vn_android_device_import_ahb()
1166 result = vn_android_get_image_builder(dev, &img->deferred_info->create, in vn_android_device_import_ahb()
1176 &img->requirements[0].memory.memoryRequirements; in vn_android_device_import_ahb()
1177 if (alloc_size < mem_req->size) { in vn_android_device_import_ahb()
1178 vn_log(dev->instance, in vn_android_device_import_ahb()
1179 "alloc_size(%" PRIu64 ") mem_req->size(%" PRIu64 ")", in vn_android_device_import_ahb()
1180 alloc_size, mem_req->size); in vn_android_device_import_ahb()
1184 alloc_size = mem_req->size; in vn_android_device_import_ahb()
1194 if ((mem_type_bits & mem_req->memoryTypeBits) == 0) { in vn_android_device_import_ahb()
1195 vn_log(dev->instance, "memoryTypeBits: img(0x%X) fd(0x%X)", in vn_android_device_import_ahb()
1196 mem_req->memoryTypeBits, mem_type_bits); in vn_android_device_import_ahb()
1200 mem_type_index = ffs(mem_type_bits & mem_req->memoryTypeBits) - 1; in vn_android_device_import_ahb()
1203 /* XXX Workaround before we use cross-domain backend in minigbm. The in vn_android_device_import_ahb()
1211 if (dedicated_info && dedicated_info->buffer != VK_NULL_HANDLE) { in vn_android_device_import_ahb()
1212 struct vn_buffer *buf = vn_buffer_from_handle(dedicated_info->buffer); in vn_android_device_import_ahb()
1214 &buf->requirements.memory.memoryRequirements; in vn_android_device_import_ahb()
1215 if (alloc_size < mem_req->size) { in vn_android_device_import_ahb()
1216 vn_log(dev->instance, in vn_android_device_import_ahb()
1217 "alloc_size(%" PRIu64 ") mem_req->size(%" PRIu64 ")", in vn_android_device_import_ahb()
1218 alloc_size, mem_req->size); in vn_android_device_import_ahb()
1222 alloc_size = mem_req->size; in vn_android_device_import_ahb()
1224 assert((1 << mem_type_index) & mem_req->memoryTypeBits); in vn_android_device_import_ahb()
1241 if (dedicated_info && dedicated_info->pNext) { in vn_android_device_import_ahb()
1260 mem->ahb = ahb; in vn_android_device_import_ahb()
1272 vk_find_struct_const(alloc_info->pNext, MEMORY_DEDICATED_ALLOCATE_INFO); in vn_android_device_allocate_ahb()
1280 if (dedicated_info && dedicated_info->image != VK_NULL_HANDLE) { in vn_android_device_allocate_ahb()
1282 &vn_image_from_handle(dedicated_info->image)->deferred_info->create; in vn_android_device_allocate_ahb()
1284 width = image_info->extent.width; in vn_android_device_allocate_ahb()
1285 height = image_info->extent.height; in vn_android_device_allocate_ahb()
1286 layers = image_info->arrayLayers; in vn_android_device_allocate_ahb()
1287 format = vn_android_ahb_format_from_vk_format(image_info->format); in vn_android_device_allocate_ahb()
1288 usage = vn_android_get_ahb_usage(image_info->usage, image_info->flags); in vn_android_device_allocate_ahb()
1291 &dev->physical_device->memory_properties.memoryProperties; in vn_android_device_allocate_ahb()
1293 assert(alloc_info->memoryTypeIndex < mem_props->memoryTypeCount); in vn_android_device_allocate_ahb()
1295 width = alloc_info->allocationSize; in vn_android_device_allocate_ahb()
1298 if (mem_props->memoryTypes[alloc_info->memoryTypeIndex].propertyFlags & in vn_android_device_allocate_ahb()
1332 struct vn_device_memory *mem = vn_device_memory_from_handle(pInfo->memory); in vn_GetMemoryAndroidHardwareBufferANDROID()
1334 AHardwareBuffer_acquire(mem->ahb); in vn_GetMemoryAndroidHardwareBufferANDROID()
1335 *pBuffer = mem->ahb; in vn_GetMemoryAndroidHardwareBufferANDROID()
1351 local_info->create = *create_info; in vn_android_fix_buffer_create_info()
1352 VkBaseOutStructure *dst = (void *)&local_info->create; in vn_android_fix_buffer_create_info()
1354 vk_foreach_struct_const(src, create_info->pNext) { in vn_android_fix_buffer_create_info()
1356 switch (src->sType) { in vn_android_fix_buffer_create_info()
1358 memcpy(&local_info->external, src, sizeof(local_info->external)); in vn_android_fix_buffer_create_info()
1359 local_info->external.handleTypes = in vn_android_fix_buffer_create_info()
1361 pnext = &local_info->external; in vn_android_fix_buffer_create_info()
1364 memcpy(&local_info->address, src, sizeof(local_info->address)); in vn_android_fix_buffer_create_info()
1365 pnext = &local_info->address; in vn_android_fix_buffer_create_info()
1372 dst->pNext = pnext; in vn_android_fix_buffer_create_info()
1377 dst->pNext = NULL; in vn_android_fix_buffer_create_info()
1379 return &local_info->create; in vn_android_fix_buffer_create_info()
1392 int dma_buf_fd = -1; in vn_android_get_ahb_buffer_memory_type_bits()
1439 (*out_buf)->requirements.memory.memoryRequirements.memoryTypeBits &= in vn_android_buffer_from_ahb()
1440 dev->buffer_cache.ahb_mem_type_bits; in vn_android_buffer_from_ahb()
1442 assert((*out_buf)->requirements.memory.memoryRequirements.memoryTypeBits); in vn_android_buffer_from_ahb()