//===- Auto-generated file, part of the LLVM/Offload project --------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // Auto-generated file, do not manually edit. #pragma once #include #include #if defined(__cplusplus) extern "C" { #endif /////////////////////////////////////////////////////////////////////////////// #ifndef OL_VERSION_MAJOR /// @brief Major version of the Offload API #define OL_VERSION_MAJOR 0 #endif // OL_VERSION_MAJOR /////////////////////////////////////////////////////////////////////////////// #ifndef OL_VERSION_MINOR /// @brief Minor version of the Offload API #define OL_VERSION_MINOR 0 #endif // OL_VERSION_MINOR /////////////////////////////////////////////////////////////////////////////// #ifndef OL_VERSION_PATCH /// @brief Patch version of the Offload API #define OL_VERSION_PATCH 1 #endif // OL_VERSION_PATCH /////////////////////////////////////////////////////////////////////////////// #ifndef OL_APICALL #if defined(_WIN32) /// @brief Calling convention for all API functions #define OL_APICALL __cdecl #else #define OL_APICALL #endif // defined(_WIN32) #endif // OL_APICALL /////////////////////////////////////////////////////////////////////////////// #ifndef OL_APIEXPORT #if defined(_WIN32) /// @brief Microsoft-specific dllexport storage-class attribute #define OL_APIEXPORT __declspec(dllexport) #else #define OL_APIEXPORT #endif // defined(_WIN32) #endif // OL_APIEXPORT /////////////////////////////////////////////////////////////////////////////// #ifndef OL_DLLEXPORT #if defined(_WIN32) /// @brief Microsoft-specific dllexport storage-class attribute #define OL_DLLEXPORT __declspec(dllexport) #endif // defined(_WIN32) #endif // OL_DLLEXPORT /////////////////////////////////////////////////////////////////////////////// #ifndef OL_DLLEXPORT #if __GNUC__ >= 4 /// @brief GCC-specific dllexport storage-class attribute #define OL_DLLEXPORT __attribute__((visibility("default"))) #else #define OL_DLLEXPORT #endif // __GNUC__ >= 4 #endif // OL_DLLEXPORT /////////////////////////////////////////////////////////////////////////////// /// @brief Handle of a platform instance typedef struct ol_platform_handle_t_ *ol_platform_handle_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Handle of platform's device object typedef struct ol_device_handle_t_ *ol_device_handle_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Handle of context object typedef struct ol_context_handle_t_ *ol_context_handle_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Defines Return/Error codes typedef enum ol_errc_t { /// Success OL_ERRC_SUCCESS = 0, /// Invalid Value OL_ERRC_INVALID_VALUE = 1, /// Invalid platform OL_ERRC_INVALID_PLATFORM = 2, /// Device not found OL_ERRC_DEVICE_NOT_FOUND = 3, /// Invalid device OL_ERRC_INVALID_DEVICE = 4, /// Device hung, reset, was removed, or driver update occurred OL_ERRC_DEVICE_LOST = 5, /// plugin is not initialized or specific entry-point is not implemented OL_ERRC_UNINITIALIZED = 6, /// Out of resources OL_ERRC_OUT_OF_RESOURCES = 7, /// generic error code for unsupported versions OL_ERRC_UNSUPPORTED_VERSION = 8, /// generic error code for unsupported features OL_ERRC_UNSUPPORTED_FEATURE = 9, /// generic error code for invalid arguments OL_ERRC_INVALID_ARGUMENT = 10, /// handle argument is not valid OL_ERRC_INVALID_NULL_HANDLE = 11, /// pointer argument may not be nullptr OL_ERRC_INVALID_NULL_POINTER = 12, /// invalid size or dimensions (e.g., must not be zero, or is out of bounds) OL_ERRC_INVALID_SIZE = 13, /// enumerator argument is not valid OL_ERRC_INVALID_ENUMERATION = 14, /// enumerator argument is not supported by the device OL_ERRC_UNSUPPORTED_ENUMERATION = 15, /// Unknown or internal error OL_ERRC_UNKNOWN = 16, /// @cond OL_ERRC_FORCE_UINT32 = 0x7fffffff /// @endcond } ol_errc_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Details of the error condition returned by an API call typedef struct ol_error_struct_t { ol_errc_t Code; /// The error code const char *Details; /// String containing error details } ol_error_struct_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Result type returned by all entry points. typedef const ol_error_struct_t *ol_result_t; /////////////////////////////////////////////////////////////////////////////// #ifndef OL_SUCCESS /// @brief Success condition #define OL_SUCCESS NULL #endif // OL_SUCCESS /////////////////////////////////////////////////////////////////////////////// /// @brief Code location information that can optionally be associated with an /// API call typedef struct ol_code_location_t { const char *FunctionName; /// Function name const char *SourceFile; /// Source code file uint32_t LineNumber; /// Source code line number uint32_t ColumnNumber; /// Source code column number } ol_code_location_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Perform initialization of the Offload library and plugins /// /// @details /// - This must be the first API call made by a user of the Offload library /// - Each call will increment an internal reference count that is /// decremented by `olShutDown` /// /// @returns /// - ::OL_RESULT_SUCCESS /// - ::OL_ERRC_UNINITIALIZED /// - ::OL_ERRC_DEVICE_LOST /// - ::OL_ERRC_INVALID_NULL_HANDLE /// - ::OL_ERRC_INVALID_NULL_POINTER OL_APIEXPORT ol_result_t OL_APICALL olInit(); /////////////////////////////////////////////////////////////////////////////// /// @brief Release the resources in use by Offload /// /// @details /// - This decrements an internal reference count. When this reaches 0, all /// resources will be released /// - Subsequent API calls made after this are not valid /// /// @returns /// - ::OL_RESULT_SUCCESS /// - ::OL_ERRC_UNINITIALIZED /// - ::OL_ERRC_DEVICE_LOST /// - ::OL_ERRC_INVALID_NULL_HANDLE /// - ::OL_ERRC_INVALID_NULL_POINTER OL_APIEXPORT ol_result_t OL_APICALL olShutDown(); /////////////////////////////////////////////////////////////////////////////// /// @brief Retrieves all available platforms /// /// @details /// - Multiple calls to this function will return identical platforms /// handles, in the same order. /// /// @returns /// - ::OL_RESULT_SUCCESS /// - ::OL_ERRC_UNINITIALIZED /// - ::OL_ERRC_DEVICE_LOST /// - ::OL_ERRC_INVALID_SIZE /// + `NumEntries == 0` /// - ::OL_ERRC_INVALID_NULL_HANDLE /// - ::OL_ERRC_INVALID_NULL_POINTER /// + `NULL == Platforms` OL_APIEXPORT ol_result_t OL_APICALL olGetPlatform( // [in] The number of platforms to be added to Platforms. NumEntries must be // greater than zero. uint32_t NumEntries, // [out] Array of handle of platforms. If NumEntries is less than the number // of platforms available, then olGetPlatform shall only retrieve that // number of platforms. ol_platform_handle_t *Platforms); /////////////////////////////////////////////////////////////////////////////// /// @brief Retrieves the number of available platforms /// /// @details /// /// @returns /// - ::OL_RESULT_SUCCESS /// - ::OL_ERRC_UNINITIALIZED /// - ::OL_ERRC_DEVICE_LOST /// - ::OL_ERRC_INVALID_NULL_HANDLE /// - ::OL_ERRC_INVALID_NULL_POINTER /// + `NULL == NumPlatforms` OL_APIEXPORT ol_result_t OL_APICALL olGetPlatformCount( // [out] returns the total number of platforms available. uint32_t *NumPlatforms); /////////////////////////////////////////////////////////////////////////////// /// @brief Supported platform info typedef enum ol_platform_info_t { /// [char[]] The string denoting name of the platform. The size of the info /// needs to be dynamically queried. OL_PLATFORM_INFO_NAME = 0, /// [char[]] The string denoting name of the vendor of the platform. The size /// of the info needs to be dynamically queried. OL_PLATFORM_INFO_VENDOR_NAME = 1, /// [char[]] The string denoting the version of the platform. The size of the /// info needs to be dynamically queried. OL_PLATFORM_INFO_VERSION = 2, /// [ol_platform_backend_t] The native backend of the platform. OL_PLATFORM_INFO_BACKEND = 3, /// @cond OL_PLATFORM_INFO_FORCE_UINT32 = 0x7fffffff /// @endcond } ol_platform_info_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Identifies the native backend of the platform typedef enum ol_platform_backend_t { /// The backend is not recognized OL_PLATFORM_BACKEND_UNKNOWN = 0, /// The backend is CUDA OL_PLATFORM_BACKEND_CUDA = 1, /// The backend is AMDGPU OL_PLATFORM_BACKEND_AMDGPU = 2, /// @cond OL_PLATFORM_BACKEND_FORCE_UINT32 = 0x7fffffff /// @endcond } ol_platform_backend_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Queries the given property of the platform /// /// @details /// - `olGetPlatformInfoSize` can be used to query the storage size required /// for the given query. /// /// @returns /// - ::OL_RESULT_SUCCESS /// - ::OL_ERRC_UNINITIALIZED /// - ::OL_ERRC_DEVICE_LOST /// - ::OL_ERRC_UNSUPPORTED_ENUMERATION /// + If `PropName` is not supported by the platform. /// - ::OL_ERRC_INVALID_SIZE /// + `PropSize == 0` /// + If `PropSize` is less than the real number of bytes needed to /// return the info. /// - ::OL_ERRC_INVALID_PLATFORM /// - ::OL_ERRC_INVALID_NULL_HANDLE /// + `NULL == Platform` /// - ::OL_ERRC_INVALID_NULL_POINTER /// + `NULL == PropValue` OL_APIEXPORT ol_result_t OL_APICALL olGetPlatformInfo( // [in] handle of the platform ol_platform_handle_t Platform, // [in] type of the info to retrieve ol_platform_info_t PropName, // [in] the number of bytes pointed to by pPlatformInfo. size_t PropSize, // [out] array of bytes holding the info. If Size is not equal to or greater // to the real number of bytes needed to return the info then the // OL_ERRC_INVALID_SIZE error is returned and pPlatformInfo is not used. void *PropValue); /////////////////////////////////////////////////////////////////////////////// /// @brief Returns the storage size of the given platform query /// /// @details /// /// @returns /// - ::OL_RESULT_SUCCESS /// - ::OL_ERRC_UNINITIALIZED /// - ::OL_ERRC_DEVICE_LOST /// - ::OL_ERRC_UNSUPPORTED_ENUMERATION /// + If `PropName` is not supported by the platform. /// - ::OL_ERRC_INVALID_PLATFORM /// - ::OL_ERRC_INVALID_NULL_HANDLE /// + `NULL == Platform` /// - ::OL_ERRC_INVALID_NULL_POINTER /// + `NULL == PropSizeRet` OL_APIEXPORT ol_result_t OL_APICALL olGetPlatformInfoSize( // [in] handle of the platform ol_platform_handle_t Platform, // [in] type of the info to query ol_platform_info_t PropName, // [out] pointer to the number of bytes required to store the query size_t *PropSizeRet); /////////////////////////////////////////////////////////////////////////////// /// @brief Supported device types typedef enum ol_device_type_t { /// The default device type as preferred by the runtime OL_DEVICE_TYPE_DEFAULT = 0, /// Devices of all types OL_DEVICE_TYPE_ALL = 1, /// GPU device type OL_DEVICE_TYPE_GPU = 2, /// CPU device type OL_DEVICE_TYPE_CPU = 3, /// @cond OL_DEVICE_TYPE_FORCE_UINT32 = 0x7fffffff /// @endcond } ol_device_type_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Supported device info typedef enum ol_device_info_t { /// [ol_device_type_t] type of the device OL_DEVICE_INFO_TYPE = 0, /// [ol_platform_handle_t] the platform associated with the device OL_DEVICE_INFO_PLATFORM = 1, /// [char[]] Device name OL_DEVICE_INFO_NAME = 2, /// [char[]] Device vendor OL_DEVICE_INFO_VENDOR = 3, /// [char[]] Driver version OL_DEVICE_INFO_DRIVER_VERSION = 4, /// @cond OL_DEVICE_INFO_FORCE_UINT32 = 0x7fffffff /// @endcond } ol_device_info_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Retrieves the number of available devices within a platform /// /// @details /// /// @returns /// - ::OL_RESULT_SUCCESS /// - ::OL_ERRC_UNINITIALIZED /// - ::OL_ERRC_DEVICE_LOST /// - ::OL_ERRC_INVALID_NULL_HANDLE /// + `NULL == Platform` /// - ::OL_ERRC_INVALID_NULL_POINTER /// + `NULL == NumDevices` OL_APIEXPORT ol_result_t OL_APICALL olGetDeviceCount( // [in] handle of the platform instance ol_platform_handle_t Platform, // [out] pointer to the number of devices. uint32_t *NumDevices); /////////////////////////////////////////////////////////////////////////////// /// @brief Retrieves devices within a platform /// /// @details /// - Multiple calls to this function will return identical device handles, /// in the same order. /// /// @returns /// - ::OL_RESULT_SUCCESS /// - ::OL_ERRC_UNINITIALIZED /// - ::OL_ERRC_DEVICE_LOST /// - ::OL_ERRC_INVALID_SIZE /// + `NumEntries == 0` /// - ::OL_ERRC_INVALID_NULL_HANDLE /// + `NULL == Platform` /// - ::OL_ERRC_INVALID_NULL_POINTER /// + `NULL == Devices` OL_APIEXPORT ol_result_t OL_APICALL olGetDevice( // [in] handle of the platform instance ol_platform_handle_t Platform, // [in] the number of devices to be added to phDevices, which must be // greater than zero uint32_t NumEntries, // [out] Array of device handles. If NumEntries is less than the number of // devices available, then this function shall only retrieve that number of // devices. ol_device_handle_t *Devices); /////////////////////////////////////////////////////////////////////////////// /// @brief Queries the given property of the device /// /// @details /// /// @returns /// - ::OL_RESULT_SUCCESS /// - ::OL_ERRC_UNINITIALIZED /// - ::OL_ERRC_DEVICE_LOST /// - ::OL_ERRC_UNSUPPORTED_ENUMERATION /// + If `PropName` is not supported by the device. /// - ::OL_ERRC_INVALID_SIZE /// + `PropSize == 0` /// + If `PropSize` is less than the real number of bytes needed to /// return the info. /// - ::OL_ERRC_INVALID_DEVICE /// - ::OL_ERRC_INVALID_NULL_HANDLE /// + `NULL == Device` /// - ::OL_ERRC_INVALID_NULL_POINTER /// + `NULL == PropValue` OL_APIEXPORT ol_result_t OL_APICALL olGetDeviceInfo( // [in] handle of the device instance ol_device_handle_t Device, // [in] type of the info to retrieve ol_device_info_t PropName, // [in] the number of bytes pointed to by PropValue. size_t PropSize, // [out] array of bytes holding the info. If PropSize is not equal to or // greater than the real number of bytes needed to return the info then the // OL_ERRC_INVALID_SIZE error is returned and PropValue is not used. void *PropValue); /////////////////////////////////////////////////////////////////////////////// /// @brief Returns the storage size of the given device query /// /// @details /// /// @returns /// - ::OL_RESULT_SUCCESS /// - ::OL_ERRC_UNINITIALIZED /// - ::OL_ERRC_DEVICE_LOST /// - ::OL_ERRC_UNSUPPORTED_ENUMERATION /// + If `PropName` is not supported by the device. /// - ::OL_ERRC_INVALID_DEVICE /// - ::OL_ERRC_INVALID_NULL_HANDLE /// + `NULL == Device` /// - ::OL_ERRC_INVALID_NULL_POINTER /// + `NULL == PropSizeRet` OL_APIEXPORT ol_result_t OL_APICALL olGetDeviceInfoSize( // [in] handle of the device instance ol_device_handle_t Device, // [in] type of the info to retrieve ol_device_info_t PropName, // [out] pointer to the number of bytes required to store the query size_t *PropSizeRet); /////////////////////////////////////////////////////////////////////////////// /// @brief Function parameters for olGetPlatform /// @details Each entry is a pointer to the parameter passed to the function; typedef struct ol_get_platform_params_t { uint32_t *pNumEntries; ol_platform_handle_t **pPlatforms; } ol_get_platform_params_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Function parameters for olGetPlatformCount /// @details Each entry is a pointer to the parameter passed to the function; typedef struct ol_get_platform_count_params_t { uint32_t **pNumPlatforms; } ol_get_platform_count_params_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Function parameters for olGetPlatformInfo /// @details Each entry is a pointer to the parameter passed to the function; typedef struct ol_get_platform_info_params_t { ol_platform_handle_t *pPlatform; ol_platform_info_t *pPropName; size_t *pPropSize; void **pPropValue; } ol_get_platform_info_params_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Function parameters for olGetPlatformInfoSize /// @details Each entry is a pointer to the parameter passed to the function; typedef struct ol_get_platform_info_size_params_t { ol_platform_handle_t *pPlatform; ol_platform_info_t *pPropName; size_t **pPropSizeRet; } ol_get_platform_info_size_params_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Function parameters for olGetDeviceCount /// @details Each entry is a pointer to the parameter passed to the function; typedef struct ol_get_device_count_params_t { ol_platform_handle_t *pPlatform; uint32_t **pNumDevices; } ol_get_device_count_params_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Function parameters for olGetDevice /// @details Each entry is a pointer to the parameter passed to the function; typedef struct ol_get_device_params_t { ol_platform_handle_t *pPlatform; uint32_t *pNumEntries; ol_device_handle_t **pDevices; } ol_get_device_params_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Function parameters for olGetDeviceInfo /// @details Each entry is a pointer to the parameter passed to the function; typedef struct ol_get_device_info_params_t { ol_device_handle_t *pDevice; ol_device_info_t *pPropName; size_t *pPropSize; void **pPropValue; } ol_get_device_info_params_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Function parameters for olGetDeviceInfoSize /// @details Each entry is a pointer to the parameter passed to the function; typedef struct ol_get_device_info_size_params_t { ol_device_handle_t *pDevice; ol_device_info_t *pPropName; size_t **pPropSizeRet; } ol_get_device_info_size_params_t; /////////////////////////////////////////////////////////////////////////////// /// @brief Variant of olInit that also sets source code location information /// @details See also ::olInit OL_APIEXPORT ol_result_t OL_APICALL olInitWithCodeLoc(ol_code_location_t *CodeLocation); /////////////////////////////////////////////////////////////////////////////// /// @brief Variant of olShutDown that also sets source code location information /// @details See also ::olShutDown OL_APIEXPORT ol_result_t OL_APICALL olShutDownWithCodeLoc(ol_code_location_t *CodeLocation); /////////////////////////////////////////////////////////////////////////////// /// @brief Variant of olGetPlatform that also sets source code location /// information /// @details See also ::olGetPlatform OL_APIEXPORT ol_result_t OL_APICALL olGetPlatformWithCodeLoc(uint32_t NumEntries, ol_platform_handle_t *Platforms, ol_code_location_t *CodeLocation); /////////////////////////////////////////////////////////////////////////////// /// @brief Variant of olGetPlatformCount that also sets source code location /// information /// @details See also ::olGetPlatformCount OL_APIEXPORT ol_result_t OL_APICALL olGetPlatformCountWithCodeLoc( uint32_t *NumPlatforms, ol_code_location_t *CodeLocation); /////////////////////////////////////////////////////////////////////////////// /// @brief Variant of olGetPlatformInfo that also sets source code location /// information /// @details See also ::olGetPlatformInfo OL_APIEXPORT ol_result_t OL_APICALL olGetPlatformInfoWithCodeLoc( ol_platform_handle_t Platform, ol_platform_info_t PropName, size_t PropSize, void *PropValue, ol_code_location_t *CodeLocation); /////////////////////////////////////////////////////////////////////////////// /// @brief Variant of olGetPlatformInfoSize that also sets source code location /// information /// @details See also ::olGetPlatformInfoSize OL_APIEXPORT ol_result_t OL_APICALL olGetPlatformInfoSizeWithCodeLoc( ol_platform_handle_t Platform, ol_platform_info_t PropName, size_t *PropSizeRet, ol_code_location_t *CodeLocation); /////////////////////////////////////////////////////////////////////////////// /// @brief Variant of olGetDeviceCount that also sets source code location /// information /// @details See also ::olGetDeviceCount OL_APIEXPORT ol_result_t OL_APICALL olGetDeviceCountWithCodeLoc(ol_platform_handle_t Platform, uint32_t *NumDevices, ol_code_location_t *CodeLocation); /////////////////////////////////////////////////////////////////////////////// /// @brief Variant of olGetDevice that also sets source code location /// information /// @details See also ::olGetDevice OL_APIEXPORT ol_result_t OL_APICALL olGetDeviceWithCodeLoc( ol_platform_handle_t Platform, uint32_t NumEntries, ol_device_handle_t *Devices, ol_code_location_t *CodeLocation); /////////////////////////////////////////////////////////////////////////////// /// @brief Variant of olGetDeviceInfo that also sets source code location /// information /// @details See also ::olGetDeviceInfo OL_APIEXPORT ol_result_t OL_APICALL olGetDeviceInfoWithCodeLoc( ol_device_handle_t Device, ol_device_info_t PropName, size_t PropSize, void *PropValue, ol_code_location_t *CodeLocation); /////////////////////////////////////////////////////////////////////////////// /// @brief Variant of olGetDeviceInfoSize that also sets source code location /// information /// @details See also ::olGetDeviceInfoSize OL_APIEXPORT ol_result_t OL_APICALL olGetDeviceInfoSizeWithCodeLoc( ol_device_handle_t Device, ol_device_info_t PropName, size_t *PropSizeRet, ol_code_location_t *CodeLocation); #if defined(__cplusplus) } // extern "C" #endif