Skip to content

Commit e6f47c3

Browse files
test: Add tests for zer API's (#381)
* test: Add tests for zer API's Signed-off-by: Vishnu Khanth <vishnu.khanth.b@intel.com>
1 parent 9526595 commit e6f47c3

6 files changed

Lines changed: 437 additions & 16 deletions

File tree

scripts/templates/nullddi.cpp.mako

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,17 @@ ${tbl['export']['name']}(
132132
%endfor
133133
)
134134
{
135+
%if n == 'zer':
136+
auto zer_api_disable = getenv_string( "ZEL_TEST_NULL_DRIVER_DISABLE_ZER_API" );
137+
#ifndef ZEL_NULL_DRIVER_ID
138+
#define ZEL_NULL_DRIVER_ID 1
139+
#endif
140+
std::string null_driver_id_str = std::to_string(ZEL_NULL_DRIVER_ID);
141+
auto zer_api_unsupported = (zer_api_disable == null_driver_id_str);
142+
if(zer_api_unsupported)
143+
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
144+
145+
%endif
135146
if( nullptr == pDdiTable )
136147
return ${X}_RESULT_ERROR_INVALID_NULL_POINTER;
137148

source/drivers/null/ze_null.cpp

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ namespace driver
2222
//////////////////////////////////////////////////////////////////////////
2323
context_t::context_t()
2424
{
25+
auto ddi_test_disable = getenv_string( "ZEL_TEST_NULL_DRIVER_DISABLE_DDI_EXT" );
26+
#ifndef ZEL_NULL_DRIVER_ID
27+
#define ZEL_NULL_DRIVER_ID 1
28+
#endif
29+
std::string null_driver_id_str = std::to_string(ZEL_NULL_DRIVER_ID);
30+
ddiExtensionSupported = (ddi_test_disable != null_driver_id_str && ddi_test_disable != "3");
31+
2532
zesDdiTable.Driver.pfnGet = [](
2633
uint32_t* pCount,
2734
ze_driver_handle_t* phDrivers )
@@ -69,15 +76,9 @@ namespace driver
6976
{
7077
auto pNext = reinterpret_cast<ze_base_properties_t *>(pDriverProperties->pNext);
7178
while (pNext) {
72-
auto ddi_test_disable = getenv_string( "ZEL_TEST_NULL_DRIVER_DISABLE_DDI_EXT" );
73-
#ifndef ZEL_NULL_DRIVER_ID
74-
#define ZEL_NULL_DRIVER_ID 1
75-
#endif
76-
std::string null_driver_id_str = std::to_string(ZEL_NULL_DRIVER_ID);
77-
if (pNext->stype == ZE_STRUCTURE_TYPE_DRIVER_DDI_HANDLES_EXT_PROPERTIES && (ddi_test_disable != null_driver_id_str && ddi_test_disable != "3")) {
79+
if (pNext->stype == ZE_STRUCTURE_TYPE_DRIVER_DDI_HANDLES_EXT_PROPERTIES && context.ddiExtensionSupported) {
7880
ze_driver_ddi_handles_ext_properties_t *pDdiHandlesExtProperties = reinterpret_cast<ze_driver_ddi_handles_ext_properties_t *>(pNext);
7981
pDdiHandlesExtProperties->flags = ze_driver_ddi_handle_ext_flag_t::ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED;
80-
context.ddiExtensionRequested = true;
8182
}
8283
pNext = reinterpret_cast<ze_base_properties_t *>(pNext->pNext);
8384
}
@@ -487,17 +488,32 @@ namespace driver
487488
{
488489
if( nullptr != pExtensionProperties )
489490
{
490-
ze_driver_extension_properties_t driverExtensionProperties = {};
491+
ze_driver_extension_properties_t tracingExtension = {};
492+
#if defined(_WIN32)
493+
strcpy_s( tracingExtension.name, ZET_API_TRACING_EXP_NAME );
494+
#else
495+
strcpy( tracingExtension.name, ZET_API_TRACING_EXP_NAME );
496+
#endif
497+
tracingExtension.version = ZET_API_TRACING_EXP_VERSION_1_0;
498+
pExtensionProperties[0] = tracingExtension;
499+
500+
ze_driver_extension_properties_t ddiHandlesExtension = {};
491501
#if defined(_WIN32)
492-
strcpy_s( driverExtensionProperties.name, ZET_API_TRACING_EXP_NAME );
502+
strcpy_s( ddiHandlesExtension.name, ZE_DRIVER_DDI_HANDLES_EXT_NAME );
493503
#else
494-
strcpy( driverExtensionProperties.name, ZET_API_TRACING_EXP_NAME );
504+
strcpy( ddiHandlesExtension.name, ZE_DRIVER_DDI_HANDLES_EXT_NAME );
495505
#endif
496-
driverExtensionProperties.version = ZET_API_TRACING_EXP_VERSION_1_0;
497506

498-
*pExtensionProperties = driverExtensionProperties;
507+
auto ddi_version_env = getenv_string("ZEL_TEST_DDI_HANDLES_EXT_VERSION");
508+
if (!ddi_version_env.empty() && ddi_version_env == "1_0") {
509+
ddiHandlesExtension.version = ZE_DRIVER_DDI_HANDLES_EXT_VERSION_1_0;
510+
} else {
511+
ddiHandlesExtension.version = ZE_DRIVER_DDI_HANDLES_EXT_VERSION_1_1;
512+
}
513+
514+
pExtensionProperties[1] = ddiHandlesExtension;
499515
}
500-
*pCount = 1;
516+
*pCount = 2;
501517

502518
return ZE_RESULT_SUCCESS;
503519
};
@@ -629,6 +645,16 @@ namespace driver
629645
pSysman.Driver = &zesDdiTable.Driver;
630646
pSysman.isValidFlag = 1;
631647
pSysman.version = ZE_API_VERSION_CURRENT;
648+
649+
static zer_global_dditable_t runtimeDdiTable;
650+
runtimeDdiTable.pfnGetLastErrorDescription = driver::zerGetLastErrorDescription;
651+
runtimeDdiTable.pfnTranslateDeviceHandleToIdentifier = driver::zerTranslateDeviceHandleToIdentifier;
652+
runtimeDdiTable.pfnTranslateIdentifierToDeviceHandle = driver::zerTranslateIdentifierToDeviceHandle;
653+
runtimeDdiTable.pfnGetDefaultContext = driver::zerGetDefaultContext;
654+
655+
pRuntime.Global = &runtimeDdiTable;
656+
pRuntime.isValidFlag = 1;
657+
pRuntime.version = ZE_API_VERSION_CURRENT;
632658
}
633659

634660
char *context_t::setenv_var_with_driver_id(const std::string &key, uint32_t driverId)

source/drivers/null/ze_null.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ namespace driver
4545
zes_dditable_t zesDdiTable = {};
4646
zer_dditable_t zerDdiTable = {};
4747
std::vector<BaseNullHandle*> globalBaseNullHandle;
48-
bool ddiExtensionRequested = false;
48+
bool ddiExtensionSupported = false;
4949
std::vector<char *> env_vars{};
5050
context_t();
5151
~context_t();
5252

5353
void* get( void )
5454
{
5555
static uint64_t count = 0x80800000 >> ZEL_NULL_DRIVER_ID;
56-
if (ddiExtensionRequested) {
56+
if (ddiExtensionSupported) {
5757
globalBaseNullHandle.push_back(new BaseNullHandle());
5858
return reinterpret_cast<void*>(globalBaseNullHandle.back());
5959
} else {
@@ -64,6 +64,11 @@ namespace driver
6464
char *setenv_var_with_driver_id(const std::string &key, uint32_t driverId);
6565
};
6666

67+
ze_result_t ZE_APICALL zerGetLastErrorDescription(const char **ppString);
68+
uint32_t ZE_APICALL zerTranslateDeviceHandleToIdentifier(ze_device_handle_t hDevice);
69+
ze_device_handle_t ZE_APICALL zerTranslateIdentifierToDeviceHandle(uint32_t identifier);
70+
ze_context_handle_t ZE_APICALL zerGetDefaultContext(void);
71+
6772
extern context_t context;
6873
} // namespace driver
6974

source/drivers/null/zer_nullddi.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,15 @@ zerGetGlobalProcAddrTable(
137137
zer_global_dditable_t* pDdiTable ///< [in,out] pointer to table of DDI function pointers
138138
)
139139
{
140+
auto zer_api_disable = getenv_string( "ZEL_TEST_NULL_DRIVER_DISABLE_ZER_API" );
141+
#ifndef ZEL_NULL_DRIVER_ID
142+
#define ZEL_NULL_DRIVER_ID 1
143+
#endif
144+
std::string null_driver_id_str = std::to_string(ZEL_NULL_DRIVER_ID);
145+
auto zer_api_unsupported = (zer_api_disable == null_driver_id_str);
146+
if(zer_api_unsupported)
147+
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
148+
140149
if( nullptr == pDdiTable )
141150
return ZE_RESULT_ERROR_INVALID_NULL_POINTER;
142151

test/CMakeLists.txt

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,6 @@ add_test(NAME driver_ordering_parse_driver_order COMMAND tests --gtest_filter=Dr
597597
set_property(TEST driver_ordering_parse_driver_order PROPERTY ENVIRONMENT "ZE_ENABLE_LOADER_DEBUG_TRACE=1;ZE_ENABLE_NULL_DRIVER=1")
598598

599599

600-
601600
# 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.
602601
if(NOT MSVC)
603602
add_test(NAME tests_event_deadlock COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeCommandListAppendMemoryCopyWithCircularDependencyOnEventsThenValidationLayerPrintsWarningOfDeadlock*)
@@ -607,3 +606,59 @@ if(NOT MSVC)
607606
add_test(NAME tests_event_reset_reuse COMMAND tests --gtest_filter=*GivenLevelZeroLoaderPresentWhenCallingzeEventHostResetWithAlreadySignaledEventThenUsingEventAgainThenValidationLayerDoesNotPrintsWarningOfIllegalUsage*)
608607
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")
609608
endif()
609+
610+
# ZER Runtime API Tests
611+
612+
# Helper function to add runtime API tests
613+
function(add_runtime_api_test test_scenario init_method driver_config)
614+
set(test_name "tests_${driver_config}_runtime_api_${test_scenario}_${init_method}")
615+
616+
# Define test scenarios and their corresponding gtest filters
617+
if(test_scenario STREQUAL "ddi_ext_v1_1")
618+
set(gtest_filter "*GivenLevelZeroLoaderPresentWithLoaderInterceptEnabledAndDdiExtSupportedWhenCallingRuntimeApisAfter${init_method}ThenExpectNullDriverIsReachedSuccessfully")
619+
elseif(test_scenario STREQUAL "ddi_ext_unsupported")
620+
set(gtest_filter "*GivenLevelZeroLoaderPresentWithLoaderInterceptEnabledAndDdiExtNotSupportedWhenCallingRuntimeApisAfter${init_method}ThenExpectNullDriverIsReachedSuccessfully")
621+
elseif(test_scenario STREQUAL "ddi_ext_v1_0")
622+
set(gtest_filter "*GivenLevelZeroLoaderPresentWithLoaderInterceptEnabledAndDdiExtSupportedWithVersion1_0WhenCallingRuntimeApisAfter${init_method}ThenExpectErrorUninitialized")
623+
elseif(test_scenario STREQUAL "runtime_api_unsupported")
624+
set(gtest_filter "*GivenLevelZeroLoaderPresentWithLoaderInterceptEnabledAndRuntimeApiUnsupportedWhenCallingRuntimeApisAfter${init_method}ThenExpectErrorUnsupportedFeature")
625+
endif()
626+
627+
# Add the test
628+
add_test(NAME ${test_name} COMMAND tests --gtest_filter=${gtest_filter})
629+
630+
# Set base environment variables
631+
set(base_env "ZE_ENABLE_LOADER_DRIVER_DDI_PATH=1;ZE_ENABLE_LOADER_DEBUG_TRACE=1")
632+
633+
if(driver_config STREQUAL "single_driver")
634+
# Single driver configuration
635+
set_property(TEST ${test_name} PROPERTY ENVIRONMENT "${base_env};ZE_ENABLE_NULL_DRIVER=1")
636+
elseif(driver_config STREQUAL "multi_driver")
637+
# Multi-driver configuration
638+
if(MSVC)
639+
set(alt_drivers "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/ze_null_test1.dll,${CMAKE_BINARY_DIR}/bin/$<CONFIG>/ze_null_test2.dll")
640+
else()
641+
set(alt_drivers "${CMAKE_BINARY_DIR}/lib/libze_null_test1.so,${CMAKE_BINARY_DIR}/lib/libze_null_test2.so")
642+
endif()
643+
set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT "${base_env};ZE_ENABLE_ALT_DRIVERS=${alt_drivers}")
644+
endif()
645+
endfunction()
646+
647+
# Generate all ZER Runtime API tests using loops
648+
set(test_scenarios "ddi_ext_v1_1;ddi_ext_unsupported;ddi_ext_v1_0")
649+
set(init_methods "ZeInitDrivers;ZeInit")
650+
651+
foreach(init_method IN LISTS init_methods)
652+
foreach(test_scenario IN LISTS test_scenarios)
653+
# Add single driver tests
654+
add_runtime_api_test(${test_scenario} ${init_method} "single_driver")
655+
656+
# Add multi-driver tests
657+
add_runtime_api_test(${test_scenario} ${init_method} "multi_driver")
658+
endforeach()
659+
660+
# Add runtime_api_unsupported tests for single driver
661+
if(init_method STREQUAL "ZeInitDrivers")
662+
add_runtime_api_test("runtime_api_unsupported" ${init_method} "single_driver")
663+
endif()
664+
endforeach()

0 commit comments

Comments
 (0)