Edit

kc3-lang/angle/src/feature_support_util/feature_support_util.h

Branch :

  • Show log

    Commit

  • Author : Ian Elliott
    Date : 2018-11-28 11:44:48
    Hash : a9d579e8
    Message : Version-2 API of the A4A opt-in/out (a.k.a. feature-support utilities) This version-2 API splits up and renames parts of the version-1 API. Some initial unit tests were added. The code is now built and tested on Linux, Windows, and Mac (in addition to Android, which is where it's being used). Memory leaks were fixed and some memory/list-management TODOs were also dealt with (associated with an Android bug). Some review items deferred. See: angleproject:2993 Bug: angleproject:2794 Bug: b/113346561 Change-Id: Iff307f9347fb05a733fe96b6774fb32d36e25590 Reviewed-on: https://chromium-review.googlesource.com/c/1291837 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Ian Elliott <ianelliott@google.com>

  • src/feature_support_util/feature_support_util.h
  • //
    // 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 1" private API for the Android EGL loader:
     *
     **************************************************************************************************/
    
    // 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 ANGLEGetUtilityAPI(unsigned int *versionToUse);
    
    // 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:
    // - rules_fd - File descriptor of the rules file to use
    // - rules_offset - Offset into the fd before finding the contents of the rules file
    // - rules_length - length of the rules file content
    // - appName - Java name of the application (e.g. "com.google.android.apps.maps")
    // - deviceMfr - Device manufacturer, from the "ro.product.manufacturer"com.google.android"
    //   property
    // - deviceModel - Device model, from the "ro.product.model"com.google.android" property
    //
    ANGLE_EXPORT bool AndroidUseANGLEForApplication(int rules_fd,
                                                    long rules_offset,
                                                    long rules_length,
                                                    const char *appName,
                                                    const char *deviceMfr,
                                                    const char *deviceModel);
    
    /**************************************************************************************************
     *
     * The following is the "version 2" private API for the Android EGL loader:
     *
     **************************************************************************************************/
    
    // Typedefs for handles:
    typedef void *RulesHandle;
    typedef void *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  = 1;
    constexpr unsigned int kFeatureVersion_HighestSupported = 2;
    
    #ifdef __cplusplus
    }  // extern "C"
    #endif
    
    #endif  // FEATURE_SUPPORT_UTIL_H_