Name

    ANDROID_get_native_client_buffer

Name Strings

    EGL_ANDROID_get_native_client_buffer

Contributors

    Craig Donner

Contact

    Craig Donner, Google Inc. (cdonner 'at' google.com)

Status

    Complete

Version

    Version 3, October 11, 2017

Number

    EGL Extension #123

Dependencies

    Requires EGL 1.2.

    EGL_ANDROID_image_native_buffer and EGL_KHR_image_base are required.

    This extension is written against the wording of the EGL 1.2
    Specification as modified by EGL_KHR_image_base and
    EGL_ANDROID_image_native_buffer.

Overview

    This extension allows creating an EGLClientBuffer from an Android
    AHardwareBuffer object which can be later used to create an EGLImage.

New Types

    struct AHardwareBuffer

New Procedures and Functions

    EGLClientBuffer eglGetNativeClientBufferANDROID(const struct AHardwareBuffer *buffer)

New Tokens

    None

Changes to Chapter 3 of the EGL 1.2 Specification (EGL Functions and Errors)

    Add the following to section 2.5.1 "EGLImage Specification" (as modified by
    the EGL_KHR_image_base and EGL_ANDROID_image_native_buffer specifications),
    below the description of eglCreateImageKHR:

   "The command

        EGLClientBuffer eglGetNativeClientBufferANDROID(
                                const struct AHardwareBuffer *buffer)

    may be used to create an EGLClientBuffer from an AHardwareBuffer object.
    EGL implementations must guarantee that the lifetime of the returned
    EGLClientBuffer is at least as long as the EGLImage(s) it is bound to,
    following the lifetime semantics described below in section 2.5.2; the
    EGLClientBuffer must be destroyed no earlier than when all of its associated
    EGLImages are destroyed by eglDestroyImageKHR.

    Errors

        If eglGetNativeClientBufferANDROID fails, NULL will be returned, no
        memory will be allocated, and the following error will be generated:

       * If the value of buffer is NULL, the error EGL_BAD_PARAMETER is
         generated.

Issues

    1. Should this extension define what particular AHardwareBuffer formats EGL
    implementations are required to support?

    RESOLVED: No.

    The set of valid formats is implementation-specific and may depend on
    additional EGL extensions. The particular valid combinations for a given
    Android version and implementation should be documented by that version.

Revision History

#3 (Jesse Hall, October 11, 2017)
    - Assigned extension number, fixed minor issues for publication

#2 (Craig Donner, February 17, 2017)
    - Fix typographical errors.

#1 (Craig Donner, January 27, 2017)
    - Initial draft.
