@@ -23,17 +23,6 @@ from templates import helper as th
2323
2424namespace ur_loader
2525{
26- ///////////////////////////////////////////////////////////////////////////////
27- % for obj in th.get_adapter_handles(specs):
28- % if ' class' in obj:
29- <%
30- _handle_t = th.subt(n, tags, obj[' name' ])
31- _factory_t = re.sub(r " ( \w + ) _handle_t" , r " \1 _factory_t" , _handle_t)
32- _factory = re.sub(r " ( \w + ) _handle_t" , r " \1 _factory" , _handle_t)
33- %> ${ th.append_ws(_factory_t, 35 )} ${ _factory} ;
34- %endif
35- %endfor
36-
3726 % for obj in th.get_adapter_functions(specs):
3827 ///////////////////////////////////////////////////////////////////////////////
3928 /// @brief Intercept function for ${ th.make_func_name(n, tags, obj)}
@@ -51,6 +40,7 @@ namespace ur_loader
5140 add_local = False
5241 %> ${ th.get_initial_null_set(obj)}
5342
43+ [[maybe_unused]] auto context = getContext();
5444 % if re.match(r " \w + AdapterGet$ " , th.make_func_name(n, tags, obj)):
5545
5646 size_t adapterIndex = 0;
@@ -63,7 +53,7 @@ namespace ur_loader
6353 platform.dditable.${ n} .${ th.get_table_name(n, tags, obj)} .${ th.make_pfn_name(n, tags, obj)} ( 1, & ${ obj[' params' ][1 ][' name' ]} [adapterIndex], nullptr );
6454 try
6555 {
66- ${ obj[' params' ][1 ][' name' ]} [adapterIndex] = reinterpret_cast<${ n} _adapter_handle_t>(${ n} _adapter_factory.getInstance(
56+ ${ obj[' params' ][1 ][' name' ]} [adapterIndex] = reinterpret_cast<${ n} _adapter_handle_t>(context->factories. ${ n} _adapter_factory.getInstance(
6757 ${ obj[' params' ][1 ][' name' ]} [adapterIndex], &platform.dditable
6858 ));
6959 }
@@ -114,7 +104,7 @@ namespace ur_loader
114104 for( uint32_t i = 0; i < library_platform_handle_count; ++i ) {
115105 uint32_t platform_index = total_platform_handle_count + i;
116106 ${ obj[' params' ][3 ][' name' ]} [ platform_index ] = reinterpret_cast<${ n} _platform_handle_t>(
117- ${ n} _platform_factory.getInstance( ${ obj[' params' ][3 ][' name' ]} [ platform_index ], dditable ) );
107+ context->factories. ${ n} _platform_factory.getInstance( ${ obj[' params' ][3 ][' name' ]} [ platform_index ], dditable ) );
118108 }
119109 }
120110 catch( std::bad_alloc& )
@@ -272,9 +262,16 @@ namespace ur_loader
272262 %>
273263 % for i, item in enumerate (epilogue):
274264 % if 0 == i and not item[' release' ] and not item[' retain' ] and not th.always_wrap_outputs(obj):
275- if( ${ X} _RESULT_SUCCESS != result )
265+ ## TODO: Remove once we have a concrete way for submitting warnings in place.
266+ % if re.match(r " urEnqueue\w + " , th.make_func_name(n, tags, obj)):
267+ // In the event of ERROR_ADAPTER_SPECIFIC we should still attempt to wrap any output handles below.
268+ if( ${ X} _RESULT_SUCCESS != result && ${ X} _RESULT_ERROR_ADAPTER_SPECIFIC != result )
269+ return result;
270+ % else :
271+ if( ${ X} _RESULT_SUCCESS != result)
276272 return result;
277273
274+ %endif
278275 %endif
279276 ## Before we can re-enable the releases we will need ref-counted object_t.
280277 ## See unified-runtime github issue #1784
@@ -294,7 +291,7 @@ namespace ur_loader
294291 for (size_t i = 0; i < nelements; ++i) {
295292 if (handles[i] != nullptr) {
296293 handles[i] = reinterpret_cast<${ etor[' type' ]} >(
297- ${ etor[' factory' ]} .getInstance( handles[i], dditable ) );
294+ context->factories. ${ etor[' factory' ]} .getInstance( handles[i], dditable ) );
298295 }
299296 }
300297 } break;
@@ -306,16 +303,16 @@ namespace ur_loader
306303 // convert platform handles to loader handles
307304 for( size_t i = ${ item[' range' ][0 ]} ; ( nullptr != ${ item[' name' ]} ) && ( i < ${ item[' range' ][1 ]} ); ++i )
308305 ${ item[' name' ]} [ i ] = reinterpret_cast<${ item[' type' ]} >(
309- ${ item[' factory' ]} .getInstance( ${ item[' name' ]} [ i ], dditable ) );
306+ context->factories. ${ item[' factory' ]} .getInstance( ${ item[' name' ]} [ i ], dditable ) );
310307 % else :
311308 // convert platform handle to loader handle
312309 % if item[' optional' ] or th.always_wrap_outputs(obj):
313310 if( nullptr != ${ item[' name' ]} )
314311 *${ item[' name' ]} = reinterpret_cast<${ item[' type' ]} >(
315- ${ item[' factory' ]} .getInstance( *${ item[' name' ]} , dditable ) );
312+ context->factories. ${ item[' factory' ]} .getInstance( *${ item[' name' ]} , dditable ) );
316313 % else :
317314 *${ item[' name' ]} = reinterpret_cast<${ item[' type' ]} >(
318- ${ item[' factory' ]} .getInstance( *${ item[' name' ]} , dditable ) );
315+ context->factories. ${ item[' factory' ]} .getInstance( *${ item[' name' ]} , dditable ) );
319316 %endif
320317 %endif
321318 }
@@ -360,13 +357,13 @@ ${tbl['export']['name']}(
360357 if( nullptr == pDdiTable )
361358 return ${ X} _RESULT_ERROR_INVALID_NULL_POINTER;
362359
363- if( ur_loader::context ->version < version )
360+ if( ur_loader::getContext() ->version < version )
364361 return ${ X} _RESULT_ERROR_UNSUPPORTED_VERSION;
365362
366363 ${ x} _result_t result = ${ X} _RESULT_SUCCESS;
367364
368365 // Load the device-platform DDI tables
369- for( auto& platform : ur_loader::context ->platforms )
366+ for( auto& platform : ur_loader::getContext() ->platforms )
370367 {
371368 if(platform.initStatus != ${ X} _RESULT_SUCCESS)
372369 continue;
@@ -379,7 +376,7 @@ ${tbl['export']['name']}(
379376
380377 if( ${ X} _RESULT_SUCCESS == result )
381378 {
382- if( ur_loader::context ->platforms.size() != 1 || ur_loader::context ->forceIntercept )
379+ if( ur_loader::getContext() ->platforms.size() != 1 || ur_loader::getContext() ->forceIntercept )
383380 {
384381 // return pointers to loader's DDIs
385382 % for obj in tbl[' functions' ]:
@@ -397,7 +394,7 @@ ${tbl['export']['name']}(
397394 else
398395 {
399396 // return pointers directly to platform's DDIs
400- *pDdiTable = ur_loader::context ->platforms.front().dditable.${ n} .${ tbl[' name' ]} ;
397+ *pDdiTable = ur_loader::getContext() ->platforms.front().dditable.${ n} .${ tbl[' name' ]} ;
401398 }
402399 }
403400
0 commit comments