@@ -23,7 +23,8 @@ ur_result_t urMemoryExportAllocExportableMemoryExp(
2323 size_t size, ur_exp_external_mem_type_t handleTypeToExport, void **ppMem) {
2424
2525 UR_ASSERT (handleTypeToExport == UR_EXP_EXTERNAL_MEM_TYPE_OPAQUE_FD ||
26- handleTypeToExport == UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT,
26+ handleTypeToExport == UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT ||
27+ handleTypeToExport == UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF,
2728 UR_RESULT_ERROR_INVALID_ENUMERATION);
2829
2930 ze_external_memory_export_desc_t MemExportDesc{};
@@ -36,6 +37,9 @@ ur_result_t urMemoryExportAllocExportableMemoryExp(
3637 case UR_EXP_EXTERNAL_MEM_TYPE_WIN32_NT:
3738 MemExportDesc.flags = ZE_EXTERNAL_MEMORY_TYPE_FLAG_OPAQUE_WIN32;
3839 break ;
40+ case UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF:
41+ MemExportDesc.flags = ZE_EXTERNAL_MEMORY_TYPE_FLAG_DMA_BUF;
42+ break ;
3943 default :
4044 return UR_RESULT_ERROR_INVALID_ENUMERATION;
4145 }
@@ -89,6 +93,18 @@ ur_result_t urMemoryExportExportMemoryHandleExp(
8993 *ppMemHandleRet = MemExportWin32.handle ;
9094 break ;
9195 }
96+ case UR_EXP_EXTERNAL_MEM_TYPE_DMA_BUF: {
97+ MemExportFD.stype = ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_EXPORT_FD;
98+ MemExportFD.flags = ZE_EXTERNAL_MEMORY_TYPE_FLAG_DMA_BUF;
99+ MemAllocProps.pNext = &MemExportFD;
100+
101+ ZE2UR_CALL (zeMemGetAllocProperties,
102+ (hContext->getZeHandle (), pMem, &MemAllocProps, nullptr ));
103+
104+ int *pMemHandleRetIntPtr = static_cast <int *>(pMemHandleRet);
105+ *pMemHandleRetIntPtr = MemExportFD.fd ;
106+ break ;
107+ }
92108 default : {
93109 return UR_RESULT_ERROR_INVALID_ENUMERATION;
94110 }
0 commit comments