@@ -1518,10 +1518,20 @@ void MemoryManager::ext_oneapi_copyD2H_cmd_buffer(
1518
1518
}
1519
1519
1520
1520
if (1 == DimDst && 1 == DimSrc) {
1521
- Plugin->call <PiApiKind::piextCommandBufferMemBufferRead>(
1522
- CommandBuffer, sycl::detail::pi::cast<sycl::detail::pi::PiMem>(SrcMem),
1523
- SrcXOffBytes, SrcAccessRangeWidthBytes, DstMem + DstXOffBytes,
1524
- Deps.size (), Deps.data (), OutSyncPoint);
1521
+ pi_result Result =
1522
+ Plugin->call_nocheck <PiApiKind::piextCommandBufferMemBufferRead>(
1523
+ CommandBuffer,
1524
+ sycl::detail::pi::cast<sycl::detail::pi::PiMem>(SrcMem),
1525
+ SrcXOffBytes, SrcAccessRangeWidthBytes, DstMem + DstXOffBytes,
1526
+ Deps.size (), Deps.data (), OutSyncPoint);
1527
+
1528
+ if (Result == PI_ERROR_INVALID_OPERATION) {
1529
+ throw sycl::exception (
1530
+ sycl::make_error_code (sycl::errc::feature_not_supported),
1531
+ " Device-to-host buffer copy command not supported by graph backend" );
1532
+ } else {
1533
+ Plugin->checkPiResult (Result);
1534
+ }
1525
1535
} else {
1526
1536
size_t BufferRowPitch = (1 == DimSrc) ? 0 : SrcSzWidthBytes;
1527
1537
size_t BufferSlicePitch =
@@ -1538,11 +1548,20 @@ void MemoryManager::ext_oneapi_copyD2H_cmd_buffer(
1538
1548
SrcAccessRange[SrcPos.YTerm ],
1539
1549
SrcAccessRange[SrcPos.ZTerm ]};
1540
1550
1541
- Plugin->call <PiApiKind::piextCommandBufferMemBufferReadRect>(
1542
- CommandBuffer, sycl::detail::pi::cast<sycl::detail::pi::PiMem>(SrcMem),
1543
- &BufferOffset, &HostOffset, &RectRegion, BufferRowPitch,
1544
- BufferSlicePitch, HostRowPitch, HostSlicePitch, DstMem, Deps.size (),
1545
- Deps.data (), OutSyncPoint);
1551
+ pi_result Result =
1552
+ Plugin->call_nocheck <PiApiKind::piextCommandBufferMemBufferReadRect>(
1553
+ CommandBuffer,
1554
+ sycl::detail::pi::cast<sycl::detail::pi::PiMem>(SrcMem),
1555
+ &BufferOffset, &HostOffset, &RectRegion, BufferRowPitch,
1556
+ BufferSlicePitch, HostRowPitch, HostSlicePitch, DstMem, Deps.size (),
1557
+ Deps.data (), OutSyncPoint);
1558
+ if (Result == PI_ERROR_INVALID_OPERATION) {
1559
+ throw sycl::exception (
1560
+ sycl::make_error_code (sycl::errc::feature_not_supported),
1561
+ " Device-to-host buffer copy command not supported by graph backend" );
1562
+ } else {
1563
+ Plugin->checkPiResult (Result);
1564
+ }
1546
1565
}
1547
1566
}
1548
1567
@@ -1576,10 +1595,20 @@ void MemoryManager::ext_oneapi_copyH2D_cmd_buffer(
1576
1595
}
1577
1596
1578
1597
if (1 == DimDst && 1 == DimSrc) {
1579
- Plugin->call <PiApiKind::piextCommandBufferMemBufferWrite>(
1580
- CommandBuffer, sycl::detail::pi::cast<sycl::detail::pi::PiMem>(DstMem),
1581
- DstXOffBytes, DstAccessRangeWidthBytes, SrcMem + SrcXOffBytes,
1582
- Deps.size (), Deps.data (), OutSyncPoint);
1598
+ pi_result Result =
1599
+ Plugin->call_nocheck <PiApiKind::piextCommandBufferMemBufferWrite>(
1600
+ CommandBuffer,
1601
+ sycl::detail::pi::cast<sycl::detail::pi::PiMem>(DstMem),
1602
+ DstXOffBytes, DstAccessRangeWidthBytes, SrcMem + SrcXOffBytes,
1603
+ Deps.size (), Deps.data (), OutSyncPoint);
1604
+
1605
+ if (Result == PI_ERROR_INVALID_OPERATION) {
1606
+ throw sycl::exception (
1607
+ sycl::make_error_code (sycl::errc::feature_not_supported),
1608
+ " Host-to-device buffer copy command not supported by graph backend" );
1609
+ } else {
1610
+ Plugin->checkPiResult (Result);
1611
+ }
1583
1612
} else {
1584
1613
size_t BufferRowPitch = (1 == DimDst) ? 0 : DstSzWidthBytes;
1585
1614
size_t BufferSlicePitch =
@@ -1596,11 +1625,21 @@ void MemoryManager::ext_oneapi_copyH2D_cmd_buffer(
1596
1625
DstAccessRange[DstPos.YTerm ],
1597
1626
DstAccessRange[DstPos.ZTerm ]};
1598
1627
1599
- Plugin->call <PiApiKind::piextCommandBufferMemBufferWriteRect>(
1600
- CommandBuffer, sycl::detail::pi::cast<sycl::detail::pi::PiMem>(DstMem),
1601
- &BufferOffset, &HostOffset, &RectRegion, BufferRowPitch,
1602
- BufferSlicePitch, HostRowPitch, HostSlicePitch, SrcMem, Deps.size (),
1603
- Deps.data (), OutSyncPoint);
1628
+ pi_result Result =
1629
+ Plugin->call_nocheck <PiApiKind::piextCommandBufferMemBufferWriteRect>(
1630
+ CommandBuffer,
1631
+ sycl::detail::pi::cast<sycl::detail::pi::PiMem>(DstMem),
1632
+ &BufferOffset, &HostOffset, &RectRegion, BufferRowPitch,
1633
+ BufferSlicePitch, HostRowPitch, HostSlicePitch, SrcMem, Deps.size (),
1634
+ Deps.data (), OutSyncPoint);
1635
+
1636
+ if (Result == PI_ERROR_INVALID_OPERATION) {
1637
+ throw sycl::exception (
1638
+ sycl::make_error_code (sycl::errc::feature_not_supported),
1639
+ " Host-to-device buffer copy command not supported by graph backend" );
1640
+ } else {
1641
+ Plugin->checkPiResult (Result);
1642
+ }
1604
1643
}
1605
1644
}
1606
1645
@@ -1614,9 +1653,17 @@ void MemoryManager::ext_oneapi_copy_usm_cmd_buffer(
1614
1653
PI_ERROR_INVALID_VALUE);
1615
1654
1616
1655
const PluginPtr &Plugin = Context->getPlugin ();
1617
- Plugin->call <PiApiKind::piextCommandBufferMemcpyUSM>(
1618
- CommandBuffer, DstMem, SrcMem, Len, Deps.size (), Deps.data (),
1619
- OutSyncPoint);
1656
+ pi_result Result =
1657
+ Plugin->call_nocheck <PiApiKind::piextCommandBufferMemcpyUSM>(
1658
+ CommandBuffer, DstMem, SrcMem, Len, Deps.size (), Deps.data (),
1659
+ OutSyncPoint);
1660
+ if (Result == PI_ERROR_INVALID_OPERATION) {
1661
+ throw sycl::exception (
1662
+ sycl::make_error_code (sycl::errc::feature_not_supported),
1663
+ " USM copy command not supported by graph backend" );
1664
+ } else {
1665
+ Plugin->checkPiResult (Result);
1666
+ }
1620
1667
}
1621
1668
1622
1669
void MemoryManager::copy_image_bindless (
0 commit comments