@@ -1795,7 +1795,7 @@ void handler::ext_oneapi_copy(
17951795 MDstPtr = Dest;
17961796
17971797 detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc,
1798- UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST ,
1798+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE ,
17991799 UR_EXP_IMAGE_COPY_INPUT_TYPES_IMAGE_TO_MEM, 0 ,
18001800 DestRowPitch);
18011801
@@ -1838,7 +1838,7 @@ void handler::ext_oneapi_copy(
18381838 MDstPtr = reinterpret_cast <void *>(Dest.raw_handle );
18391839
18401840 detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc,
1841- UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE ,
1841+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE ,
18421842 UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_IMAGE,
18431843 SrcRowPitch, 0 );
18441844
@@ -1860,7 +1860,7 @@ void handler::ext_oneapi_copy(
18601860 MDstPtr = reinterpret_cast <void *>(Dest.raw_handle );
18611861
18621862 detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc,
1863- UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE ,
1863+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE ,
18641864 UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_IMAGE,
18651865 SrcRowPitch, 0 , SrcOffset, {0 , 0 , 0 }, DestOffset,
18661866 {0 , 0 , 0 }, CopyExtent);
@@ -1881,11 +1881,22 @@ void handler::ext_oneapi_copy(
18811881 MSrcPtr = const_cast <void *>(Src);
18821882 MDstPtr = Dest;
18831883
1884- ur_exp_image_copy_flags_t ImageCopyFlags =
1885- UR_EXP_IMAGE_COPY_FLAG_HOST_TO_HOST;
1886- detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc, ImageCopyFlags,
1887- UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_MEM, SrcRowPitch,
1888- DestRowPitch);
1884+ ur_exp_image_copy_flags_t ImageCopyFlags = detail::getUrImageCopyFlags (
1885+ get_pointer_type (Src,
1886+ createSyclObjFromImpl<context>(impl->get_context ())),
1887+ get_pointer_type (Dest,
1888+ createSyclObjFromImpl<context>(impl->get_context ())));
1889+
1890+ if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE ||
1891+ ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_HOST_TO_HOST) {
1892+ detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc, ImageCopyFlags,
1893+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_MEM,
1894+ SrcRowPitch, DestRowPitch);
1895+ } else {
1896+ throw sycl::exception (make_error_code (errc::invalid),
1897+ " Copy Error: This copy function only performs device "
1898+ " to device or host to host copies!" );
1899+ }
18891900
18901901 setType (detail::CGType::CopyImage);
18911902}
@@ -1900,12 +1911,23 @@ void handler::ext_oneapi_copy(
19001911 MSrcPtr = const_cast <void *>(Src);
19011912 MDstPtr = Dest;
19021913
1903- ur_exp_image_copy_flags_t ImageCopyFlags =
1904- UR_EXP_IMAGE_COPY_FLAG_HOST_TO_HOST;
1905- detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc, ImageCopyFlags,
1906- UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_MEM, SrcRowPitch,
1907- DestRowPitch, SrcOffset, {0 , 0 , 0 }, DestOffset,
1908- {0 , 0 , 0 }, CopyExtent);
1914+ ur_exp_image_copy_flags_t ImageCopyFlags = detail::getUrImageCopyFlags (
1915+ get_pointer_type (Src,
1916+ createSyclObjFromImpl<context>(impl->get_context ())),
1917+ get_pointer_type (Dest,
1918+ createSyclObjFromImpl<context>(impl->get_context ())));
1919+
1920+ if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE ||
1921+ ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_HOST_TO_HOST) {
1922+ detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc, ImageCopyFlags,
1923+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_MEM,
1924+ SrcRowPitch, DestRowPitch, SrcOffset, {0 , 0 , 0 },
1925+ DestOffset, {0 , 0 , 0 }, CopyExtent);
1926+ } else {
1927+ throw sycl::exception (make_error_code (errc::invalid),
1928+ " Copy Error: This copy function only performs device "
1929+ " to device or host to host copies!" );
1930+ }
19091931
19101932 setType (detail::CGType::CopyImage);
19111933}
0 commit comments