@@ -731,19 +731,17 @@ ur_result_t getImageRegionHelper(ze_image_desc_t ZeImageDesc,
731731 UR_ASSERT (Origin, UR_RESULT_ERROR_INVALID_VALUE);
732732 UR_ASSERT (Region, UR_RESULT_ERROR_INVALID_VALUE);
733733
734- if (ZeImageDesc.type == ZE_IMAGE_TYPE_1D ||
735- ZeImageDesc.type == ZE_IMAGE_TYPE_1DARRAY) {
734+ if (ZeImageDesc.type == ZE_IMAGE_TYPE_1D) {
736735 Region->height = 1 ;
737736 Region->depth = 1 ;
738- } else if (ZeImageDesc.type == ZE_IMAGE_TYPE_2D ||
739- ZeImageDesc.type == ZE_IMAGE_TYPE_2DARRAY) {
737+ } else if (ZeImageDesc.type == ZE_IMAGE_TYPE_2D) {
740738 Region->depth = 1 ;
741739 }
742740
743741#ifndef NDEBUG
744742 UR_ASSERT ((ZeImageDesc.type == ZE_IMAGE_TYPE_1D && Origin->y == 0 &&
745743 Origin->z == 0 ) ||
746- (ZeImageDesc.type == ZE_IMAGE_TYPE_1DARRAY && Origin->z == 0 ) ||
744+ (ZeImageDesc.type == ZE_IMAGE_TYPE_1DARRAY && Origin->y == 0 ) ||
747745 (ZeImageDesc.type == ZE_IMAGE_TYPE_2D && Origin->z == 0 ) ||
748746 (ZeImageDesc.type == ZE_IMAGE_TYPE_2DARRAY) ||
749747 (ZeImageDesc.type == ZE_IMAGE_TYPE_3D),
@@ -754,7 +752,7 @@ ur_result_t getImageRegionHelper(ze_image_desc_t ZeImageDesc,
754752 UR_ASSERT (
755753 (ZeImageDesc.type == ZE_IMAGE_TYPE_1D && Region->height == 1 &&
756754 Region->depth == 1 ) ||
757- (ZeImageDesc.type == ZE_IMAGE_TYPE_1DARRAY && Region->depth == 1 ) ||
755+ (ZeImageDesc.type == ZE_IMAGE_TYPE_1DARRAY && Region->height == 1 ) ||
758756 (ZeImageDesc.type == ZE_IMAGE_TYPE_2D && Region->depth == 1 ) ||
759757 (ZeImageDesc.type == ZE_IMAGE_TYPE_2DARRAY) ||
760758 (ZeImageDesc.type == ZE_IMAGE_TYPE_3D),
@@ -766,12 +764,25 @@ ur_result_t getImageRegionHelper(ze_image_desc_t ZeImageDesc,
766764 uint32_t OriginZ = ur_cast<uint32_t >(Origin->z );
767765
768766 uint32_t Width = ur_cast<uint32_t >(Region->width );
769- uint32_t Height = (ZeImageDesc.type == ZE_IMAGE_TYPE_1DARRAY)
770- ? ZeImageDesc.arraylevels
771- : ur_cast<uint32_t >(Region->height );
772- uint32_t Depth = (ZeImageDesc.type == ZE_IMAGE_TYPE_2DARRAY)
773- ? ZeImageDesc.arraylevels
774- : ur_cast<uint32_t >(Region->depth );
767+ uint32_t Height = ur_cast<uint32_t >(Region->height );
768+ uint32_t Depth = ur_cast<uint32_t >(Region->depth );
769+
770+ if (ZeImageDesc.type == ZE_IMAGE_TYPE_1D) {
771+ OriginY = 0 ;
772+ OriginZ = 0 ;
773+ Height = 1 ;
774+ Depth = 1 ;
775+ } else if (ZeImageDesc.type == ZE_IMAGE_TYPE_1DARRAY) {
776+ // UR uses z for the array layer when describing a 1D array subregion.
777+ // Level Zero expects the array layer in originY/height for 1D arrays.
778+ OriginY = ur_cast<uint32_t >(Origin->z );
779+ OriginZ = 0 ;
780+ Height = ur_cast<uint32_t >(Region->depth );
781+ Depth = 1 ;
782+ } else if (ZeImageDesc.type == ZE_IMAGE_TYPE_2D) {
783+ OriginZ = 0 ;
784+ Depth = 1 ;
785+ }
775786
776787 ZeRegion = {OriginX, OriginY, OriginZ, Width, Height, Depth};
777788
@@ -812,6 +823,8 @@ ur_result_t bindlessImagesHandleCopyFlags(
812823
813824 ZeStruct<ze_image_desc_t > zeSrcImageDesc;
814825 ur2zeImageDesc (pSrcImageFormat, pSrcImageDesc, zeSrcImageDesc);
826+ ZeStruct<ze_image_desc_t > zeDstImageDesc;
827+ ur2zeImageDesc (pDstImageFormat, pDstImageDesc, zeDstImageDesc);
815828 uint32_t SrcPixelSizeInBytes = getPixelSizeBytes (pSrcImageFormat);
816829 uint32_t DstPixelSizeInBytes = getPixelSizeBytes (pDstImageFormat);
817830
@@ -862,7 +875,7 @@ ur_result_t bindlessImagesHandleCopyFlags(
862875 case UR_EXP_IMAGE_COPY_INPUT_TYPES_IMAGE_TO_IMAGE: {
863876 // Copy between two ze_image_handle_t's
864877 ze_image_region_t DstRegion;
865- UR_CALL (getZeImageRegionHelper (zeSrcImageDesc , DstPixelSizeInBytes,
878+ UR_CALL (getZeImageRegionHelper (zeDstImageDesc , DstPixelSizeInBytes,
866879 &pCopyRegion->dstOffset ,
867880 &pCopyRegion->copyExtent , DstRegion));
868881
@@ -884,7 +897,7 @@ ur_result_t bindlessImagesHandleCopyFlags(
884897 case UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_IMAGE: {
885898 // Copy from USM to ze_image_handle_t
886899 ze_image_region_t DstRegion;
887- UR_CALL (getZeImageRegionHelper (zeSrcImageDesc , DstPixelSizeInBytes,
900+ UR_CALL (getZeImageRegionHelper (zeDstImageDesc , DstPixelSizeInBytes,
888901 &pCopyRegion->dstOffset ,
889902 &pCopyRegion->copyExtent , DstRegion));
890903
0 commit comments