1*3e777be0SXin Li // 2*3e777be0SXin Li // Copyright © 2017 Arm Ltd. All rights reserved. 3*3e777be0SXin Li // SPDX-License-Identifier: MIT 4*3e777be0SXin Li // 5*3e777be0SXin Li 6*3e777be0SXin Li #pragma once 7*3e777be0SXin Li 8*3e777be0SXin Li #include "ArmnnDriver.hpp" 9*3e777be0SXin Li #include "ConversionUtils.hpp" 10*3e777be0SXin Li 11*3e777be0SXin Li #include <armnn/ArmNN.hpp> 12*3e777be0SXin Li 13*3e777be0SXin Li #include <set> 14*3e777be0SXin Li #include <vector> 15*3e777be0SXin Li 16*3e777be0SXin Li namespace armnn_driver 17*3e777be0SXin Li { 18*3e777be0SXin Li 19*3e777be0SXin Li enum class ConversionResult 20*3e777be0SXin Li { 21*3e777be0SXin Li Success, 22*3e777be0SXin Li ErrorMappingPools, 23*3e777be0SXin Li UnsupportedFeature 24*3e777be0SXin Li }; 25*3e777be0SXin Li 26*3e777be0SXin Li // A helper template class performing the conversion from an AndroidNN driver Model representation, 27*3e777be0SXin Li // to an armnn::INetwork object 28*3e777be0SXin Li template<typename HalPolicy> 29*3e777be0SXin Li class ModelToINetworkConverter 30*3e777be0SXin Li { 31*3e777be0SXin Li public: 32*3e777be0SXin Li using HalModel = typename HalPolicy::Model; 33*3e777be0SXin Li 34*3e777be0SXin Li ModelToINetworkConverter(const std::vector<armnn::BackendId>& backends, 35*3e777be0SXin Li const HalModel& model, 36*3e777be0SXin Li const std::set<unsigned int>& forcedUnsupportedOperations); 37*3e777be0SXin Li GetConversionResult() const38*3e777be0SXin Li ConversionResult GetConversionResult() const { return m_ConversionResult; } 39*3e777be0SXin Li 40*3e777be0SXin Li // Returns the ArmNN INetwork corresponding to the input model, if preparation went smoothly, nullptr otherwise. GetINetwork() const41*3e777be0SXin Li armnn::INetwork* GetINetwork() const { return m_Data.m_Network.get(); } 42*3e777be0SXin Li 43*3e777be0SXin Li bool IsOperationSupported(uint32_t operationIndex) const; 44*3e777be0SXin Li 45*3e777be0SXin Li private: 46*3e777be0SXin Li void Convert(); 47*3e777be0SXin Li 48*3e777be0SXin Li // Shared aggregate input/output/internal data 49*3e777be0SXin Li ConversionData m_Data; 50*3e777be0SXin Li 51*3e777be0SXin Li // Input data 52*3e777be0SXin Li const HalModel& m_Model; 53*3e777be0SXin Li const std::set<unsigned int>& m_ForcedUnsupportedOperations; 54*3e777be0SXin Li 55*3e777be0SXin Li // Output data 56*3e777be0SXin Li ConversionResult m_ConversionResult; 57*3e777be0SXin Li std::map<uint32_t, bool> m_OperationSupported; 58*3e777be0SXin Li }; 59*3e777be0SXin Li 60*3e777be0SXin Li } // armnn_driver 61