Skip to content

Commit d4c88cd

Browse files
committed
[UR][Offload] Implement urProgramGetGlobalVariablePointer
1 parent ec26b92 commit d4c88cd

File tree

4 files changed

+29
-2
lines changed

4 files changed

+29
-2
lines changed

unified-runtime/source/adapters/offload/device.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
7676
return ReturnValue(uint32_t{1});
7777
case UR_DEVICE_INFO_MAX_WORK_ITEM_DIMENSIONS:
7878
return ReturnValue(uint32_t{3});
79+
case UR_DEVICE_INFO_GLOBAL_VARIABLE_SUPPORT:
80+
return ReturnValue(true);
7981
// Unimplemented features
8082
case UR_DEVICE_INFO_PROGRAM_SET_SPECIALIZATION_CONSTANTS:
81-
case UR_DEVICE_INFO_GLOBAL_VARIABLE_SUPPORT:
8283
case UR_DEVICE_INFO_USM_POOL_SUPPORT:
8384
case UR_DEVICE_INFO_COMMAND_BUFFER_SUPPORT_EXP:
8485
case UR_DEVICE_INFO_IMAGE_SUPPORT:

unified-runtime/source/adapters/offload/program.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,27 @@ UR_APIEXPORT ur_result_t UR_APICALL urProgramSetSpecializationConstants(
236236
ur_program_handle_t, uint32_t, const ur_specialization_constant_info_t *) {
237237
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
238238
}
239+
240+
UR_APIEXPORT ur_result_t UR_APICALL urProgramGetGlobalVariablePointer(
241+
ur_device_handle_t, ur_program_handle_t hProgram,
242+
const char *pGlobalVariableName, size_t *pGlobalVariableSizeRet,
243+
void **ppGlobalVariablePointerRet) {
244+
ol_symbol_handle_t Symbol;
245+
auto Err = olGetSymbol(hProgram->OffloadProgram, pGlobalVariableName,
246+
OL_SYMBOL_KIND_GLOBAL_VARIABLE, &Symbol);
247+
if (Err && Err->Code == OL_ERRC_NOT_FOUND) {
248+
return UR_RESULT_ERROR_INVALID_VALUE;
249+
}
250+
OL_RETURN_ON_ERR(Err);
251+
252+
if (pGlobalVariableSizeRet) {
253+
OL_RETURN_ON_ERR(olGetSymbolInfo(Symbol,
254+
OL_SYMBOL_INFO_GLOBAL_VARIABLE_SIZE,
255+
sizeof(size_t), pGlobalVariableSizeRet));
256+
}
257+
OL_RETURN_ON_ERR(olGetSymbolInfo(Symbol,
258+
OL_SYMBOL_INFO_GLOBAL_VARIABLE_ADDRESS,
259+
sizeof(void *), ppGlobalVariablePointerRet));
260+
261+
return UR_RESULT_SUCCESS;
262+
}

unified-runtime/source/adapters/offload/ur_interface_loader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ UR_DLLEXPORT ur_result_t UR_APICALL urGetProgramProcAddrTable(
9292
pDdiTable->pfnCreateWithNativeHandle = urProgramCreateWithNativeHandle;
9393
pDdiTable->pfnGetBuildInfo = nullptr;
9494
pDdiTable->pfnGetFunctionPointer = nullptr;
95-
pDdiTable->pfnGetGlobalVariablePointer = nullptr;
95+
pDdiTable->pfnGetGlobalVariablePointer = urProgramGetGlobalVariablePointer;
9696
pDdiTable->pfnGetInfo = urProgramGetInfo;
9797
pDdiTable->pfnGetNativeHandle = urProgramGetNativeHandle;
9898
pDdiTable->pfnLink = nullptr;

unified-runtime/test/conformance/program/urProgramGetGlobalVariablePointer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ using urProgramGetGlobalVariablePointerTest = uur::urGlobalVariableTest;
1111
UUR_INSTANTIATE_DEVICE_TEST_SUITE(urProgramGetGlobalVariablePointerTest);
1212

1313
TEST_P(urProgramGetGlobalVariablePointerTest, Success) {
14+
// Our conformance tests don't generate binaries that contain externally visible globals on AMD
15+
UUR_KNOWN_FAILURE_ON(uur::Offload{"gfx"});
1416
size_t global_variable_size = 0;
1517
void *global_variable_pointer;
1618
ASSERT_SUCCESS(urProgramGetGlobalVariablePointer(

0 commit comments

Comments
 (0)