@@ -595,10 +595,9 @@ urBindlessImagesSampledImageHandleDestroyExp(ur_context_handle_t hContext,
595
595
ur_device_handle_t hDevice,
596
596
ur_exp_image_handle_t hImage) {
597
597
// 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);
602
601
}
603
602
604
603
UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImageAllocateExp (
@@ -621,15 +620,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImageAllocateExp(
621
620
(hContext->ZeContext , hDevice->ZeDevice , &ZeImageDesc, &ZeImage));
622
621
ZE2UR_CALL (zeContextMakeImageResident,
623
622
(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));
633
625
return UR_RESULT_SUCCESS;
634
626
}
635
627
@@ -638,17 +630,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImageFreeExp(
638
630
ur_exp_image_mem_handle_t hImageMem) {
639
631
std::ignore = hContext;
640
632
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)));
652
634
return UR_RESULT_SUCCESS;
653
635
}
654
636
@@ -657,42 +639,34 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesUnsampledImageCreateExp(
657
639
ur_exp_image_mem_handle_t hImageMem, const ur_image_format_t *pImageFormat,
658
640
const ur_image_desc_t *pImageDesc, ur_mem_handle_t *phMem,
659
641
ur_exp_image_handle_t *phImage) {
660
- std::ignore = phMem;
661
642
std::shared_lock<ur_shared_mutex> Lock (hContext->Mutex );
662
643
663
644
ZeStruct<ze_image_desc_t > ZeImageDesc;
664
645
UR_CALL (ur2zeImageDesc (pImageFormat, pImageDesc, ZeImageDesc));
665
646
666
- _ur_image *UrImage = nullptr ;
647
+ ze_image_handle_t ZeImage ;
667
648
668
649
ze_memory_allocation_properties_t MemAllocProperties{
669
650
ZE_STRUCTURE_TYPE_MEMORY_ALLOCATION_PROPERTIES};
670
651
ZE2UR_CALL (zeMemGetAllocProperties,
671
652
(hContext->ZeContext , hImageMem, &MemAllocProperties, nullptr ));
672
653
if (MemAllocProperties.type == ZE_MEMORY_TYPE_UNKNOWN) {
673
- UrImage = reinterpret_cast <_ur_image *>(hImageMem);
654
+ _ur_image * UrImage = reinterpret_cast <_ur_image *>(hImageMem);
674
655
if (!isSameImageDesc (&UrImage->ZeImageDesc , &ZeImageDesc)) {
675
656
ze_image_bindless_exp_desc_t ZeImageBindlessDesc;
676
657
ZeImageBindlessDesc.stype = ZE_STRUCTURE_TYPE_BINDLESS_IMAGE_EXP_DESC;
677
658
ZeImageBindlessDesc.pNext = nullptr ;
678
659
ZeImageBindlessDesc.flags = ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS;
679
660
ZeImageDesc.pNext = &ZeImageBindlessDesc;
680
- ze_image_handle_t ZeImageView;
681
661
ZE2UR_CALL (zeImageViewCreateExt,
682
662
(hContext->ZeContext , hDevice->ZeDevice , &ZeImageDesc,
683
- UrImage->ZeImage , &ZeImageView ));
663
+ UrImage->ZeImage , &ZeImage ));
684
664
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));
695
668
} else {
669
+ ZeImage = UrImage->ZeImage ;
696
670
*phMem = nullptr ;
697
671
}
698
672
} else {
@@ -708,20 +682,12 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesUnsampledImageCreateExp(
708
682
709
683
ZeImageDesc.pNext = &BindlessDesc;
710
684
711
- ze_image_handle_t ZeImage;
712
685
ZE2UR_CALL (zeImageCreate, (hContext->ZeContext , hDevice->ZeDevice ,
713
686
&ZeImageDesc, &ZeImage));
714
687
ZE2UR_CALL (zeContextMakeImageResident,
715
688
(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));
725
691
}
726
692
727
693
static std::once_flag InitFlag;
@@ -738,9 +704,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesUnsampledImageCreateExp(
738
704
if (!zeImageGetDeviceOffsetExpFunctionPtr)
739
705
return UR_RESULT_ERROR_INVALID_OPERATION;
740
706
741
- uint64_t DeviceOffset;
742
- ZE2UR_CALL (zeImageGetDeviceOffsetExpFunctionPtr,
743
- (UrImage->ZeImage , &DeviceOffset));
707
+ uint64_t DeviceOffset{};
708
+ ZE2UR_CALL (zeImageGetDeviceOffsetExpFunctionPtr, (ZeImage, &DeviceOffset));
744
709
*phImage = reinterpret_cast <ur_exp_image_handle_t >(DeviceOffset);
745
710
746
711
return UR_RESULT_SUCCESS;
@@ -936,11 +901,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesMipmapGetLevelExp(
936
901
UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesMipmapFreeExp (
937
902
ur_context_handle_t hContext, ur_device_handle_t hDevice,
938
903
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);
944
905
}
945
906
946
907
UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImportOpaqueFDExp (
0 commit comments