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.
