From 1c669b3711ee2b547d70d20586fdd81dffe9dc8d Mon Sep 17 00:00:00 2001 From: Ross Brunton Date: Wed, 20 Aug 2025 13:12:26 +0100 Subject: [PATCH] [Offload] Fix `OL_DEVICE_INFO_MAX_MEM_ALLOC_SIZE` on AMD This wasn't handled with the normal info API, so needs special handling. --- offload/liboffload/src/OffloadImpl.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/offload/liboffload/src/OffloadImpl.cpp b/offload/liboffload/src/OffloadImpl.cpp index 54c6d452cbd9e..5374b87ee63f6 100644 --- a/offload/liboffload/src/OffloadImpl.cpp +++ b/offload/liboffload/src/OffloadImpl.cpp @@ -339,8 +339,15 @@ Error olGetDeviceInfoImplDetail(ol_device_handle_t Device, // None of the existing plugins specify a limit on a single allocation, // so return the global memory size instead case OL_DEVICE_INFO_MAX_MEM_ALLOC_SIZE: - PropName = OL_DEVICE_INFO_GLOBAL_MEM_SIZE; - break; + [[fallthrough]]; + // AMD doesn't provide the global memory size (trivially) with the device info + // struct, so use the plugin interface + case OL_DEVICE_INFO_GLOBAL_MEM_SIZE: { + uint64_t Mem; + if (auto Err = Device->Device->getDeviceMemorySize(Mem)) + return Err; + return Info.write(Mem); + } break; default: break; @@ -368,14 +375,6 @@ Error olGetDeviceInfoImplDetail(ol_device_handle_t Device, return Info.writeString(std::get(Entry->Value).c_str()); } - case OL_DEVICE_INFO_GLOBAL_MEM_SIZE: { - // Uint64 values - if (!std::holds_alternative(Entry->Value)) - return makeError(ErrorCode::BACKEND_FAILURE, - "plugin returned incorrect type"); - return Info.write(std::get(Entry->Value)); - } - case OL_DEVICE_INFO_MAX_WORK_GROUP_SIZE: case OL_DEVICE_INFO_VENDOR_ID: case OL_DEVICE_INFO_NUM_COMPUTE_UNITS: