// // Copyright 2018 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // feature_support_util.h: Internal-to-ANGLE header file for feature-support utilities. #ifndef FEATURE_SUPPORT_UTIL_H_ #define FEATURE_SUPPORT_UTIL_H_ #include "export.h" #ifdef __cplusplus extern "C" { #endif /************************************************************************************************** * * The following is the "version 2" private API for the Android EGL loader: * **************************************************************************************************/ // Typedefs for handles: RulesHandle; SystemInfoHandle; // Callers of the ANGLE feature-support-utility API (e.g. the Android EGL loader) will call this // function in order to determine what version of the API it can use (if any). // // The caller supplies the highest version of the API that it knows about. If that version is // supported by the feature-support-utility, true is returned and the version isn't changed. If // the supplied version is higher than supported by the feature-support-utility, true is // returned and the version is changed to the highest supported by the feature-support-utility. // If the supplied version is lower than supported by the feature-support-utility, false is // returned. // // Parameters: // // - versionToUse (IN/OUT) - The application supplies the highest version of the interface that // it knows about. If successful, the output value is either // unchanged or is the highest supported by the interface. // ANGLE_EXPORT bool ANGLEGetFeatureSupportUtilAPIVersion(unsigned int *versionToUse); // The Android EGL loader will call this function in order to parse a rules file // and create a set of rules, for which a handle is returned. // // Parameters: // - rulesString (IN) - Rules-file contents, as a non-zero length, null-terminated char* // string // - rulesHandle (OUT) - Handle to the rules data structure // - rulesVersion (OUT) - Version of the rules data structure (potentially because of schema // changes) that should be passed to ANGLEShouldBeUsedForApplication() // // Return value: // - bool - true if no errors, otherwise false // ANGLE_EXPORT bool ANGLEAndroidParseRulesString(const char *rulesString, RulesHandle *rulesHandle, int *rulesVersion); // The Android EGL loader will call this function in order to obtain a handle to // the SystemInfo struct. // // Parameters: // - systemInfoHandle (OUT) - handle to the SystemInfo structure // // Return value: // - bool - true if no errors, otherwise false // ANGLE_EXPORT bool ANGLEGetSystemInfo(SystemInfoHandle *systemInfoHandle); // The Android EGL loader will call this function in order to add the device's manufacturer and // model to the SystemInfo struct associated with the handle returned by ANGLEGetSystemInfo. // // Parameters: // - deviceMfr (IN) - Device manufacturer, from the // "ro.product.manufacturer"com.google.android" property // - deviceModel (IN) - Device model, from the "ro.product.model"com.google.android" property // - systemInfoHandle (IN) - handle to the SystemInfo structure // // Return value: // - bool - true if no errors, otherwise false // ANGLE_EXPORT bool ANGLEAddDeviceInfoToSystemInfo(const char *deviceMfr, const char *deviceModel, SystemInfoHandle systemInfoHandle); // The Android EGL loader will call this function in order to determine whether // to use ANGLE instead of a native OpenGL-ES (GLES) driver. // // Parameters: // - rulesHandle (IN) - Handle to the rules data structure // - rulesVersion (IN) - Version of the rules data structure (potentially because of schema // changes) that was passed from AndroidParseRulesFile() // - systemInfoHandle (IN) - Handle to the SystemInfo structure // - appName (IN) - Java name of the application (e.g. "com.google.android.apps.maps") // // Return value: // - bool - true if Android should use ANGLE for appName, otherwise false (i.e. use the native // GLES driver) // ANGLE_EXPORT bool ANGLEShouldBeUsedForApplication(const RulesHandle rulesHandle, int rulesVersion, const SystemInfoHandle systemInfoHandle, const char *appName); // The Android EGL loader will call this function in order to free a rules handle. // // Parameters: // - rulesHandle (IN) - Handle to the rules data structure // ANGLE_EXPORT void ANGLEFreeRulesHandle(const RulesHandle rulesHandle); // The Android EGL loader will call this function in order to free a SystemInfo handle. // // Parameters: // - systemInfoHandle (IN) - Handle to the SystemInfo structure // ANGLE_EXPORT void ANGLEFreeSystemInfoHandle(const SystemInfoHandle systemInfoHandle); // The following are internal versions supported by the current feature-support-utility API. constexpr unsigned int kFeatureVersion_LowestSupported = …; constexpr unsigned int kFeatureVersion_HighestSupported = …; #ifdef __cplusplus } // extern "C" #endif #endif // FEATURE_SUPPORT_UTIL_H_