@@ -595,10 +595,9 @@ urBindlessImagesSampledImageHandleDestroyExp(ur_context_handle_t hContext,
595595 ur_device_handle_t hDevice,
596596 ur_exp_image_handle_t hImage) {
597597 // Sampled image is a combination of unsampled image and sampler.
598- UR_CALL (urBindlessImagesUnsampledImageHandleDestroyExp (hContext, hDevice,
599- hImage));
600-
601- return UR_RESULT_SUCCESS;
598+ // Sampler is released in urSamplerRelease.
599+ return urBindlessImagesUnsampledImageHandleDestroyExp (hContext, hDevice,
600+ hImage);
602601}
603602
604603UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImageAllocateExp (
@@ -621,15 +620,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImageAllocateExp(
621620 (hContext->ZeContext , hDevice->ZeDevice , &ZeImageDesc, &ZeImage));
622621 ZE2UR_CALL (zeContextMakeImageResident,
623622 (hContext->ZeContext , hDevice->ZeDevice , ZeImage));
624- try {
625- auto UrImage = new _ur_image (hContext, ZeImage, /* OwnZeMemHandle*/ true );
626- UrImage->ZeImageDesc = ZeImageDesc;
627- *phImageMem = reinterpret_cast <ur_exp_image_mem_handle_t >(UrImage);
628- } catch (const std::bad_alloc &) {
629- return UR_RESULT_ERROR_OUT_OF_HOST_MEMORY;
630- } catch (...) {
631- return UR_RESULT_ERROR_UNKNOWN;
632- }
623+ UR_CALL (createUrMemFromZeImage (hContext, ZeImage, /* OwnZeMemHandle*/ true ,
624+ ZeImageDesc, phImageMem));
633625 return UR_RESULT_SUCCESS;
634626}
635627
@@ -638,17 +630,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImageFreeExp(
638630 ur_exp_image_mem_handle_t hImageMem) {
639631 std::ignore = hContext;
640632 std::ignore = hDevice;
641- auto *UrImage = reinterpret_cast <_ur_image *>(hImageMem);
642- if (!UrImage->RefCount .decrementAndTest ())
643- return UR_RESULT_SUCCESS;
644-
645- if (UrImage->OwnNativeHandle ) {
646- auto ZeResult = ZE_CALL_NOCHECK (zeImageDestroy, (UrImage->ZeImage ));
647- // Gracefully handle the case that L0 was already unloaded.
648- if (ZeResult && ZeResult != ZE_RESULT_ERROR_UNINITIALIZED)
649- return ze2urResult (ZeResult);
650- }
651- delete UrImage;
633+ UR_CALL (urMemRelease (reinterpret_cast <ur_mem_handle_t >(hImageMem)));
652634 return UR_RESULT_SUCCESS;
653635}
654636
@@ -657,42 +639,34 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesUnsampledImageCreateExp(
657639 ur_exp_image_mem_handle_t hImageMem, const ur_image_format_t *pImageFormat,
658640 const ur_image_desc_t *pImageDesc, ur_mem_handle_t *phMem,
659641 ur_exp_image_handle_t *phImage) {
660- std::ignore = phMem;
661642 std::shared_lock<ur_shared_mutex> Lock (hContext->Mutex );
662643
663644 ZeStruct<ze_image_desc_t > ZeImageDesc;
664645 UR_CALL (ur2zeImageDesc (pImageFormat, pImageDesc, ZeImageDesc));
665646
666- _ur_image *UrImage = nullptr ;
647+ ze_image_handle_t ZeImage ;
667648
668649 ze_memory_allocation_properties_t MemAllocProperties{
669650 ZE_STRUCTURE_TYPE_MEMORY_ALLOCATION_PROPERTIES};
670651 ZE2UR_CALL (zeMemGetAllocProperties,
671652 (hContext->ZeContext , hImageMem, &MemAllocProperties, nullptr ));
672653 if (MemAllocProperties.type == ZE_MEMORY_TYPE_UNKNOWN) {
673- UrImage = reinterpret_cast <_ur_image *>(hImageMem);
654+ _ur_image * UrImage = reinterpret_cast <_ur_image *>(hImageMem);
674655 if (!isSameImageDesc (&UrImage->ZeImageDesc , &ZeImageDesc)) {
675656 ze_image_bindless_exp_desc_t ZeImageBindlessDesc;
676657 ZeImageBindlessDesc.stype = ZE_STRUCTURE_TYPE_BINDLESS_IMAGE_EXP_DESC;
677658 ZeImageBindlessDesc.pNext = nullptr ;
678659 ZeImageBindlessDesc.flags = ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS;
679660 ZeImageDesc.pNext = &ZeImageBindlessDesc;
680- ze_image_handle_t ZeImageView;
681661 ZE2UR_CALL (zeImageViewCreateExt,
682662 (hContext->ZeContext , hDevice->ZeDevice , &ZeImageDesc,
683- UrImage->ZeImage , &ZeImageView ));
663+ UrImage->ZeImage , &ZeImage ));
684664 ZE2UR_CALL (zeContextMakeImageResident,
685- (hContext->ZeContext , hDevice->ZeDevice , ZeImageView));
686- try {
687- UrImage = new _ur_image (hContext, ZeImageView, /* OwnZeMemHandle*/ true );
688- UrImage->ZeImageDesc = ZeImageDesc;
689- *phMem = UrImage;
690- } catch (const std::bad_alloc &) {
691- return UR_RESULT_ERROR_OUT_OF_HOST_MEMORY;
692- } catch (...) {
693- return UR_RESULT_ERROR_UNKNOWN;
694- }
665+ (hContext->ZeContext , hDevice->ZeDevice , ZeImage));
666+ UR_CALL (createUrMemFromZeImage (hContext, ZeImage, /* OwnZeMemHandle*/ true ,
667+ ZeImageDesc, phMem));
695668 } else {
669+ ZeImage = UrImage->ZeImage ;
696670 *phMem = nullptr ;
697671 }
698672 } else {
@@ -708,20 +682,12 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesUnsampledImageCreateExp(
708682
709683 ZeImageDesc.pNext = &BindlessDesc;
710684
711- ze_image_handle_t ZeImage;
712685 ZE2UR_CALL (zeImageCreate, (hContext->ZeContext , hDevice->ZeDevice ,
713686 &ZeImageDesc, &ZeImage));
714687 ZE2UR_CALL (zeContextMakeImageResident,
715688 (hContext->ZeContext , hDevice->ZeDevice , ZeImage));
716- try {
717- UrImage = new _ur_image (hContext, ZeImage, /* OwnZeMemHandle*/ true );
718- UrImage->ZeImageDesc = ZeImageDesc;
719- *phMem = UrImage;
720- } catch (const std::bad_alloc &) {
721- return UR_RESULT_ERROR_OUT_OF_HOST_MEMORY;
722- } catch (...) {
723- return UR_RESULT_ERROR_UNKNOWN;
724- }
689+ UR_CALL (createUrMemFromZeImage (hContext, ZeImage, /* OwnZeMemHandle*/ true ,
690+ ZeImageDesc, phMem));
725691 }
726692
727693 static std::once_flag InitFlag;
@@ -738,9 +704,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesUnsampledImageCreateExp(
738704 if (!zeImageGetDeviceOffsetExpFunctionPtr)
739705 return UR_RESULT_ERROR_INVALID_OPERATION;
740706
741- uint64_t DeviceOffset;
742- ZE2UR_CALL (zeImageGetDeviceOffsetExpFunctionPtr,
743- (UrImage->ZeImage , &DeviceOffset));
707+ uint64_t DeviceOffset{};
708+ ZE2UR_CALL (zeImageGetDeviceOffsetExpFunctionPtr, (ZeImage, &DeviceOffset));
744709 *phImage = reinterpret_cast <ur_exp_image_handle_t >(DeviceOffset);
745710
746711 return UR_RESULT_SUCCESS;
@@ -936,11 +901,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesMipmapGetLevelExp(
936901UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesMipmapFreeExp (
937902 ur_context_handle_t hContext, ur_device_handle_t hDevice,
938903 ur_exp_image_mem_handle_t hMem) {
939- std::ignore = hContext;
940- std::ignore = hDevice;
941- std::ignore = hMem;
942- urPrint (" [UR][L0] %s function not implemented!\n " , __FUNCTION__);
943- return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
904+ return urBindlessImagesImageFreeExp (hContext, hDevice, hMem);
944905}
945906
946907UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImportOpaqueFDExp (
0 commit comments