@@ -13,45 +13,61 @@ using namespace loader_driver_ddi;
1313
1414namespace loader
1515{
16+ ///////////////////////////////////////////////////////////////////////////////
17+ /// @brief Initialize all DDI tables for a driver by calling *FromDriver functions
18+ ///
19+ /// @details This function can fail in the following scenarios:
20+ /// - driver->initStatus is already set to a failure code (from a previous
21+ /// required DDI initialization failure). Each *FromDriver call first checks
22+ /// driver->initStatus and returns it immediately if it's already a failure.
23+ /// - A required DDI table's getTable call into the driver returns a failure,
24+ /// which updates driver->initStatus and is propagated back
25+ ///
26+ /// Note: If GET_FUNCTION_PTR returns null (function not found in driver),
27+ /// it only fails if driver->initStatus was already a failure. Otherwise,
28+ /// driver->initStatus is returned (which would be SUCCESS).
29+ ///
30+ /// Note: Optional DDI tables (when namespace != "zer") are ignored if they
31+ /// fail, and this function continues to attempt loading remaining tables.
32+ /// Only required DDI table failures cause this function to fail and return
33+ /// immediately.
34+ ///
35+ /// @returns
36+ /// - ::ZE_RESULT_SUCCESS if all required DDI tables loaded successfully
37+ /// - ::ZE_RESULT_ERROR_* if any required DDI table failed to load
1638 __zedlllocal ze_result_t ZE_APICALL
1739 zeloaderInitDriverDDITables(loader::driver_t *driver) {
1840 ze_result_t result = ZE_RESULT_SUCCESS;
1941 result = zeGetGlobalProcAddrTableFromDriver(driver);
2042 if (result != ZE_RESULT_SUCCESS) {
2143 return result;
2244 }
23- result = zeGetRTASBuilderProcAddrTableFromDriver(driver);
24- if (result != ZE_RESULT_SUCCESS) {
25- return result;
26- }
27- result = zeGetRTASBuilderExpProcAddrTableFromDriver(driver);
28- if (result != ZE_RESULT_SUCCESS) {
29- return result;
30- }
31- result = zeGetRTASParallelOperationProcAddrTableFromDriver(driver);
32- if (result != ZE_RESULT_SUCCESS) {
33- return result;
34- }
35- result = zeGetRTASParallelOperationExpProcAddrTableFromDriver(driver);
36- if (result != ZE_RESULT_SUCCESS) {
37- return result;
38- }
45+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
46+ zeGetRTASBuilderProcAddrTableFromDriver(driver);
47+ result = ZE_RESULT_SUCCESS;
48+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
49+ zeGetRTASBuilderExpProcAddrTableFromDriver(driver);
50+ result = ZE_RESULT_SUCCESS;
51+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
52+ zeGetRTASParallelOperationProcAddrTableFromDriver(driver);
53+ result = ZE_RESULT_SUCCESS;
54+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
55+ zeGetRTASParallelOperationExpProcAddrTableFromDriver(driver);
56+ result = ZE_RESULT_SUCCESS;
3957 result = zeGetDriverProcAddrTableFromDriver(driver);
4058 if (result != ZE_RESULT_SUCCESS) {
4159 return result;
4260 }
43- result = zeGetDriverExpProcAddrTableFromDriver(driver);
44- if (result != ZE_RESULT_SUCCESS) {
45- return result;
46- }
61+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
62+ zeGetDriverExpProcAddrTableFromDriver(driver);
63+ result = ZE_RESULT_SUCCESS;
4764 result = zeGetDeviceProcAddrTableFromDriver(driver);
4865 if (result != ZE_RESULT_SUCCESS) {
4966 return result;
5067 }
51- result = zeGetDeviceExpProcAddrTableFromDriver(driver);
52- if (result != ZE_RESULT_SUCCESS) {
53- return result;
54- }
68+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
69+ zeGetDeviceExpProcAddrTableFromDriver(driver);
70+ result = ZE_RESULT_SUCCESS;
5571 result = zeGetContextProcAddrTableFromDriver(driver);
5672 if (result != ZE_RESULT_SUCCESS) {
5773 return result;
@@ -64,18 +80,16 @@ namespace loader
6480 if (result != ZE_RESULT_SUCCESS) {
6581 return result;
6682 }
67- result = zeGetCommandListExpProcAddrTableFromDriver(driver);
68- if (result != ZE_RESULT_SUCCESS) {
69- return result;
70- }
83+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
84+ zeGetCommandListExpProcAddrTableFromDriver(driver);
85+ result = ZE_RESULT_SUCCESS;
7186 result = zeGetEventProcAddrTableFromDriver(driver);
7287 if (result != ZE_RESULT_SUCCESS) {
7388 return result;
7489 }
75- result = zeGetEventExpProcAddrTableFromDriver(driver);
76- if (result != ZE_RESULT_SUCCESS) {
77- return result;
78- }
90+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
91+ zeGetEventExpProcAddrTableFromDriver(driver);
92+ result = ZE_RESULT_SUCCESS;
7993 result = zeGetEventPoolProcAddrTableFromDriver(driver);
8094 if (result != ZE_RESULT_SUCCESS) {
8195 return result;
@@ -88,26 +102,23 @@ namespace loader
88102 if (result != ZE_RESULT_SUCCESS) {
89103 return result;
90104 }
91- result = zeGetImageExpProcAddrTableFromDriver(driver);
92- if (result != ZE_RESULT_SUCCESS) {
93- return result;
94- }
105+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
106+ zeGetImageExpProcAddrTableFromDriver(driver);
107+ result = ZE_RESULT_SUCCESS;
95108 result = zeGetKernelProcAddrTableFromDriver(driver);
96109 if (result != ZE_RESULT_SUCCESS) {
97110 return result;
98111 }
99- result = zeGetKernelExpProcAddrTableFromDriver(driver);
100- if (result != ZE_RESULT_SUCCESS) {
101- return result;
102- }
112+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
113+ zeGetKernelExpProcAddrTableFromDriver(driver);
114+ result = ZE_RESULT_SUCCESS;
103115 result = zeGetMemProcAddrTableFromDriver(driver);
104116 if (result != ZE_RESULT_SUCCESS) {
105117 return result;
106118 }
107- result = zeGetMemExpProcAddrTableFromDriver(driver);
108- if (result != ZE_RESULT_SUCCESS) {
109- return result;
110- }
119+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
120+ zeGetMemExpProcAddrTableFromDriver(driver);
121+ result = ZE_RESULT_SUCCESS;
111122 result = zeGetModuleProcAddrTableFromDriver(driver);
112123 if (result != ZE_RESULT_SUCCESS) {
113124 return result;
@@ -128,14 +139,12 @@ namespace loader
128139 if (result != ZE_RESULT_SUCCESS) {
129140 return result;
130141 }
131- result = zeGetFabricEdgeExpProcAddrTableFromDriver(driver);
132- if (result != ZE_RESULT_SUCCESS) {
133- return result;
134- }
135- result = zeGetFabricVertexExpProcAddrTableFromDriver(driver);
136- if (result != ZE_RESULT_SUCCESS) {
137- return result;
138- }
142+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
143+ zeGetFabricEdgeExpProcAddrTableFromDriver(driver);
144+ result = ZE_RESULT_SUCCESS;
145+ // Optional DDI Table, ignore failure if a driver implements the ddi table, but returns an error.
146+ zeGetFabricVertexExpProcAddrTableFromDriver(driver);
147+ result = ZE_RESULT_SUCCESS;
139148 return result;
140149 }
141150 ///////////////////////////////////////////////////////////////////////////////
@@ -7819,11 +7828,7 @@ zeGetRTASBuilderProcAddrTableFromDriver(loader::driver_t *driver)
78197828 GET_FUNCTION_PTR( driver->handle, "zeGetRTASBuilderProcAddrTable") );
78207829 if(!getTable)
78217830 return driver->initStatus;
7822- auto getTableResult = getTable( loader::context->ddi_init_version, &driver->dditable.ze.RTASBuilder);
7823- if(getTableResult == ZE_RESULT_SUCCESS) {
7824- loader::context->configured_version = loader::context->ddi_init_version;
7825- } else
7826- driver->initStatus = getTableResult;
7831+ result = getTable( loader::context->ddi_init_version, &driver->dditable.ze.RTASBuilder);
78277832 return result;
78287833}
78297834///////////////////////////////////////////////////////////////////////////////
@@ -7867,11 +7872,7 @@ zeGetRTASParallelOperationProcAddrTableFromDriver(loader::driver_t *driver)
78677872 GET_FUNCTION_PTR( driver->handle, "zeGetRTASParallelOperationProcAddrTable") );
78687873 if(!getTable)
78697874 return driver->initStatus;
7870- auto getTableResult = getTable( loader::context->ddi_init_version, &driver->dditable.ze.RTASParallelOperation);
7871- if(getTableResult == ZE_RESULT_SUCCESS) {
7872- loader::context->configured_version = loader::context->ddi_init_version;
7873- } else
7874- driver->initStatus = getTableResult;
7875+ result = getTable( loader::context->ddi_init_version, &driver->dditable.ze.RTASParallelOperation);
78757876 return result;
78767877}
78777878///////////////////////////////////////////////////////////////////////////////
0 commit comments