@@ -460,13 +460,23 @@ void copyD2D(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue,
460
460
Queue, SrcMem, DstMem, SrcXOffBytes, DstXOffBytes, SrcARWidthBytes,
461
461
DepEvents.size (), DepEvents.data (), &OutEvent);
462
462
} else {
463
- size_t SrcRowPitch = (1 == DimSrc) ? 0 : SrcSzWidthBytes;
464
- size_t SrcSlicePitch =
465
- (3 == DimSrc) ? SrcSzWidthBytes * SrcSize[SrcPos.y_term ] : 0 ;
466
-
467
- size_t DstRowPitch = (1 == DimDst) ? 0 : DstSzWidthBytes;
468
- size_t DstSlicePitch =
469
- (3 == DimDst) ? DstSzWidthBytes * DstSize[DstPos.y_term ] : 0 ;
463
+ // size_t SrcRowPitch = (1 == DimSrc) ? 0 : SrcSzWidthBytes;
464
+ // size_t SrcSlicePitch = (3 == DimSrc) ? SrcSzWidthBytes *
465
+ // SrcSize[SrcPos.y_term] : 0; size_t DstRowPitch = (1 == DimDst) ? 0 :
466
+ // DstSzWidthBytes; size_t DstSlicePitch = (3 == DimDst) ? DstSzWidthBytes
467
+ // * DstSize[DstPos.y_term] : 0;
468
+
469
+ // passing 0 for pitches not allowed. Because clEnqueueCopyBufferRect will
470
+ // calculate both src and dest pitch using region[0], which is not correct
471
+ // if src and dest are not the same size.
472
+ size_t SrcRowPitch = SrcSzWidthBytes;
473
+ size_t SrcSlicePitch = (DimSrc <= 1 )
474
+ ? SrcSzWidthBytes
475
+ : SrcSzWidthBytes * SrcSize[SrcPos.y_term ];
476
+ size_t DstRowPitch = DstSzWidthBytes;
477
+ size_t DstSlicePitch = (DimDst <= 1 )
478
+ ? DstSzWidthBytes
479
+ : DstSzWidthBytes * DstSize[DstPos.y_term ];
470
480
471
481
pi_buff_rect_offset_struct SrcOrigin{
472
482
SrcXOffBytes, SrcOffset[SrcPos.y_term ], SrcOffset[SrcPos.z_term ]};
0 commit comments