@@ -60,12 +60,14 @@ ur_result_t getZesDeviceHandle(zes_uuid_t coreDeviceUuid,
6060 std::vector<zes_driver_handle_t > ZesDrivers;
6161 std::vector<zes_device_handle_t > ZesDevices;
6262 ze_result_t ZesResult = ZE_RESULT_ERROR_INVALID_ARGUMENT;
63- ZE2UR_CALL (zesDriverGet, (&ZesDriverCount, nullptr ));
63+ ZE2UR_CALL (GlobalAdapter->getSysManDriversFunctionPtr ,
64+ (&ZesDriverCount, nullptr ));
6465 ZesDrivers.resize (ZesDriverCount);
65- ZE2UR_CALL (zesDriverGet, (&ZesDriverCount, ZesDrivers.data ()));
66+ ZE2UR_CALL (GlobalAdapter->getSysManDriversFunctionPtr ,
67+ (&ZesDriverCount, ZesDrivers.data ()));
6668 for (uint32_t I = 0 ; I < ZesDriverCount; ++I) {
6769 ZesResult = ZE_CALL_NOCHECK (
68- zesDriverGetDeviceByUuidExp ,
70+ GlobalAdapter-> getDeviceByUUIdFunctionPtr ,
6971 (ZesDrivers[I], coreDeviceUuid, ZesDevice, SubDevice, SubDeviceId));
7072 if (ZesResult == ZE_RESULT_SUCCESS) {
7173 return UR_RESULT_SUCCESS;
@@ -207,8 +209,38 @@ ur_adapter_handle_t_::ur_adapter_handle_t_()
207209
208210 return ;
209211 }
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+ }
212244
213245 ur_result_t err = initPlatforms (platforms, *GlobalAdapter->ZesResult );
214246 if (err == UR_RESULT_SUCCESS) {
0 commit comments