Skip to content

Commit 474a7d5

Browse files
committed
review requests.
Signed-off-by: Chris Perkins <[email protected]>
1 parent 9ed2ffe commit 474a7d5

File tree

2 files changed

+89
-98
lines changed

2 files changed

+89
-98
lines changed

sycl/include/CL/sycl/detail/image_impl.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,10 @@ class __SYCL_EXPORT image_impl final : public SYCLMemObjT {
250250

251251
// MRange<> is [width], [width,height], or [width,height,depth] (which
252252
// is different than MAccessRange, etc in bufffers)
253-
static constexpr int x_term_pos = 0, y_term_pos = 1, z_term_pos = 2;
254-
Desc.image_width = MRange[x_term_pos];
255-
Desc.image_height = Dimensions > 1 ? MRange[y_term_pos] : 1;
256-
Desc.image_depth = Dimensions > 2 ? MRange[z_term_pos] : 1;
253+
static constexpr int XTermPos = 0, YTermPos = 1, ZTermPos = 2;
254+
Desc.image_width = MRange[XTermPos];
255+
Desc.image_height = Dimensions > 1 ? MRange[YTermPos] : 1;
256+
Desc.image_depth = Dimensions > 2 ? MRange[ZTermPos] : 1;
257257

258258
// TODO handle cases with IMAGE1D_ARRAY and IMAGE2D_ARRAY
259259
Desc.image_array_size = 0;

sycl/source/detail/memory_manager.cpp

Lines changed: 85 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -244,37 +244,33 @@ void *MemoryManager::allocateMemSubBuffer(ContextImplPtr TargetContext,
244244
return NewMem;
245245
}
246246

247-
struct term_positions {
248-
int x_term;
249-
int y_term;
250-
int z_term;
247+
struct TermPositions {
248+
int XTerm;
249+
int YTerm;
250+
int ZTerm;
251251
};
252-
void prepTermPositions(term_positions &pos, int Dimensions,
252+
void prepTermPositions(TermPositions &pos, int Dimensions,
253253
detail::SYCLMemObjI::MemObjType type) {
254254
// For buffers, the offsets/ranges coming from accessor are always
255255
// id<3>/range<3> But their organization varies by dimension:
256256
// 1 ==> {width, 1, 1}
257257
// 2 ==> {height, width, 1}
258258
// 3 ==> {depth, height, width}
259-
// Some callers enqueue 0 as DimDst/DimSrc.
259+
// Some callers schedule 0 as DimDst/DimSrc.
260260

261261
if (type == detail::SYCLMemObjI::MemObjType::BUFFER) {
262262
if (Dimensions == 3) {
263-
pos.x_term = 2, pos.y_term = 1, pos.z_term = 0;
263+
pos.XTerm = 2, pos.YTerm = 1, pos.ZTerm = 0;
264264
} else if (Dimensions == 2) {
265-
pos.x_term = 1;
266-
pos.y_term = 0;
267-
pos.z_term = 2;
265+
pos.XTerm = 1, pos.YTerm = 0, pos.ZTerm = 2;
268266
} else { // Dimension is 1 or 0
269-
pos.x_term = 0;
270-
pos.y_term = 1;
271-
pos.z_term = 2;
267+
pos.XTerm = 0, pos.YTerm = 1, pos.ZTerm = 2;
272268
}
273269
} else { // While range<>/id<> use by images is different than buffers, it's
274270
// consistent with their accessors.
275-
pos.x_term = 0;
276-
pos.y_term = 1;
277-
pos.z_term = 2;
271+
pos.XTerm = 0;
272+
pos.YTerm = 1;
273+
pos.ZTerm = 2;
278274
}
279275
}
280276

@@ -292,41 +288,37 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr,
292288
const detail::plugin &Plugin = TgtQueue->getPlugin();
293289

294290
detail::SYCLMemObjI::MemObjType MemType = SYCLMemObj->getType();
295-
term_positions SrcPos, DstPos;
291+
TermPositions SrcPos, DstPos;
296292
prepTermPositions(SrcPos, DimSrc, MemType);
297293
prepTermPositions(DstPos, DimDst, MemType);
298294

299-
// If the Dimension is 1, and being called by ~SYCLMemObjT,
300-
// thenDstAccessRange[0] and DstSize[0] will already sized to bytes with
301-
// DstElemSize of 1.
302-
size_t DstXOffBytes = DstOffset[DstPos.x_term] * DstElemSize;
303-
size_t SrcXOffBytes = SrcOffset[SrcPos.x_term] * SrcElemSize;
304-
size_t DstARWidthBytes = DstAccessRange[DstPos.x_term] * DstElemSize;
305-
// size_t SrcARWidthBytes = SrcAccessRange[SrcPos.x_term] * SrcElemSize;
306-
size_t DstSzWidthBytes = DstSize[DstPos.x_term] * DstElemSize;
307-
size_t SrcSzWidthBytes = SrcSize[SrcPos.x_term] * SrcElemSize;
295+
size_t DstXOffBytes = DstOffset[DstPos.XTerm] * DstElemSize;
296+
size_t SrcXOffBytes = SrcOffset[SrcPos.XTerm] * SrcElemSize;
297+
size_t DstAccessRangeWidthBytes = DstAccessRange[DstPos.XTerm] * DstElemSize;
298+
size_t DstSzWidthBytes = DstSize[DstPos.XTerm] * DstElemSize;
299+
size_t SrcSzWidthBytes = SrcSize[SrcPos.XTerm] * SrcElemSize;
308300

309301
if (MemType == detail::SYCLMemObjI::MemObjType::BUFFER) {
310302
if (1 == DimDst && 1 == DimSrc) {
311303
Plugin.call<PiApiKind::piEnqueueMemBufferWrite>(
312304
Queue, DstMem,
313-
/*blocking_write=*/CL_FALSE, DstXOffBytes, DstARWidthBytes,
305+
/*blocking_write=*/CL_FALSE, DstXOffBytes, DstAccessRangeWidthBytes,
314306
SrcMem + SrcXOffBytes, DepEvents.size(), DepEvents.data(), &OutEvent);
315307
} else {
316308
size_t BufferRowPitch = (1 == DimDst) ? 0 : DstSzWidthBytes;
317309
size_t BufferSlicePitch =
318-
(3 == DimDst) ? DstSzWidthBytes * DstSize[DstPos.y_term] : 0;
310+
(3 == DimDst) ? DstSzWidthBytes * DstSize[DstPos.YTerm] : 0;
319311
size_t HostRowPitch = (1 == DimSrc) ? 0 : SrcSzWidthBytes;
320312
size_t HostSlicePitch =
321-
(3 == DimSrc) ? SrcSzWidthBytes * SrcSize[SrcPos.y_term] : 0;
313+
(3 == DimSrc) ? SrcSzWidthBytes * SrcSize[SrcPos.YTerm] : 0;
322314

323315
pi_buff_rect_offset_struct BufferOffset{
324-
DstXOffBytes, DstOffset[DstPos.y_term], DstOffset[DstPos.z_term]};
316+
DstXOffBytes, DstOffset[DstPos.YTerm], DstOffset[DstPos.ZTerm]};
325317
pi_buff_rect_offset_struct HostOffset{
326-
SrcXOffBytes, SrcOffset[SrcPos.y_term], SrcOffset[SrcPos.z_term]};
327-
pi_buff_rect_region_struct RectRegion{DstARWidthBytes,
328-
DstAccessRange[DstPos.y_term],
329-
DstAccessRange[DstPos.z_term]};
318+
SrcXOffBytes, SrcOffset[SrcPos.YTerm], SrcOffset[SrcPos.ZTerm]};
319+
pi_buff_rect_region_struct RectRegion{DstAccessRangeWidthBytes,
320+
DstAccessRange[DstPos.YTerm],
321+
DstAccessRange[DstPos.ZTerm]};
330322

331323
Plugin.call<PiApiKind::piEnqueueMemBufferWriteRect>(
332324
Queue, DstMem,
@@ -337,14 +329,14 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr,
337329
} else {
338330
size_t InputRowPitch = (1 == DimDst) ? 0 : DstSzWidthBytes;
339331
size_t InputSlicePitch =
340-
(3 == DimDst) ? DstSzWidthBytes * DstSize[DstPos.y_term] : 0;
332+
(3 == DimDst) ? DstSzWidthBytes * DstSize[DstPos.YTerm] : 0;
341333

342-
pi_image_offset_struct Origin{DstOffset[DstPos.x_term],
343-
DstOffset[DstPos.y_term],
344-
DstOffset[DstPos.z_term]};
345-
pi_image_region_struct Region{DstAccessRange[DstPos.x_term],
346-
DstAccessRange[DstPos.y_term],
347-
DstAccessRange[DstPos.z_term]};
334+
pi_image_offset_struct Origin{DstOffset[DstPos.XTerm],
335+
DstOffset[DstPos.YTerm],
336+
DstOffset[DstPos.ZTerm]};
337+
pi_image_region_struct Region{DstAccessRange[DstPos.XTerm],
338+
DstAccessRange[DstPos.YTerm],
339+
DstAccessRange[DstPos.ZTerm]};
348340

349341
Plugin.call<PiApiKind::piEnqueueMemImageWrite>(
350342
Queue, DstMem,
@@ -367,41 +359,43 @@ void copyD2H(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue,
367359
const detail::plugin &Plugin = SrcQueue->getPlugin();
368360

369361
detail::SYCLMemObjI::MemObjType MemType = SYCLMemObj->getType();
370-
term_positions SrcPos, DstPos;
362+
TermPositions SrcPos, DstPos;
371363
prepTermPositions(SrcPos, DimSrc, MemType);
372364
prepTermPositions(DstPos, DimDst, MemType);
373365

374-
// If the Dimension is 1, and being called by ~SYCLMemObjT,
375-
// thenDstAccessRange[0] and DstSize[0] will already sized to bytes with
376-
// DstElemSize of 1.
377-
size_t DstXOffBytes = DstOffset[DstPos.x_term] * DstElemSize;
378-
size_t SrcXOffBytes = SrcOffset[SrcPos.x_term] * SrcElemSize;
379-
// size_t DstARWidthBytes = DstAccessRange[DstPos.x_term] * DstElemSize;
380-
size_t SrcARWidthBytes = SrcAccessRange[SrcPos.x_term] * SrcElemSize;
381-
size_t DstSzWidthBytes = DstSize[DstPos.x_term] * DstElemSize;
382-
size_t SrcSzWidthBytes = SrcSize[SrcPos.x_term] * SrcElemSize;
366+
// For a given buffer, the various mem copy routines (copyD2H, copyH2D,
367+
// copyD2D) will usually have the same values for AccessRange, Size,
368+
// Dimension, Offset, etc. EXCEPT when the dtor for ~SYCLMemObjT is called.
369+
// Essentially, it schedules a copyBack of chars thus in copyD2H the
370+
// Dimension will then be 1 and DstAccessRange[0] and DstSize[0] will be
371+
// sized to bytes with a DstElemSize of 1.
372+
size_t DstXOffBytes = DstOffset[DstPos.XTerm] * DstElemSize;
373+
size_t SrcXOffBytes = SrcOffset[SrcPos.XTerm] * SrcElemSize;
374+
size_t SrcAccessRangeWidthBytes = SrcAccessRange[SrcPos.XTerm] * SrcElemSize;
375+
size_t DstSzWidthBytes = DstSize[DstPos.XTerm] * DstElemSize;
376+
size_t SrcSzWidthBytes = SrcSize[SrcPos.XTerm] * SrcElemSize;
383377

384378
if (MemType == detail::SYCLMemObjI::MemObjType::BUFFER) {
385379
if (1 == DimDst && 1 == DimSrc) {
386380
Plugin.call<PiApiKind::piEnqueueMemBufferRead>(
387381
Queue, SrcMem,
388-
/*blocking_read=*/CL_FALSE, SrcXOffBytes, SrcARWidthBytes,
382+
/*blocking_read=*/CL_FALSE, SrcXOffBytes, SrcAccessRangeWidthBytes,
389383
DstMem + DstXOffBytes, DepEvents.size(), DepEvents.data(), &OutEvent);
390384
} else {
391385
size_t BufferRowPitch = (1 == DimSrc) ? 0 : SrcSzWidthBytes;
392386
size_t BufferSlicePitch =
393-
(3 == DimSrc) ? SrcSzWidthBytes * SrcSize[SrcPos.y_term] : 0;
387+
(3 == DimSrc) ? SrcSzWidthBytes * SrcSize[SrcPos.YTerm] : 0;
394388
size_t HostRowPitch = (1 == DimDst) ? 0 : DstSzWidthBytes;
395389
size_t HostSlicePitch =
396-
(3 == DimDst) ? DstSzWidthBytes * DstSize[DstPos.y_term] : 0;
390+
(3 == DimDst) ? DstSzWidthBytes * DstSize[DstPos.YTerm] : 0;
397391

398392
pi_buff_rect_offset_struct BufferOffset{
399-
SrcXOffBytes, SrcOffset[SrcPos.y_term], SrcOffset[SrcPos.z_term]};
393+
SrcXOffBytes, SrcOffset[SrcPos.YTerm], SrcOffset[SrcPos.ZTerm]};
400394
pi_buff_rect_offset_struct HostOffset{
401-
DstXOffBytes, DstOffset[DstPos.y_term], DstOffset[DstPos.z_term]};
402-
pi_buff_rect_region_struct RectRegion{SrcARWidthBytes,
403-
SrcAccessRange[SrcPos.y_term],
404-
SrcAccessRange[SrcPos.z_term]};
395+
DstXOffBytes, DstOffset[DstPos.YTerm], DstOffset[DstPos.ZTerm]};
396+
pi_buff_rect_region_struct RectRegion{SrcAccessRangeWidthBytes,
397+
SrcAccessRange[SrcPos.YTerm],
398+
SrcAccessRange[SrcPos.ZTerm]};
405399

406400
Plugin.call<PiApiKind::piEnqueueMemBufferReadRect>(
407401
Queue, SrcMem,
@@ -412,14 +406,14 @@ void copyD2H(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue,
412406
} else {
413407
size_t RowPitch = (1 == DimSrc) ? 0 : SrcSzWidthBytes;
414408
size_t SlicePitch =
415-
(3 == DimSrc) ? SrcSzWidthBytes * SrcSize[SrcPos.y_term] : 0;
409+
(3 == DimSrc) ? SrcSzWidthBytes * SrcSize[SrcPos.YTerm] : 0;
416410

417-
pi_image_offset_struct Offset{SrcOffset[SrcPos.x_term],
418-
SrcOffset[SrcPos.y_term],
419-
SrcOffset[SrcPos.z_term]};
420-
pi_image_region_struct Region{SrcAccessRange[SrcPos.x_term],
421-
SrcAccessRange[SrcPos.y_term],
422-
SrcAccessRange[SrcPos.z_term]};
411+
pi_image_offset_struct Offset{SrcOffset[SrcPos.XTerm],
412+
SrcOffset[SrcPos.YTerm],
413+
SrcOffset[SrcPos.ZTerm]};
414+
pi_image_region_struct Region{SrcAccessRange[SrcPos.XTerm],
415+
SrcAccessRange[SrcPos.YTerm],
416+
SrcAccessRange[SrcPos.ZTerm]};
423417

424418
Plugin.call<PiApiKind::piEnqueueMemImageRead>(
425419
Queue, SrcMem, CL_FALSE, &Offset, &Region, RowPitch, SlicePitch, DstMem,
@@ -440,61 +434,58 @@ void copyD2D(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue,
440434
const detail::plugin &Plugin = SrcQueue->getPlugin();
441435

442436
detail::SYCLMemObjI::MemObjType MemType = SYCLMemObj->getType();
443-
term_positions SrcPos, DstPos;
437+
TermPositions SrcPos, DstPos;
444438
prepTermPositions(SrcPos, DimSrc, MemType);
445439
prepTermPositions(DstPos, DimDst, MemType);
446440

447-
// If the Dimension is 1, and being called by ~SYCLMemObjT,
448-
// thenDstAccessRange[0] and DstSize[0] will already sized to bytes with
449-
// DstElemSize of 1.
450-
size_t DstXOffBytes = DstOffset[DstPos.x_term] * DstElemSize;
451-
size_t SrcXOffBytes = SrcOffset[SrcPos.x_term] * SrcElemSize;
452-
// size_t DstARWidthBytes = DstAccessRange[DstPos.x_term] * DstElemSize;
453-
size_t SrcARWidthBytes = SrcAccessRange[SrcPos.x_term] * SrcElemSize;
454-
size_t DstSzWidthBytes = DstSize[DstPos.x_term] * DstElemSize;
455-
size_t SrcSzWidthBytes = SrcSize[SrcPos.x_term] * SrcElemSize;
441+
size_t DstXOffBytes = DstOffset[DstPos.XTerm] * DstElemSize;
442+
size_t SrcXOffBytes = SrcOffset[SrcPos.XTerm] * SrcElemSize;
443+
size_t SrcAccessRangeWidthBytes = SrcAccessRange[SrcPos.XTerm] * SrcElemSize;
444+
size_t DstSzWidthBytes = DstSize[DstPos.XTerm] * DstElemSize;
445+
size_t SrcSzWidthBytes = SrcSize[SrcPos.XTerm] * SrcElemSize;
456446

457447
if (MemType == detail::SYCLMemObjI::MemObjType::BUFFER) {
458448
if (1 == DimDst && 1 == DimSrc) {
459449
Plugin.call<PiApiKind::piEnqueueMemBufferCopy>(
460-
Queue, SrcMem, DstMem, SrcXOffBytes, DstXOffBytes, SrcARWidthBytes,
461-
DepEvents.size(), DepEvents.data(), &OutEvent);
450+
Queue, SrcMem, DstMem, SrcXOffBytes, DstXOffBytes,
451+
SrcAccessRangeWidthBytes, DepEvents.size(), DepEvents.data(),
452+
&OutEvent);
462453
} else {
463454
// passing 0 for pitches not allowed. Because clEnqueueCopyBufferRect will
464455
// calculate both src and dest pitch using region[0], which is not correct
465456
// if src and dest are not the same size.
466457
size_t SrcRowPitch = SrcSzWidthBytes;
467458
size_t SrcSlicePitch = (DimSrc <= 1)
468459
? SrcSzWidthBytes
469-
: SrcSzWidthBytes * SrcSize[SrcPos.y_term];
460+
: SrcSzWidthBytes * SrcSize[SrcPos.YTerm];
470461
size_t DstRowPitch = DstSzWidthBytes;
471462
size_t DstSlicePitch = (DimDst <= 1)
472463
? DstSzWidthBytes
473-
: DstSzWidthBytes * DstSize[DstPos.y_term];
464+
: DstSzWidthBytes * DstSize[DstPos.YTerm];
474465

475466
pi_buff_rect_offset_struct SrcOrigin{
476-
SrcXOffBytes, SrcOffset[SrcPos.y_term], SrcOffset[SrcPos.z_term]};
467+
SrcXOffBytes, SrcOffset[SrcPos.YTerm], SrcOffset[SrcPos.ZTerm]};
477468
pi_buff_rect_offset_struct DstOrigin{
478-
DstXOffBytes, DstOffset[DstPos.y_term], DstOffset[DstPos.z_term]};
479-
pi_buff_rect_region_struct Region{SrcARWidthBytes,
480-
SrcAccessRange[SrcPos.y_term],
481-
SrcAccessRange[SrcPos.z_term]};
469+
DstXOffBytes, DstOffset[DstPos.YTerm], DstOffset[DstPos.ZTerm]};
470+
pi_buff_rect_region_struct Region{SrcAccessRangeWidthBytes,
471+
SrcAccessRange[SrcPos.YTerm],
472+
SrcAccessRange[SrcPos.ZTerm]};
482473

483474
Plugin.call<PiApiKind::piEnqueueMemBufferCopyRect>(
484475
Queue, SrcMem, DstMem, &SrcOrigin, &DstOrigin, &Region, SrcRowPitch,
485476
SrcSlicePitch, DstRowPitch, DstSlicePitch, DepEvents.size(),
486477
DepEvents.data(), &OutEvent);
487478
}
488479
} else {
489-
pi_image_offset_struct SrcOrigin{SrcOffset[SrcPos.x_term],
490-
SrcOffset[SrcPos.y_term],
491-
SrcOffset[SrcPos.z_term]};
492-
pi_image_offset_struct DstOrigin{DstOffset[DstPos.x_term],
493-
DstOffset[DstPos.y_term],
494-
DstOffset[DstPos.z_term]};
495-
pi_image_region_struct Region{SrcAccessRange[SrcPos.x_term],
496-
SrcAccessRange[SrcPos.y_term],
497-
SrcAccessRange[SrcPos.z_term]};
480+
pi_image_offset_struct SrcOrigin{SrcOffset[SrcPos.XTerm],
481+
SrcOffset[SrcPos.YTerm],
482+
SrcOffset[SrcPos.ZTerm]};
483+
pi_image_offset_struct DstOrigin{DstOffset[DstPos.XTerm],
484+
DstOffset[DstPos.YTerm],
485+
DstOffset[DstPos.ZTerm]};
486+
pi_image_region_struct Region{SrcAccessRange[SrcPos.XTerm],
487+
SrcAccessRange[SrcPos.YTerm],
488+
SrcAccessRange[SrcPos.ZTerm]};
498489

499490
Plugin.call<PiApiKind::piEnqueueMemImageCopy>(
500491
Queue, SrcMem, DstMem, &SrcOrigin, &DstOrigin, &Region,

0 commit comments

Comments
 (0)