14
14
#include " ur.hpp"
15
15
16
16
#include " ../helpers/kernel_helpers.hpp"
17
+ #include " ../helpers/memory_helpers.hpp"
17
18
#include " ../program.hpp"
18
19
19
20
#include " ../common/latency_tracker.hpp"
@@ -310,26 +311,55 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferWrite(
310
311
numEventsInWaitList, phEventWaitList, phEvent);
311
312
}
312
313
314
+ ur_result_t ur_queue_immediate_in_order_t::enqueueRegionCopy (
315
+ void *srcPtr, void *dstPtr, bool blocking, ur_rect_offset_t srcOrigin,
316
+ ur_rect_offset_t dstOrigin, ur_rect_region_t region, size_t srcRowPitch,
317
+ size_t srcSlicePitch, size_t dstRowPitch, size_t dstSlicePitch,
318
+ uint32_t numEventsInWaitList, const ur_event_handle_t *phEventWaitList,
319
+ ur_event_handle_t *phEvent) {
320
+ std::scoped_lock<ur_shared_mutex> Lock (this ->Mutex );
321
+
322
+ auto handler = getCommandListHandlerForCopy ();
323
+ auto signalEvent = getSignalEvent (handler, phEvent);
324
+
325
+ auto [pWaitEvents, numWaitEvents] =
326
+ getWaitListView (phEventWaitList, numEventsInWaitList, handler);
327
+
328
+ auto zeParams = ur2zeRegionParams (srcOrigin, dstOrigin, region, srcRowPitch,
329
+ dstRowPitch, srcSlicePitch, dstSlicePitch);
330
+
331
+ ZE2UR_CALL (zeCommandListAppendMemoryCopyRegion,
332
+ (handler->commandList .get (), dstPtr, &zeParams.dstRegion ,
333
+ zeParams.dstPitch , zeParams.dstSlicePitch , srcPtr,
334
+ &zeParams.srcRegion , zeParams.srcPitch , zeParams.srcSlicePitch ,
335
+ signalEvent, numWaitEvents, pWaitEvents));
336
+
337
+ if (blocking) {
338
+ ZE2UR_CALL (zeCommandListHostSynchronize,
339
+ (handler->commandList .get (), UINT64_MAX));
340
+ lastHandler = nullptr ;
341
+ } else {
342
+ lastHandler = handler;
343
+ }
344
+
345
+ return UR_RESULT_SUCCESS;
346
+ }
347
+
313
348
ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferReadRect (
314
349
ur_mem_handle_t hBuffer, bool blockingRead, ur_rect_offset_t bufferOrigin,
315
350
ur_rect_offset_t hostOrigin, ur_rect_region_t region, size_t bufferRowPitch,
316
351
size_t bufferSlicePitch, size_t hostRowPitch, size_t hostSlicePitch,
317
352
void *pDst, uint32_t numEventsInWaitList,
318
353
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent) {
319
- std::ignore = hBuffer;
320
- std::ignore = blockingRead;
321
- std::ignore = bufferOrigin;
322
- std::ignore = hostOrigin;
323
- std::ignore = region;
324
- std::ignore = bufferRowPitch;
325
- std::ignore = bufferSlicePitch;
326
- std::ignore = hostRowPitch;
327
- std::ignore = hostSlicePitch;
328
- std::ignore = pDst;
329
- std::ignore = numEventsInWaitList;
330
- std::ignore = phEventWaitList;
331
- std::ignore = phEvent;
332
- return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
354
+ auto srcPtr = ur_cast<char *>(hBuffer->getPtr (hDevice));
355
+
356
+ TRACK_SCOPE_LATENCY (
357
+ " ur_queue_immediate_in_order_t::enqueueMemBufferReadRect" );
358
+
359
+ return enqueueRegionCopy (srcPtr, pDst, blockingRead, bufferOrigin, hostOrigin,
360
+ region, bufferRowPitch, bufferSlicePitch,
361
+ hostRowPitch, hostSlicePitch, numEventsInWaitList,
362
+ phEventWaitList, phEvent);
333
363
}
334
364
335
365
ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferWriteRect (
@@ -338,20 +368,15 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferWriteRect(
338
368
size_t bufferSlicePitch, size_t hostRowPitch, size_t hostSlicePitch,
339
369
void *pSrc, uint32_t numEventsInWaitList,
340
370
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent) {
341
- std::ignore = hBuffer;
342
- std::ignore = blockingWrite;
343
- std::ignore = bufferOrigin;
344
- std::ignore = hostOrigin;
345
- std::ignore = region;
346
- std::ignore = bufferRowPitch;
347
- std::ignore = bufferSlicePitch;
348
- std::ignore = hostRowPitch;
349
- std::ignore = hostSlicePitch;
350
- std::ignore = pSrc;
351
- std::ignore = numEventsInWaitList;
352
- std::ignore = phEventWaitList;
353
- std::ignore = phEvent;
354
- return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
371
+ auto dstPtr = ur_cast<char *>(hBuffer->getPtr (hDevice));
372
+
373
+ TRACK_SCOPE_LATENCY (
374
+ " ur_queue_immediate_in_order_t::enqueueMemBufferWriteRect" );
375
+
376
+ return enqueueRegionCopy (pSrc, dstPtr, blockingWrite, hostOrigin,
377
+ bufferOrigin, region, hostRowPitch, hostSlicePitch,
378
+ bufferRowPitch, bufferSlicePitch,
379
+ numEventsInWaitList, phEventWaitList, phEvent);
355
380
}
356
381
357
382
ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferCopy (
@@ -378,19 +403,17 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferCopyRect(
378
403
ur_rect_region_t region, size_t srcRowPitch, size_t srcSlicePitch,
379
404
size_t dstRowPitch, size_t dstSlicePitch, uint32_t numEventsInWaitList,
380
405
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent) {
381
- std::ignore = hBufferSrc;
382
- std::ignore = hBufferDst;
383
- std::ignore = srcOrigin;
384
- std::ignore = dstOrigin;
385
- std::ignore = region;
386
- std::ignore = srcRowPitch;
387
- std::ignore = srcSlicePitch;
388
- std::ignore = dstRowPitch;
389
- std::ignore = dstSlicePitch;
390
- std::ignore = numEventsInWaitList;
391
- std::ignore = phEventWaitList;
392
- std::ignore = phEvent;
393
- return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
406
+
407
+ auto srcPtr = ur_cast<char *>(hBufferSrc->getPtr (hDevice));
408
+ auto dstPtr = ur_cast<char *>(hBufferDst->getPtr (hDevice));
409
+
410
+ TRACK_SCOPE_LATENCY (
411
+ " ur_queue_immediate_in_order_t::enqueueMemBufferCopyRect" );
412
+
413
+ return enqueueRegionCopy (srcPtr, dstPtr, false , srcOrigin, dstOrigin, region,
414
+ srcRowPitch, srcSlicePitch, dstRowPitch,
415
+ dstSlicePitch, numEventsInWaitList, phEventWaitList,
416
+ phEvent);
394
417
}
395
418
396
419
ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferFill (
0 commit comments