Skip to content

Commit f2bec67

Browse files
authored
Fix sorting drivers missing function pointers and add multi driver ults (#297)
* Fix sorting drivers missing function pointers and add multi driver ults Signed-off-by: Neil R. Spruit <[email protected]>
1 parent ea92cfe commit f2bec67

File tree

4 files changed

+178
-17
lines changed

4 files changed

+178
-17
lines changed

source/drivers/null/CMakeLists.txt

+52
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,58 @@ if(INSTALL_NULL_DRIVER)
2828
)
2929
endif()
3030

31+
if (BUILD_L0_LOADER_TESTS)
32+
add_library(ze_null_test1 SHARED
33+
${CMAKE_CURRENT_SOURCE_DIR}/ze_null.h
34+
${CMAKE_CURRENT_SOURCE_DIR}/ze_null.cpp
35+
${CMAKE_CURRENT_SOURCE_DIR}/ze_nullddi.cpp
36+
${CMAKE_CURRENT_SOURCE_DIR}/zet_nullddi.cpp
37+
${CMAKE_CURRENT_SOURCE_DIR}/zes_nullddi.cpp
38+
)
39+
40+
add_library(ze_null_test2 SHARED
41+
${CMAKE_CURRENT_SOURCE_DIR}/ze_null.h
42+
${CMAKE_CURRENT_SOURCE_DIR}/ze_null.cpp
43+
${CMAKE_CURRENT_SOURCE_DIR}/ze_nullddi.cpp
44+
${CMAKE_CURRENT_SOURCE_DIR}/zet_nullddi.cpp
45+
${CMAKE_CURRENT_SOURCE_DIR}/zes_nullddi.cpp
46+
)
47+
48+
set_target_properties(ze_null_test1 PROPERTIES
49+
VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
50+
SOVERSION "${PROJECT_VERSION_MAJOR}"
51+
)
52+
53+
set_target_properties(ze_null_test2 PROPERTIES
54+
VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
55+
SOVERSION "${PROJECT_VERSION_MAJOR}"
56+
)
57+
58+
target_include_directories(ze_null_test1
59+
PUBLIC
60+
${CMAKE_CURRENT_SOURCE_DIR}
61+
)
62+
63+
target_include_directories(ze_null_test2
64+
PUBLIC
65+
${CMAKE_CURRENT_SOURCE_DIR}
66+
)
67+
68+
if(INSTALL_NULL_DRIVER)
69+
install(TARGETS ze_null_test1
70+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT level-zero-devel
71+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT level-zero
72+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT level-zero
73+
NAMELINK_COMPONENT level-zero-devel
74+
)
75+
install(TARGETS ze_null_test2
76+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT level-zero-devel
77+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT level-zero
78+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT level-zero
79+
NAMELINK_COMPONENT level-zero-devel
80+
)
81+
endif()
82+
endif()
3183

3284
if(UNIX)
3385
set(GCC_COVERAGE_COMPILE_FLAGS "-fvisibility=hidden -fvisibility-inlines-hidden -fno-strict-aliasing")

source/loader/ze_loader.cpp

+16-2
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,11 @@ namespace loader
7777
uint32_t pCount = 0;
7878
std::vector<ze_driver_handle_t> driverHandles;
7979
ze_result_t res = ZE_RESULT_SUCCESS;
80-
if (desc) {
80+
if (desc && driver.dditable.ze.Global.pfnInitDrivers) {
81+
if (debugTraceEnabled) {
82+
std::string message = "driverSorting " + driver.name + " using zeInitDrivers(" + loader::to_string(&permissiveDesc) + ")";
83+
debug_trace_message(message, "");
84+
}
8185
pCount = 0;
8286
res = driver.dditable.ze.Global.pfnInitDrivers(&pCount, nullptr, &permissiveDesc);
8387
// Verify that this driver successfully init in the call above.
@@ -99,7 +103,11 @@ namespace loader
99103
}
100104
continue;
101105
}
102-
} else {
106+
} else if (driver.dditable.ze.Driver.pfnGet) {
107+
if (debugTraceEnabled) {
108+
std::string message = "driverSorting " + driver.name + " using zeDriverGet";
109+
debug_trace_message(message, "");
110+
}
103111
res = driver.dditable.ze.Driver.pfnGet(&pCount, nullptr);
104112
// Verify that this driver successfully init in the call above.
105113
if (res != ZE_RESULT_SUCCESS) {
@@ -119,6 +127,12 @@ namespace loader
119127
}
120128
continue;
121129
}
130+
} else {
131+
if (debugTraceEnabled) {
132+
std::string message = "driverSorting " + driver.name + " zeDriverGet and zeInitDrivers not supported, skipping driver";
133+
debug_trace_message(message, loader::to_string(res));
134+
}
135+
continue;
122136
}
123137

124138
for (auto handle : driverHandles) {

test/CMakeLists.txt

+44-15
Original file line numberDiff line numberDiff line change
@@ -20,36 +20,65 @@ if(MSVC)
2020
endif()
2121

2222
add_test(NAME tests_api COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeGetLoaderVersionsAPIThenValidVersionIsReturned*)
23-
set_property(TEST tests_api PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
23+
set_property(TEST tests_api PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
2424
add_test(NAME tests_init_gpu_all COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingZeInitDriversWithGPUTypeThenExpectPassWithGPUorAllOnly*)
25-
set_property(TEST tests_init_gpu_all PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
25+
set_property(TEST tests_init_gpu_all PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
2626
add_test(NAME tests_init_npu_all COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingZeInitDriversWithNPUTypeThenExpectPassWithNPUorAllOnly*)
27-
set_property(TEST tests_init_npu_all PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
27+
set_property(TEST tests_init_npu_all PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
2828
add_test(NAME tests_any COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingZeInitDriversWithAnyTypeWithNullDriverAcceptingAllThenExpectatLeast1Driver*)
29-
set_property(TEST tests_any PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
29+
set_property(TEST tests_any PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
3030
add_test(NAME tests_both_init_all COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingZeInitDriversThenzeInitThenBothCallsSucceedWithAllTypes*)
31-
set_property(TEST tests_both_init_all PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
31+
set_property(TEST tests_both_init_all PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
3232
add_test(NAME tests_both_init_gpu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingZeInitDriversThenzeInitThenBothCallsSucceedWithGPUTypes*)
33-
set_property(TEST tests_both_init_gpu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
33+
set_property(TEST tests_both_init_gpu PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
3434
add_test(NAME tests_both_init_npu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingZeInitDriversThenzeInitThenBothCallsSucceedWithNPUTypes*)
35-
set_property(TEST tests_both_init_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
35+
set_property(TEST tests_both_init_npu PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
3636
add_test(NAME tests_both_succeed COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithAllTypes*)
37-
set_property(TEST tests_both_succeed PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
37+
set_property(TEST tests_both_succeed PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
3838
add_test(NAME tests_both_gpu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithGPUTypes*)
39-
set_property(TEST tests_both_gpu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
39+
set_property(TEST tests_both_gpu PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
4040
add_test(NAME tests_both_npu COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeInitThenZeInitDriversThenBothCallsSucceedWithNPUTypes*)
41-
set_property(TEST tests_both_npu PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
41+
set_property(TEST tests_both_npu PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
4242
add_test(NAME tests_missing_api COMMAND tests --gtest_filter=*GivenZeInitDriversUnsupportedOnTheDriverWhenCallingZeInitDriversThenUninitializedReturned*)
43-
set_property(TEST tests_missing_api PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
43+
set_property(TEST tests_missing_api PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
4444
add_test(NAME tests_multi_call_failure COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingZeInitDriversWithTypesUnsupportedWithFailureThenSupportedTypesThenSuccessReturned*)
45-
set_property(TEST tests_multi_call_failure PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1")
45+
set_property(TEST tests_multi_call_failure PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
46+
47+
# Run with multiple drivers
48+
add_test(NAME tests_multi_driver_missing_initDrivers COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWithMultipleDriversMissingInitDriversWhenCallingZeInitDriversThenExpectSuccessForZeInit)
49+
if (MSVC)
50+
set_property(TEST tests_multi_driver_missing_initDrivers PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_ALT_DRIVERS=${CMAKE_BINARY_DIR}/bin/$<CONFIG>/ze_null_test1.dll,${CMAKE_BINARY_DIR}/bin/$<CONFIG>/ze_null_test2.dll")
51+
else()
52+
set_property(TEST tests_multi_driver_missing_initDrivers PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_ALT_DRIVERS=${CMAKE_BINARY_DIR}/lib/libze_null_test1.so,${CMAKE_BINARY_DIR}/lib/libze_null_test2.so")
53+
endif()
54+
55+
add_test(NAME tests_multi_driver_missing_initDrivers_sort_after_error COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWithMultipleDriversMissingInitDriversWhenCallingZeInitDriversThenExpectSuccessForZeInitWithDriverGetAfterInitDrivers)
56+
if (MSVC)
57+
set_property(TEST tests_multi_driver_missing_initDrivers_sort_after_error APPEND PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_ALT_DRIVERS=${CMAKE_BINARY_DIR}/bin/$<CONFIG>/ze_null_test1.dll,${CMAKE_BINARY_DIR}/bin/$<CONFIG>/ze_null_test2.dll")
58+
else()
59+
set_property(TEST tests_multi_driver_missing_initDrivers_sort_after_error APPEND PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_ALT_DRIVERS=${CMAKE_BINARY_DIR}/lib/libze_null_test1.so,${CMAKE_BINARY_DIR}/lib/libze_null_test2.so")
60+
endif()
61+
62+
add_test(NAME tests_multi_driver_sort COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWithMultipleDriversWhenCallingZeInitDriversThenExpectSuccessForZeInit)
63+
if (MSVC)
64+
set_property(TEST tests_multi_driver_sort PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_ALT_DRIVERS=${CMAKE_BINARY_DIR}/bin/$<CONFIG>/ze_null_test1.dll,${CMAKE_BINARY_DIR}/bin/$<CONFIG>/ze_null_test2.dll")
65+
else()
66+
set_property(TEST tests_multi_driver_sort PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_ALT_DRIVERS=${CMAKE_BINARY_DIR}/lib/libze_null_test1.so,${CMAKE_BINARY_DIR}/lib/libze_null_test2.so")
67+
endif()
68+
69+
add_test(NAME tests_multi_driver_driverget_sort COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWithMultipleDriversWhenCallingZeInitThenZeInitDriversThenExpectSuccessForZeInitWithDriverGetAfterInitDrivers)
70+
if (MSVC)
71+
set_property(TEST tests_multi_driver_driverget_sort APPEND PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_ALT_DRIVERS=${CMAKE_BINARY_DIR}/bin/$<CONFIG>/ze_null_test1.dll,${CMAKE_BINARY_DIR}/bin/$<CONFIG>/ze_null_test2.dll")
72+
else()
73+
set_property(TEST tests_multi_driver_driverget_sort APPEND PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_ALT_DRIVERS=${CMAKE_BINARY_DIR}/lib/libze_null_test1.so,${CMAKE_BINARY_DIR}/lib/libze_null_test2.so")
74+
endif()
4675

4776
# These tests are currently not supported on Windows. The reason is that the std::cerr is not being redirected to a pipe in Windows to be then checked against the expected output.
4877
if(NOT MSVC)
4978
add_test(NAME tests_event_deadlock COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeCommandListAppendMemoryCopyWithCircularDependencyOnEventsThenValidationLayerPrintsWarningOfDeadlock*)
50-
set_property(TEST tests_event_deadlock PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1;ZE_ENABLE_VALIDATION_LAYER=1;ZEL_ENABLE_EVENTS_CHECKER=1")
79+
set_property(TEST tests_event_deadlock PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1;ZE_ENABLE_VALIDATION_LAYER=1;ZEL_ENABLE_EVENTS_CHECKER=1")
5180
add_test(NAME tests_event_deadlock_reset COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeCommandListAppendMemoryCopyWithCircularDependencyOnEventsAndExplicitCallzeEventHostSignalThenValidationLayerPrintsWarningOfIllegalUsage*)
52-
set_property(TEST tests_event_deadlock_reset PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1;ZE_ENABLE_VALIDATION_LAYER=1;ZEL_ENABLE_EVENTS_CHECKER=1")
81+
set_property(TEST tests_event_deadlock_reset PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1;ZE_ENABLE_VALIDATION_LAYER=1;ZEL_ENABLE_EVENTS_CHECKER=1")
5382
add_test(NAME tests_event_reset_reuse COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeEventHostResetWithAlreadySignaledEventThenUsingEventAgainThenValidationLayerDoesNotPrintsWarningOfIllegalUsage*)
54-
set_property(TEST tests_event_reset_reuse PROPERTY ENVIRONMENT "ZE_ENABLE_NULL_DRIVER=1;ZE_ENABLE_VALIDATION_LAYER=1;ZEL_ENABLE_EVENTS_CHECKER=1")
83+
set_property(TEST tests_event_reset_reuse PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1;ZE_ENABLE_VALIDATION_LAYER=1;ZEL_ENABLE_EVENTS_CHECKER=1")
5584
endif()

test/loader_api.cpp

+66
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,70 @@ TEST(
251251
EXPECT_GT(pDriverGetCount, 0);
252252
}
253253

254+
TEST(
255+
LoaderInit,
256+
GivenLevelZeroLoaderPresentWithMultipleDriversMissingInitDriversWhenCallingZeInitDriversThenExpectSuccessForZeInit) {
257+
258+
uint32_t pInitDriversCount = 0;
259+
uint32_t pDriverGetCount = 0;
260+
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
261+
desc.flags = UINT32_MAX;
262+
desc.pNext = nullptr;
263+
putenv_safe( const_cast<char *>( "ZEL_TEST_MISSING_API=zeInitDrivers" ) );
264+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(0));
265+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
266+
EXPECT_GT(pDriverGetCount, 0);
267+
EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
268+
EXPECT_EQ(pInitDriversCount, 0);
269+
}
270+
271+
TEST(
272+
LoaderInit,
273+
GivenLevelZeroLoaderPresentWithMultipleDriversMissingInitDriversWhenCallingZeInitDriversThenExpectSuccessForZeInitWithDriverGetAfterInitDrivers) {
274+
275+
uint32_t pInitDriversCount = 0;
276+
uint32_t pDriverGetCount = 0;
277+
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
278+
desc.flags = UINT32_MAX;
279+
desc.pNext = nullptr;
280+
putenv_safe( const_cast<char *>( "ZEL_TEST_MISSING_API=zeInitDrivers" ) );
281+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(0));
282+
EXPECT_EQ(ZE_RESULT_ERROR_UNINITIALIZED, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
283+
EXPECT_EQ(pInitDriversCount, 0);
284+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
285+
EXPECT_GT(pDriverGetCount, 0);
286+
}
287+
288+
TEST(
289+
LoaderInit,
290+
GivenLevelZeroLoaderPresentWithMultipleDriversWhenCallingZeInitDriversThenExpectSuccessForZeInit) {
291+
292+
uint32_t pInitDriversCount = 0;
293+
uint32_t pDriverGetCount = 0;
294+
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
295+
desc.flags = UINT32_MAX;
296+
desc.pNext = nullptr;
297+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
298+
EXPECT_GT(pInitDriversCount, 0);
299+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(0));
300+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
301+
EXPECT_GT(pDriverGetCount, 0);
302+
}
303+
304+
TEST(
305+
LoaderInit,
306+
GivenLevelZeroLoaderPresentWithMultipleDriversWhenCallingZeInitThenZeInitDriversThenExpectSuccessForZeInitWithDriverGetAfterInitDrivers) {
307+
308+
uint32_t pInitDriversCount = 0;
309+
uint32_t pDriverGetCount = 0;
310+
ze_init_driver_type_desc_t desc = {ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC};
311+
desc.flags = UINT32_MAX;
312+
desc.pNext = nullptr;
313+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInit(0));
314+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeInitDrivers(&pInitDriversCount, nullptr, &desc));
315+
EXPECT_GT(pInitDriversCount, 0);
316+
EXPECT_EQ(ZE_RESULT_SUCCESS, zeDriverGet(&pDriverGetCount, nullptr));
317+
EXPECT_GT(pDriverGetCount, 0);
318+
}
319+
254320
} // namespace

0 commit comments

Comments
 (0)