@@ -239,16 +239,16 @@ fill_image_desc(const ext::oneapi::experimental::image_descriptor &ImgDesc) {
239
239
return UrDesc;
240
240
}
241
241
242
- static void
243
- fill_copy_args ( detail::handler_impl *impl,
244
- const ext::oneapi::experimental::image_descriptor &SrcImgDesc,
245
- const ext::oneapi::experimental::image_descriptor &DestImgDesc,
246
- ur_exp_image_copy_flags_t ImageCopyFlags, size_t SrcPitch ,
247
- size_t DestPitch, sycl::range< 3 > SrcOffset = { 0 , 0 , 0 } ,
248
- sycl::range<3 > SrcExtent = {0 , 0 , 0 },
249
- sycl::range<3 > DestOffset = {0 , 0 , 0 },
250
- sycl::range<3 > DestExtent = {0 , 0 , 0 },
251
- sycl::range<3 > CopyExtent = {0 , 0 , 0 }) {
242
+ static void fill_copy_args (
243
+ detail::handler_impl *impl,
244
+ const ext::oneapi::experimental::image_descriptor &SrcImgDesc,
245
+ const ext::oneapi::experimental::image_descriptor &DestImgDesc,
246
+ ur_exp_image_copy_flags_t ImageCopyFlags,
247
+ ur_exp_image_copy_input_types_t ImageCopyInputTypes, size_t SrcPitch ,
248
+ size_t DestPitch, sycl::range<3 > SrcOffset = {0 , 0 , 0 },
249
+ sycl::range< 3 > SrcExtent = { 0 , 0 , 0 }, sycl::range<3 > DestOffset = {0 , 0 , 0 },
250
+ sycl::range<3 > DestExtent = {0 , 0 , 0 },
251
+ sycl::range<3 > CopyExtent = {0 , 0 , 0 }) {
252
252
SrcImgDesc.verify ();
253
253
DestImgDesc.verify ();
254
254
@@ -267,12 +267,13 @@ fill_copy_args(detail::handler_impl *impl,
267
267
auto ZCopyExtentComponent = detail::fill_image_type (SrcImgDesc, UrSrcDesc);
268
268
detail::fill_image_type (DestImgDesc, UrDestDesc);
269
269
270
- // Copy args computed here are directly passed to UR. Various offsets and
271
- // extents end up passed as ur_rect_offset_t and ur_rect_region_t. Both those
272
- // structs expect their first component to be in bytes, not in pixels
273
- size_t SrcPixelSize = SrcImgDesc.num_channels * get_channel_size (SrcImgDesc);
274
- size_t DestPixelSize =
275
- DestImgDesc.num_channels * get_channel_size (DestImgDesc);
270
+ // ur_rect_offset_t and ur_rect_offset_t which represent image offsets and
271
+ // copy extents expect that X-axis offset and region width are specified in
272
+ // bytes rather then in elements.
273
+ auto SrcPixelSize =
274
+ SrcImgDesc.num_channels * detail::get_channel_size (SrcImgDesc);
275
+ auto DestPixelSize =
276
+ DestImgDesc.num_channels * detail::get_channel_size (DestImgDesc);
276
277
277
278
impl->MSrcOffset = {SrcOffset[0 ] * SrcPixelSize, SrcOffset[1 ], SrcOffset[2 ]};
278
279
impl->MDestOffset = {DestOffset[0 ] * DestPixelSize, DestOffset[1 ],
@@ -282,6 +283,7 @@ fill_copy_args(detail::handler_impl *impl,
282
283
impl->MSrcImageFormat = UrSrcFormat;
283
284
impl->MDstImageFormat = UrDestFormat;
284
285
impl->MImageCopyFlags = ImageCopyFlags;
286
+ impl->MImageCopyInputTypes = ImageCopyInputTypes;
285
287
286
288
if (CopyExtent.size () != 0 ) {
287
289
impl->MCopyExtent = {CopyExtent[0 ] * SrcPixelSize, CopyExtent[1 ],
@@ -311,6 +313,7 @@ static void
311
313
fill_copy_args (detail::handler_impl *impl,
312
314
const ext::oneapi::experimental::image_descriptor &Desc,
313
315
ur_exp_image_copy_flags_t ImageCopyFlags,
316
+ ur_exp_image_copy_input_types_t ImageCopyInputTypes,
314
317
sycl::range<3 > SrcOffset = {0 , 0 , 0 },
315
318
sycl::range<3 > SrcExtent = {0 , 0 , 0 },
316
319
sycl::range<3 > DestOffset = {0 , 0 , 0 },
@@ -320,29 +323,32 @@ fill_copy_args(detail::handler_impl *impl,
320
323
size_t SrcPitch = SrcExtent[0 ] * Desc.num_channels * get_channel_size (Desc);
321
324
size_t DestPitch = DestExtent[0 ] * Desc.num_channels * get_channel_size (Desc);
322
325
323
- fill_copy_args (impl, Desc, Desc, ImageCopyFlags, SrcPitch, DestPitch,
324
- SrcOffset, SrcExtent, DestOffset, DestExtent, CopyExtent);
326
+ fill_copy_args (impl, Desc, Desc, ImageCopyFlags, ImageCopyInputTypes,
327
+ SrcPitch, DestPitch, SrcOffset, SrcExtent, DestOffset,
328
+ DestExtent, CopyExtent);
325
329
}
326
330
327
- static void
328
- fill_copy_args ( detail::handler_impl *impl,
329
- const ext::oneapi::experimental::image_descriptor &Desc,
330
- ur_exp_image_copy_flags_t ImageCopyFlags, size_t SrcPitch ,
331
- size_t DestPitch, sycl::range< 3 > SrcOffset = { 0 , 0 , 0 } ,
332
- sycl::range<3 > SrcExtent = {0 , 0 , 0 },
333
- sycl::range<3 > DestOffset = {0 , 0 , 0 },
334
- sycl::range<3 > DestExtent = {0 , 0 , 0 },
335
- sycl::range<3 > CopyExtent = {0 , 0 , 0 }) {
331
+ static void fill_copy_args (
332
+ detail::handler_impl *impl,
333
+ const ext::oneapi::experimental::image_descriptor &Desc,
334
+ ur_exp_image_copy_flags_t ImageCopyFlags,
335
+ ur_exp_image_copy_input_types_t ImageCopyInputTypes, size_t SrcPitch ,
336
+ size_t DestPitch, sycl::range<3 > SrcOffset = {0 , 0 , 0 },
337
+ sycl::range< 3 > SrcExtent = { 0 , 0 , 0 }, sycl::range<3 > DestOffset = {0 , 0 , 0 },
338
+ sycl::range<3 > DestExtent = {0 , 0 , 0 },
339
+ sycl::range<3 > CopyExtent = {0 , 0 , 0 }) {
336
340
337
- fill_copy_args (impl, Desc, Desc, ImageCopyFlags, SrcPitch, DestPitch,
338
- SrcOffset, SrcExtent, DestOffset, DestExtent, CopyExtent);
341
+ fill_copy_args (impl, Desc, Desc, ImageCopyFlags, ImageCopyInputTypes,
342
+ SrcPitch, DestPitch, SrcOffset, SrcExtent, DestOffset,
343
+ DestExtent, CopyExtent);
339
344
}
340
345
341
346
static void
342
347
fill_copy_args (detail::handler_impl *impl,
343
348
const ext::oneapi::experimental::image_descriptor &SrcImgDesc,
344
349
const ext::oneapi::experimental::image_descriptor &DestImgDesc,
345
350
ur_exp_image_copy_flags_t ImageCopyFlags,
351
+ ur_exp_image_copy_input_types_t ImageCopyInputTypes,
346
352
sycl::range<3 > SrcOffset = {0 , 0 , 0 },
347
353
sycl::range<3 > SrcExtent = {0 , 0 , 0 },
348
354
sycl::range<3 > DestOffset = {0 , 0 , 0 },
@@ -354,9 +360,9 @@ fill_copy_args(detail::handler_impl *impl,
354
360
size_t DestPitch =
355
361
DestExtent[0 ] * DestImgDesc.num_channels * get_channel_size (DestImgDesc);
356
362
357
- fill_copy_args (impl, SrcImgDesc, DestImgDesc, ImageCopyFlags, SrcPitch,
358
- DestPitch, SrcOffset, SrcExtent, DestOffset, DestExtent ,
359
- CopyExtent);
363
+ fill_copy_args (impl, SrcImgDesc, DestImgDesc, ImageCopyFlags,
364
+ ImageCopyInputTypes, SrcPitch, DestPitch, SrcOffset, SrcExtent ,
365
+ DestOffset, DestExtent, CopyExtent);
360
366
}
361
367
362
368
} // namespace detail
@@ -905,8 +911,8 @@ event handler::finalize() {
905
911
CommandGroup.reset (new detail::CGCopyImage (
906
912
MSrcPtr, MDstPtr, impl->MSrcImageDesc , impl->MDstImageDesc ,
907
913
impl->MSrcImageFormat , impl->MDstImageFormat , impl->MImageCopyFlags ,
908
- impl->MSrcOffset , impl->MDestOffset , impl->MCopyExtent ,
909
- std::move (impl->CGData ), MCodeLoc));
914
+ impl->MImageCopyInputTypes , impl->MSrcOffset , impl->MDestOffset ,
915
+ impl-> MCopyExtent , std::move (impl->CGData ), MCodeLoc));
910
916
break ;
911
917
case detail::CGType::SemaphoreWait:
912
918
CommandGroup.reset (
@@ -1622,7 +1628,8 @@ void handler::ext_oneapi_copy(
1622
1628
MDstPtr = reinterpret_cast <void *>(Dest.raw_handle );
1623
1629
1624
1630
detail::fill_copy_args (get_impl (), DestImgDesc,
1625
- UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE);
1631
+ UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE,
1632
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_IMAGE);
1626
1633
1627
1634
setType (detail::CGType::CopyImage);
1628
1635
}
@@ -1640,7 +1647,8 @@ void handler::ext_oneapi_copy(
1640
1647
MDstPtr = reinterpret_cast <void *>(Dest.raw_handle );
1641
1648
1642
1649
detail::fill_copy_args (get_impl (), DestImgDesc,
1643
- UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE, SrcOffset,
1650
+ UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE,
1651
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_IMAGE, SrcOffset,
1644
1652
SrcExtent, DestOffset, {0 , 0 , 0 }, CopyExtent);
1645
1653
1646
1654
setType (detail::CGType::CopyImage);
@@ -1657,7 +1665,8 @@ void handler::ext_oneapi_copy(
1657
1665
MDstPtr = Dest;
1658
1666
1659
1667
detail::fill_copy_args (get_impl (), SrcImgDesc,
1660
- UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST);
1668
+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST,
1669
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_IMAGE_TO_MEM);
1661
1670
1662
1671
setType (detail::CGType::CopyImage);
1663
1672
}
@@ -1676,7 +1685,8 @@ void handler::ext_oneapi_copy(
1676
1685
MDstPtr = Dest;
1677
1686
1678
1687
detail::fill_copy_args (get_impl (), SrcImgDesc,
1679
- UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST, SrcOffset,
1688
+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST,
1689
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_IMAGE_TO_MEM, SrcOffset,
1680
1690
{0 , 0 , 0 }, DestOffset, DestExtent, CopyExtent);
1681
1691
1682
1692
setType (detail::CGType::CopyImage);
@@ -1705,11 +1715,13 @@ void handler::ext_oneapi_copy(
1705
1715
Desc.width * Desc.num_channels * detail::get_channel_size (Desc);
1706
1716
1707
1717
if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE) {
1708
- detail::fill_copy_args (get_impl (), Desc, ImageCopyFlags, HostRowPitch,
1709
- DeviceRowPitch);
1718
+ detail::fill_copy_args (get_impl (), Desc, ImageCopyFlags,
1719
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_MEM,
1720
+ HostRowPitch, DeviceRowPitch);
1710
1721
} else if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST) {
1711
- detail::fill_copy_args (get_impl (), Desc, ImageCopyFlags, DeviceRowPitch,
1712
- HostRowPitch);
1722
+ detail::fill_copy_args (get_impl (), Desc, ImageCopyFlags,
1723
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_MEM,
1724
+ DeviceRowPitch, HostRowPitch);
1713
1725
} else {
1714
1726
throw sycl::exception (make_error_code (errc::invalid),
1715
1727
" Copy Error: This copy function only performs host "
@@ -1746,10 +1758,12 @@ void handler::ext_oneapi_copy(
1746
1758
// Fill the host extent based on the type of copy.
1747
1759
if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE) {
1748
1760
detail::fill_copy_args (get_impl (), DeviceImgDesc, ImageCopyFlags,
1761
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_MEM,
1749
1762
HostRowPitch, DeviceRowPitch, SrcOffset, HostExtent,
1750
1763
DestOffset, {0 , 0 , 0 }, CopyExtent);
1751
1764
} else if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST) {
1752
1765
detail::fill_copy_args (get_impl (), DeviceImgDesc, ImageCopyFlags,
1766
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_MEM,
1753
1767
DeviceRowPitch, HostRowPitch, SrcOffset, {0 , 0 , 0 },
1754
1768
DestOffset, HostExtent, CopyExtent);
1755
1769
} else {
@@ -1774,7 +1788,8 @@ void handler::ext_oneapi_copy(
1774
1788
MDstPtr = reinterpret_cast <void *>(Dest.raw_handle );
1775
1789
1776
1790
detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc,
1777
- UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE);
1791
+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE,
1792
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_IMAGE_TO_IMAGE);
1778
1793
1779
1794
setType (detail::CGType::CopyImage);
1780
1795
}
@@ -1794,8 +1809,10 @@ void handler::ext_oneapi_copy(
1794
1809
MDstPtr = reinterpret_cast <void *>(Dest.raw_handle );
1795
1810
1796
1811
detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc,
1797
- UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE, SrcOffset,
1798
- {0 , 0 , 0 }, DestOffset, {0 , 0 , 0 }, CopyExtent);
1812
+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE,
1813
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_IMAGE_TO_IMAGE,
1814
+ SrcOffset, {0 , 0 , 0 }, DestOffset, {0 , 0 , 0 },
1815
+ CopyExtent);
1799
1816
1800
1817
setType (detail::CGType::CopyImage);
1801
1818
}
@@ -1813,7 +1830,8 @@ void handler::ext_oneapi_copy(
1813
1830
MDstPtr = Dest;
1814
1831
1815
1832
detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc,
1816
- UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE, 0 ,
1833
+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE,
1834
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_IMAGE_TO_MEM, 0 ,
1817
1835
DestRowPitch);
1818
1836
1819
1837
setType (detail::CGType::CopyImage);
@@ -1834,7 +1852,8 @@ void handler::ext_oneapi_copy(
1834
1852
MDstPtr = Dest;
1835
1853
1836
1854
detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc,
1837
- UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE, 0 ,
1855
+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE,
1856
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_IMAGE_TO_MEM, 0 ,
1838
1857
DestRowPitch, SrcOffset, {0 , 0 , 0 }, DestOffset,
1839
1858
{0 , 0 , 0 }, CopyExtent);
1840
1859
@@ -1854,8 +1873,9 @@ void handler::ext_oneapi_copy(
1854
1873
MDstPtr = reinterpret_cast <void *>(Dest.raw_handle );
1855
1874
1856
1875
detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc,
1857
- UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE, SrcRowPitch,
1858
- 0 );
1876
+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE,
1877
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_IMAGE,
1878
+ SrcRowPitch, 0 );
1859
1879
1860
1880
setType (detail::CGType::CopyImage);
1861
1881
}
@@ -1875,9 +1895,10 @@ void handler::ext_oneapi_copy(
1875
1895
MDstPtr = reinterpret_cast <void *>(Dest.raw_handle );
1876
1896
1877
1897
detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc,
1878
- UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE, SrcRowPitch,
1879
- 0 , SrcOffset, {0 , 0 , 0 }, DestOffset, {0 , 0 , 0 },
1880
- CopyExtent);
1898
+ UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE,
1899
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_IMAGE,
1900
+ SrcRowPitch, 0 , SrcOffset, {0 , 0 , 0 }, DestOffset,
1901
+ {0 , 0 , 0 }, CopyExtent);
1881
1902
1882
1903
setType (detail::CGType::CopyImage);
1883
1904
}
@@ -1904,6 +1925,7 @@ void handler::ext_oneapi_copy(
1904
1925
if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE ||
1905
1926
ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_HOST_TO_HOST) {
1906
1927
detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc, ImageCopyFlags,
1928
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_MEM,
1907
1929
SrcRowPitch, DestRowPitch);
1908
1930
} else {
1909
1931
throw sycl::exception (make_error_code (errc::invalid),
@@ -1933,6 +1955,7 @@ void handler::ext_oneapi_copy(
1933
1955
if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE ||
1934
1956
ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_HOST_TO_HOST) {
1935
1957
detail::fill_copy_args (get_impl (), SrcImgDesc, DestImgDesc, ImageCopyFlags,
1958
+ UR_EXP_IMAGE_COPY_INPUT_TYPES_MEM_TO_MEM,
1936
1959
SrcRowPitch, DestRowPitch, SrcOffset, {0 , 0 , 0 },
1937
1960
DestOffset, {0 , 0 , 0 }, CopyExtent);
1938
1961
} else {
0 commit comments