//============================================================================= // // Copyright (c) 2017-2018,2021 Qualcomm Technologies, Inc. // All Rights Reserved. // Confidential and Proprietary - Qualcomm Technologies, Inc. // //============================================================================= #ifndef _DL_SYSTEM_PLATFORM_CONFIG_HPP_ #define _DL_SYSTEM_PLATFORM_CONFIG_HPP_ #include "DlSystem/ZdlExportDefine.hpp" #include namespace zdl{ namespace DlSystem { /** @addtogroup c_plus_plus_apis C++ @{ */ /** * @brief . * * A structure OpenGL configuration * * @note When certain OpenGL context and display are provided to UserGLConfig for using * GPU buffer as input directly, the user MUST ensure the particular OpenGL * context and display remain vaild throughout the execution of neural network models. */ struct ZDL_EXPORT UserGLConfig { /// Holds user EGL context. /// void* userGLContext = nullptr; /// Holds user EGL display. void* userGLDisplay = nullptr; }; /** * @brief . * * A structure Gpu configuration */ struct ZDL_EXPORT UserGpuConfig{ /// Holds user OpenGL configuration. /// UserGLConfig userGLConfig; }; /** * @brief . * * A class user platform configuration */ class ZDL_EXPORT PlatformConfig { public: /** * @brief . * * An enum class of all supported platform types */ enum class PlatformType_t { /// Unknown platform type. UNKNOWN = 0, /// Snapdragon CPU. CPU = 1, /// Adreno GPU. GPU = 2, /// Hexagon DSP. DSP = 3 }; /** * @brief . * * A union class user platform configuration information */ union PlatformConfigInfo { /// Holds user GPU Configuration. /// UserGpuConfig userGpuConfig; PlatformConfigInfo(){}; }; PlatformConfig() : m_PlatformType(PlatformType_t::UNKNOWN), m_PlatformOptions("") {}; /** * @brief Retrieves the platform type * * @return Platform type */ PlatformType_t getPlatformType() const {return m_PlatformType;}; /** * @brief Indicates whther the plaform configuration is valid. * * @return True if the platform configuration is valid; false otherwise. */ bool isValid() const {return (PlatformType_t::UNKNOWN != m_PlatformType);}; /** * @brief Retrieves the Gpu configuration * * @param[out] userGpuConfig The passed in userGpuConfig populated with the Gpu configuration on return. * * @return True if Gpu configuration was retrieved; false otherwise. */ bool getUserGpuConfig(UserGpuConfig& userGpuConfig) const { if(m_PlatformType == PlatformType_t::GPU) { userGpuConfig = m_PlatformConfigInfo.userGpuConfig; return true; } else { return false; } } /** * @brief Sets the Gpu configuration * * @param[in] userGpuConfig Gpu Configuration * * @return True if Gpu configuration was successfully set; false otherwise. */ bool setUserGpuConfig(UserGpuConfig& userGpuConfig) { if((userGpuConfig.userGLConfig.userGLContext != nullptr) && (userGpuConfig.userGLConfig.userGLDisplay != nullptr)) { switch (m_PlatformType) { case PlatformType_t::GPU: m_PlatformConfigInfo.userGpuConfig = userGpuConfig; return true; case PlatformType_t::UNKNOWN: m_PlatformType = PlatformType_t::GPU; m_PlatformConfigInfo.userGpuConfig = userGpuConfig; return true; default: return false; } } else return false; } /** * @brief Sets the platform options * * @param[in] options Options as a string in the form of "keyword:options" * * @return True if options are pass validation; otherwise false. If false, the options are not updated. */ bool setPlatformOptions(std::string options) { std::string oldOptions = m_PlatformOptions; m_PlatformOptions = options; if (isOptionsValid()) { return true; } else { m_PlatformOptions = oldOptions; return false; } } /** * @brief Indicates whther the plaform configuration is valid. * * @return True if the platform configuration is valid; false otherwise. */ bool isOptionsValid() const; /** * @brief Gets the platform options * * @return Options as a string */ std::string getPlatformOptions() const { return m_PlatformOptions; } /** * @brief Sets the platform options * * @param[in] optionName Name of platform options" * @param[in] value Value of specified optionName * * @return If true, add "optionName:value" to platform options if optionName don't exist, otherwise update the * value of specified optionName. * If false, the platform options will not be changed. */ bool setPlatformOptionValue(const std::string& optionName, const std::string& value); /** * @brief Removes the platform options * * @param[in] optionName Name of platform options" * @param[in] value Value of specified optionName * * @return If true, removed "optionName:value" to platform options if optionName don't exist, do nothing. * If false, the platform options will not be changed. */ bool removePlatformOptionValue(const std::string& optionName, const std::string& value); static void SetIsUserGLBuffer(bool isUserGLBuffer); static bool GetIsUserGLBuffer(); private: PlatformType_t m_PlatformType; PlatformConfigInfo m_PlatformConfigInfo; std::string m_PlatformOptions; static bool m_IsUserGLBuffer; }; /** @} */ /* end_addtogroup c_plus_plus_apis C++ */ }} //namespace end #endif