From 75f833ca829f4afda54bfb1e17ebc1915af2e28e Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 14 Oct 2024 14:23:06 -0700 Subject: [PATCH] panvk: fill in VkExternalBufferProperties Opaque fds are internally dma-bufs. We also support both export and import. Fixes: 17b81d1fdcc ("panvk: expose KHR_external_memory and KHR_external_memory_capabilities") Part-of: --- src/panfrost/vulkan/panvk_physical_device.c | 24 ++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index d9c964b4878..9451f8ee85d 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -1477,5 +1477,27 @@ panvk_GetPhysicalDeviceExternalBufferProperties( const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo, VkExternalBufferProperties *pExternalBufferProperties) { - panvk_stub(); + const VkExternalMemoryHandleTypeFlags supported_handle_types = + VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT | + VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT; + + /* From the Vulkan 1.3.298 spec: + * + * compatibleHandleTypes must include at least handleType. + */ + VkExternalMemoryHandleTypeFlags handle_types = + pExternalBufferInfo->handleType; + VkExternalMemoryFeatureFlags features = 0; + if (pExternalBufferInfo->handleType & supported_handle_types) { + handle_types |= supported_handle_types; + features |= VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT; + } + + pExternalBufferProperties->externalMemoryProperties = + (VkExternalMemoryProperties){ + .externalMemoryFeatures = features, + .exportFromImportedHandleTypes = handle_types, + .compatibleHandleTypes = handle_types, + }; }