• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    ANGLE_platform_angle_vulkan_device_uuid
4
5Name Strings
6
7    EGL_ANGLE_platform_angle_vulkan_device_uuid
8
9Contributors
10
11    Steven Noonan
12
13Contacts
14
15    Steven Noonan <steven@uplinklabs.net>
16
17Status
18
19    Draft
20
21Version
22
23    Version 1, 2024-12-13
24
25Number
26
27    EGL Extension XXX
28
29Extension Type
30
31    EGL client extension
32
33Dependencies
34
35    This extension requires EGL 1.5 and the ANGLE_platform_angle_vulkan
36    extension.
37
38Overview
39
40    This extension enables developers to specify additional selection criteria
41    when creating an ANGLE Vulkan context, ensuring that the context is
42    associated with a particular physical device and driver combination,
43    providing more precise control over device selection.
44
45New Types
46
47    None
48
49New Procedures and Functions
50
51    None
52
53New Tokens
54
55    Accepted as an attribute name in the <attrib_list> argument of
56    eglGetPlatformDisplay:
57
58        EGL_PLATFORM_ANGLE_VULKAN_DEVICE_UUID_ANGLE    0x34F0
59        EGL_PLATFORM_ANGLE_VULKAN_DRIVER_UUID_ANGLE    0x34F1
60        EGL_PLATFORM_ANGLE_VULKAN_DRIVER_ID_ANGLE      0x34F2
61
62Additions to the EGL Specification
63
64    None
65
66New Behavior
67
68    The EGL_PLATFORM_ANGLE_VULKAN_DEVICE_UUID attribute may be passed to
69    eglGetPlatformDisplay to specify the device UUID of the desired Vulkan
70    device for the ANGLE context. The EGL_PLATFORM_ANGLE_VULKAN_DRIVER_ID
71    attribute may be passed to select a device by its driver's VkDriverId
72    value.
73
74    Attributes introduced by this extension must be used in conjunction with
75    the EGL_PLATFORM_ANGLE_TYPE_ANGLE attribute set to
76    EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE. If it is not, eglGetPlatformDisplay
77    will generate an EGL_BAD_ATTRIBUTE error and return EGL_NO_DISPLAY.
78
79    The value provided for EGL_PLATFORM_ANGLE_VULKAN_DEVICE_UUID must be
80    a valid pointer to a 16-byte Vulkan device UUID, or a NULL pointer
81    indicating that any device is acceptable. The UUID value should match the
82    deviceUUID field of VkPhysicalDeviceIDProperties for a VkPhysicalDevice in
83    the system.
84
85    The value provided for EGL_PLATFORM_ANGLE_VULKAN_DRIVER_UUID must be
86    a valid pointer to a 16-byte Vulkan driver UUID, or a NULL pointer
87    indicating that any driver is acceptable. The UUID value should match the
88    driverUUID field of VkPhysicalDeviceIDProperties for a VkPhysicalDevice in
89    the system.
90
91    The value provided for EGL_PLATFORM_ANGLE_VULKAN_DRIVER_ID must be
92    a VkDriverId value corresponding to the driverID field of the
93    VkPhysicalDeviceDriverProperties structure for a device in the system.
94
95    If no VkPhysicalDevice is found matching all of the provided search
96    criteria, the implementation may fall back to any other available
97    VkPhysicalDevice.
98
99Usage Example
100
101    // Illustrates using all of the attributes at once
102    uint8_t deviceUUID[16] = { /* UUID value */ };
103    uint8_t driverUUID[16] = { /* UUID value */ };
104    VkDriverId driverId = VK_DRIVER_ID_MESA_HONEYKRISP;
105
106    EGLAttrib attribs[] = {
107        EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE,
108        EGL_PLATFORM_ANGLE_VULKAN_DEVICE_UUID_ANGLE, (EGLAttrib)deviceUUID,
109        EGL_PLATFORM_ANGLE_VULKAN_DRIVER_UUID_ANGLE, (EGLAttrib)driverUUID,
110        EGL_PLATFORM_ANGLE_VULKAN_DRIVER_ID_ANGLE, (EGLAttrib)driverId,
111        EGL_NONE
112    };
113
114    EGLDisplay display =
115        eglGetPlatformDisplay(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, attribs);
116
117    if (display == EGL_NO_DISPLAY) {
118        // Handle display creation failure
119    }
120
121Issues
122
123    1) Why provide support for specifying all three of device UUID, driver
124       UUID, and driver ID?
125
126       RESOLVED: The goal is to uniquely identify a specific VkPhysicalDevice
127       within the system, and systems may have multiple graphics drivers (or
128       even driver versions) which all support using the same underlying
129       physical device. The combination of device UUID, driver UUID, and driver
130       ID is currently found to be sufficient to uniquely identify any
131       particular driver/device combination found in real-world scenarios.
132
133Revision History
134
135    Version 1, 2024-07-09 (Steven Noonan)
136      - Initial draft
137