Skip to content

Commit c9fa050

Browse files
cperkinsintelbb-ur
authored andcommitted
expand export memory api (#21737)
DMA Buf support was added to bindless images some time ago, but never hooked up for the memory export extension ( https://github.com/intel/llvm/blob/sycl/sycl/doc/extensions/experimental/sycl_ext_oneapi_memory_export.asciidoc ) This PR brings the dma_buf value through SYCL and the UR and adds testing.
1 parent 53b31b3 commit c9fa050

1 file changed

Lines changed: 17 additions & 1 deletion

File tree

source/adapters/level_zero/memory_export.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)