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

    Draft

Version

    Version 1.0, January 27, 2017

Number

    EGL Extension #XXX

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 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(
                                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

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

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