@@ -510,19 +510,21 @@ namespace loader
510510 std::string message = " init driver " + driver.name + " found GPU Supported Driver." ;
511511 debug_trace_message (message, " " );
512512 }
513+ loadDriver = true ;
513514 }
514- loadDriver = true ;
515515 }
516516 if ((!desc && (flags == 0 || flags & ZE_INIT_FLAG_VPU_ONLY)) || (desc && desc->flags & ZE_INIT_DRIVER_TYPE_FLAG_NPU)) {
517517 if (driver.name .find (" vpu" ) != std::string::npos || driver.name .find (" npu" ) != std::string::npos) {
518518 if (debugTraceEnabled) {
519519 std::string message = " init driver " + driver.name + " found VPU/NPU Supported Driver." ;
520520 debug_trace_message (message, " " );
521521 }
522+ loadDriver = true ;
522523 }
523- loadDriver = true ;
524524 }
525525
526+ loadDriver = !driver.handle && driver.customDriver ? true : loadDriver;
527+
526528 if (loadDriver && !driver.handle ) {
527529 auto handle = LOAD_DRIVER_LIBRARY ( driver.name .c_str () );
528530 if ( NULL != handle )
@@ -584,6 +586,14 @@ namespace loader
584586 driver.ddiInitialized = true ;
585587 }
586588
589+ if (!driver.handle && !driver.ddiInitialized ) {
590+ if (debugTraceEnabled) {
591+ std::string message = " init driver " + driver.name + " does not match the requested flags or desc, skipping driver." ;
592+ debug_trace_message (message, " " );
593+ }
594+ return ZE_RESULT_ERROR_UNINITIALIZED;
595+ }
596+
587597 return ZE_RESULT_SUCCESS;
588598 }
589599
@@ -682,14 +692,14 @@ namespace loader
682692 }
683693 }
684694
685- for ( auto name : discoveredDrivers )
695+ for ( auto driverInfo : discoveredDrivers )
686696 {
687697 if (discoveredDrivers.size () == 1 ) {
688- auto handle = LOAD_DRIVER_LIBRARY ( name .c_str () );
698+ auto handle = LOAD_DRIVER_LIBRARY ( driverInfo. path .c_str () );
689699 if ( NULL != handle )
690700 {
691701 if (debugTraceEnabled) {
692- std::string message = " Loading Driver " + name + " succeeded" ;
702+ std::string message = " Loading Driver " + driverInfo. path + " succeeded" ;
693703#if !defined(_WIN32) && !defined(ANDROID)
694704 // TODO: implement same message for windows, move dlinfo to ze_util.h as a macro
695705 struct link_map *dlinfo_map;
@@ -701,17 +711,19 @@ namespace loader
701711 }
702712 allDrivers.emplace_back ();
703713 allDrivers.rbegin ()->handle = handle;
704- allDrivers.rbegin ()->name = name;
714+ allDrivers.rbegin ()->name = driverInfo.path ;
715+ allDrivers.rbegin ()->customDriver = driverInfo.customDriver ;
705716 } else if (debugTraceEnabled) {
706717 GET_LIBRARY_ERROR (loadLibraryErrorValue);
707- std::string errorMessage = " Load Library of " + name + " failed with " ;
718+ std::string errorMessage = " Load Library of " + driverInfo. path + " failed with " ;
708719 debug_trace_message (errorMessage, loadLibraryErrorValue);
709720 loadLibraryErrorValue.clear ();
710721 }
711722 } else {
712723 allDrivers.emplace_back ();
713724 allDrivers.rbegin ()->handle = nullptr ;
714- allDrivers.rbegin ()->name = name;
725+ allDrivers.rbegin ()->name = driverInfo.path ;
726+ allDrivers.rbegin ()->customDriver = driverInfo.customDriver ;
715727 }
716728 }
717729 if (allDrivers.size ()==0 ){
0 commit comments