diff --git a/source/loader/ze_ldrddi.cpp b/source/loader/ze_ldrddi.cpp index ba93026..9ac3258 100644 --- a/source/loader/ze_ldrddi.cpp +++ b/source/loader/ze_ldrddi.cpp @@ -134,9 +134,11 @@ namespace loader for( auto& drv : loader::context->zeDrivers ) { if (!drv.dditable.ze.Global.pfnInitDrivers) { - drv.initStatus = ZE_RESULT_ERROR_UNINITIALIZED; + drv.initDriversStatus = ZE_RESULT_ERROR_UNINITIALIZED; continue; } + if(drv.initDriversStatus != ZE_RESULT_SUCCESS) + continue; if( ( 0 < *pCount ) && ( *pCount == total_driver_handle_count)) break; @@ -147,7 +149,7 @@ namespace loader if( ZE_RESULT_SUCCESS != result ) { // If Get Drivers fails with Uninitialized, then update the driver init status to prevent reporting this driver in the next get call. if (ZE_RESULT_ERROR_UNINITIALIZED == result) { - drv.initStatus = result; + drv.initDriversStatus = result; } continue; } diff --git a/source/loader/ze_loader.cpp b/source/loader/ze_loader.cpp index da97ef8..b7b6169 100644 --- a/source/loader/ze_loader.cpp +++ b/source/loader/ze_loader.cpp @@ -179,6 +179,8 @@ namespace loader if (drivers->size() == 1 && !loader::context->forceIntercept) { *requireDdiReinit = true; } + } else { + it++; } if(return_first_driver_result) return result; @@ -309,8 +311,8 @@ namespace loader uint32_t pCount = 0; ze_result_t res = globalInitStored->pfnInitDrivers(&pCount, nullptr, desc); // Verify that this driver successfully init in the call above. - if (driver.initStatus != ZE_RESULT_SUCCESS) { - res = driver.initStatus; + if (driver.initDriversStatus != ZE_RESULT_SUCCESS) { + res = driver.initDriversStatus; } if (debugTraceEnabled) { std::string message = "init driver " + driver.name + " zeInitDrivers(" + loader::to_string(desc) + ") returning "; diff --git a/source/loader/ze_loader_internal.h b/source/loader/ze_loader_internal.h index 2b624a3..087adef 100644 --- a/source/loader/ze_loader_internal.h +++ b/source/loader/ze_loader_internal.h @@ -31,6 +31,7 @@ namespace loader { HMODULE handle = NULL; ze_result_t initStatus = ZE_RESULT_SUCCESS; + ze_result_t initDriversStatus = ZE_RESULT_SUCCESS; dditable_t dditable = {}; std::string name; bool driverInuse = false; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 334efea..6dca364 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -37,8 +37,4 @@ set_property(TEST tests_both_succeed PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER add_test(NAME tests_both_gpu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithGPUTypes*) set_property(TEST tests_both_gpu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1") add_test(NAME tests_both_npu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithNPUTypes*) -set_property(TEST tests_both_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1") -add_test(NAME tests_only_one_gpu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforGPUTypes*) -set_property(TEST tests_only_one_gpu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1") -add_test(NAME tests_only_one_npu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforNPUTypes*) -set_property(TEST tests_only_one_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1") \ No newline at end of file +set_property(TEST tests_both_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1") \ No newline at end of file diff --git a/test/loader_api.cpp b/test/loader_api.cpp index ca55798..3a49909 100644 --- a/test/loader_api.cpp +++ b/test/loader_api.cpp @@ -192,32 +192,4 @@ TEST( EXPECT_GT(pCount, 0); } -TEST( - LoaderInit, - GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforGPUTypes) { - - uint32_t pCount = 0; - ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC}; - desc.flags = UINT32_MAX; - desc.pNext = nullptr; - putenv_safe( const_cast( "ZEL_TEST_NULL_DRIVER_TYPE=GPU" ) ); - EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInit(ZE_INIT_FLAG_VPU_ONLY)); - EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc)); - EXPECT_GT(pCount, 0); -} - -TEST( - LoaderInit, - GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenOnlyOneSucceedsforNPUTypes) { - - uint32_t pCount = 0; - ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC}; - desc.flags = UINT32_MAX; - desc.pNext = nullptr; - putenv_safe( const_cast( "ZEL_TEST_NULL_DRIVER_TYPE=NPU" ) ); - EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInit(ZE_INIT_FLAG_GPU_ONLY)); - EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pCount, nullptr, &desc)); - EXPECT_GT(pCount, 0); -} - } // namespace