/* Copyright Statement: * * This software/firmware and related documentation ("MediaTek Software") are * protected under relevant copyright laws. The information contained herein * is confidential and proprietary to MediaTek Inc. and/or its licensors. * Without the prior written permission of MediaTek inc. and/or its licensors, * any reproduction, modification, use or disclosure of MediaTek Software, * and information contained herein, in whole or in part, shall be strictly * prohibited. */ /* MediaTek Inc. (C) 2020. All rights reserved. * * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY * ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY * THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK * SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO * RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN * FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER * WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT * ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER * TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. * * The following software/firmware and/or related documentation ("MediaTek * Software") have been modified by MediaTek Inc. All revisions are subject to * any receiver's applicable license agreements with MediaTek Inc. */ #pragma once #include #include #include "NeuronAdapter.h" #define LOAD_ADAPTER_FUNCTION(name) \ static name##_fn fn = reinterpret_cast(loadAdapterFunction(#name)); #define EXECUTE_ADAPTER_FUNCTION(...) \ if (fn != nullptr) { \ fn(__VA_ARGS__); \ } #define EXECUTE_ADAPTER_FUNCTION_RETURN_INT(...) \ return fn != nullptr ? fn(__VA_ARGS__) : -1; #define EXECUTE_ADAPTER_FUNCTION_RETURN_BOOL(...) \ return fn != nullptr ? fn(__VA_ARGS__) : false; static void* sHandle = nullptr; inline void* loadAdapterLibrary(const char* name) { sHandle = dlopen(name, RTLD_LAZY | RTLD_LOCAL); if (sHandle == nullptr) { __android_log_print( ANDROID_LOG_ERROR, "AdapterShimApi", "Unable to open library %s", name); } return sHandle; } inline void* getAdapterLibraryHandle() { if (sHandle == nullptr) { sHandle = loadAdapterLibrary("libneuronusdk_adapter.mtk.so"); } if (sHandle == nullptr) { sHandle = loadAdapterLibrary("libneuron_adapter_mgvi.so"); } if (sHandle == nullptr) { sHandle = loadAdapterLibrary("libneuron_adapter.so"); } return sHandle; } inline void* loadAdapterFunction(const char* name) { void* fn = nullptr; if (getAdapterLibraryHandle() != nullptr) { fn = dlsym(getAdapterLibraryHandle(), name); } if (fn == nullptr) { __android_log_print( ANDROID_LOG_ERROR, "AdapterShimApi", "Unable to open function %s", name); } return fn; } /*************************************************************************************************/ typedef int (*Neuron_getVersion_fn)(NeuronRuntimeVersion* version); typedef int (*Neuron_getFeatureSupportedStatus_fn)( NeuronFeatureType type, bool* supported); typedef int (*Neuron_getNeuroPilotMagicNumber_fn)(int32_t* magic); typedef int (*Neuron_getL1MemorySizeKb_fn)(uint32_t* sizeKb); typedef int (*NeuronModel_create_fn)(NeuronModel** model); typedef void (*NeuronModel_free_fn)(NeuronModel* model); typedef int (*NeuronModel_finish_fn)(NeuronModel* model); typedef int (*NeuronModel_addOperand_fn)( NeuronModel* model, const NeuronOperandType* type); typedef int (*NeuronModel_setOperandValue_fn)( NeuronModel* model, int32_t index, const void* buffer, size_t length); typedef int (*NeuronModel_setOperandValueFromModel_fn)( NeuronModel* model, int32_t index, const NeuronModel* value); typedef int (*NeuronModel_setOperandSymmPerChannelQuantParams_fn)( NeuronModel* model, int32_t index, const NeuronSymmPerChannelQuantParams* channelQuant); typedef int (*NeuronModel_setOperandPerChannelQuantParams_fn)( NeuronModel* model, int32_t index, const NeuronPerChannelQuantParams* channelQuant); typedef int (*NeuronModel_addOperation_fn)( NeuronModel* model, NeuronOperationType type, uint32_t inputCount, const uint32_t* inputs, uint32_t outputCount, const uint32_t* outputs); typedef int (*NeuronModel_addOperationExtension_fn)( NeuronModel* model, const char* name, const char* vendor, const NeuronDevice* device, uint32_t inputCount, const uint32_t* inputs, uint32_t outputCount, const uint32_t* outputs); typedef int (*NeuronModel_identifyInputsAndOutputs_fn)( NeuronModel* model, uint32_t inputCount, const uint32_t* inputs, uint32_t outputCount, const uint32_t* outputs); typedef int (*NeuronModel_getSupportedOperations_fn)( NeuronModel* model, bool* supported, uint32_t operationCount); typedef int (*NeuronModel_getSupportedOperationsForDevices_fn)( const NeuronModel* model, const NeuronDevice* const* devices, uint32_t numDevices, bool* supportedOps); typedef int (*NeuronModel_relaxComputationFloat32toFloat16_fn)( NeuronModel* model, bool allow); typedef int ( *NeuronModel_suppressInputConversion_fn)(NeuronModel* model, bool suppress); typedef int (*NeuronModel_suppressOutputConversion_fn)( NeuronModel* model, bool suppress); typedef int (*NeuronModel_restoreFromCompiledNetwork_fn)( NeuronModel** model, NeuronCompilation** compilation, const void* buffer, const size_t size); typedef int (*NeuronCompilation_create_fn)( NeuronModel* model, NeuronCompilation** compilation); typedef int (*NeuronCompilation_createV2_fn)( NeuronModel* model, CompilationType type, const char* options, NeuronCompilation** compilation); typedef int (*NeuronCompilation_createForDevices_fn)( NeuronModel* model, const NeuronDevice* const* devices, uint32_t numDevices, NeuronCompilation** compilation); typedef int (*NeuronCompilation_createForDebug_fn)( NeuronModel* model, NeuronCompilation** compilation); typedef void (*NeuronCompilation_free_fn)(NeuronCompilation* compilation); typedef int (*NeuronCompilation_finish_fn)(NeuronCompilation* compilation); typedef int (*NeuronCompilation_getSupportedOperations_fn)( NeuronCompilation* compilation, uint32_t operationCount, bool* supported); typedef int (*NeuronCompilation_setCaching_fn)( NeuronCompilation* compilation, const char* cacheDir, const uint8_t* token); typedef int (*NeuronCompilation_setPreference_fn)( NeuronCompilation* compilation, int32_t preference); typedef int (*NeuronCompilation_setPriority_fn)( NeuronCompilation* compilation, int32_t priority); typedef int (*NeuronCompilation_getInputPaddedDimensions_fn)( NeuronCompilation* compilation, int32_t index, uint32_t* dimensions); typedef int (*NeuronCompilation_getOutputPaddedDimensions_fn)( NeuronCompilation* compilation, int32_t index, uint32_t* dimensions); typedef int (*NeuronCompilation_getInputPaddedSize_fn)( NeuronCompilation* compilation, int32_t index, size_t* size); typedef int (*NeuronCompilation_getOutputPaddedSize_fn)( NeuronCompilation* compilation, int32_t index, size_t* size); typedef int (*NeuronCompilation_getCompiledNetworkSize_fn)( NeuronCompilation* compilation, size_t* size); typedef int (*NeuronCompilation_storeCompiledNetwork_fn)( NeuronCompilation* compilation, void* buffer, const size_t size); typedef int (*NeuronCompilation_setOptimizationHint_fn)( NeuronCompilation* compilation, uint32_t optimizationCode); typedef int (*NeuronCompilation_setOptimizationString_fn)( NeuronCompilation* compilation, const char* optimizationString); typedef int (*NeuronCompilation_setTrimIOAlignment_fn)( NeuronCompilation* compilation, bool enable); typedef int (*NeuronCompilation_setSWDilatedConv_fn)( NeuronCompilation* compilation, bool enable); typedef int (*NeuronExecution_create_fn)( NeuronCompilation* compilation, NeuronExecution** execution); typedef void (*NeuronExecution_free_fn)(NeuronExecution* execution); typedef int (*NeuronExecution_setInput_fn)( NeuronExecution* execution, int32_t index, const NeuronOperandType* type, const void* buffer, size_t length); typedef int (*NeuronExecution_setOutput_fn)( NeuronExecution* execution, int32_t index, const NeuronOperandType* type, void* buffer, size_t length); typedef int (*NeuronExecution_setInputFromMemory_fn)( NeuronExecution* execution, uint32_t index, const NeuronOperandType* type, const NeuronMemory* memory, size_t offset, size_t length); typedef int (*NeuronExecution_setOutputFromMemory_fn)( NeuronExecution* execution, uint32_t index, const NeuronOperandType* type, const NeuronMemory* memory, size_t offset, size_t length); typedef int (*NeuronMemory_createFromFd_fn)( size_t size, int protect, int fd, size_t offset, NeuronMemory** memory); typedef int (*NeuronMemory_createFromAHardwareBuffer_fn)( const AHardwareBuffer* ahwb, NeuronMemory** memory); typedef void (*NeuronMemory_free_fn)(NeuronMemory* memory); typedef int (*NeuronExecution_compute_fn)(NeuronExecution* execution); typedef int (*NeuronExecution_startComputeWithDependencies_fn)( NeuronExecution* execution, const NeuronEvent* const* dependencies, uint32_t num_dependencies, uint64_t duration, NeuronEvent** event); typedef int ( *NeuronEvent_getSyncFenceFd_fn)(const NeuronEvent* event, int* syncFenceFd); typedef int (*NeuronEvent_wait_fn)(NeuronEvent* event); typedef void (*NeuronEvent_free_fn)(NeuronEvent* event); typedef int (*NeuronExecution_setLoopTimeout_fn)( NeuronExecution* execution, uint64_t duration); typedef int (*NeuronExecution_setBoostHint_fn)( NeuronExecution* execution, uint8_t boostValue); typedef int (*NeuronCompilation_createForMultiExecutions_fn)( NeuronModel* model, NeuronCompilation** compilation); typedef int ( *NeuronDebug_setReportPath_fn)(NeuronModel* model, const char* path); typedef int (*Neuron_getDeviceCount_fn)(uint32_t* numDevices); typedef int (*Neuron_getDevice_fn)(uint32_t devIndex, NeuronDevice** device); typedef int ( *NeuronDevice_getName_fn)(const NeuronDevice* device, const char** name); typedef int (*NeuronDevice_getDescription_fn)( const NeuronDevice* device, const char** description); typedef int (*NeuronDevice_getExtensionSupport_fn)( const char* extensionName, bool* isExtensionSupported); typedef int (*NeuronModel_getExtensionOperandType_fn)( NeuronModel* model, const char* extensionName, uint16_t operandCodeWithinExtension, int32_t* type); typedef int (*NeuronModel_getExtensionOperationType_fn)( NeuronModel* model, const char* extensionName, uint16_t operationCodeWithinExtension, int32_t* type); typedef int (*NeuronModel_setOperandExtensionData_fn)( NeuronModel* model, int32_t index, const void* data, size_t length); typedef int (*NeuronCompilation_createForBatch_fn)( NeuronModel* model, NeuronCompilation** compilation); typedef int (*NeuronModel_restoreFromCompiledNetworkV2_fn)( NeuronModel** model, NeuronCompilation** compilation, const void* buffer, const size_t size, const CompilationType& type); typedef int (*NeuronExecution_setRunnerPoolSize_fn)( NeuronExecution* execution, uint8_t numRunners); typedef int (*NeuronExecution_setBatchDone_fn)(NeuronExecution* execution); typedef int ( *NeuronExecution_setIODone_fn)(NeuronExecution* execution, int idx); typedef int (*NeuronCompilation_createWithOptions_fn)( NeuronModel* model, NeuronCompilation** compilation, const char* options); /*************************************************************************************************/ inline int Neuron_getVersion(NeuronRuntimeVersion* version) { LOAD_ADAPTER_FUNCTION(Neuron_getVersion); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(version); } inline int Neuron_getFeatureSupportedStatus( NeuronFeatureType type, bool* supported) { LOAD_ADAPTER_FUNCTION(Neuron_getFeatureSupportedStatus); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(type, supported); } inline int Neuron_getNeuroPilotMagicNumber(int32_t* magic) { LOAD_ADAPTER_FUNCTION(Neuron_getNeuroPilotMagicNumber); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(magic); } inline int Neuron_getL1MemorySizeKb(uint32_t* sizeKb) { LOAD_ADAPTER_FUNCTION(Neuron_getL1MemorySizeKb); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(sizeKb); } inline int NeuronModel_create(NeuronModel** model) { LOAD_ADAPTER_FUNCTION(NeuronModel_create); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model); } inline void NeuronModel_free(NeuronModel* model) { LOAD_ADAPTER_FUNCTION(NeuronModel_free); EXECUTE_ADAPTER_FUNCTION(model); } inline int NeuronModel_finish(NeuronModel* model) { LOAD_ADAPTER_FUNCTION(NeuronModel_finish); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model); } inline int NeuronModel_addOperand( NeuronModel* model, const NeuronOperandType* type) { LOAD_ADAPTER_FUNCTION(NeuronModel_addOperand); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, type); } inline int NeuronModel_setOperandValue( NeuronModel* model, int32_t index, const void* buffer, size_t length) { LOAD_ADAPTER_FUNCTION(NeuronModel_setOperandValue); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, index, buffer, length); } inline int NeuronModel_setOperandValueFromModel( NeuronModel* model, int32_t index, const NeuronModel* value) { LOAD_ADAPTER_FUNCTION(NeuronModel_setOperandValueFromModel); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, index, value); } inline int NeuronModel_setOperandSymmPerChannelQuantParams( NeuronModel* model, int32_t index, const NeuronSymmPerChannelQuantParams* channelQuant) { LOAD_ADAPTER_FUNCTION(NeuronModel_setOperandSymmPerChannelQuantParams); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, index, channelQuant); } inline int NeuronModel_setOperandPerChannelQuantParams( NeuronModel* model, int32_t index, const NeuronPerChannelQuantParams* channelQuant) { LOAD_ADAPTER_FUNCTION(NeuronModel_setOperandPerChannelQuantParams); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, index, channelQuant); } inline int NeuronModel_addOperation( NeuronModel* model, NeuronOperationType type, uint32_t inputCount, const uint32_t* inputs, uint32_t outputCount, const uint32_t* outputs) { LOAD_ADAPTER_FUNCTION(NeuronModel_addOperation); EXECUTE_ADAPTER_FUNCTION_RETURN_INT( model, type, inputCount, inputs, outputCount, outputs); } inline int NeuronModel_addOperationExtension( NeuronModel* model, const char* name, const char* vendor, const NeuronDevice* device, uint32_t inputCount, const uint32_t* inputs, uint32_t outputCount, const uint32_t* outputs) { LOAD_ADAPTER_FUNCTION(NeuronModel_addOperationExtension); EXECUTE_ADAPTER_FUNCTION_RETURN_INT( model, name, vendor, device, inputCount, inputs, outputCount, outputs); } inline int NeuronModel_identifyInputsAndOutputs( NeuronModel* model, uint32_t inputCount, const uint32_t* inputs, uint32_t outputCount, const uint32_t* outputs) { LOAD_ADAPTER_FUNCTION(NeuronModel_identifyInputsAndOutputs); EXECUTE_ADAPTER_FUNCTION_RETURN_INT( model, inputCount, inputs, outputCount, outputs); } inline int NeuronModel_getSupportedOperations( NeuronModel* model, bool* supported, uint32_t operationCount) { LOAD_ADAPTER_FUNCTION(NeuronModel_getSupportedOperations); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, supported, operationCount); } inline int NeuronModel_getSupportedOperationsForDevices( const NeuronModel* model, const NeuronDevice* const* devices, uint32_t numDevices, bool* supportedOps) { LOAD_ADAPTER_FUNCTION(NeuronModel_getSupportedOperationsForDevices); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, devices, numDevices, supportedOps); } inline int NeuronCompilation_getSupportedOperations( NeuronCompilation* compilation, uint32_t operationCount, bool* supported) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_getSupportedOperations); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, operationCount, supported); } inline int NeuronModel_relaxComputationFloat32toFloat16( NeuronModel* model, bool allow) { LOAD_ADAPTER_FUNCTION(NeuronModel_relaxComputationFloat32toFloat16); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, allow); } inline int NeuronModel_suppressInputConversion( NeuronModel* model, bool suppress) { LOAD_ADAPTER_FUNCTION(NeuronModel_suppressInputConversion); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, suppress); } inline int NeuronModel_suppressOutputConversion( NeuronModel* model, bool suppress) { LOAD_ADAPTER_FUNCTION(NeuronModel_suppressOutputConversion); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, suppress); } inline int NeuronModel_restoreFromCompiledNetwork( NeuronModel** model, NeuronCompilation** compilation, const void* buffer, const size_t size) { LOAD_ADAPTER_FUNCTION(NeuronModel_restoreFromCompiledNetwork); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, compilation, buffer, size); } inline int NeuronCompilation_create( NeuronModel* model, NeuronCompilation** compilation) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_create); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, compilation); } inline int NeuronCompilation_createV2( NeuronModel* model, CompilationType type, const char* options, NeuronCompilation** compilation) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_createV2); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, type, options, compilation); } inline int NeuronCompilation_createForDevices( NeuronModel* model, const NeuronDevice* const* devices, uint32_t numDevices, NeuronCompilation** compilation) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_createForDevices); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, devices, numDevices, compilation); } inline int NeuronCompilation_createForDebug( NeuronModel* model, NeuronCompilation** compilation) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_createForDebug); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, compilation); } inline void NeuronCompilation_free(NeuronCompilation* compilation) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_free); EXECUTE_ADAPTER_FUNCTION(compilation); } inline int NeuronCompilation_finish(NeuronCompilation* compilation) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_finish); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation); } inline int NeuronCompilation_setCaching( NeuronCompilation* compilation, const char* cacheDir, const uint8_t* token) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_setCaching); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, cacheDir, token); } inline int NeuronCompilation_setPreference( NeuronCompilation* compilation, int32_t preference) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_setPreference); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, preference); } inline int NeuronCompilation_setPriority( NeuronCompilation* compilation, int32_t priority) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_setPriority); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, priority); } inline int NeuronCompilation_getInputPaddedDimensions( NeuronCompilation* compilation, int32_t index, uint32_t* dimensions) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_getInputPaddedDimensions); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, index, dimensions); } inline int NeuronCompilation_getOutputPaddedDimensions( NeuronCompilation* compilation, int32_t index, uint32_t* dimensions) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_getOutputPaddedDimensions); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, index, dimensions); } inline int NeuronCompilation_getInputPaddedSize( NeuronCompilation* compilation, int32_t index, size_t* size) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_getInputPaddedSize); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, index, size); } inline int NeuronCompilation_getOutputPaddedSize( NeuronCompilation* compilation, int32_t index, size_t* size) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_getOutputPaddedSize); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, index, size); } inline int NeuronCompilation_getCompiledNetworkSize( NeuronCompilation* compilation, size_t* size) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_getCompiledNetworkSize); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, size); } inline int NeuronCompilation_storeCompiledNetwork( NeuronCompilation* compilation, void* buffer, const size_t size) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_storeCompiledNetwork); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, buffer, size); } inline int NeuronCompilation_setOptimizationHint( NeuronCompilation* compilation, uint32_t optimizationCode) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_setOptimizationHint); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, optimizationCode); } inline int NeuronCompilation_setOptimizationString( NeuronCompilation* compilation, const char* optimizationString) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_setOptimizationString); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, optimizationString); } inline int NeuronCompilation_setTrimIOAlignment( NeuronCompilation* compilation, bool enable) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_setTrimIOAlignment); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, enable); } inline int NeuronCompilation_setSWDilatedConv( NeuronCompilation* compilation, bool enable) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_setSWDilatedConv); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, enable); } inline int NeuronExecution_create( NeuronCompilation* compilation, NeuronExecution** execution) { LOAD_ADAPTER_FUNCTION(NeuronExecution_create); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(compilation, execution); } inline void NeuronExecution_free(NeuronExecution* execution) { LOAD_ADAPTER_FUNCTION(NeuronExecution_free); EXECUTE_ADAPTER_FUNCTION(execution); } inline int NeuronExecution_setInput( NeuronExecution* execution, int32_t index, const NeuronOperandType* type, const void* buffer, size_t length) { LOAD_ADAPTER_FUNCTION(NeuronExecution_setInput); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(execution, index, type, buffer, length); } inline int NeuronExecution_setInputFromMemory( NeuronExecution* execution, uint32_t index, const NeuronOperandType* type, const NeuronMemory* memory, size_t offset, size_t length) { LOAD_ADAPTER_FUNCTION(NeuronExecution_setInputFromMemory); EXECUTE_ADAPTER_FUNCTION_RETURN_INT( execution, index, type, memory, offset, length); } inline int NeuronExecution_setOutput( NeuronExecution* execution, int32_t index, const NeuronOperandType* type, void* buffer, size_t length) { LOAD_ADAPTER_FUNCTION(NeuronExecution_setOutput); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(execution, index, type, buffer, length); } inline int NeuronExecution_setOutputFromMemory( NeuronExecution* execution, uint32_t index, const NeuronOperandType* type, const NeuronMemory* memory, size_t offset, size_t length) { LOAD_ADAPTER_FUNCTION(NeuronExecution_setOutputFromMemory); EXECUTE_ADAPTER_FUNCTION_RETURN_INT( execution, index, type, memory, offset, length); } inline int NeuronMemory_createFromFd( size_t size, int protect, int fd, size_t offset, NeuronMemory** memory) { LOAD_ADAPTER_FUNCTION(NeuronMemory_createFromFd); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(size, protect, fd, offset, memory); } inline int NeuronMemory_createFromAHardwareBuffer( const AHardwareBuffer* ahwb, NeuronMemory** memory) { LOAD_ADAPTER_FUNCTION(NeuronMemory_createFromAHardwareBuffer); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(ahwb, memory); } inline void NeuronMemory_free(NeuronMemory* memory) { LOAD_ADAPTER_FUNCTION(NeuronMemory_free); EXECUTE_ADAPTER_FUNCTION(memory); } inline int NeuronExecution_compute(NeuronExecution* execution) { LOAD_ADAPTER_FUNCTION(NeuronExecution_compute); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(execution); } inline int NeuronExecution_startComputeWithDependencies( NeuronExecution* execution, const NeuronEvent* const* dependencies, uint32_t num_dependencies, uint64_t duration, NeuronEvent** event) { LOAD_ADAPTER_FUNCTION(NeuronExecution_startComputeWithDependencies); EXECUTE_ADAPTER_FUNCTION_RETURN_INT( execution, dependencies, num_dependencies, duration, event); } inline int NeuronEvent_getSyncFenceFd( const NeuronEvent* event, int* syncFenceFd) { LOAD_ADAPTER_FUNCTION(NeuronEvent_getSyncFenceFd); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(event, syncFenceFd); } inline int NeuronEvent_wait(NeuronEvent* event) { LOAD_ADAPTER_FUNCTION(NeuronEvent_wait); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(event); } inline void NeuronEvent_free(NeuronEvent* event) { LOAD_ADAPTER_FUNCTION(NeuronEvent_free); EXECUTE_ADAPTER_FUNCTION(event); } inline int NeuronExecution_setLoopTimeout( NeuronExecution* execution, uint64_t duration) { LOAD_ADAPTER_FUNCTION(NeuronExecution_setLoopTimeout); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(execution, duration); } inline int NeuronExecution_setBoostHint( NeuronExecution* execution, uint8_t boostValue) { LOAD_ADAPTER_FUNCTION(NeuronExecution_setBoostHint); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(execution, boostValue); } inline int NeuronCompilation_createForMultiExecutions( NeuronModel* model, NeuronCompilation** compilation) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_createForMultiExecutions); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, compilation); } inline int NeuronDebug_setReportPath(NeuronModel* model, const char* path) { LOAD_ADAPTER_FUNCTION(NeuronDebug_setReportPath); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, path); } inline int Neuron_getDeviceCount(uint32_t* numDevices) { LOAD_ADAPTER_FUNCTION(Neuron_getDeviceCount); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(numDevices); } inline int Neuron_getDevice(uint32_t devIndex, NeuronDevice** device) { LOAD_ADAPTER_FUNCTION(Neuron_getDevice); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(devIndex, device); } inline int NeuronDevice_getName(const NeuronDevice* device, const char** name) { LOAD_ADAPTER_FUNCTION(NeuronDevice_getName); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(device, name); } inline int NeuronDevice_getDescription( const NeuronDevice* device, const char** description) { LOAD_ADAPTER_FUNCTION(NeuronDevice_getDescription); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(device, description); } inline int NeuronDevice_getExtensionSupport( const char* extensionName, bool* isExtensionSupported) { LOAD_ADAPTER_FUNCTION(NeuronDevice_getExtensionSupport); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(extensionName, isExtensionSupported); } inline int NeuronModel_getExtensionOperandType( NeuronModel* model, const char* extensionName, uint16_t operandCodeWithinExtension, int32_t* type) { LOAD_ADAPTER_FUNCTION(NeuronModel_getExtensionOperandType); EXECUTE_ADAPTER_FUNCTION_RETURN_INT( model, extensionName, operandCodeWithinExtension, type); } inline int NeuronModel_getExtensionOperationType( NeuronModel* model, const char* extensionName, uint16_t operationCodeWithinExtension, int32_t* type) { LOAD_ADAPTER_FUNCTION(NeuronModel_getExtensionOperationType); EXECUTE_ADAPTER_FUNCTION_RETURN_INT( model, extensionName, operationCodeWithinExtension, type); } inline int NeuronModel_setOperandExtensionData( NeuronModel* model, int32_t index, const void* data, size_t length) { LOAD_ADAPTER_FUNCTION(NeuronModel_setOperandExtensionData); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, index, data, length); } inline int NeuronCompilation_createForBatch( NeuronModel* model, NeuronCompilation** compilation) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_createForBatch); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, compilation); } inline int NeuronModel_restoreFromCompiledNetworkV2( NeuronModel** model, NeuronCompilation** compilation, const void* buffer, const size_t size, const CompilationType& type) { LOAD_ADAPTER_FUNCTION(NeuronModel_restoreFromCompiledNetworkV2); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, compilation, buffer, size, type); } inline int NeuronExecution_setRunnerPoolSize( NeuronExecution* execution, uint8_t numRunners) { LOAD_ADAPTER_FUNCTION(NeuronExecution_setRunnerPoolSize); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(execution, numRunners); } inline int NeuronExecution_setBatchDone(NeuronExecution* execution) { LOAD_ADAPTER_FUNCTION(NeuronExecution_setBatchDone); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(execution); } inline int NeuronExecution_setIODone(NeuronExecution* execution, int idx) { LOAD_ADAPTER_FUNCTION(NeuronExecution_setIODone); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(execution, idx); } inline int NeuronCompilation_createWithOptions( NeuronModel* model, NeuronCompilation** compilation, const char* options) { LOAD_ADAPTER_FUNCTION(NeuronCompilation_createWithOptions); EXECUTE_ADAPTER_FUNCTION_RETURN_INT(model, compilation, options); }