@@ -60,12 +60,14 @@ ur_result_t getZesDeviceHandle(zes_uuid_t coreDeviceUuid,
60
60
std::vector<zes_driver_handle_t > ZesDrivers;
61
61
std::vector<zes_device_handle_t > ZesDevices;
62
62
ze_result_t ZesResult = ZE_RESULT_ERROR_INVALID_ARGUMENT;
63
- ZE2UR_CALL (zesDriverGet, (&ZesDriverCount, nullptr ));
63
+ ZE2UR_CALL (GlobalAdapter->getSysManDriversFunctionPtr ,
64
+ (&ZesDriverCount, nullptr ));
64
65
ZesDrivers.resize (ZesDriverCount);
65
- ZE2UR_CALL (zesDriverGet, (&ZesDriverCount, ZesDrivers.data ()));
66
+ ZE2UR_CALL (GlobalAdapter->getSysManDriversFunctionPtr ,
67
+ (&ZesDriverCount, ZesDrivers.data ()));
66
68
for (uint32_t I = 0 ; I < ZesDriverCount; ++I) {
67
69
ZesResult = ZE_CALL_NOCHECK (
68
- zesDriverGetDeviceByUuidExp ,
70
+ GlobalAdapter-> getDeviceByUUIdFunctionPtr ,
69
71
(ZesDrivers[I], coreDeviceUuid, ZesDevice, SubDevice, SubDeviceId));
70
72
if (ZesResult == ZE_RESULT_SUCCESS) {
71
73
return UR_RESULT_SUCCESS;
@@ -207,8 +209,38 @@ ur_adapter_handle_t_::ur_adapter_handle_t_()
207
209
208
210
return ;
209
211
}
210
-
211
- GlobalAdapter->ZesResult = ZE_CALL_NOCHECK (zesInit, (0 ));
212
+ // Dynamically load the new L0 SysMan separate init and new EXP apis
213
+ // separately. This must be done to avoid attempting to use symbols that do
214
+ // not exist in older loader runtimes.
215
+ #ifdef _WIN32
216
+ std::string l0LoaderName = " ze_loader.dll" ;
217
+ #else
218
+ std::string l0LoaderName = " libze_loader.so.1" ;
219
+ #endif
220
+ GlobalAdapter->loaderHandle =
221
+ ur_loader::LibLoader::loadAdapterLibrary (l0LoaderName.c_str ());
222
+ if (GlobalAdapter->loaderHandle .get () != nullptr ) {
223
+ GlobalAdapter->getDeviceByUUIdFunctionPtr =
224
+ (zes_pfnDriverGetDeviceByUuidExp_t)
225
+ ur_loader::LibLoader::getFunctionPtr (
226
+ GlobalAdapter->loaderHandle .get (),
227
+ " zesDriverGetDeviceByUuidExp" );
228
+ GlobalAdapter->getSysManDriversFunctionPtr =
229
+ (zes_pfnDriverGet_t)ur_loader::LibLoader::getFunctionPtr (
230
+ GlobalAdapter->loaderHandle .get (), " zesDriverGet" );
231
+ GlobalAdapter->sysManInitFunctionPtr =
232
+ (zes_pfnInit_t)ur_loader::LibLoader::getFunctionPtr (
233
+ GlobalAdapter->loaderHandle .get (), " zesInit" );
234
+ }
235
+ if (GlobalAdapter->getDeviceByUUIdFunctionPtr &&
236
+ GlobalAdapter->getSysManDriversFunctionPtr &&
237
+ GlobalAdapter->sysManInitFunctionPtr ) {
238
+ logger::debug (" \n zesInit with flags value of {}\n " , static_cast <int >(0 ));
239
+ GlobalAdapter->ZesResult =
240
+ ZE_CALL_NOCHECK (GlobalAdapter->sysManInitFunctionPtr , (0 ));
241
+ } else {
242
+ GlobalAdapter->ZesResult = ZE_RESULT_ERROR_UNINITIALIZED;
243
+ }
212
244
213
245
ur_result_t err = initPlatforms (platforms, *GlobalAdapter->ZesResult );
214
246
if (err == UR_RESULT_SUCCESS) {
0 commit comments