Name

    ANGLE_surface_orientation

Name Strings

    EGL_ANGLE_surface_orientation

Contributors

    Geoff Lang, Google

Contacts

    Geoff Lang, Google (geofflang 'at' google 'dot' com)

Status

    Draft

Version

    Version 1, 2015-12-15

Number

    EGL Extension XXX

Extension Type

    EGL display extension

Dependencies

    Written based on the wording of the EGL 1.5 Specification
    (August 7 2014).

Overview

    This extension provides a mechanism for querying the most optimal
    orientation of a window surface and creating window sufraces with
    non-default orientations for the most performant rendering.

New Types

    None

New Procedures and Functions

    None

New Tokens

    New EGLConfig bitmask attribute name:

        EGL_OPTIMAL_SURFACE_ORIENTATION_ANGLE 0x33A7

    Accepted as an attribute name in the <attrib_list> argument of
    eglCreateWindowSurface and attribute name in the <attribute>
    argument of eglQuerySurface:

        EGL_SURFACE_ORIENTATION_ANGLE 0x33A8

    Valid bitfields in the EGL_OPTIMAL_SURFACE_ORIENTATION_ANGLE bitmask
    attribute of EGLConfig and EGL_SURFACE_ORIENTATION_ANGLE bitmask attribute
    of eglCreateWindowSurface:

        EGL_SURFACE_ORIENTATION_INVERT_X_ANGLE 0x0001
        EGL_SURFACE_ORIENTATION_INVERT_Y_ANGLE 0x0002

Additions to the EGL Specification

    Additions to Chapter 3 of the EGL 1.5 Specification (EGL Functions and Errors)

    Add to table 3.1 (EGLConfig Attributes)

    Attribute                              Type     Notes
    -------------------------------------  -------  ----------------------
    EGL_OPTIMAL_SURFACE_ORIENTATION_ANGLE  bitmask  Optimal window surface
                                                    orientation.


    Add a paragraph to section 3.4, section Other EGLConfig Attribute
    Descriptions.

    "EGL_OPTIMAL_SURFACE_ORIENTATION_ANGLE is a mask indicating which
    window surface orientation will provide the best performance."

    Add to table 3.4 (Default values and match criteria for EGLConfig
    attributes):

    Attribute                              Default  Selection  Sort     Sort
                                                    Criteria   Order    Priority
    -------------------------------------  -------  ---------  -------  --------
    EGL_OPTIMAL_SURFACE_ORIENTATION_ANGLE  0        Exact      None

    Add a paragraph to section 3.5.1, section Creating On-Screen Rendering
    Surfaces.

    EGL_SURFACE_ORIENTATION_ANGLE attribute specifies how the surface's content
    will appear on the screen. If its value contains
    EGL_SURFACE_ORIENTATION_INVERT_X_ANGLE then all displayed content will be
    inverted along the vertical axis. Similarly, if its value contains
    EGL_SURFACE_ORIENTATION_INVERT_Y_ANGLE then all displayed content will be
    inverted along the horizontal axis.

    Add to table 3.5 (Queryable surface attributes and types):

    Attribute                      Type     Description
    -----------------------------  -------  ----------------------
    EGL_SURFACE_ORIENTATION_ANGLE  bitmask  Orientation of surface

    Add a paragraph to section 3.5.6, Surface Attributes:

    "Querying EGL_SURFACE_ORIENTATION_ANGLE returns the orientation of the
    surface.  For a window surface, this is the same attribute value specified
    when the surface was created.  For other types of surfaces, it is always
    0."

Issues

    1) What about dirty regions and sub regions specified by extensions such as
       NV_post_sub_buffer?

       These regions will be applied to the same region of the window as
       before because they are often specified based on events from the
       operating system.  The content in these regions will be displayed
       according to the value of EGL_SURFACE_ORIENTATION_ANGLE.

Revision History

    Version 1, 2015-12-15 (Geoff Lang)
      - Initial draft
