Name

    ANGLE_platform_angle_vulkan

Name Strings

    EGL_ANGLE_platform_angle_vulkan

Contributors

    Jamie Madill, Google

Contacts

    Jamie Madill, Google (jmadill 'at' google 'dot' com)

Status

    Draft

Version

    Version 1, 2016-11-17

Number

    EGL Extension XXX

Extension Type

    EGL client extension

Dependencies

    Requires ANGLE_platform_angle.

Overview

    This extension enables selection of Vulkan display types.

New Types

    None

New Procedures and Functions

    None

New Tokens

    Accepted as values for the EGL_PLATFORM_ANGLE_TYPE_ANGLE attribute:

        EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE               0x3450

    Accepted as an attribute name in the <attrib_list> argument of
    eglGetPlatformDisplayEXT:

        EGL_PLATFORM_ANGLE_ENABLE_VALIDATION_LAYER_ANGLE   0x3451

Additions to the EGL Specification

    None.

New Behavior

    To request a display that is backed by a Vulkan driver, the value of
    EGL_PLATFORM_ANGLE_TYPE_ANGLE should be
    EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE.

    If EGL_PLATFORM_ANGLE_ENABLE_VALIDATION_LAYER_ANGLE is specified, it
    controls enabling the standard Vulkan validation layers. EGL_TRUE enables
    the validation and EGL_FALSE disables it. Any value other than these will
    result in an error. If the flag is not specified, validation may default
    to either enabled or disabled, depending on compile-time parameters in the
    implementation.

    If EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE and
    EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE are not specified, the
    implementation will decide which version of Vulkan to instantiate. If they
    are specified, it will choose a version that is lower or equal to the
    specified major and minor versions. The only current values accepted for
    major and minor version are 1 for major and 0 for minor.

Issues

    1) Would it be better to specify validation layers individually?

       RESOLVED: It would give more fined grained control, but the layers
       are sensitive to ordering, and there may be new ones added or old ones
       removed, this abstracts the logic into a simpler form. The validation
       layers maintainers are also moving towards a single-layer model from
       the current multiple layers approach.

    2) Should the validation layers default to on, off, or no guarantee?

       Defaulting to off offers some consistency. However, it's customary for
       some applications like ANGLE to turn on debugging features by default
       in Debug builds.

    3) Should ANGLE always instantiate the highest available version of Vulkan?

       RESOLVED: It's possible that in a future implementation of Vulkan there
       may be driver issues present only on some version of Vulkan, and there's
       no explicit guarantee higher versions will be more stable. Hence, we should
       give ANGLE some flexiblity in this regard and leave this unspecified.

Revision History

    Version 1, 2016-11-17 (Jamie Madill)
      - Initial draft
