@@ -73,6 +73,258 @@ zelLoaderGetVersionsInternal(
7373 return ZE_RESULT_SUCCESS;
7474}
7575
76+ ZE_DLLEXPORT ze_result_t ZE_APICALL
77+ zelReloadDriversInternal (
78+ ze_init_flags_t flags)
79+ {
80+ for ( auto & drv : loader::context->zeDrivers ) {
81+ if (drv.initStatus != ZE_RESULT_SUCCESS)
82+ continue ;
83+
84+ if (drv.handle ) {
85+ auto free_result = FREE_DRIVER_LIBRARY ( drv.handle );
86+ auto failure = FREE_DRIVER_LIBRARY_FAILURE_CHECK (free_result);
87+ if (failure)
88+ return ZE_RESULT_ERROR_UNINITIALIZED;
89+ }
90+
91+ drv.handle = LOAD_DRIVER_LIBRARY ( drv.name .c_str () );
92+ if (NULL == drv.handle )
93+ return ZE_RESULT_ERROR_UNINITIALIZED;
94+
95+ auto zeGetGlobalProcAddrTable = reinterpret_cast <ze_pfnGetGlobalProcAddrTable_t>(
96+ GET_FUNCTION_PTR ( drv.handle , " zeGetGlobalProcAddrTable" ) );
97+ if (!zeGetGlobalProcAddrTable)
98+ return ZE_RESULT_ERROR_UNINITIALIZED;
99+ auto zeGetGlobalProcAddrTableResult = zeGetGlobalProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Global );
100+ if (zeGetGlobalProcAddrTableResult != ZE_RESULT_SUCCESS)
101+ return zeGetGlobalProcAddrTableResult;
102+
103+ auto zeGetRTASBuilderExpProcAddrTable = reinterpret_cast <ze_pfnGetRTASBuilderExpProcAddrTable_t>(
104+ GET_FUNCTION_PTR ( drv.handle , " zeGetRTASBuilderExpProcAddrTable" ) );
105+ if (!zeGetRTASBuilderExpProcAddrTable)
106+ return ZE_RESULT_ERROR_UNINITIALIZED;
107+ auto zeGetRTASBuilderExpProcAddrTableResult = zeGetRTASBuilderExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .RTASBuilderExp );
108+ if (zeGetRTASBuilderExpProcAddrTableResult != ZE_RESULT_SUCCESS)
109+ return zeGetRTASBuilderExpProcAddrTableResult;
110+
111+ auto zeGetRTASParallelOperationExpProcAddrTable = reinterpret_cast <ze_pfnGetRTASParallelOperationExpProcAddrTable_t>(
112+ GET_FUNCTION_PTR ( drv.handle , " zeGetRTASParallelOperationExpProcAddrTable" ) );
113+ if (!zeGetRTASParallelOperationExpProcAddrTable)
114+ return ZE_RESULT_ERROR_UNINITIALIZED;
115+ auto zeGetRTASParallelOperationExpProcAddrTableResult = zeGetRTASParallelOperationExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .RTASParallelOperationExp );
116+ if (zeGetRTASParallelOperationExpProcAddrTableResult != ZE_RESULT_SUCCESS)
117+ return zeGetRTASParallelOperationExpProcAddrTableResult;
118+
119+ auto zeGetDriverProcAddrTable = reinterpret_cast <ze_pfnGetDriverProcAddrTable_t>(
120+ GET_FUNCTION_PTR ( drv.handle , " zeGetDriverProcAddrTable" ) );
121+ if (!zeGetDriverProcAddrTable)
122+ return ZE_RESULT_ERROR_UNINITIALIZED;
123+ auto zeGetDriverProcAddrTableResult = zeGetDriverProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Driver );
124+ if (zeGetDriverProcAddrTableResult != ZE_RESULT_SUCCESS)
125+ return zeGetDriverProcAddrTableResult;
126+
127+ auto zeGetDriverExpProcAddrTable = reinterpret_cast <ze_pfnGetDriverExpProcAddrTable_t>(
128+ GET_FUNCTION_PTR ( drv.handle , " zeGetDriverExpProcAddrTable" ) );
129+ if (!zeGetDriverExpProcAddrTable)
130+ return ZE_RESULT_ERROR_UNINITIALIZED;
131+ auto zeGetDriverExpProcAddrTableResult = zeGetDriverExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .DriverExp );
132+ if (zeGetDriverExpProcAddrTableResult != ZE_RESULT_SUCCESS)
133+ return zeGetDriverExpProcAddrTableResult;
134+
135+ auto zeGetDeviceProcAddrTable = reinterpret_cast <ze_pfnGetDeviceProcAddrTable_t>(
136+ GET_FUNCTION_PTR ( drv.handle , " zeGetDeviceProcAddrTable" ) );
137+ if (!zeGetDeviceProcAddrTable)
138+ return ZE_RESULT_ERROR_UNINITIALIZED;
139+ auto zeGetDeviceProcAddrTableResult = zeGetDeviceProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Device );
140+ if (zeGetDeviceProcAddrTableResult != ZE_RESULT_SUCCESS)
141+ return zeGetDeviceProcAddrTableResult;
142+
143+ auto zeGetDeviceExpProcAddrTable = reinterpret_cast <ze_pfnGetDeviceExpProcAddrTable_t>(
144+ GET_FUNCTION_PTR ( drv.handle , " zeGetDeviceExpProcAddrTable" ) );
145+ if (!zeGetDeviceExpProcAddrTable)
146+ return ZE_RESULT_ERROR_UNINITIALIZED;
147+ auto zeGetDeviceExpProcAddrTableResult = zeGetDeviceExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .DeviceExp );
148+ if (zeGetDeviceExpProcAddrTableResult != ZE_RESULT_SUCCESS)
149+ return zeGetDeviceExpProcAddrTableResult;
150+
151+ auto zeGetContextProcAddrTable = reinterpret_cast <ze_pfnGetContextProcAddrTable_t>(
152+ GET_FUNCTION_PTR ( drv.handle , " zeGetContextProcAddrTable" ) );
153+ if (!zeGetContextProcAddrTable)
154+ return ZE_RESULT_ERROR_UNINITIALIZED;
155+ auto zeGetContextProcAddrTableResult = zeGetContextProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Context );
156+ if (zeGetContextProcAddrTableResult != ZE_RESULT_SUCCESS)
157+ return zeGetContextProcAddrTableResult;
158+
159+ auto zeGetCommandQueueProcAddrTable = reinterpret_cast <ze_pfnGetCommandQueueProcAddrTable_t>(
160+ GET_FUNCTION_PTR ( drv.handle , " zeGetCommandQueueProcAddrTable" ) );
161+ if (!zeGetCommandQueueProcAddrTable)
162+ return ZE_RESULT_ERROR_UNINITIALIZED;
163+ auto zeGetCommandQueueProcAddrTableResult = zeGetCommandQueueProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .CommandQueue );
164+ if (zeGetCommandQueueProcAddrTableResult != ZE_RESULT_SUCCESS)
165+ return zeGetCommandQueueProcAddrTableResult;
166+
167+ auto zeGetCommandListProcAddrTable = reinterpret_cast <ze_pfnGetCommandListProcAddrTable_t>(
168+ GET_FUNCTION_PTR ( drv.handle , " zeGetCommandListProcAddrTable" ) );
169+ if (!zeGetCommandListProcAddrTable)
170+ return ZE_RESULT_ERROR_UNINITIALIZED;
171+ auto zeGetCommandListProcAddrTableResult = zeGetCommandListProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .CommandList );
172+ if (zeGetCommandListProcAddrTableResult != ZE_RESULT_SUCCESS)
173+ return zeGetCommandListProcAddrTableResult;
174+
175+ auto zeGetCommandListExpProcAddrTable = reinterpret_cast <ze_pfnGetCommandListExpProcAddrTable_t>(
176+ GET_FUNCTION_PTR ( drv.handle , " zeGetCommandListExpProcAddrTable" ) );
177+ if (!zeGetCommandListExpProcAddrTable)
178+ return ZE_RESULT_ERROR_UNINITIALIZED;
179+ auto zeGetCommandListExpProcAddrTableResult = zeGetCommandListExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .CommandListExp );
180+ if (zeGetCommandListExpProcAddrTableResult != ZE_RESULT_SUCCESS)
181+ return zeGetCommandListExpProcAddrTableResult;
182+
183+ auto zeGetEventProcAddrTable = reinterpret_cast <ze_pfnGetEventProcAddrTable_t>(
184+ GET_FUNCTION_PTR ( drv.handle , " zeGetEventProcAddrTable" ) );
185+ if (!zeGetEventProcAddrTable)
186+ return ZE_RESULT_ERROR_UNINITIALIZED;
187+ auto zeGetEventProcAddrTableResult = zeGetEventProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Event );
188+ if (zeGetEventProcAddrTableResult != ZE_RESULT_SUCCESS)
189+ return zeGetEventProcAddrTableResult;
190+
191+ auto zeGetEventExpProcAddrTable = reinterpret_cast <ze_pfnGetEventExpProcAddrTable_t>(
192+ GET_FUNCTION_PTR ( drv.handle , " zeGetEventExpProcAddrTable" ) );
193+ if (!zeGetEventExpProcAddrTable)
194+ return ZE_RESULT_ERROR_UNINITIALIZED;
195+ auto zeGetEventExpProcAddrTableResult = zeGetEventExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .EventExp );
196+ if (zeGetEventExpProcAddrTableResult != ZE_RESULT_SUCCESS)
197+ return zeGetEventExpProcAddrTableResult;
198+
199+ auto zeGetEventPoolProcAddrTable = reinterpret_cast <ze_pfnGetEventPoolProcAddrTable_t>(
200+ GET_FUNCTION_PTR ( drv.handle , " zeGetEventPoolProcAddrTable" ) );
201+ if (!zeGetEventPoolProcAddrTable)
202+ return ZE_RESULT_ERROR_UNINITIALIZED;
203+ auto zeGetEventPoolProcAddrTableResult = zeGetEventPoolProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .EventPool );
204+ if (zeGetEventPoolProcAddrTableResult != ZE_RESULT_SUCCESS)
205+ return zeGetEventPoolProcAddrTableResult;
206+
207+ auto zeGetFenceProcAddrTable = reinterpret_cast <ze_pfnGetFenceProcAddrTable_t>(
208+ GET_FUNCTION_PTR ( drv.handle , " zeGetFenceProcAddrTable" ) );
209+ if (!zeGetFenceProcAddrTable)
210+ return ZE_RESULT_ERROR_UNINITIALIZED;
211+ auto zeGetFenceProcAddrTableResult = zeGetFenceProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Fence );
212+ if (zeGetFenceProcAddrTableResult != ZE_RESULT_SUCCESS)
213+ return zeGetFenceProcAddrTableResult;
214+
215+ auto zeGetImageProcAddrTable = reinterpret_cast <ze_pfnGetImageProcAddrTable_t>(
216+ GET_FUNCTION_PTR ( drv.handle , " zeGetImageProcAddrTable" ) );
217+ if (!zeGetImageProcAddrTable)
218+ return ZE_RESULT_ERROR_UNINITIALIZED;
219+ auto zeGetImageProcAddrTableResult = zeGetImageProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Image );
220+ if (zeGetImageProcAddrTableResult != ZE_RESULT_SUCCESS)
221+ return zeGetImageProcAddrTableResult;
222+
223+ auto zeGetImageExpProcAddrTable = reinterpret_cast <ze_pfnGetImageExpProcAddrTable_t>(
224+ GET_FUNCTION_PTR ( drv.handle , " zeGetImageExpProcAddrTable" ) );
225+ if (!zeGetImageExpProcAddrTable)
226+ return ZE_RESULT_ERROR_UNINITIALIZED;
227+ auto zeGetImageExpProcAddrTableResult = zeGetImageExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .ImageExp );
228+ if (zeGetImageExpProcAddrTableResult != ZE_RESULT_SUCCESS)
229+ return zeGetImageExpProcAddrTableResult;
230+
231+ auto zeGetKernelProcAddrTable = reinterpret_cast <ze_pfnGetKernelProcAddrTable_t>(
232+ GET_FUNCTION_PTR ( drv.handle , " zeGetKernelProcAddrTable" ) );
233+ if (!zeGetKernelProcAddrTable)
234+ return ZE_RESULT_ERROR_UNINITIALIZED;
235+ auto zeGetKernelProcAddrTableResult = zeGetKernelProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Kernel );
236+ if (zeGetKernelProcAddrTableResult != ZE_RESULT_SUCCESS)
237+ return zeGetKernelProcAddrTableResult;
238+
239+ auto zeGetKernelExpProcAddrTable = reinterpret_cast <ze_pfnGetKernelExpProcAddrTable_t>(
240+ GET_FUNCTION_PTR ( drv.handle , " zeGetKernelExpProcAddrTable" ) );
241+ if (!zeGetKernelExpProcAddrTable)
242+ return ZE_RESULT_ERROR_UNINITIALIZED;
243+ auto zeGetKernelExpProcAddrTableResult = zeGetKernelExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .KernelExp );
244+ if (zeGetKernelExpProcAddrTableResult != ZE_RESULT_SUCCESS)
245+ return zeGetKernelExpProcAddrTableResult;
246+
247+ auto zeGetMemProcAddrTable = reinterpret_cast <ze_pfnGetMemProcAddrTable_t>(
248+ GET_FUNCTION_PTR ( drv.handle , " zeGetMemProcAddrTable" ) );
249+ if (!zeGetMemProcAddrTable)
250+ return ZE_RESULT_ERROR_UNINITIALIZED;
251+ auto zeGetMemProcAddrTableResult = zeGetMemProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Mem );
252+ if (zeGetMemProcAddrTableResult != ZE_RESULT_SUCCESS)
253+ return zeGetMemProcAddrTableResult;
254+
255+ auto zeGetMemExpProcAddrTable = reinterpret_cast <ze_pfnGetMemExpProcAddrTable_t>(
256+ GET_FUNCTION_PTR ( drv.handle , " zeGetMemExpProcAddrTable" ) );
257+ if (!zeGetMemExpProcAddrTable)
258+ return ZE_RESULT_ERROR_UNINITIALIZED;
259+ auto zeGetMemExpProcAddrTableResult = zeGetMemExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .MemExp );
260+ if (zeGetMemExpProcAddrTableResult != ZE_RESULT_SUCCESS)
261+ return zeGetMemExpProcAddrTableResult;
262+
263+ auto zeGetModuleProcAddrTable = reinterpret_cast <ze_pfnGetModuleProcAddrTable_t>(
264+ GET_FUNCTION_PTR ( drv.handle , " zeGetModuleProcAddrTable" ) );
265+ if (!zeGetModuleProcAddrTable)
266+ return ZE_RESULT_ERROR_UNINITIALIZED;
267+ auto zeGetModuleProcAddrTableResult = zeGetModuleProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Module );
268+ if (zeGetModuleProcAddrTableResult != ZE_RESULT_SUCCESS)
269+ return zeGetModuleProcAddrTableResult;
270+
271+ auto zeGetModuleBuildLogProcAddrTable = reinterpret_cast <ze_pfnGetModuleBuildLogProcAddrTable_t>(
272+ GET_FUNCTION_PTR ( drv.handle , " zeGetModuleBuildLogProcAddrTable" ) );
273+ if (!zeGetModuleBuildLogProcAddrTable)
274+ return ZE_RESULT_ERROR_UNINITIALIZED;
275+ auto zeGetModuleBuildLogProcAddrTableResult = zeGetModuleBuildLogProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .ModuleBuildLog );
276+ if (zeGetModuleBuildLogProcAddrTableResult != ZE_RESULT_SUCCESS)
277+ return zeGetModuleBuildLogProcAddrTableResult;
278+
279+ auto zeGetPhysicalMemProcAddrTable = reinterpret_cast <ze_pfnGetPhysicalMemProcAddrTable_t>(
280+ GET_FUNCTION_PTR ( drv.handle , " zeGetPhysicalMemProcAddrTable" ) );
281+ if (!zeGetPhysicalMemProcAddrTable)
282+ return ZE_RESULT_ERROR_UNINITIALIZED;
283+ auto zeGetPhysicalMemProcAddrTableResult = zeGetPhysicalMemProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .PhysicalMem );
284+ if (zeGetPhysicalMemProcAddrTableResult != ZE_RESULT_SUCCESS)
285+ return zeGetPhysicalMemProcAddrTableResult;
286+
287+ auto zeGetSamplerProcAddrTable = reinterpret_cast <ze_pfnGetSamplerProcAddrTable_t>(
288+ GET_FUNCTION_PTR ( drv.handle , " zeGetSamplerProcAddrTable" ) );
289+ if (!zeGetSamplerProcAddrTable)
290+ return ZE_RESULT_ERROR_UNINITIALIZED;
291+ auto zeGetSamplerProcAddrTableResult = zeGetSamplerProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .Sampler );
292+ if (zeGetSamplerProcAddrTableResult != ZE_RESULT_SUCCESS)
293+ return zeGetSamplerProcAddrTableResult;
294+
295+ auto zeGetVirtualMemProcAddrTable = reinterpret_cast <ze_pfnGetVirtualMemProcAddrTable_t>(
296+ GET_FUNCTION_PTR ( drv.handle , " zeGetVirtualMemProcAddrTable" ) );
297+ if (!zeGetVirtualMemProcAddrTable)
298+ return ZE_RESULT_ERROR_UNINITIALIZED;
299+ auto zeGetVirtualMemProcAddrTableResult = zeGetVirtualMemProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .VirtualMem );
300+ if (zeGetVirtualMemProcAddrTableResult != ZE_RESULT_SUCCESS)
301+ return zeGetVirtualMemProcAddrTableResult;
302+
303+ auto zeGetFabricEdgeExpProcAddrTable = reinterpret_cast <ze_pfnGetFabricEdgeExpProcAddrTable_t>(
304+ GET_FUNCTION_PTR ( drv.handle , " zeGetFabricEdgeExpProcAddrTable" ) );
305+ if (!zeGetFabricEdgeExpProcAddrTable)
306+ return ZE_RESULT_ERROR_UNINITIALIZED;
307+ auto zeGetFabricEdgeExpProcAddrTableResult = zeGetFabricEdgeExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .FabricEdgeExp );
308+ if (zeGetFabricEdgeExpProcAddrTableResult != ZE_RESULT_SUCCESS)
309+ return zeGetFabricEdgeExpProcAddrTableResult;
310+
311+ auto zeGetFabricVertexExpProcAddrTable = reinterpret_cast <ze_pfnGetFabricVertexExpProcAddrTable_t>(
312+ GET_FUNCTION_PTR ( drv.handle , " zeGetFabricVertexExpProcAddrTable" ) );
313+ if (!zeGetFabricVertexExpProcAddrTable)
314+ return ZE_RESULT_ERROR_UNINITIALIZED;
315+ auto zeGetFabricVertexExpProcAddrTableResult = zeGetFabricVertexExpProcAddrTable (ZE_API_VERSION_CURRENT, &drv.dditable .ze .FabricVertexExp );
316+ if (zeGetFabricVertexExpProcAddrTableResult != ZE_RESULT_SUCCESS)
317+ return zeGetFabricVertexExpProcAddrTableResult;
318+
319+ auto initResult = drv.dditable .ze .Global .pfnInit (flags);
320+ // Bail out if any drivers that previously succeeded fail
321+ if (initResult != ZE_RESULT_SUCCESS)
322+ return initResult;
323+ }
324+
325+ return ZE_RESULT_SUCCESS;
326+ }
327+
76328
77329ZE_DLLEXPORT ze_result_t ZE_APICALL
78330zelLoaderTranslateHandleInternal (
0 commit comments