Skip to content

Commit d5fd1db

Browse files
committed
comments addressed
1 parent 852e27b commit d5fd1db

File tree

6 files changed

+45
-33
lines changed

6 files changed

+45
-33
lines changed
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
# Support of this feature is waiting for the upstream PR
22
# https://github.com/llvm/llvm-project/pull/127737 to be merged with intel/llvm.
33
config.unsupported_features += ['spirv-backend']
4-
# V2 adapter does not support bindless images yet
5-
config.unsupported_features += ['level_zero_v2_adapter']

unified-runtime/source/adapters/level_zero/image_common.cpp

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#else
1717
#include "context.hpp"
1818
#endif
19+
#include "helpers/memory_helpers.hpp"
1920
#include "image_common.hpp"
2021
#include "logger/ur_logger.hpp"
2122
#include "sampler.hpp"
@@ -267,9 +268,14 @@ ur_result_t ze2urImageFormat(const ze_image_format_t &ZeImageFormat,
267268
}
268269

269270
/// Construct UR bindless image struct from ZE image handle and desc.
270-
ur_result_t createUrImgFromZeImage(ze_image_handle_t ZeImage,
271+
ur_result_t createUrImgFromZeImage(ze_context_handle_t hContext,
272+
ze_device_handle_t hDevice,
271273
const ZeStruct<ze_image_desc_t> &ZeImageDesc,
272274
ur_exp_image_mem_native_handle_t *pImg) {
275+
ze_image_handle_t ZeImage;
276+
ZE2UR_CALL(zeImageCreate, (hContext, hDevice, &ZeImageDesc, &ZeImage));
277+
ZE2UR_CALL(zeContextMakeImageResident, (hContext, hDevice, ZeImage));
278+
273279
try {
274280
ur_bindless_mem_handle_t *urImg =
275281
new ur_bindless_mem_handle_t(ZeImage, ZeImageDesc);
@@ -951,12 +957,8 @@ ur_result_t urBindlessImagesImageAllocateExp(
951957
ZeImageBindlessDesc.flags = ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS;
952958
ZeImageDesc.pNext = &ZeImageBindlessDesc;
953959

954-
ze_image_handle_t ZeImage;
955-
ZE2UR_CALL(zeImageCreate, (hContext->getZeHandle(), hDevice->ZeDevice,
956-
&ZeImageDesc, &ZeImage));
957-
ZE2UR_CALL(zeContextMakeImageResident,
958-
(hContext->getZeHandle(), hDevice->ZeDevice, ZeImage));
959-
UR_CALL(createUrImgFromZeImage(ZeImage, ZeImageDesc, phImageMem));
960+
UR_CALL(createUrImgFromZeImage(hContext->getZeHandle(), hDevice->ZeDevice,
961+
ZeImageDesc, phImageMem));
960962
return UR_RESULT_SUCCESS;
961963
}
962964

@@ -990,9 +992,9 @@ ur_result_t urBindlessImagesUnsampledImageHandleDestroyExp(
990992
auto item = hDevice->ZeOffsetToImageHandleMap.find(hImage);
991993

992994
if (item != hDevice->ZeOffsetToImageHandleMap.end()) {
993-
ZE2UR_CALL(zeImageDestroy, (item->second));
994995
hDevice->ZeOffsetToImageHandleMap.erase(item);
995996
Lock.release();
997+
ZE2UR_CALL(zeImageDestroy, (item->second));
996998
} else {
997999
Lock.release();
9981000
return UR_RESULT_ERROR_INVALID_NULL_HANDLE;
@@ -1165,12 +1167,9 @@ ur_result_t urBindlessImagesMapExternalArrayExp(
11651167
ZeImageBindlessDesc.flags = ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS;
11661168
ZeImageDesc.pNext = &ZeImageBindlessDesc;
11671169

1168-
ze_image_handle_t ZeImage;
1169-
ZE2UR_CALL(zeImageCreate, (hContext->getZeHandle(), hDevice->ZeDevice,
1170-
&ZeImageDesc, &ZeImage));
1171-
ZE2UR_CALL(zeContextMakeImageResident,
1172-
(hContext->getZeHandle(), hDevice->ZeDevice, ZeImage));
1173-
UR_CALL(createUrImgFromZeImage(ZeImage, ZeImageDesc, phImageMem));
1170+
UR_CALL(createUrImgFromZeImage(hContext->getZeHandle(), hDevice->ZeDevice,
1171+
ZeImageDesc, phImageMem));
1172+
11741173
externalMemoryData->urMemoryHandle =
11751174
reinterpret_cast<ur_mem_handle_t>(*phImageMem);
11761175
return UR_RESULT_SUCCESS;
@@ -1186,7 +1185,29 @@ ur_result_t urBindlessImagesReleaseExternalMemoryExp(
11861185
struct ur_ze_external_memory_data *externalMemoryData =
11871186
reinterpret_cast<ur_ze_external_memory_data *>(hExternalMem);
11881187

1189-
UR_CALL(ur::level_zero::urMemRelease(externalMemoryData->urMemoryHandle));
1188+
// externalMemoryData->urMemoryHandle can be ur_bindless_mem_handle_t or
1189+
// buffer allocated by zeMemAllocDevice()
1190+
1191+
ze_memory_allocation_properties_t allocProperties{
1192+
ZE_STRUCTURE_TYPE_MEMORY_ALLOCATION_PROPERTIES, nullptr,
1193+
ZE_MEMORY_TYPE_UNKNOWN, 0, 0};
1194+
ZE2UR_CALL(zeMemGetAllocProperties,
1195+
(hContext->getZeHandle(), externalMemoryData->urMemoryHandle,
1196+
&allocProperties, nullptr));
1197+
1198+
switch (allocProperties.type) {
1199+
case ZE_MEMORY_TYPE_DEVICE:
1200+
zeMemFree(hContext->getZeHandle(),
1201+
externalMemoryData->urMemoryHandle); // Free device memory
1202+
break;
1203+
case ZE_MEMORY_TYPE_UNKNOWN:
1204+
default:
1205+
auto *bindlessMem = reinterpret_cast<ur_bindless_mem_handle_t *>(
1206+
externalMemoryData->urMemoryHandle);
1207+
zeImageDestroy(bindlessMem->getZeImage());
1208+
delete bindlessMem;
1209+
break;
1210+
}
11901211

11911212
switch (externalMemoryData->type) {
11921213
case UR_ZE_EXTERNAL_OPAQUE_FD:

unified-runtime/source/adapters/level_zero/image_common.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@
1717
#include "v2/common.hpp"
1818

1919
struct ur_bindless_mem_handle_t {
20-
20+
// Constructor for bindless image handle
2121
ur_bindless_mem_handle_t(ze_image_handle_t zeImage,
2222
const ZeStruct<ze_image_desc_t> &zeImageDesc)
2323
: zeImage(zeImage) {
24+
2425
format = zeImageDesc.format;
2526
width = zeImageDesc.width;
2627
height = zeImageDesc.height;

unified-runtime/source/adapters/level_zero/memory.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2357,6 +2357,8 @@ ur_result_t ur_mem_handle_t_::getZeHandle(char *&ZeHandle, access_mode_t mode,
23572357
case ur_mem_handle_t_::buffer:
23582358
return reinterpret_cast<_ur_buffer *>(this)->getBufferZeHandle(
23592359
ZeHandle, mode, Device, phWaitEvents, numWaitEvents);
2360+
default:
2361+
die("ur_mem_handle_t_::getZeHandle: Unhandled memory type");
23602362
}
23612363
ur::unreachable();
23622364
}
@@ -2371,6 +2373,8 @@ ur_result_t ur_mem_handle_t_::getZeHandlePtr(
23712373
case ur_mem_handle_t_::buffer:
23722374
return reinterpret_cast<_ur_buffer *>(this)->getBufferZeHandlePtr(
23732375
ZeHandlePtr, mode, Device, phWaitEvents, numWaitEvents);
2376+
default:
2377+
die("ur_mem_handle_t_::getZeHandle: Unhandled memory type");
23742378
}
23752379
ur::unreachable();
23762380
}

unified-runtime/source/adapters/level_zero/v2/image.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,4 @@ urBindlessImagesImageFreeExp([[maybe_unused]] ur_context_handle_t hContext,
3030
return UR_RESULT_SUCCESS;
3131
}
3232

33-
// ur_result_t urBindlessImagesMapExternalLinearMemoryExp(
34-
// [[maybe_unused]] ur_context_handle_t hContext,
35-
// [[maybe_unused]] ur_device_handle_t hDevice,
36-
// [[maybe_unused]] uint64_t offset, [[maybe_unused]] uint64_t size,
37-
// [[maybe_unused]] ur_exp_external_mem_handle_t hExternalMem,
38-
// [[maybe_unused]] void **phRetMem) {
39-
// // implemented in V1 in PR https://github.com/intel/llvm/pull/17458
40-
// // TODO: implement in V2 after V1 is merged
41-
// logger::error(
42-
// logger::LegacyMessage("[UR][L0_v2] {} function not implemented!"),
43-
// "{} function not implemented!", __FUNCTION__);
44-
// return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
45-
// }
46-
4733
} // namespace ur::level_zero

unified-runtime/source/adapters/level_zero/v2/memory.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
#include <ur_api.h>
1616

1717
#include "../device.hpp"
18+
#include "../image_common.hpp"
1819
#include "common.hpp"
20+
#include "helpers/memory_helpers.hpp"
1921

2022
using usm_unique_ptr_t = std::unique_ptr<void, std::function<void(void *)>>;
2123

@@ -214,7 +216,7 @@ struct ur_mem_image_t : _ur_object {
214216
ZeStruct<ze_image_desc_t> zeImageDesc;
215217
};
216218

217-
struct ur_mem_handle_t_ {
219+
struct ur_mem_handle_t_ : _ur_object {
218220
template <typename T, typename... Args>
219221
static ur_mem_handle_t_ *create(Args &&...args) {
220222
return new ur_mem_handle_t_(std::in_place_type<T>,

0 commit comments

Comments
 (0)