Name

    ANGLE_device_vulkan

Name Strings

    EGL_ANGLE_device_vulkan

Contributors

    Peng Huang  (penghuang 'at' google.com)

Contact

    Peng Huang  (penghuang 'at' google.com)

Status

    Draft

Version

    Version 1, Oct 28, 2021

Number

    EGL Extension #XXX

Extension Type

    EGL device extension

Dependencies

    This extension is written against the language of EGL 1.5 as
    modified by EGL_EXT_device_query.

    EGL_EXT_device_query is required.

Overview

    ANGLE has the ability to run GPU commands on a native Vulkan device.
    This extension defines a mapping from an EGL device to a Vulkan
    device, after it's queried from an EGL display.

IP Status

    No known claims.

New Types

    None.

New Procedures and Functions

    None.

New Tokens

    Accepted as a queried <attribute> in eglQueryDeviceAttribEXT:

        EGL_VULKAN_VERSION_ANGLE             0x34A8
        EGL_VULKAN_INSTANCE_ANGLE            0x34A9
        EGL_VULKAN_INSTANCE_EXTENSIONS_ANGLE 0x34AA
        EGL_VULKAN_PHYSICAL_DEVICE_ANGLE     0x34AB
        EGL_VULKAN_DEVICE_ANGLE              0x34AC
        EGL_VULKAN_DEVICE_EXTENSIONS_ANGLE   0x34AD
        EGL_VULKAN_FEATURES_ANGLE            0x34AE
        EGL_VULKAN_QUEUE_ANGLE               0x34AF
        EGL_VULKAN_QUEUE_FAMILIY_INDEX_ANGLE 0x34D0
        EGL_VULKAN_GET_INSTANCE_PROC_ADDR    0x34D1

Add a new section 2.1.3 (Vulkan Devices) after 2.1.2 (Devices)

    Somewhat analogous to an EGL device, a Vulkan device establishes a
    namespace for Vulkan operations. In the Vulkan APIs, such devices are
    represented by pointers. For more details, see the Vulkan
    documentation.

Changes to section 3.2 (Devices)

    Replace the paragraph immediately following the prototype for
    eglQueryDeviceAttribEXT:

    <attribute> may be EGL_VULKAN_VERSION_ANGLE.
    On success, EGL_TRUE is returned, and the Vulkan versionbcorresponding to
    the EGL device is returned in <value>. If the EGL device is not currently
    associated with a Vulkan device and <attribute> is EGL_VULKAN_VERSION_ANGLE,
    EGL_BAD_ATTRIBUTE is returned, and <value> is left unchanged.

    <attribute> may be EGL_VULKAN_INSTANCE_ANGLE.
    On success, EGL_TRUE is returned, and a valid Vulkan instance handle
    VkInstance corresponding to the EGL device is returned in <value>.
    This handle is compatible with Vulkan API functions. If the EGL device is
    not currently associated with a Vulkan device and <attribute> is
    EGL_VULKAN_INSTANCE_ANGLE, EGL_BAD_ATTRIBUTE is returned, and <value> is
    left unchanged.

    <attribute> may be EGL_VULKAN_INSTANCE_EXTENSIONS_ANGLE.
    On success, EGL_TRUE is returned, and a pointer to a null terminated static
    string array is returned in <value>. The array contains enabled Vulkan
    instance extensions for the Vulkan device used by the display.
    If the EGL device is not currently associated with a Vulkan device and
    <attribute> is EGL_VULKAN_INSTANCE_EXTENSIONS_ANGLE, EGL_BAD_ATTRIBUTE is
    returned, and <value> is left unchanged.

    <attribute> may be EGL_VULKAN_PHYSICAL_DEVICE_ANGLE.
    On success, EGL_TRUE is returned, and a valid Vulkan physical device handle
    VkPhysicalDevice corresponding to the EGL device is returned in <value>.
    This handle is compatible with Vulkan API functions. If the EGL device is
    not currently associated with a Vulkan device and <attribute> is
    EGL_VULKAN_PHYSICAL_DEVICE_ANGLE, EGL_BAD_ATTRIBUTE is returned,
    and <value> is left unchanged.

    <attribute> may be EGL_VULKAN_DEVICE_ANGLE.
    On success, EGL_TRUE is returned, and a valid Vulkan device handle VkDevice
    corresponding to the EGL device is returned in <value>. This handle is
    compatible with Vulkan API functions. If the EGL device is not currently
    associated with a Vulkan device and <attribute> is EGL_VULKAN_DEVICE_ANGLE,
    EGL_BAD_ATTRIBUTE is returned, and <value> is left unchanged.

    <attribute> may be EGL_VULKAN_DEVICE_EXTENSIONS_ANGLE.
    On success, EGL_TRUE is returned, and a pointer to a null terminated static
    string array is returned in <value>. The array contains enabled Vulkan
    device extensions for the Vulkan device used by the display. If the EGL
    device is not currently associated with a Vulkan device and <attribute> is
    EGL_VULKAN_DEVICE_EXTENSIONS_ANGLE, EGL_BAD_ATTRIBUTE is returned, and
    <value> is left unchanged.

    <attribute> may be EGL_VULKAN_FEATURES_ANGLE.
    On success, EGL_TRUE is returned, and a pointer to a static
    VkPhysicalDeviceFeatures2KHR struct is returned in <value>. The structure
    contains enabled Vulkan device features for the Vulkan device used by the
    display. If the EGL device is not currently associated with a Vulkan device
    and <attribute> is EGL_VULKAN_FEATURES_ANGLE, EGL_BAD_ATTRIBUTE is returned,
    and <value> is left unchanged.

    <attribute> may be EGL_VULKAN_QUEUE_ANGLE.
    On success, EGL_TRUE is returned, and a valid Vulkan device queue handle
    VkQueue corresponding to the EGL device is returned in <value>. This handle
    is compatible with Vulkan API functions. If the EGL device is not currently
    associated with a Vulkan device and <attribute> is EGL_VULKAN_QUEUE_ANGLE,
    EGL_BAD_ATTRIBUTE is returned, and <value> is left unchanged.

    <attribute> may be EGL_VULKAN_QUEUE_FAMILIY_INDEX_ANGLE.
    On success, EGL_TRUE is returned, and the Vulkan queue familiy index
    corresponding to the EGL device is returned in <value>. If the EGL device
    is not currently associated with a Vulkan device and <attribute> is
    EGL_VULKAN_QUEUE_FAMILIY_INDEX_ANGLE, EGL_BAD_ATTRIBUTE is returned, and
    <value> is left unchanged.

    <attribute> may be EGL_VULKAN_GET_INSTANCE_PROC_ADDR.
    On success, EGL_TRUE is returned, and the vkGetInstanceProcAddr function
    pointer corresponding to the EGL device is returned in <value>. If the EGL
    device is not currently associated with a Vulkan device and <attribute> is
    EGL_VULKAN_GET_INSTANCE_PROC_ADDR, EGL_BAD_ATTRIBUTE is returned, and
    <value> is left unchanged.

Issues

    None

Revision History

    Version 1, Oct 28, 2021 (Peng Huang)
        - Initial Draft