@@ -573,8 +573,9 @@ pi_result piDevicesGet(pi_platform Platform, pi_device_type DeviceType,
573573 // Get number of devices supporting L0
574574 uint32_t ZeDeviceCount = 0 ;
575575 const bool AskingForGPU = (DeviceType & PI_DEVICE_TYPE_GPU);
576+ const bool AskingForDefault = (DeviceType == PI_DEVICE_TYPE_DEFAULT);
576577 ZE_CALL (zeDeviceGet (ZeDriver, &ZeDeviceCount, nullptr ));
577- if (ZeDeviceCount == 0 || !AskingForGPU) {
578+ if (ZeDeviceCount == 0 || !( AskingForGPU || AskingForDefault) ) {
578579 if (NumDevices)
579580 *NumDevices = 0 ;
580581 return PI_SUCCESS;
@@ -2122,15 +2123,18 @@ piEnqueueKernelLaunch(pi_queue Queue, pi_kernel Kernel, pi_uint32 WorkDim,
21222123 if (auto Res = Queue->Context ->Device ->createCommandList (&ZeCommandList))
21232124 return Res;
21242125
2125- auto Res = piEventCreate (Kernel->Program ->Context , Event);
2126- if (Res != PI_SUCCESS)
2127- return Res;
2126+ ze_event_handle_t ZeEvent = nullptr ;
2127+ if (Event) {
2128+ auto Res = piEventCreate (Kernel->Program ->Context , Event);
2129+ if (Res != PI_SUCCESS)
2130+ return Res;
21282131
2129- (*Event)->Queue = Queue;
2130- (*Event)->CommandType = PI_COMMAND_TYPE_NDRANGE_KERNEL;
2131- (*Event)->ZeCommandList = ZeCommandList;
2132+ (*Event)->Queue = Queue;
2133+ (*Event)->CommandType = PI_COMMAND_TYPE_NDRANGE_KERNEL;
2134+ (*Event)->ZeCommandList = ZeCommandList;
21322135
2133- ze_event_handle_t ZeEvent = (*Event)->ZeEvent ;
2136+ ZeEvent = (*Event)->ZeEvent ;
2137+ }
21342138
21352139 ze_event_handle_t *ZeEventWaitList =
21362140 _pi_event::createZeEventList (NumEventsInWaitList, EventWaitList);
@@ -2176,6 +2180,7 @@ pi_result piEventCreate(pi_context Context, pi_event *RetEvent) {
21762180 ZE_CALL (zeEventCreate (ZeEventPool, &ZeEventDesc, &ZeEvent));
21772181
21782182 try {
2183+ assert (RetEvent);
21792184 *RetEvent =
21802185 new _pi_event (ZeEvent, ZeEventPool, Context, PI_COMMAND_TYPE_USER);
21812186 } catch (const std::bad_alloc &) {
@@ -2537,15 +2542,18 @@ enqueueMemCopyHelper(pi_command_type CommandType, pi_queue Queue, void *Dst,
25372542 if (auto Res = Queue->Context ->Device ->createCommandList (&ZeCommandList))
25382543 return Res;
25392544
2540- auto Res = piEventCreate (Queue->Context , Event);
2541- if (Res != PI_SUCCESS)
2542- return Res;
2545+ ze_event_handle_t ZeEvent = nullptr ;
2546+ if (Event) {
2547+ auto Res = piEventCreate (Queue->Context , Event);
2548+ if (Res != PI_SUCCESS)
2549+ return Res;
25432550
2544- (*Event)->Queue = Queue;
2545- (*Event)->CommandType = CommandType;
2546- (*Event)->ZeCommandList = ZeCommandList;
2551+ (*Event)->Queue = Queue;
2552+ (*Event)->CommandType = CommandType;
2553+ (*Event)->ZeCommandList = ZeCommandList;
25472554
2548- ze_event_handle_t ZeEvent = (*Event)->ZeEvent ;
2555+ ZeEvent = (*Event)->ZeEvent ;
2556+ }
25492557
25502558 ze_event_handle_t *ZeEventWaitList =
25512559 _pi_event::createZeEventList (NumEventsInWaitList, EventWaitList);
@@ -2592,15 +2600,18 @@ static pi_result enqueueMemCopyRectHelper(
25922600 if (auto Res = Queue->Context ->Device ->createCommandList (&ZeCommandList))
25932601 return Res;
25942602
2595- auto Res = piEventCreate (Queue->Context , Event);
2596- if (Res != PI_SUCCESS)
2597- return Res;
2603+ ze_event_handle_t ZeEvent = nullptr ;
2604+ if (Event) {
2605+ auto Res = piEventCreate (Queue->Context , Event);
2606+ if (Res != PI_SUCCESS)
2607+ return Res;
25982608
2599- (*Event)->Queue = Queue;
2600- (*Event)->CommandType = CommandType;
2601- (*Event)->ZeCommandList = ZeCommandList;
2609+ (*Event)->Queue = Queue;
2610+ (*Event)->CommandType = CommandType;
2611+ (*Event)->ZeCommandList = ZeCommandList;
26022612
2603- ze_event_handle_t ZeEvent = (*Event)->ZeEvent ;
2613+ ZeEvent = (*Event)->ZeEvent ;
2614+ }
26042615
26052616 ze_event_handle_t *ZeEventWaitList =
26062617 _pi_event::createZeEventList (NumEventsInWaitList, EventWaitList);
@@ -2749,15 +2760,18 @@ enqueueMemFillHelper(pi_command_type CommandType, pi_queue Queue, void *Ptr,
27492760 if (auto Res = Queue->Context ->Device ->createCommandList (&ZeCommandList))
27502761 return Res;
27512762
2752- auto Res = piEventCreate (Queue->Context , Event);
2753- if (Res != PI_SUCCESS)
2754- return Res;
2763+ ze_event_handle_t ZeEvent = nullptr ;
2764+ if (Event) {
2765+ auto Res = piEventCreate (Queue->Context , Event);
2766+ if (Res != PI_SUCCESS)
2767+ return Res;
27552768
2756- (*Event)->Queue = Queue;
2757- (*Event)->CommandType = CommandType;
2758- (*Event)->ZeCommandList = ZeCommandList;
2769+ (*Event)->Queue = Queue;
2770+ (*Event)->CommandType = CommandType;
2771+ (*Event)->ZeCommandList = ZeCommandList;
27592772
2760- ze_event_handle_t ZeEvent = (*Event)->ZeEvent ;
2773+ ZeEvent = (*Event)->ZeEvent ;
2774+ }
27612775
27622776 ze_event_handle_t *ZeEventWaitList =
27632777 _pi_event::createZeEventList (NumEventsInWaitList, EventWaitList);
@@ -2824,13 +2838,18 @@ piEnqueueMemBufferMap(pi_queue Queue, pi_mem Buffer, pi_bool BlockingMap,
28242838 if (auto Res = Queue->Context ->Device ->createCommandList (&ZeCommandList))
28252839 return Res;
28262840
2827- auto Res = piEventCreate (Queue->Context , Event);
2828- if (Res != PI_SUCCESS)
2829- return Res;
2841+ ze_event_handle_t ZeEvent = nullptr ;
2842+ if (Event) {
2843+ auto Res = piEventCreate (Queue->Context , Event);
2844+ if (Res != PI_SUCCESS)
2845+ return Res;
28302846
2831- (*Event)->Queue = Queue;
2832- (*Event)->CommandType = PI_COMMAND_TYPE_MEM_BUFFER_MAP;
2833- (*Event)->ZeCommandList = ZeCommandList;
2847+ (*Event)->Queue = Queue;
2848+ (*Event)->CommandType = PI_COMMAND_TYPE_MEM_BUFFER_MAP;
2849+ (*Event)->ZeCommandList = ZeCommandList;
2850+
2851+ ZeEvent = (*Event)->ZeEvent ;
2852+ }
28342853
28352854 ze_event_handle_t *ZeEventWaitList =
28362855 _pi_event::createZeEventList (NumEventsInWaitList, EventWaitList);
@@ -2865,7 +2884,6 @@ piEnqueueMemBufferMap(pi_queue Queue, pi_mem Buffer, pi_bool BlockingMap,
28652884 RetMap));
28662885 }
28672886
2868- ze_event_handle_t ZeEvent = (*Event)->ZeEvent ;
28692887 ZE_CALL (zeCommandListAppendMemoryCopy (
28702888 ZeCommandList, *RetMap, pi_cast<char *>(Buffer->getZeHandle ()) + Offset,
28712889 Size, ZeEvent));
@@ -2891,13 +2909,18 @@ pi_result piEnqueueMemUnmap(pi_queue Queue, pi_mem MemObj, void *MappedPtr,
28912909 // of unmap completion.
28922910 assert (Event);
28932911
2894- auto Res = piEventCreate (Queue->Context , Event);
2895- if (Res != PI_SUCCESS)
2896- return Res;
2912+ ze_event_handle_t ZeEvent = nullptr ;
2913+ if (Event) {
2914+ auto Res = piEventCreate (Queue->Context , Event);
2915+ if (Res != PI_SUCCESS)
2916+ return Res;
28972917
2898- (*Event)->Queue = Queue;
2899- (*Event)->CommandType = PI_COMMAND_TYPE_MEM_BUFFER_UNMAP;
2900- (*Event)->ZeCommandList = ZeCommandList;
2918+ (*Event)->Queue = Queue;
2919+ (*Event)->CommandType = PI_COMMAND_TYPE_MEM_BUFFER_UNMAP;
2920+ (*Event)->ZeCommandList = ZeCommandList;
2921+
2922+ ZeEvent = (*Event)->ZeEvent ;
2923+ }
29012924
29022925 ze_event_handle_t *ZeEventWaitList =
29032926 _pi_event::createZeEventList (NumEventsInWaitList, EventWaitList);
@@ -2914,7 +2937,6 @@ pi_result piEnqueueMemUnmap(pi_queue Queue, pi_mem MemObj, void *MappedPtr,
29142937 if (pi_result Res = MemObj->removeMapping (MappedPtr, MapInfo))
29152938 return Res;
29162939
2917- ze_event_handle_t ZeEvent = (*Event)->ZeEvent ;
29182940 ZE_CALL (zeCommandListAppendMemoryCopy (
29192941 ZeCommandList, pi_cast<char *>(MemObj->getZeHandle ()) + MapInfo.Offset ,
29202942 MappedPtr, MapInfo.Size , ZeEvent));
@@ -2998,15 +3020,18 @@ enqueueMemImageCommandHelper(pi_command_type CommandType, pi_queue Queue,
29983020 if (auto Res = Queue->Context ->Device ->createCommandList (&ZeCommandList))
29993021 return Res;
30003022
3001- auto Res = piEventCreate (Queue->Context , Event);
3002- if (Res != PI_SUCCESS)
3003- return Res;
3023+ ze_event_handle_t ZeEvent = nullptr ;
3024+ if (Event) {
3025+ auto Res = piEventCreate (Queue->Context , Event);
3026+ if (Res != PI_SUCCESS)
3027+ return Res;
30043028
3005- (*Event)->Queue = Queue;
3006- (*Event)->CommandType = CommandType;
3007- (*Event)->ZeCommandList = ZeCommandList;
3029+ (*Event)->Queue = Queue;
3030+ (*Event)->CommandType = CommandType;
3031+ (*Event)->ZeCommandList = ZeCommandList;
30083032
3009- ze_event_handle_t ZeEvent = (*Event)->ZeEvent ;
3033+ ZeEvent = (*Event)->ZeEvent ;
3034+ }
30103035
30113036 ze_event_handle_t *ZeEventWaitList =
30123037 _pi_event::createZeEventList (NumEventsInWaitList, EventWaitList);
@@ -3349,13 +3374,18 @@ pi_result piextUSMEnqueuePrefetch(pi_queue Queue, const void *Ptr, size_t Size,
33493374 return Res;
33503375
33513376 // TODO: do we need to create a unique command type for this?
3352- auto Res = piEventCreate (Queue->Context , Event);
3353- if (Res != PI_SUCCESS)
3354- return Res;
3377+ ze_event_handle_t ZeEvent = nullptr ;
3378+ if (Event) {
3379+ auto Res = piEventCreate (Queue->Context , Event);
3380+ if (Res != PI_SUCCESS)
3381+ return Res;
3382+
3383+ (*Event)->Queue = Queue;
3384+ (*Event)->CommandType = PI_COMMAND_TYPE_USER;
3385+ (*Event)->ZeCommandList = ZeCommandList;
33553386
3356- (*Event)->Queue = Queue;
3357- (*Event)->CommandType = PI_COMMAND_TYPE_USER;
3358- (*Event)->ZeCommandList = ZeCommandList;
3387+ ZeEvent = (*Event)->ZeEvent ;
3388+ }
33593389
33603390 ze_event_handle_t *ZeEventWaitList =
33613391 _pi_event::createZeEventList (NumEventsInWaitlist, EventsWaitlist);
@@ -3368,7 +3398,7 @@ pi_result piextUSMEnqueuePrefetch(pi_queue Queue, const void *Ptr, size_t Size,
33683398
33693399 // TODO: L0 does not have a completion "event" with the prefetch API,
33703400 // so manually add command to signal our event.
3371- ZE_CALL (zeCommandListAppendSignalEvent (ZeCommandList, (*Event)-> ZeEvent ));
3401+ ZE_CALL (zeCommandListAppendSignalEvent (ZeCommandList, ZeEvent));
33723402
33733403 if (auto Res = Queue->executeCommandList (ZeCommandList, false ))
33743404 return Res;
@@ -3433,20 +3463,25 @@ pi_result piextUSMEnqueueMemAdvise(pi_queue Queue, const void *Ptr,
34333463 return Res;
34343464
34353465 // TODO: do we need to create a unique command type for this?
3436- auto Res = piEventCreate (Queue->Context , Event);
3437- if (Res != PI_SUCCESS)
3438- return Res;
3466+ ze_event_handle_t ZeEvent = nullptr ;
3467+ if (Event) {
3468+ auto Res = piEventCreate (Queue->Context , Event);
3469+ if (Res != PI_SUCCESS)
3470+ return Res;
3471+
3472+ (*Event)->Queue = Queue;
3473+ (*Event)->CommandType = PI_COMMAND_TYPE_USER;
3474+ (*Event)->ZeCommandList = ZeCommandList;
34393475
3440- (*Event)->Queue = Queue;
3441- (*Event)->CommandType = PI_COMMAND_TYPE_USER;
3442- (*Event)->ZeCommandList = ZeCommandList;
3476+ ZeEvent = (*Event)->ZeEvent ;
3477+ }
34433478
34443479 ZE_CALL (zeCommandListAppendMemAdvise (
34453480 ZeCommandList, Queue->Context ->Device ->ZeDevice , Ptr, Length, ZeAdvice));
34463481
34473482 // TODO: L0 does not have a completion "event" with the advise API,
34483483 // so manually add command to signal our event.
3449- ZE_CALL (zeCommandListAppendSignalEvent (ZeCommandList, (*Event)-> ZeEvent ));
3484+ ZE_CALL (zeCommandListAppendSignalEvent (ZeCommandList, ZeEvent));
34503485
34513486 Queue->executeCommandList (ZeCommandList, false );
34523487 return PI_SUCCESS;
0 commit comments