@@ -70,8 +70,10 @@ ur_kernel_handle_t_::ur_kernel_handle_t_(ur_program_handle_t hProgram,
70
70
71
71
ur_kernel_handle_t_::ur_kernel_handle_t_ (
72
72
ur_native_handle_t hNativeKernel, ur_program_handle_t hProgram,
73
+ ur_context_handle_t context,
73
74
const ur_kernel_native_properties_t *pProperties)
74
- : hProgram(hProgram), deviceKernels(1 ) {
75
+ : hProgram(hProgram),
76
+ deviceKernels(context ? context->getPlatform ()->getNumDevices() : 0) {
75
77
ur::level_zero::urProgramRetain (hProgram);
76
78
77
79
auto ownZeHandle = pProperties ? pProperties->isNativeHandleOwned : false ;
@@ -82,7 +84,12 @@ ur_kernel_handle_t_::ur_kernel_handle_t_(
82
84
throw UR_RESULT_ERROR_INVALID_KERNEL;
83
85
}
84
86
85
- deviceKernels.back ().emplace (nullptr , zeKernel, ownZeHandle);
87
+ for (auto &Dev : context->getDevices ()) {
88
+ deviceKernels[*Dev->Id ].emplace (Dev, zeKernel, ownZeHandle);
89
+
90
+ // owned only by the first entry
91
+ ownZeHandle = false ;
92
+ }
86
93
completeInitialization ();
87
94
}
88
95
@@ -128,20 +135,6 @@ size_t ur_kernel_handle_t_::deviceIndex(ur_device_handle_t hDevice) const {
128
135
hDevice = hDevice->RootDevice ;
129
136
}
130
137
131
- // supports kernels created from native handle
132
- if (deviceKernels.size () == 1 ) {
133
- assert (deviceKernels[0 ].has_value ());
134
- assert (deviceKernels[0 ].value ().hKernel .get ());
135
-
136
- auto &kernel = deviceKernels[0 ].value ();
137
-
138
- if (kernel.hDevice != hDevice) {
139
- throw UR_RESULT_ERROR_INVALID_DEVICE;
140
- }
141
-
142
- return 0 ;
143
- }
144
-
145
138
if (!deviceKernels[hDevice->Id .value ()].has_value ()) {
146
139
throw UR_RESULT_ERROR_INVALID_DEVICE;
147
140
}
@@ -341,8 +334,12 @@ urKernelCreateWithNativeHandle(ur_native_handle_t hNativeKernel,
341
334
ur_program_handle_t hProgram,
342
335
const ur_kernel_native_properties_t *pProperties,
343
336
ur_kernel_handle_t *phKernel) {
344
- std::ignore = hContext;
345
- *phKernel = new ur_kernel_handle_t_ (hNativeKernel, hProgram, pProperties);
337
+ if (!hProgram) {
338
+ return UR_RESULT_ERROR_INVALID_NULL_HANDLE;
339
+ }
340
+
341
+ *phKernel =
342
+ new ur_kernel_handle_t_ (hNativeKernel, hProgram, hContext, pProperties);
346
343
return UR_RESULT_SUCCESS;
347
344
}
348
345
0 commit comments