@@ -311,8 +311,9 @@ ol_impl_result_t olMemAlloc_impl(ol_device_handle_t Device,
311
311
auto Alloc =
312
312
Device->Device ->dataAlloc (Size, nullptr , convertOlToPluginAllocTy (Type));
313
313
if (!Alloc)
314
- return {OL_ERRC_OUT_OF_RESOURCES,
315
- formatv (" Could not create allocation on device {0}" , Device).str ()};
314
+ ol_impl_result_t::fromError (
315
+ Alloc.takeError (),
316
+ formatv (" Could not create allocation on device {0}" , Device).str ());
316
317
317
318
*AllocationOut = *Alloc;
318
319
allocInfoMap ().insert_or_assign (*Alloc, AllocInfo{Device, Type});
@@ -330,7 +331,8 @@ ol_impl_result_t olMemFree_impl(void *Address) {
330
331
auto Res =
331
332
Device->Device ->dataDelete (Address, convertOlToPluginAllocTy (Type));
332
333
if (Res)
333
- return {OL_ERRC_OUT_OF_RESOURCES, " Could not free allocation" };
334
+ return ol_impl_result_t::fromError (std::move (Res),
335
+ " Could not free allocation" );
334
336
335
337
allocInfoMap ().erase (Address);
336
338
@@ -342,7 +344,8 @@ ol_impl_result_t olCreateQueue_impl(ol_device_handle_t Device,
342
344
auto CreatedQueue = std::make_unique<ol_queue_impl_t >(nullptr , Device);
343
345
auto Err = Device->Device ->initAsyncInfo (&(CreatedQueue->AsyncInfo ));
344
346
if (Err)
345
- return {OL_ERRC_UNKNOWN, " Could not initialize stream resource" };
347
+ return ol_impl_result_t::fromError (std::move (Err),
348
+ " Could not initialize stream resource" );
346
349
347
350
*Queue = CreatedQueue.release ();
348
351
return OL_SUCCESS;
@@ -358,23 +361,26 @@ ol_impl_result_t olWaitQueue_impl(ol_queue_handle_t Queue) {
358
361
if (Queue->AsyncInfo ->Queue ) {
359
362
auto Err = Queue->Device ->Device ->synchronize (Queue->AsyncInfo );
360
363
if (Err)
361
- return {OL_ERRC_INVALID_QUEUE, " The queue failed to synchronize" };
364
+ ol_impl_result_t::fromError (std::move (Err),
365
+ " The queue failed to synchronize" );
362
366
}
363
367
364
368
// Recreate the stream resource so the queue can be reused
365
369
// TODO: Would be easier for the synchronization to (optionally) not release
366
370
// it to begin with.
367
371
auto Res = Queue->Device ->Device ->initAsyncInfo (&Queue->AsyncInfo );
368
372
if (Res)
369
- return {OL_ERRC_UNKNOWN, " Could not reinitialize the stream resource" };
373
+ return ol_impl_result_t::fromError (
374
+ std::move (Res), " Could not reinitialize the stream resource" );
370
375
371
376
return OL_SUCCESS;
372
377
}
373
378
374
379
ol_impl_result_t olWaitEvent_impl (ol_event_handle_t Event) {
375
380
auto Res = Event->Queue ->Device ->Device ->syncEvent (Event->EventInfo );
376
381
if (Res)
377
- return {OL_ERRC_INVALID_EVENT, " The event failed to synchronize" };
382
+ ol_impl_result_t::fromError (std::move (Res),
383
+ " The event failed to synchronize" );
378
384
379
385
return OL_SUCCESS;
380
386
}
@@ -390,13 +396,17 @@ ol_impl_result_t olDestroyEvent_impl(ol_event_handle_t Event) {
390
396
ol_event_handle_t makeEvent (ol_queue_handle_t Queue) {
391
397
auto EventImpl = std::make_unique<ol_event_impl_t >(nullptr , Queue);
392
398
auto Res = Queue->Device ->Device ->createEvent (&EventImpl->EventInfo );
393
- if (Res)
399
+ if (Res) {
400
+ llvm::consumeError (std::move (Res));
394
401
return nullptr ;
402
+ }
395
403
396
404
Res = Queue->Device ->Device ->recordEvent (EventImpl->EventInfo ,
397
405
Queue->AsyncInfo );
398
- if (Res)
406
+ if (Res) {
407
+ llvm::consumeError (std::move (Res));
399
408
return nullptr ;
409
+ }
400
410
401
411
return EventImpl.release ();
402
412
}
@@ -422,16 +432,19 @@ ol_impl_result_t olMemcpy_impl(ol_queue_handle_t Queue, void *DstPtr,
422
432
if (DstDevice == HostDevice ()) {
423
433
auto Res = SrcDevice->Device ->dataRetrieve (DstPtr, SrcPtr, Size, QueueImpl);
424
434
if (Res)
425
- return {OL_ERRC_UNKNOWN, " The data retrieve operation failed" };
435
+ return ol_impl_result_t::fromError (std::move (Res),
436
+ " The data retrieve operation failed" );
426
437
} else if (SrcDevice == HostDevice ()) {
427
438
auto Res = DstDevice->Device ->dataSubmit (DstPtr, SrcPtr, Size, QueueImpl);
428
439
if (Res)
429
- return {OL_ERRC_UNKNOWN, " The data submit operation failed" };
440
+ return ol_impl_result_t::fromError (std::move (Res),
441
+ " The data submit operation failed" );
430
442
} else {
431
443
auto Res = SrcDevice->Device ->dataExchange (SrcPtr, *DstDevice->Device ,
432
444
DstPtr, Size, QueueImpl);
433
445
if (Res)
434
- return {OL_ERRC_UNKNOWN, " The data exchange operation failed" };
446
+ return ol_impl_result_t::fromError (std::move (Res),
447
+ " The data exchange operation failed" );
435
448
}
436
449
437
450
if (EventOut)
@@ -459,7 +472,7 @@ ol_impl_result_t olCreateProgram_impl(ol_device_handle_t Device,
459
472
Device->Device ->loadBinary (Device->Device ->Plugin , &Prog->DeviceImage );
460
473
if (!Res) {
461
474
delete Prog;
462
- return OL_ERRC_INVALID_VALUE ;
475
+ return ol_impl_result_t::fromError (Res. takeError (), " Invalid binary " ) ;
463
476
}
464
477
465
478
Prog->Image = *Res;
@@ -483,7 +496,8 @@ ol_impl_result_t olGetKernel_impl(ol_program_handle_t Program,
483
496
484
497
auto Err = KernelImpl->init (Device, *Program->Image );
485
498
if (Err)
486
- return {OL_ERRC_UNKNOWN, " Could not initialize the kernel" };
499
+ return ol_impl_result_t::fromError (std::move (Err),
500
+ " Could not initialize the kernel" );
487
501
488
502
*Kernel = &*KernelImpl;
489
503
@@ -526,7 +540,8 @@ olLaunchKernel_impl(ol_queue_handle_t Queue, ol_device_handle_t Device,
526
540
527
541
AsyncInfoWrapper.finalize (Err);
528
542
if (Err)
529
- return {OL_ERRC_UNKNOWN, " Could not finalize the AsyncInfoWrapper" };
543
+ return ol_impl_result_t::fromError (
544
+ std::move (Err), " Could not finalize the AsyncInfoWrapper" );
530
545
531
546
if (EventOut)
532
547
*EventOut = makeEvent (Queue);
0 commit comments