@ -1,6 +1,6 @@
//==============================================================================
//
// Copyright (c) 2019-2020 Qualcomm Technologies, Inc.
// Copyright (c) 2019-2021 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
//
@ -13,7 +13,7 @@
// Provide values to use for API version.
# define API_VERSION_MAJOR 1
# define API_VERSION_MINOR 5
# define API_VERSION_MINOR 6
# define API_VERSION_TEENY 0
/** @addtogroup c_plus_plus_apis C++
@ -21,10 +21,12 @@
// Defines a bitmask of enum values.
typedef uint32_t SnpeUdo_Bitmask_t ;
typedef SnpeUdo_Bitmask_t Udo_Bitmask_t ;
// A string of characters, rather than an array of bytes.
// Assumed to be UTF-8.
typedef char * SnpeUdo_String_t ;
typedef SnpeUdo_String_t Udo_String_t ;
// The maximum allowable length of a SnpeUdo_String_t in bytes,
// including null terminator. SNPE will truncate strings longer
@ -41,32 +43,34 @@ typedef char* SnpeUdo_String_t;
typedef enum
{
/// No Error
SNPE_UDO_NO_ERROR = 0 ,
SNPE_UDO_NO_ERROR = 0 , UDO_NO_ERROR = 0 ,
/// Unsupported value for core type
SNPE_UDO_WRONG_CORE = 1 ,
SNPE_UDO_WRONG_CORE = 1 , UDO_WRONG_CORE = 1 ,
/// Invalid attribute/argument passed into UDO API
SNPE_UDO_INVALID_ARGUMENT = 2 ,
SNPE_UDO_INVALID_ARGUMENT = 2 , UDO_INVALID_ARGUMENT = 2 ,
/// Unsupported feature error
SNPE_UDO_UNSUPPORTED_FEATURE = 3 ,
SNPE_UDO_UNSUPPORTED_FEATURE = 3 , UDO_UNSUPPORTED_FEATURE = 3 ,
/// Error relating to memory allocation
SNPE_UDO_MEM_ALLOC_ERROR = 4 ,
SNPE_UDO_MEM_ALLOC_ERROR = 4 , UDO_MEM_ALLOC_ERROR = 4 ,
/* Configuration Specific errors */
/// No op with given attributes available in library
SNPE_UDO_WRONG_OPERATION = 100 ,
SNPE_UDO_WRONG_OPERATION = 100 , UDO_WRONG_OPERATION = 100 ,
/// Unsupported value for core type in UDO configuration
SNPE_UDO_WRONG_CORE_TYPE = 101 ,
SNPE_UDO_WRONG_CORE_TYPE = 101 , UDO_WRONG_CORE_TYPE = 101 ,
/// Wrong number of params in UDO definition
SNPE_UDO_WRONG_NUM_OF_PARAMS = 102 ,
SNPE_UDO_WRONG_NUM_OF_PARAMS = 102 , UDO_WRONG_NUM_OF_PARAMS = 102 ,
/// Wrong number of dimensions for tensor(s) in UDO definition
SNPE_UDO_WRONG_NUM_OF_DIMENSIONS = 103 ,
SNPE_UDO_WRONG_NUM_OF_DIMENSIONS = 103 , UDO_WRONG_NUM_OF_DIMENSIONS = 103 ,
/// Wrong number of input tensors in UDO definition
SNPE_UDO_WRONG_NUM_OF_INPUTS = 104 ,
SNPE_UDO_WRONG_NUM_OF_INPUTS = 104 , UDO_WRONG_NUM_OF_INPUTS = 104 ,
/// Wrong number of output tensors in UDO definition
SNPE_UDO_WRONG_NUM_OF_OUTPUTS = 105 ,
SNPE_UDO_PROGRAM_CACHE_NOT_FOUND = 106 ,
SNPE_UDO_UNKNOWN_ERROR = 0xFFFFFFFF
SNPE_UDO_WRONG_NUM_OF_OUTPUTS = 105 , UDO_WRONG_NUM_OF_OUTPUTS = 105 ,
SNPE_UDO_PROGRAM_CACHE_NOT_FOUND = 106 , UDO_PROGRAM_CACHE_NOT_FOUND = 106 ,
SNPE_UDO_UNKNOWN_ERROR = 0xFFFFFFFF , UDO_UNKNOWN_ERROR = 0xFFFFFFFF
} SnpeUdo_ErrorType_t ;
typedef SnpeUdo_ErrorType_t Udo_ErrorType_t ;
/**
* An enum which holds the various data types .
* Designed to be used as single values or combined into a bitfield parameter
@ -77,32 +81,34 @@ typedef enum
typedef enum
{
/// data type: 16-bit floating point
SNPE_UDO_DATATYPE_FLOAT_16 = 0x01 ,
SNPE_UDO_DATATYPE_FLOAT_16 = 0x01 , UDO_DATATYPE_FLOAT_16 = 0x01 ,
/// data type: 32-bit floating point
SNPE_UDO_DATATYPE_FLOAT_32 = 0x02 ,
SNPE_UDO_DATATYPE_FLOAT_32 = 0x02 , UDO_DATATYPE_FLOAT_32 = 0x02 ,
/// data type: 4-bit fixed point
SNPE_UDO_DATATYPE_FIXED_4 = 0x04 ,
SNPE_UDO_DATATYPE_FIXED_4 = 0x04 , UDO_DATATYPE_FIXED_4 = 0x04 ,
/// data type: 8-bit fixed point
SNPE_UDO_DATATYPE_FIXED_8 = 0x08 ,
SNPE_UDO_DATATYPE_FIXED_8 = 0x08 , UDO_DATATYPE_FIXED_8 = 0x08 ,
/// data type: 16-bit fixed point
SNPE_UDO_DATATYPE_FIXED_16 = 0x10 ,
SNPE_UDO_DATATYPE_FIXED_16 = 0x10 , UDO_DATATYPE_FIXED_16 = 0x10 ,
/// data type: 32-bit fixed point
SNPE_UDO_DATATYPE_FIXED_32 = 0x20 ,
SNPE_UDO_DATATYPE_FIXED_32 = 0x20 , UDO_DATATYPE_FIXED_32 = 0x20 ,
/// data type: 8-bit unsigned integer
SNPE_UDO_DATATYPE_UINT_8 = 0x100 ,
SNPE_UDO_DATATYPE_UINT_8 = 0x100 , UDO_DATATYPE_UINT_8 = 0x100 ,
/// data type: 16-bit unsigned integer
SNPE_UDO_DATATYPE_UINT_16 = 0x200 ,
SNPE_UDO_DATATYPE_UINT_16 = 0x200 , UDO_DATATYPE_UINT_16 = 0x200 ,
/// data type: 32-bit unsigned integer
SNPE_UDO_DATATYPE_UINT_32 = 0x400 ,
SNPE_UDO_DATATYPE_UINT_32 = 0x400 , UDO_DATATYPE_UINT_32 = 0x400 ,
/// data type: 8-bit signed integer
SNPE_UDO_DATATYPE_INT_8 = 0x1000 ,
SNPE_UDO_DATATYPE_INT_8 = 0x1000 , UDO_DATATYPE_INT_8 = 0x1000 ,
/// data type: 16-bit signed integer
SNPE_UDO_DATATYPE_INT_16 = 0x2000 ,
SNPE_UDO_DATATYPE_INT_16 = 0x2000 , UDO_DATATYPE_INT_16 = 0x2000 ,
/// data type: 32-bit signed integer
SNPE_UDO_DATATYPE_INT_32 = 0x4000 ,
SNPE_UDO_DATATYPE_LAST = 0xFFFFFFFF
SNPE_UDO_DATATYPE_INT_32 = 0x4000 , UDO_DATATYPE_INT_32 = 0x4000 ,
SNPE_UDO_DATATYPE_LAST = 0xFFFFFFFF , UDO_DATATYPE_LAST = 0xFFFFFFFF
} SnpeUdo_DataType_t ;
typedef SnpeUdo_DataType_t Udo_DataType_t ;
/**
* An enum which holds the various layouts .
* Designed to be used as single values or combined into a bitfield parameter
@ -111,21 +117,23 @@ typedef enum
typedef enum
{
/// data layout (4D): NHWC (batch-height-width-channel)
SNPE_UDO_LAYOUT_NHWC = 0x01 ,
SNPE_UDO_LAYOUT_NHWC = 0x01 , UDO_LAYOUT_NHWC = 0x01 ,
/// data layout (4D): NCHW (batch-channel-height-width)
SNPE_UDO_LAYOUT_NCHW = 0x02 ,
SNPE_UDO_LAYOUT_NCHW = 0x02 , UDO_LAYOUT_NCHW = 0x02 ,
/// data layout (5D): NDHWC (batch-dimension-height-width-channel)
SNPE_UDO_LAYOUT_NDHWC = 0x04 ,
SNPE_UDO_LAYOUT_GPU_OPTIMAL1 = 0x08 ,
SNPE_UDO_LAYOUT_GPU_OPTIMAL2 = 0x10 ,
SNPE_UDO_LAYOUT_DSP_OPTIMAL1 = 0x11 ,
SNPE_UDO_LAYOUT_DSP_OPTIMAL2 = 0x12 ,
SNPE_UDO_LAYOUT_NDHWC = 0x04 , UDO_LAYOUT_NDHWC = 0x04 ,
SNPE_UDO_LAYOUT_GPU_OPTIMAL1 = 0x08 , UDO_LAYOUT_GPU_OPTIMAL1 = 0x08 ,
SNPE_UDO_LAYOUT_GPU_OPTIMAL2 = 0x10 , UDO_LAYOUT_GPU_OPTIMAL2 = 0x10 ,
SNPE_UDO_LAYOUT_DSP_OPTIMAL1 = 0x11 , UDO_LAYOUT_DSP_OPTIMAL1 = 0x11 ,
SNPE_UDO_LAYOUT_DSP_OPTIMAL2 = 0x12 , UDO_LAYOUT_DSP_OPTIMAL2 = 0x12 ,
// Indicates no data will be allocated for this tensor.
// Used to specify optional inputs/outputs positionally.
SNPE_UDO_LAYOUT_NULL = 0x13 ,
SNPE_UDO_LAYOUT_LAST = 0xFFFFFFFF
SNPE_UDO_LAYOUT_NULL = 0x13 , UDO_LAYOUT_NULL = 0x13 ,
SNPE_UDO_LAYOUT_LAST = 0xFFFFFFFF , UDO_LAYOUT_LAST = 0xFFFFFFFF
} SnpeUdo_TensorLayout_t ;
typedef SnpeUdo_TensorLayout_t Udo_TensorLayout_t ;
/**
* An enum which holds the UDO library Core type .
* Designed to be used as single values or combined into a bitfield parameter
@ -134,43 +142,49 @@ typedef enum
typedef enum
{
/// Library target IP Core is undefined
SNPE_UDO_CORETYPE_UNDEFINED = 0x00 ,
SNPE_UDO_CORETYPE_UNDEFINED = 0x00 , UDO_CORETYPE_UNDEFINED = 0x00 ,
/// Library target IP Core is CPU
SNPE_UDO_CORETYPE_CPU = 0x01 ,
SNPE_UDO_CORETYPE_CPU = 0x01 , UDO_CORETYPE_CPU = 0x01 ,
/// Library target IP Core is GPU
SNPE_UDO_CORETYPE_GPU = 0x02 ,
SNPE_UDO_CORETYPE_GPU = 0x02 , UDO_CORETYPE_GPU = 0x02 ,
/// Library target IP Core is DSP
SNPE_UDO_CORETYPE_DSP = 0x04 ,
SNPE_UDO_CORETYPE_LAST = 0xFFFFFFFF
SNPE_UDO_CORETYPE_DSP = 0x04 , UDO_CORETYPE_DSP = 0x04 ,
SNPE_UDO_CORETYPE_LAST = 0xFFFFFFFF , UDO_CORETYPE_LAST = 0xFFFFFFFF
} SnpeUdo_CoreType_t ;
typedef SnpeUdo_CoreType_t Udo_CoreType_t ;
/**
* An enum to specify the parameter type : Scalar or Tensor
*/
typedef enum
{
/// UDO static param type: scalar
SNPE_UDO_PARAMTYPE_SCALAR ,
SNPE_UDO_PARAMTYPE_SCALAR = 0x00 , UDO_PARAMTYPE_SCALAR = 0x00 ,
/// UDO static param type: string
SNPE_UDO_PARAMTYPE_STRING ,
SNPE_UDO_PARAMTYPE_STRING = 0x01 , UDO_PARAMTYPE_STRING = 0x01 ,
/// UDO static param type: tensor
SNPE_UDO_PARAMTYPE_TENSOR ,
SNPE_UDO_PARAMTYPE_LAST = 0xFFFFFFFF
SNPE_UDO_PARAMTYPE_TENSOR = 0x02 , UDO_PARAMTYPE_TENSOR = 0x02 ,
SNPE_UDO_PARAMTYPE_LAST = 0xFFFFFFFF , UDO_PARAMTYPE_LAST = 0xFFFFFFFF
} SnpeUdo_ParamType_t ;
typedef SnpeUdo_ParamType_t Udo_ParamType_t ;
/**
* An enum to specify quantization type
*/
typedef enum
{
/// Tensor Quantization type: NONE. Signifies unquantized tensor data
SNPE_UDO_QUANTIZATION_NONE ,
SNPE_UDO_QUANTIZATION_NONE = 0x00 , UDO_QUANTIZATION_NONE = 0x00 ,
/// Tensor Quantization type: Tensorflow-style
SNPE_UDO_QUANTIZATION_TF ,
SNPE_UDO_QUANTIZATION_QMN ,
SNPE_UDO_QUANTIZATION_LAST = 0xFFFFFFFF
SNPE_UDO_QUANTIZATION_TF = 0x01 , UDO_QUANTIZATION_TF = 0x01 ,
SNPE_UDO_QUANTIZATION_QMN = 0x02 , UDO_QUANTIZATION_QMN = 0x02 ,
SNPE_UDO_QUANTIZATION_LAST = 0xFFFFFFFF , UDO_QUANTIZATION_LAST = 0xFFFFFFFF
} SnpeUdo_QuantizationType_t ;
typedef SnpeUdo_QuantizationType_t Udo_QuantizationType_t ;
/**
* @ brief A struct which is used to provide a version number using 3 values : major , minor , teeny
*
@ -185,6 +199,8 @@ typedef struct
uint32_t teeny ;
} SnpeUdo_Version_t ;
typedef SnpeUdo_Version_t Udo_Version_t ;
/**
* @ brief A struct returned from version query , contains the Library version and API version
*
@ -197,6 +213,16 @@ typedef struct
SnpeUdo_Version_t apiVersion ;
} SnpeUdo_LibVersion_t ;
/**
* @ brief A struct returned from version query , contains the package version
*
*/
typedef struct
{
/// Version of UDO API used in package.
Udo_Version_t apiVersion ;
} Udo_PkgVersion_t ;
/**
* @ brief A union to hold the value of a generic type . Allows defining a parameter struct
* in a generic way , with a " value " location that holds the data regardless of the type .
@ -220,6 +246,8 @@ typedef union
int8_t int8Value ;
} SnpeUdo_Value_t ;
typedef SnpeUdo_Value_t Udo_Value_t ;
/**
* @ brief A struct which defines a scalar parameter : name , data type , and union of values
*
@ -232,6 +260,8 @@ typedef struct
SnpeUdo_Value_t dataValue ;
} SnpeUdo_ScalarParam_t ;
typedef SnpeUdo_ScalarParam_t Udo_ScalarParam_t ;
/**
* @ brief A struct which defines the quantization parameters in case of Tensorflow style quantization
*
@ -244,6 +274,8 @@ typedef struct
float maxValue ;
} SnpeUdo_TFQuantize_t ;
typedef SnpeUdo_TFQuantize_t Udo_TFQuantize_t ;
/**
* @ brief A struct which defines the quantization type , and union of supported quantization structs
*
@ -259,6 +291,8 @@ typedef struct
} ;
} SnpeUdo_QuantizeParams_t ;
typedef SnpeUdo_QuantizeParams_t Udo_QuantizeParams_t ;
/**
* @ brief A struct which defines the datatype associated with a specified core - type
* This should be used to denote the datatypes for a single tensor info , depending
@ -273,6 +307,8 @@ typedef struct
SnpeUdo_DataType_t dataType ;
} SnpeUdo_PerCoreDatatype_t ;
typedef SnpeUdo_PerCoreDatatype_t Udo_PerCoreDatatype_t ;
/**
* @ brief A struct which defines a tensor parameter : name , data type , layout , quantization , more .
* Also holds a pointer to the tensor data .
@ -303,6 +339,8 @@ typedef struct
void * tensorData ;
} SnpeUdo_TensorParam_t ;
typedef SnpeUdo_TensorParam_t Udo_TensorParam_t ;
/**
* @ brief A struct which defines tensor information for activation tensors only
*
@ -321,9 +359,11 @@ typedef struct
SnpeUdo_PerCoreDatatype_t * perCoreDatatype ;
/// A boolean field indicating that this tensorinfo will be repeated e.x for ops such as Concat or Split
bool repeated ;
/// A boolean field indicating whether input is static or not.
bool isStatic ;
} SnpeUdo_TensorInfo_t ;
typedef SnpeUdo_TensorInfo_t Udo_TensorInfo_t ;
/**
* @ brief struct which defines a UDO parameter - a union of scalar , tensor and string parameters
@ -346,6 +386,8 @@ typedef struct
} ;
} SnpeUdo_Param_t ;
typedef SnpeUdo_Param_t Udo_Param_t ;
/**
* @ brief A struct which defines Operation information which is specific for IP core ( CPU , GPU , DSP . . . )
*
@ -359,6 +401,8 @@ typedef struct
SnpeUdo_Bitmask_t operationCalculationTypes ;
} SnpeUdo_OpCoreInfo_t ;
typedef SnpeUdo_OpCoreInfo_t Udo_OpCoreInfo_t ;
/**
* @ brief A struct which defines the common and core - specific Operation information
*
@ -392,6 +436,8 @@ typedef struct
SnpeUdo_TensorInfo_t * outputInfos ;
} SnpeUdo_OperationInfo_t ;
typedef SnpeUdo_OperationInfo_t Udo_OperationInfo_t ;
/**
* @ brief A struct which provides the implementation library info : type , name
*
@ -404,6 +450,8 @@ typedef struct
SnpeUdo_String_t libraryName ;
} SnpeUdo_LibraryInfo_t ;
typedef SnpeUdo_LibraryInfo_t Udo_LibraryInfo_t ;
/**
* @ brief A struct returned by the registration library and contains information on the UDO package :
* name , operations , libraries , etc .
@ -429,6 +477,8 @@ typedef struct
SnpeUdo_OperationInfo_t * operationsInfo ;
} SnpeUdo_RegInfo_t ;
typedef SnpeUdo_RegInfo_t Udo_RegInfo_t ;
/**
* @ brief A struct returned by the implementation library and contains information on the
* specific library : name , IP Core , operations , etc .
@ -446,6 +496,8 @@ typedef struct
uint32_t numOfOperations ;
} SnpeUdo_ImpInfo_t ;
typedef SnpeUdo_ImpInfo_t Udo_ImpInfo_t ;
/**
* @ brief This struct defines an operation . It is used for validation
* or creation of an operation .
@ -478,6 +530,8 @@ typedef struct
SnpeUdo_TensorParam_t * outputs ;
} SnpeUdo_OpDefinition_t ;
typedef SnpeUdo_OpDefinition_t Udo_OpDefinition_t ;
/** @} */ /* end_addtogroup c_plus_plus_apis C++ */
# endif //SNPE_UDO_BASE_H