Name

    EXT_image_implicit_sync_control

Name Strings

    EGL_EXT_image_implicit_sync_control

Contributors

    Daniel Stone, Collabora Ltd.

Contacts

    Daniel Stone (daniels 'at' collabora 'dot' com)

Status

    Complete

Version

    Version 1, May 15, 2017

Number

    EGL Extension #120

Dependencies

    EGL 1.2 is required.

    EGL_KHR_image_base and EGL_EXT_image_dma_buf_import are required.

    The EGL implementation must be running on a Linux kernel supporting implicit
    synchronization, as the usage is defined in the
    EGL_ARM_implicit_external_sync extension, but does not require that extension.

    This extension is written against the wording of the EGL 1.2 Specification.

Overview

    This extension allows a client to selectively use implicit or explicit
    synchronization mechanisms when addressing externally-imported EGLImages.
    A new token is added to EGLImage creation which allows the client to select
    whether a platform's implicit synchronization will be in use for a buffer
    imported into EGLImage.

    Heterogeneous systems (supporting multiple APIs, mixed legacy/updated
    clients, etc) already supporting implicit synchronization, may not be able
    to change to explict synchronization in a single switch. This extension
    allows synchronization to be controlled on a per-buffer basis, so explicit
    synchronization can be enabled for a complete pipeline which supports it,
    or implicit synchronization used otherwise.

New Types

    None

New Procedures and Functions

    None

New Tokens

    Accepted as an attribute in the <attrib_list> parameter of
    eglCreateImageKHR:

        EGL_IMPORT_SYNC_TYPE_EXT           0x3470

    Accepted as the value for the EGL_IMPORT_SYNC_TYPE_EXT attribute:

        EGL_IMPORT_IMPLICIT_SYNC_EXT       0x3471
        EGL_IMPORT_EXPLICIT_SYNC_EXT       0x3472

New Types

    None.

Additions to Chapter 2 of the EGL 1.2 Specification (EGL Operation)

    Add to section 2.5.1 "EGLImage Specification" (as defined by the
    EGL_KHR_image_base specification), in the description of
    eglCreateImageKHR:

    Add the following to Table bbb (Legal attributes for eglCreateImageKHR
    <attr_list> parameter), Section 2.5.1 (EGLImage Specification)

      +-----------------------------+-------------------------+---------------------------+---------------+
      | Attribute                   | Description             | Valid <target>s           | Default Value |
      +-----------------------------+-------------------------+---------------------------+---------------+
      | EGL_IMPORT_SYNC_TYPE_EXT    | The type of             | EGL_LINUX_DMA_BUF_EXT     | EGL_IMPORT_   |
      |                             | synchronization to      |                           | IMPLICT_SYNC_ |
      |                             | apply to previously     |                           | EXT           |
      |                             | submitted rendering on  |                           |               |
      |                             | the platform buffer     |                           |               |
      +-----------------------------+-------------------------+---------------------------+---------------+
      Table bbb. Legal attributes for eglCreateImageKHR <attrib_list> parameter

    ...


    Add to section 2.5.1 "EGLImage Specification" (as defined by the
    EGL_KHR_image_base specification), in the description of
    eglCreateImageKHR:

    The behaviour of the imported buffer with regard to commands previously
    submitted (including via other APIs and from other clients) is controlled
    by the EGL_IMPORT_SYNC_TYPE_EXT attribute. If the default value of
    implicit synchronization is used, the platform may synchronize any access
    to the imported buffer, against accesses previously made (including by
    other clients or APIs) to that same buffer. If explicit synchronization
    is specified, the platform will not synchronize access to that buffer
    against other accesses; the client must use another synchronization
    mechanism if it wishes to order its accesses with respect to others.

    Add to the list of error conditions for eglCreateImageKHR:

       * If <attrib_list> contains the EGL_IMPORT_SYNC_TYPE_EXT name, but the
         value is not one of EGL_IMPORT_IMPLICIT_SYNC_EXT or
         EGL_IMPORT_EXPLICIT_SYNC_EXT, EGL_BAD_PARAMETER is generated.


Revision History

#1 (Daniel Stone, May 15, 2017)
   - Initial revision.
