xref: /aosp_15_r20/external/vulkan-validation-layers/layers/generated/vk_extension_helper.h (revision b7893ccf7851cd6a48cc5a1e965257d8a5cdcc70)
1*b7893ccfSSadaf Ebrahimi // *** THIS FILE IS GENERATED - DO NOT EDIT ***
2*b7893ccfSSadaf Ebrahimi // See helper_file_generator.py for modifications
3*b7893ccfSSadaf Ebrahimi 
4*b7893ccfSSadaf Ebrahimi 
5*b7893ccfSSadaf Ebrahimi /***************************************************************************
6*b7893ccfSSadaf Ebrahimi  *
7*b7893ccfSSadaf Ebrahimi  * Copyright (c) 2015-2019 The Khronos Group Inc.
8*b7893ccfSSadaf Ebrahimi  * Copyright (c) 2015-2019 Valve Corporation
9*b7893ccfSSadaf Ebrahimi  * Copyright (c) 2015-2019 LunarG, Inc.
10*b7893ccfSSadaf Ebrahimi  * Copyright (c) 2015-2019 Google Inc.
11*b7893ccfSSadaf Ebrahimi  *
12*b7893ccfSSadaf Ebrahimi  * Licensed under the Apache License, Version 2.0 (the "License");
13*b7893ccfSSadaf Ebrahimi  * you may not use this file except in compliance with the License.
14*b7893ccfSSadaf Ebrahimi  * You may obtain a copy of the License at
15*b7893ccfSSadaf Ebrahimi  *
16*b7893ccfSSadaf Ebrahimi  *     http://www.apache.org/licenses/LICENSE-2.0
17*b7893ccfSSadaf Ebrahimi  *
18*b7893ccfSSadaf Ebrahimi  * Unless required by applicable law or agreed to in writing, software
19*b7893ccfSSadaf Ebrahimi  * distributed under the License is distributed on an "AS IS" BASIS,
20*b7893ccfSSadaf Ebrahimi  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21*b7893ccfSSadaf Ebrahimi  * See the License for the specific language governing permissions and
22*b7893ccfSSadaf Ebrahimi  * limitations under the License.
23*b7893ccfSSadaf Ebrahimi  *
24*b7893ccfSSadaf Ebrahimi  * Author: Mark Lobodzinski <[email protected]>
25*b7893ccfSSadaf Ebrahimi  * Author: Courtney Goeltzenleuchter <[email protected]>
26*b7893ccfSSadaf Ebrahimi  * Author: Tobin Ehlis <[email protected]>
27*b7893ccfSSadaf Ebrahimi  * Author: Chris Forbes <[email protected]>
28*b7893ccfSSadaf Ebrahimi  * Author: John Zulauf<[email protected]>
29*b7893ccfSSadaf Ebrahimi  *
30*b7893ccfSSadaf Ebrahimi  ****************************************************************************/
31*b7893ccfSSadaf Ebrahimi 
32*b7893ccfSSadaf Ebrahimi 
33*b7893ccfSSadaf Ebrahimi #ifndef VK_EXTENSION_HELPER_H_
34*b7893ccfSSadaf Ebrahimi #define VK_EXTENSION_HELPER_H_
35*b7893ccfSSadaf Ebrahimi #include <unordered_set>
36*b7893ccfSSadaf Ebrahimi #include <string>
37*b7893ccfSSadaf Ebrahimi #include <unordered_map>
38*b7893ccfSSadaf Ebrahimi #include <utility>
39*b7893ccfSSadaf Ebrahimi #include <set>
40*b7893ccfSSadaf Ebrahimi #include <vector>
41*b7893ccfSSadaf Ebrahimi 
42*b7893ccfSSadaf Ebrahimi #include <vulkan/vulkan.h>
43*b7893ccfSSadaf Ebrahimi 
44*b7893ccfSSadaf Ebrahimi struct InstanceExtensions {
45*b7893ccfSSadaf Ebrahimi     bool vk_feature_version_1_1{false};
46*b7893ccfSSadaf Ebrahimi     bool vk_ext_acquire_xlib_display{false};
47*b7893ccfSSadaf Ebrahimi     bool vk_ext_debug_report{false};
48*b7893ccfSSadaf Ebrahimi     bool vk_ext_debug_utils{false};
49*b7893ccfSSadaf Ebrahimi     bool vk_ext_direct_mode_display{false};
50*b7893ccfSSadaf Ebrahimi     bool vk_ext_display_surface_counter{false};
51*b7893ccfSSadaf Ebrahimi     bool vk_ext_headless_surface{false};
52*b7893ccfSSadaf Ebrahimi     bool vk_ext_metal_surface{false};
53*b7893ccfSSadaf Ebrahimi     bool vk_ext_swapchain_color_space{false};
54*b7893ccfSSadaf Ebrahimi     bool vk_ext_validation_features{false};
55*b7893ccfSSadaf Ebrahimi     bool vk_ext_validation_flags{false};
56*b7893ccfSSadaf Ebrahimi     bool vk_fuchsia_imagepipe_surface{false};
57*b7893ccfSSadaf Ebrahimi     bool vk_ggp_stream_descriptor_surface{false};
58*b7893ccfSSadaf Ebrahimi     bool vk_khr_android_surface{false};
59*b7893ccfSSadaf Ebrahimi     bool vk_khr_device_group_creation{false};
60*b7893ccfSSadaf Ebrahimi     bool vk_khr_display{false};
61*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_fence_capabilities{false};
62*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_memory_capabilities{false};
63*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_semaphore_capabilities{false};
64*b7893ccfSSadaf Ebrahimi     bool vk_khr_get_display_properties_2{false};
65*b7893ccfSSadaf Ebrahimi     bool vk_khr_get_physical_device_properties_2{false};
66*b7893ccfSSadaf Ebrahimi     bool vk_khr_get_surface_capabilities_2{false};
67*b7893ccfSSadaf Ebrahimi     bool vk_khr_surface{false};
68*b7893ccfSSadaf Ebrahimi     bool vk_khr_surface_protected_capabilities{false};
69*b7893ccfSSadaf Ebrahimi     bool vk_khr_wayland_surface{false};
70*b7893ccfSSadaf Ebrahimi     bool vk_khr_win32_surface{false};
71*b7893ccfSSadaf Ebrahimi     bool vk_khr_xcb_surface{false};
72*b7893ccfSSadaf Ebrahimi     bool vk_khr_xlib_surface{false};
73*b7893ccfSSadaf Ebrahimi     bool vk_mvk_ios_surface{false};
74*b7893ccfSSadaf Ebrahimi     bool vk_mvk_macos_surface{false};
75*b7893ccfSSadaf Ebrahimi     bool vk_nn_vi_surface{false};
76*b7893ccfSSadaf Ebrahimi     bool vk_nv_external_memory_capabilities{false};
77*b7893ccfSSadaf Ebrahimi 
78*b7893ccfSSadaf Ebrahimi     struct InstanceReq {
79*b7893ccfSSadaf Ebrahimi         const bool InstanceExtensions::* enabled;
80*b7893ccfSSadaf Ebrahimi         const char *name;
81*b7893ccfSSadaf Ebrahimi     };
82*b7893ccfSSadaf Ebrahimi     typedef std::vector<InstanceReq> InstanceReqVec;
83*b7893ccfSSadaf Ebrahimi     struct InstanceInfo {
InstanceInfoInstanceExtensions::InstanceInfo84*b7893ccfSSadaf Ebrahimi        InstanceInfo(bool InstanceExtensions::* state_, const InstanceReqVec requires_): state(state_), requires(requires_) {}
85*b7893ccfSSadaf Ebrahimi        bool InstanceExtensions::* state;
86*b7893ccfSSadaf Ebrahimi        InstanceReqVec requires;
87*b7893ccfSSadaf Ebrahimi     };
88*b7893ccfSSadaf Ebrahimi 
89*b7893ccfSSadaf Ebrahimi     typedef std::unordered_map<std::string,InstanceInfo> InstanceInfoMap;
get_infoInstanceExtensions90*b7893ccfSSadaf Ebrahimi     static const InstanceInfo &get_info(const char *name) {
91*b7893ccfSSadaf Ebrahimi         static const InstanceInfoMap info_map = {
92*b7893ccfSSadaf Ebrahimi             std::make_pair("VK_VERSION_1_1", InstanceInfo(&InstanceExtensions::vk_feature_version_1_1, {})),
93*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
94*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ext_acquire_xlib_display, {{
95*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_ext_direct_mode_display, VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME}}})),
96*b7893ccfSSadaf Ebrahimi #endif
97*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_DEBUG_REPORT_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ext_debug_report, {})),
98*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_DEBUG_UTILS_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ext_debug_utils, {})),
99*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ext_direct_mode_display, {{
100*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_display, VK_KHR_DISPLAY_EXTENSION_NAME}}})),
101*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ext_display_surface_counter, {{
102*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_display, VK_KHR_DISPLAY_EXTENSION_NAME}}})),
103*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ext_headless_surface, {{
104*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
105*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_METAL_EXT
106*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_METAL_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ext_metal_surface, {{
107*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
108*b7893ccfSSadaf Ebrahimi #endif
109*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ext_swapchain_color_space, {{
110*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
111*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ext_validation_features, {})),
112*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ext_validation_flags, {})),
113*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_FUCHSIA
114*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_fuchsia_imagepipe_surface, {{
115*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
116*b7893ccfSSadaf Ebrahimi #endif
117*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_GGP
118*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_ggp_stream_descriptor_surface, {{
119*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
120*b7893ccfSSadaf Ebrahimi #endif
121*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
122*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_android_surface, {{
123*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
124*b7893ccfSSadaf Ebrahimi #endif
125*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_device_group_creation, {})),
126*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_DISPLAY_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_display, {{
127*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
128*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_external_fence_capabilities, {{
129*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
130*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_external_memory_capabilities, {{
131*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
132*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_external_semaphore_capabilities, {{
133*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
134*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_get_display_properties_2, {{
135*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_display, VK_KHR_DISPLAY_EXTENSION_NAME}}})),
136*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_get_physical_device_properties_2, {})),
137*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_get_surface_capabilities_2, {{
138*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
139*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_surface, {})),
140*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_surface_protected_capabilities, {{
141*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_get_surface_capabilities_2, VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}}})),
142*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WAYLAND_KHR
143*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_wayland_surface, {{
144*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
145*b7893ccfSSadaf Ebrahimi #endif
146*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
147*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_WIN32_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_win32_surface, {{
148*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
149*b7893ccfSSadaf Ebrahimi #endif
150*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XCB_KHR
151*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_XCB_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_xcb_surface, {{
152*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
153*b7893ccfSSadaf Ebrahimi #endif
154*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_KHR
155*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_XLIB_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_khr_xlib_surface, {{
156*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
157*b7893ccfSSadaf Ebrahimi #endif
158*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_IOS_MVK
159*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_MVK_IOS_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_mvk_ios_surface, {{
160*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
161*b7893ccfSSadaf Ebrahimi #endif
162*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_MACOS_MVK
163*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_MVK_MACOS_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_mvk_macos_surface, {{
164*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
165*b7893ccfSSadaf Ebrahimi #endif
166*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_VI_NN
167*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NN_VI_SURFACE_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_nn_vi_surface, {{
168*b7893ccfSSadaf Ebrahimi                            {&InstanceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
169*b7893ccfSSadaf Ebrahimi #endif
170*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, InstanceInfo(&InstanceExtensions::vk_nv_external_memory_capabilities, {})),
171*b7893ccfSSadaf Ebrahimi         };
172*b7893ccfSSadaf Ebrahimi 
173*b7893ccfSSadaf Ebrahimi         static const InstanceInfo empty_info {nullptr, InstanceReqVec()};
174*b7893ccfSSadaf Ebrahimi         InstanceInfoMap::const_iterator info = info_map.find(name);
175*b7893ccfSSadaf Ebrahimi         if ( info != info_map.cend()) {
176*b7893ccfSSadaf Ebrahimi             return info->second;
177*b7893ccfSSadaf Ebrahimi         }
178*b7893ccfSSadaf Ebrahimi         return empty_info;
179*b7893ccfSSadaf Ebrahimi     }
180*b7893ccfSSadaf Ebrahimi 
NormalizeApiVersionInstanceExtensions181*b7893ccfSSadaf Ebrahimi     uint32_t NormalizeApiVersion(uint32_t specified_version) {
182*b7893ccfSSadaf Ebrahimi         uint32_t api_version = (specified_version < VK_API_VERSION_1_1) ? VK_API_VERSION_1_0 : VK_API_VERSION_1_1;
183*b7893ccfSSadaf Ebrahimi         return api_version;
184*b7893ccfSSadaf Ebrahimi     }
185*b7893ccfSSadaf Ebrahimi 
InitFromInstanceCreateInfoInstanceExtensions186*b7893ccfSSadaf Ebrahimi     uint32_t InitFromInstanceCreateInfo(uint32_t requested_api_version, const VkInstanceCreateInfo *pCreateInfo) {
187*b7893ccfSSadaf Ebrahimi 
188*b7893ccfSSadaf Ebrahimi         static const std::vector<const char *> V_1_1_promoted_instance_apis = {
189*b7893ccfSSadaf Ebrahimi             VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME,
190*b7893ccfSSadaf Ebrahimi             VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME,
191*b7893ccfSSadaf Ebrahimi             VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
192*b7893ccfSSadaf Ebrahimi             VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME,
193*b7893ccfSSadaf Ebrahimi             VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME,
194*b7893ccfSSadaf Ebrahimi             "VK_VERSION_1_1",
195*b7893ccfSSadaf Ebrahimi         };
196*b7893ccfSSadaf Ebrahimi 
197*b7893ccfSSadaf Ebrahimi         // Initialize struct data, robust to invalid pCreateInfo
198*b7893ccfSSadaf Ebrahimi         if (pCreateInfo->ppEnabledExtensionNames) {
199*b7893ccfSSadaf Ebrahimi             for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
200*b7893ccfSSadaf Ebrahimi                 if (!pCreateInfo->ppEnabledExtensionNames[i]) continue;
201*b7893ccfSSadaf Ebrahimi                 auto info = get_info(pCreateInfo->ppEnabledExtensionNames[i]);
202*b7893ccfSSadaf Ebrahimi                 if(info.state) this->*(info.state) = true;
203*b7893ccfSSadaf Ebrahimi             }
204*b7893ccfSSadaf Ebrahimi         }
205*b7893ccfSSadaf Ebrahimi         uint32_t api_version = NormalizeApiVersion(requested_api_version);
206*b7893ccfSSadaf Ebrahimi         if (api_version >= VK_API_VERSION_1_1) {
207*b7893ccfSSadaf Ebrahimi             for (auto promoted_ext : V_1_1_promoted_instance_apis) {
208*b7893ccfSSadaf Ebrahimi                 auto info = get_info(promoted_ext);
209*b7893ccfSSadaf Ebrahimi                 assert(info.state);
210*b7893ccfSSadaf Ebrahimi                 if (info.state) this->*(info.state) = true;
211*b7893ccfSSadaf Ebrahimi             }
212*b7893ccfSSadaf Ebrahimi         }
213*b7893ccfSSadaf Ebrahimi         return api_version;
214*b7893ccfSSadaf Ebrahimi     }
215*b7893ccfSSadaf Ebrahimi };
216*b7893ccfSSadaf Ebrahimi 
217*b7893ccfSSadaf Ebrahimi static const std::set<std::string> kInstanceExtensionNames = {
218*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
219*b7893ccfSSadaf Ebrahimi     VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME,
220*b7893ccfSSadaf Ebrahimi #endif
221*b7893ccfSSadaf Ebrahimi     VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
222*b7893ccfSSadaf Ebrahimi     VK_EXT_DEBUG_UTILS_EXTENSION_NAME,
223*b7893ccfSSadaf Ebrahimi     VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME,
224*b7893ccfSSadaf Ebrahimi     VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME,
225*b7893ccfSSadaf Ebrahimi     VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME,
226*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_METAL_EXT
227*b7893ccfSSadaf Ebrahimi     VK_EXT_METAL_SURFACE_EXTENSION_NAME,
228*b7893ccfSSadaf Ebrahimi #endif
229*b7893ccfSSadaf Ebrahimi     VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME,
230*b7893ccfSSadaf Ebrahimi     VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME,
231*b7893ccfSSadaf Ebrahimi     VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME,
232*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_FUCHSIA
233*b7893ccfSSadaf Ebrahimi     VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME,
234*b7893ccfSSadaf Ebrahimi #endif
235*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_GGP
236*b7893ccfSSadaf Ebrahimi     VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME,
237*b7893ccfSSadaf Ebrahimi #endif
238*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
239*b7893ccfSSadaf Ebrahimi     VK_KHR_ANDROID_SURFACE_EXTENSION_NAME,
240*b7893ccfSSadaf Ebrahimi #endif
241*b7893ccfSSadaf Ebrahimi     VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME,
242*b7893ccfSSadaf Ebrahimi     VK_KHR_DISPLAY_EXTENSION_NAME,
243*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME,
244*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
245*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME,
246*b7893ccfSSadaf Ebrahimi     VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME,
247*b7893ccfSSadaf Ebrahimi     VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME,
248*b7893ccfSSadaf Ebrahimi     VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME,
249*b7893ccfSSadaf Ebrahimi     VK_KHR_SURFACE_EXTENSION_NAME,
250*b7893ccfSSadaf Ebrahimi     VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME,
251*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WAYLAND_KHR
252*b7893ccfSSadaf Ebrahimi     VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME,
253*b7893ccfSSadaf Ebrahimi #endif
254*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
255*b7893ccfSSadaf Ebrahimi     VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
256*b7893ccfSSadaf Ebrahimi #endif
257*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XCB_KHR
258*b7893ccfSSadaf Ebrahimi     VK_KHR_XCB_SURFACE_EXTENSION_NAME,
259*b7893ccfSSadaf Ebrahimi #endif
260*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_KHR
261*b7893ccfSSadaf Ebrahimi     VK_KHR_XLIB_SURFACE_EXTENSION_NAME,
262*b7893ccfSSadaf Ebrahimi #endif
263*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_IOS_MVK
264*b7893ccfSSadaf Ebrahimi     VK_MVK_IOS_SURFACE_EXTENSION_NAME,
265*b7893ccfSSadaf Ebrahimi #endif
266*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_MACOS_MVK
267*b7893ccfSSadaf Ebrahimi     VK_MVK_MACOS_SURFACE_EXTENSION_NAME,
268*b7893ccfSSadaf Ebrahimi #endif
269*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_VI_NN
270*b7893ccfSSadaf Ebrahimi     VK_NN_VI_SURFACE_EXTENSION_NAME,
271*b7893ccfSSadaf Ebrahimi #endif
272*b7893ccfSSadaf Ebrahimi     VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
273*b7893ccfSSadaf Ebrahimi };
274*b7893ccfSSadaf Ebrahimi 
275*b7893ccfSSadaf Ebrahimi struct DeviceExtensions : public InstanceExtensions {
276*b7893ccfSSadaf Ebrahimi     bool vk_feature_version_1_1{false};
277*b7893ccfSSadaf Ebrahimi     bool vk_amd_buffer_marker{false};
278*b7893ccfSSadaf Ebrahimi     bool vk_amd_device_coherent_memory{false};
279*b7893ccfSSadaf Ebrahimi     bool vk_amd_display_native_hdr{false};
280*b7893ccfSSadaf Ebrahimi     bool vk_amd_draw_indirect_count{false};
281*b7893ccfSSadaf Ebrahimi     bool vk_amd_gcn_shader{false};
282*b7893ccfSSadaf Ebrahimi     bool vk_amd_gpu_shader_half_float{false};
283*b7893ccfSSadaf Ebrahimi     bool vk_amd_gpu_shader_int16{false};
284*b7893ccfSSadaf Ebrahimi     bool vk_amd_memory_overallocation_behavior{false};
285*b7893ccfSSadaf Ebrahimi     bool vk_amd_mixed_attachment_samples{false};
286*b7893ccfSSadaf Ebrahimi     bool vk_amd_negative_viewport_height{false};
287*b7893ccfSSadaf Ebrahimi     bool vk_amd_pipeline_compiler_control{false};
288*b7893ccfSSadaf Ebrahimi     bool vk_amd_rasterization_order{false};
289*b7893ccfSSadaf Ebrahimi     bool vk_amd_shader_ballot{false};
290*b7893ccfSSadaf Ebrahimi     bool vk_amd_shader_core_properties{false};
291*b7893ccfSSadaf Ebrahimi     bool vk_amd_shader_core_properties_2{false};
292*b7893ccfSSadaf Ebrahimi     bool vk_amd_shader_explicit_vertex_parameter{false};
293*b7893ccfSSadaf Ebrahimi     bool vk_amd_shader_fragment_mask{false};
294*b7893ccfSSadaf Ebrahimi     bool vk_amd_shader_image_load_store_lod{false};
295*b7893ccfSSadaf Ebrahimi     bool vk_amd_shader_info{false};
296*b7893ccfSSadaf Ebrahimi     bool vk_amd_shader_trinary_minmax{false};
297*b7893ccfSSadaf Ebrahimi     bool vk_amd_texture_gather_bias_lod{false};
298*b7893ccfSSadaf Ebrahimi     bool vk_android_external_memory_android_hardware_buffer{false};
299*b7893ccfSSadaf Ebrahimi     bool vk_ext_astc_decode_mode{false};
300*b7893ccfSSadaf Ebrahimi     bool vk_ext_blend_operation_advanced{false};
301*b7893ccfSSadaf Ebrahimi     bool vk_ext_buffer_device_address{false};
302*b7893ccfSSadaf Ebrahimi     bool vk_ext_calibrated_timestamps{false};
303*b7893ccfSSadaf Ebrahimi     bool vk_ext_conditional_rendering{false};
304*b7893ccfSSadaf Ebrahimi     bool vk_ext_conservative_rasterization{false};
305*b7893ccfSSadaf Ebrahimi     bool vk_ext_debug_marker{false};
306*b7893ccfSSadaf Ebrahimi     bool vk_ext_depth_clip_enable{false};
307*b7893ccfSSadaf Ebrahimi     bool vk_ext_depth_range_unrestricted{false};
308*b7893ccfSSadaf Ebrahimi     bool vk_ext_descriptor_indexing{false};
309*b7893ccfSSadaf Ebrahimi     bool vk_ext_discard_rectangles{false};
310*b7893ccfSSadaf Ebrahimi     bool vk_ext_display_control{false};
311*b7893ccfSSadaf Ebrahimi     bool vk_ext_external_memory_dma_buf{false};
312*b7893ccfSSadaf Ebrahimi     bool vk_ext_external_memory_host{false};
313*b7893ccfSSadaf Ebrahimi     bool vk_ext_filter_cubic{false};
314*b7893ccfSSadaf Ebrahimi     bool vk_ext_fragment_density_map{false};
315*b7893ccfSSadaf Ebrahimi     bool vk_ext_fragment_shader_interlock{false};
316*b7893ccfSSadaf Ebrahimi     bool vk_ext_full_screen_exclusive{false};
317*b7893ccfSSadaf Ebrahimi     bool vk_ext_global_priority{false};
318*b7893ccfSSadaf Ebrahimi     bool vk_ext_hdr_metadata{false};
319*b7893ccfSSadaf Ebrahimi     bool vk_ext_host_query_reset{false};
320*b7893ccfSSadaf Ebrahimi     bool vk_ext_image_drm_format_modifier{false};
321*b7893ccfSSadaf Ebrahimi     bool vk_ext_index_type_uint8{false};
322*b7893ccfSSadaf Ebrahimi     bool vk_ext_inline_uniform_block{false};
323*b7893ccfSSadaf Ebrahimi     bool vk_ext_line_rasterization{false};
324*b7893ccfSSadaf Ebrahimi     bool vk_ext_memory_budget{false};
325*b7893ccfSSadaf Ebrahimi     bool vk_ext_memory_priority{false};
326*b7893ccfSSadaf Ebrahimi     bool vk_ext_pci_bus_info{false};
327*b7893ccfSSadaf Ebrahimi     bool vk_ext_pipeline_creation_feedback{false};
328*b7893ccfSSadaf Ebrahimi     bool vk_ext_post_depth_coverage{false};
329*b7893ccfSSadaf Ebrahimi     bool vk_ext_queue_family_foreign{false};
330*b7893ccfSSadaf Ebrahimi     bool vk_ext_sample_locations{false};
331*b7893ccfSSadaf Ebrahimi     bool vk_ext_sampler_filter_minmax{false};
332*b7893ccfSSadaf Ebrahimi     bool vk_ext_scalar_block_layout{false};
333*b7893ccfSSadaf Ebrahimi     bool vk_ext_separate_stencil_usage{false};
334*b7893ccfSSadaf Ebrahimi     bool vk_ext_shader_demote_to_helper_invocation{false};
335*b7893ccfSSadaf Ebrahimi     bool vk_ext_shader_stencil_export{false};
336*b7893ccfSSadaf Ebrahimi     bool vk_ext_shader_subgroup_ballot{false};
337*b7893ccfSSadaf Ebrahimi     bool vk_ext_shader_subgroup_vote{false};
338*b7893ccfSSadaf Ebrahimi     bool vk_ext_shader_viewport_index_layer{false};
339*b7893ccfSSadaf Ebrahimi     bool vk_ext_subgroup_size_control{false};
340*b7893ccfSSadaf Ebrahimi     bool vk_ext_texel_buffer_alignment{false};
341*b7893ccfSSadaf Ebrahimi     bool vk_ext_texture_compression_astc_hdr{false};
342*b7893ccfSSadaf Ebrahimi     bool vk_ext_transform_feedback{false};
343*b7893ccfSSadaf Ebrahimi     bool vk_ext_validation_cache{false};
344*b7893ccfSSadaf Ebrahimi     bool vk_ext_vertex_attribute_divisor{false};
345*b7893ccfSSadaf Ebrahimi     bool vk_ext_ycbcr_image_arrays{false};
346*b7893ccfSSadaf Ebrahimi     bool vk_ggp_frame_token{false};
347*b7893ccfSSadaf Ebrahimi     bool vk_google_decorate_string{false};
348*b7893ccfSSadaf Ebrahimi     bool vk_google_display_timing{false};
349*b7893ccfSSadaf Ebrahimi     bool vk_google_hlsl_functionality1{false};
350*b7893ccfSSadaf Ebrahimi     bool vk_img_filter_cubic{false};
351*b7893ccfSSadaf Ebrahimi     bool vk_img_format_pvrtc{false};
352*b7893ccfSSadaf Ebrahimi     bool vk_intel_performance_query{false};
353*b7893ccfSSadaf Ebrahimi     bool vk_intel_shader_integer_functions_2{false};
354*b7893ccfSSadaf Ebrahimi     bool vk_khr_16bit_storage{false};
355*b7893ccfSSadaf Ebrahimi     bool vk_khr_8bit_storage{false};
356*b7893ccfSSadaf Ebrahimi     bool vk_khr_bind_memory_2{false};
357*b7893ccfSSadaf Ebrahimi     bool vk_khr_create_renderpass_2{false};
358*b7893ccfSSadaf Ebrahimi     bool vk_khr_dedicated_allocation{false};
359*b7893ccfSSadaf Ebrahimi     bool vk_khr_depth_stencil_resolve{false};
360*b7893ccfSSadaf Ebrahimi     bool vk_khr_descriptor_update_template{false};
361*b7893ccfSSadaf Ebrahimi     bool vk_khr_device_group{false};
362*b7893ccfSSadaf Ebrahimi     bool vk_khr_display_swapchain{false};
363*b7893ccfSSadaf Ebrahimi     bool vk_khr_draw_indirect_count{false};
364*b7893ccfSSadaf Ebrahimi     bool vk_khr_driver_properties{false};
365*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_fence{false};
366*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_fence_fd{false};
367*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_fence_win32{false};
368*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_memory{false};
369*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_memory_fd{false};
370*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_memory_win32{false};
371*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_semaphore{false};
372*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_semaphore_fd{false};
373*b7893ccfSSadaf Ebrahimi     bool vk_khr_external_semaphore_win32{false};
374*b7893ccfSSadaf Ebrahimi     bool vk_khr_get_memory_requirements_2{false};
375*b7893ccfSSadaf Ebrahimi     bool vk_khr_image_format_list{false};
376*b7893ccfSSadaf Ebrahimi     bool vk_khr_imageless_framebuffer{false};
377*b7893ccfSSadaf Ebrahimi     bool vk_khr_incremental_present{false};
378*b7893ccfSSadaf Ebrahimi     bool vk_khr_maintenance1{false};
379*b7893ccfSSadaf Ebrahimi     bool vk_khr_maintenance2{false};
380*b7893ccfSSadaf Ebrahimi     bool vk_khr_maintenance3{false};
381*b7893ccfSSadaf Ebrahimi     bool vk_khr_multiview{false};
382*b7893ccfSSadaf Ebrahimi     bool vk_khr_pipeline_executable_properties{false};
383*b7893ccfSSadaf Ebrahimi     bool vk_khr_push_descriptor{false};
384*b7893ccfSSadaf Ebrahimi     bool vk_khr_relaxed_block_layout{false};
385*b7893ccfSSadaf Ebrahimi     bool vk_khr_sampler_mirror_clamp_to_edge{false};
386*b7893ccfSSadaf Ebrahimi     bool vk_khr_sampler_ycbcr_conversion{false};
387*b7893ccfSSadaf Ebrahimi     bool vk_khr_shader_atomic_int64{false};
388*b7893ccfSSadaf Ebrahimi     bool vk_khr_shader_draw_parameters{false};
389*b7893ccfSSadaf Ebrahimi     bool vk_khr_shader_float16_int8{false};
390*b7893ccfSSadaf Ebrahimi     bool vk_khr_shader_float_controls{false};
391*b7893ccfSSadaf Ebrahimi     bool vk_khr_shared_presentable_image{false};
392*b7893ccfSSadaf Ebrahimi     bool vk_khr_storage_buffer_storage_class{false};
393*b7893ccfSSadaf Ebrahimi     bool vk_khr_swapchain{false};
394*b7893ccfSSadaf Ebrahimi     bool vk_khr_swapchain_mutable_format{false};
395*b7893ccfSSadaf Ebrahimi     bool vk_khr_uniform_buffer_standard_layout{false};
396*b7893ccfSSadaf Ebrahimi     bool vk_khr_variable_pointers{false};
397*b7893ccfSSadaf Ebrahimi     bool vk_khr_vulkan_memory_model{false};
398*b7893ccfSSadaf Ebrahimi     bool vk_khr_win32_keyed_mutex{false};
399*b7893ccfSSadaf Ebrahimi     bool vk_nvx_device_generated_commands{false};
400*b7893ccfSSadaf Ebrahimi     bool vk_nvx_image_view_handle{false};
401*b7893ccfSSadaf Ebrahimi     bool vk_nvx_multiview_per_view_attributes{false};
402*b7893ccfSSadaf Ebrahimi     bool vk_nv_clip_space_w_scaling{false};
403*b7893ccfSSadaf Ebrahimi     bool vk_nv_compute_shader_derivatives{false};
404*b7893ccfSSadaf Ebrahimi     bool vk_nv_cooperative_matrix{false};
405*b7893ccfSSadaf Ebrahimi     bool vk_nv_corner_sampled_image{false};
406*b7893ccfSSadaf Ebrahimi     bool vk_nv_coverage_reduction_mode{false};
407*b7893ccfSSadaf Ebrahimi     bool vk_nv_dedicated_allocation{false};
408*b7893ccfSSadaf Ebrahimi     bool vk_nv_dedicated_allocation_image_aliasing{false};
409*b7893ccfSSadaf Ebrahimi     bool vk_nv_device_diagnostic_checkpoints{false};
410*b7893ccfSSadaf Ebrahimi     bool vk_nv_external_memory{false};
411*b7893ccfSSadaf Ebrahimi     bool vk_nv_external_memory_win32{false};
412*b7893ccfSSadaf Ebrahimi     bool vk_nv_fill_rectangle{false};
413*b7893ccfSSadaf Ebrahimi     bool vk_nv_fragment_coverage_to_color{false};
414*b7893ccfSSadaf Ebrahimi     bool vk_nv_fragment_shader_barycentric{false};
415*b7893ccfSSadaf Ebrahimi     bool vk_nv_framebuffer_mixed_samples{false};
416*b7893ccfSSadaf Ebrahimi     bool vk_nv_geometry_shader_passthrough{false};
417*b7893ccfSSadaf Ebrahimi     bool vk_nv_glsl_shader{false};
418*b7893ccfSSadaf Ebrahimi     bool vk_nv_mesh_shader{false};
419*b7893ccfSSadaf Ebrahimi     bool vk_nv_ray_tracing{false};
420*b7893ccfSSadaf Ebrahimi     bool vk_nv_representative_fragment_test{false};
421*b7893ccfSSadaf Ebrahimi     bool vk_nv_sample_mask_override_coverage{false};
422*b7893ccfSSadaf Ebrahimi     bool vk_nv_scissor_exclusive{false};
423*b7893ccfSSadaf Ebrahimi     bool vk_nv_shader_image_footprint{false};
424*b7893ccfSSadaf Ebrahimi     bool vk_nv_shader_sm_builtins{false};
425*b7893ccfSSadaf Ebrahimi     bool vk_nv_shader_subgroup_partitioned{false};
426*b7893ccfSSadaf Ebrahimi     bool vk_nv_shading_rate_image{false};
427*b7893ccfSSadaf Ebrahimi     bool vk_nv_viewport_array2{false};
428*b7893ccfSSadaf Ebrahimi     bool vk_nv_viewport_swizzle{false};
429*b7893ccfSSadaf Ebrahimi     bool vk_nv_win32_keyed_mutex{false};
430*b7893ccfSSadaf Ebrahimi 
431*b7893ccfSSadaf Ebrahimi     struct DeviceReq {
432*b7893ccfSSadaf Ebrahimi         const bool DeviceExtensions::* enabled;
433*b7893ccfSSadaf Ebrahimi         const char *name;
434*b7893ccfSSadaf Ebrahimi     };
435*b7893ccfSSadaf Ebrahimi     typedef std::vector<DeviceReq> DeviceReqVec;
436*b7893ccfSSadaf Ebrahimi     struct DeviceInfo {
DeviceInfoDeviceExtensions::DeviceInfo437*b7893ccfSSadaf Ebrahimi        DeviceInfo(bool DeviceExtensions::* state_, const DeviceReqVec requires_): state(state_), requires(requires_) {}
438*b7893ccfSSadaf Ebrahimi        bool DeviceExtensions::* state;
439*b7893ccfSSadaf Ebrahimi        DeviceReqVec requires;
440*b7893ccfSSadaf Ebrahimi     };
441*b7893ccfSSadaf Ebrahimi 
442*b7893ccfSSadaf Ebrahimi     typedef std::unordered_map<std::string,DeviceInfo> DeviceInfoMap;
get_infoDeviceExtensions443*b7893ccfSSadaf Ebrahimi     static const DeviceInfo &get_info(const char *name) {
444*b7893ccfSSadaf Ebrahimi         static const DeviceInfoMap info_map = {
445*b7893ccfSSadaf Ebrahimi             std::make_pair("VK_VERSION_1_1", DeviceInfo(&DeviceExtensions::vk_feature_version_1_1, {})),
446*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_BUFFER_MARKER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_buffer_marker, {})),
447*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_device_coherent_memory, {})),
448*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_display_native_hdr, {{
449*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME},
450*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_surface_capabilities_2, VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME},
451*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_swapchain, VK_KHR_SWAPCHAIN_EXTENSION_NAME}}})),
452*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_draw_indirect_count, {})),
453*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_GCN_SHADER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_gcn_shader, {})),
454*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_gpu_shader_half_float, {})),
455*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_gpu_shader_int16, {})),
456*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_memory_overallocation_behavior, {})),
457*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_mixed_attachment_samples, {})),
458*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_negative_viewport_height, {})),
459*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_pipeline_compiler_control, {})),
460*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_rasterization_order, {})),
461*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_SHADER_BALLOT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_shader_ballot, {})),
462*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_shader_core_properties, {{
463*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
464*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_shader_core_properties_2, {{
465*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_amd_shader_core_properties, VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME}}})),
466*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_shader_explicit_vertex_parameter, {})),
467*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_shader_fragment_mask, {})),
468*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_shader_image_load_store_lod, {})),
469*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_SHADER_INFO_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_shader_info, {})),
470*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_shader_trinary_minmax, {})),
471*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_amd_texture_gather_bias_lod, {{
472*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
473*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
474*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_android_external_memory_android_hardware_buffer, {{
475*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_sampler_ycbcr_conversion, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME},
476*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_memory, VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME},
477*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_ext_queue_family_foreign, VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME}}})),
478*b7893ccfSSadaf Ebrahimi #endif
479*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_astc_decode_mode, {{
480*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
481*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_blend_operation_advanced, {})),
482*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_buffer_device_address, {{
483*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
484*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_calibrated_timestamps, {})),
485*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_conditional_rendering, {})),
486*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_conservative_rasterization, {{
487*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
488*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_DEBUG_MARKER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_debug_marker, {{
489*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_ext_debug_report, VK_EXT_DEBUG_REPORT_EXTENSION_NAME}}})),
490*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_depth_clip_enable, {})),
491*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_depth_range_unrestricted, {})),
492*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_descriptor_indexing, {{
493*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME},
494*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_maintenance3, VK_KHR_MAINTENANCE3_EXTENSION_NAME}}})),
495*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_discard_rectangles, {{
496*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
497*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_display_control, {{
498*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_ext_display_surface_counter, VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME},
499*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_swapchain, VK_KHR_SWAPCHAIN_EXTENSION_NAME}}})),
500*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_external_memory_dma_buf, {{
501*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_memory_fd, VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME}}})),
502*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_external_memory_host, {{
503*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_memory, VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME}}})),
504*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_FILTER_CUBIC_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_filter_cubic, {{
505*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_img_filter_cubic, VK_IMG_FILTER_CUBIC_EXTENSION_NAME}}})),
506*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_fragment_density_map, {{
507*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
508*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_fragment_shader_interlock, {{
509*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
510*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
511*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_full_screen_exclusive, {{
512*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME},
513*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME},
514*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_surface_capabilities_2, VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME},
515*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_swapchain, VK_KHR_SWAPCHAIN_EXTENSION_NAME}}})),
516*b7893ccfSSadaf Ebrahimi #endif
517*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_global_priority, {})),
518*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_HDR_METADATA_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_hdr_metadata, {{
519*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_swapchain, VK_KHR_SWAPCHAIN_EXTENSION_NAME}}})),
520*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_host_query_reset, {{
521*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
522*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_image_drm_format_modifier, {{
523*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_bind_memory_2, VK_KHR_BIND_MEMORY_2_EXTENSION_NAME},
524*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME},
525*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_image_format_list, VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME},
526*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_sampler_ycbcr_conversion, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME}}})),
527*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_index_type_uint8, {})),
528*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_inline_uniform_block, {{
529*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME},
530*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_maintenance1, VK_KHR_MAINTENANCE1_EXTENSION_NAME}}})),
531*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_line_rasterization, {{
532*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
533*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_MEMORY_BUDGET_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_memory_budget, {{
534*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
535*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_memory_priority, {{
536*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
537*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_pci_bus_info, {{
538*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
539*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_pipeline_creation_feedback, {})),
540*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_post_depth_coverage, {})),
541*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_queue_family_foreign, {{
542*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_memory, VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME}}})),
543*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_sample_locations, {{
544*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
545*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_sampler_filter_minmax, {{
546*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
547*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_scalar_block_layout, {{
548*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
549*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_separate_stencil_usage, {})),
550*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_shader_demote_to_helper_invocation, {{
551*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
552*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_shader_stencil_export, {})),
553*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_shader_subgroup_ballot, {})),
554*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_shader_subgroup_vote, {})),
555*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_shader_viewport_index_layer, {})),
556*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_subgroup_size_control, {})),
557*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_texel_buffer_alignment, {{
558*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
559*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_texture_compression_astc_hdr, {{
560*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
561*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_transform_feedback, {{
562*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
563*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_VALIDATION_CACHE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_validation_cache, {})),
564*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_vertex_attribute_divisor, {{
565*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
566*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ext_ycbcr_image_arrays, {{
567*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_sampler_ycbcr_conversion, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME}}})),
568*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_GGP
569*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_GGP_FRAME_TOKEN_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_ggp_frame_token, {{
570*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_swapchain, VK_KHR_SWAPCHAIN_EXTENSION_NAME},
571*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_ggp_stream_descriptor_surface, VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME}}})),
572*b7893ccfSSadaf Ebrahimi #endif
573*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_google_decorate_string, {})),
574*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_google_display_timing, {{
575*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_swapchain, VK_KHR_SWAPCHAIN_EXTENSION_NAME}}})),
576*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_google_hlsl_functionality1, {})),
577*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_IMG_FILTER_CUBIC_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_img_filter_cubic, {})),
578*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_IMG_FORMAT_PVRTC_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_img_format_pvrtc, {})),
579*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_intel_performance_query, {})),
580*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_intel_shader_integer_functions_2, {{
581*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
582*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_16BIT_STORAGE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_16bit_storage, {{
583*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME},
584*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_storage_buffer_storage_class, VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME}}})),
585*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_8BIT_STORAGE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_8bit_storage, {{
586*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME},
587*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_storage_buffer_storage_class, VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME}}})),
588*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_BIND_MEMORY_2_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_bind_memory_2, {})),
589*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_create_renderpass_2, {{
590*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_multiview, VK_KHR_MULTIVIEW_EXTENSION_NAME},
591*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_maintenance2, VK_KHR_MAINTENANCE2_EXTENSION_NAME}}})),
592*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_dedicated_allocation, {{
593*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_memory_requirements_2, VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME}}})),
594*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_depth_stencil_resolve, {{
595*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_create_renderpass_2, VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME}}})),
596*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_descriptor_update_template, {})),
597*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_DEVICE_GROUP_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_device_group, {{
598*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_device_group_creation, VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME}}})),
599*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_display_swapchain, {{
600*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_swapchain, VK_KHR_SWAPCHAIN_EXTENSION_NAME},
601*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_display, VK_KHR_DISPLAY_EXTENSION_NAME}}})),
602*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_draw_indirect_count, {})),
603*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_driver_properties, {{
604*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
605*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_external_fence, {{
606*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_fence_capabilities, VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME}}})),
607*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_external_fence_fd, {{
608*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_fence, VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME}}})),
609*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
610*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_external_fence_win32, {{
611*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_fence, VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME}}})),
612*b7893ccfSSadaf Ebrahimi #endif
613*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_external_memory, {{
614*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_memory_capabilities, VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME}}})),
615*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_external_memory_fd, {{
616*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_memory, VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME}}})),
617*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
618*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_external_memory_win32, {{
619*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_memory, VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME}}})),
620*b7893ccfSSadaf Ebrahimi #endif
621*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_external_semaphore, {{
622*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_semaphore_capabilities, VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME}}})),
623*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_external_semaphore_fd, {{
624*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_semaphore, VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME}}})),
625*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
626*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_external_semaphore_win32, {{
627*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_semaphore, VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME}}})),
628*b7893ccfSSadaf Ebrahimi #endif
629*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_get_memory_requirements_2, {})),
630*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_image_format_list, {})),
631*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_imageless_framebuffer, {{
632*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_maintenance2, VK_KHR_MAINTENANCE2_EXTENSION_NAME},
633*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_image_format_list, VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME}}})),
634*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_incremental_present, {{
635*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_swapchain, VK_KHR_SWAPCHAIN_EXTENSION_NAME}}})),
636*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_MAINTENANCE1_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_maintenance1, {})),
637*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_MAINTENANCE2_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_maintenance2, {})),
638*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_MAINTENANCE3_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_maintenance3, {{
639*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
640*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_MULTIVIEW_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_multiview, {{
641*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
642*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_pipeline_executable_properties, {})),
643*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_push_descriptor, {{
644*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
645*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_relaxed_block_layout, {})),
646*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_sampler_mirror_clamp_to_edge, {})),
647*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_sampler_ycbcr_conversion, {{
648*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_maintenance1, VK_KHR_MAINTENANCE1_EXTENSION_NAME},
649*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_bind_memory_2, VK_KHR_BIND_MEMORY_2_EXTENSION_NAME},
650*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_memory_requirements_2, VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME},
651*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
652*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_shader_atomic_int64, {{
653*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
654*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_shader_draw_parameters, {})),
655*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_shader_float16_int8, {{
656*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
657*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_shader_float_controls, {{
658*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
659*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_shared_presentable_image, {{
660*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_swapchain, VK_KHR_SWAPCHAIN_EXTENSION_NAME},
661*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME},
662*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_surface_capabilities_2, VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}}})),
663*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_storage_buffer_storage_class, {})),
664*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SWAPCHAIN_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_swapchain, {{
665*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_surface, VK_KHR_SURFACE_EXTENSION_NAME}}})),
666*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_swapchain_mutable_format, {{
667*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_swapchain, VK_KHR_SWAPCHAIN_EXTENSION_NAME},
668*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_maintenance2, VK_KHR_MAINTENANCE2_EXTENSION_NAME},
669*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_image_format_list, VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME}}})),
670*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_uniform_buffer_standard_layout, {{
671*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
672*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_variable_pointers, {{
673*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME},
674*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_storage_buffer_storage_class, VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME}}})),
675*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_vulkan_memory_model, {})),
676*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
677*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_khr_win32_keyed_mutex, {{
678*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_external_memory_win32, VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME}}})),
679*b7893ccfSSadaf Ebrahimi #endif
680*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nvx_device_generated_commands, {})),
681*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nvx_image_view_handle, {})),
682*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nvx_multiview_per_view_attributes, {{
683*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_multiview, VK_KHR_MULTIVIEW_EXTENSION_NAME}}})),
684*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_clip_space_w_scaling, {})),
685*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_compute_shader_derivatives, {{
686*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
687*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_cooperative_matrix, {{
688*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
689*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_corner_sampled_image, {{
690*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
691*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_coverage_reduction_mode, {{
692*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_nv_framebuffer_mixed_samples, VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME}}})),
693*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_dedicated_allocation, {})),
694*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_dedicated_allocation_image_aliasing, {{
695*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_dedicated_allocation, VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME}}})),
696*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_device_diagnostic_checkpoints, {{
697*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
698*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_external_memory, {{
699*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_nv_external_memory_capabilities, VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME}}})),
700*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
701*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_external_memory_win32, {{
702*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_nv_external_memory, VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME}}})),
703*b7893ccfSSadaf Ebrahimi #endif
704*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_FILL_RECTANGLE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_fill_rectangle, {})),
705*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_fragment_coverage_to_color, {})),
706*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_fragment_shader_barycentric, {{
707*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
708*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_framebuffer_mixed_samples, {})),
709*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_geometry_shader_passthrough, {})),
710*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_GLSL_SHADER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_glsl_shader, {})),
711*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_MESH_SHADER_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_mesh_shader, {{
712*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
713*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_RAY_TRACING_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_ray_tracing, {{
714*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME},
715*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_memory_requirements_2, VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME}}})),
716*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_representative_fragment_test, {})),
717*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_sample_mask_override_coverage, {})),
718*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_scissor_exclusive, {{
719*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
720*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_shader_image_footprint, {{
721*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
722*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_shader_sm_builtins, {})),
723*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_shader_subgroup_partitioned, {})),
724*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_shading_rate_image, {{
725*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_khr_get_physical_device_properties_2, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME}}})),
726*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_viewport_array2, {})),
727*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_viewport_swizzle, {})),
728*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
729*b7893ccfSSadaf Ebrahimi             std::make_pair(VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME, DeviceInfo(&DeviceExtensions::vk_nv_win32_keyed_mutex, {{
730*b7893ccfSSadaf Ebrahimi                            {&DeviceExtensions::vk_nv_external_memory_win32, VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME}}})),
731*b7893ccfSSadaf Ebrahimi #endif
732*b7893ccfSSadaf Ebrahimi         };
733*b7893ccfSSadaf Ebrahimi 
734*b7893ccfSSadaf Ebrahimi         static const DeviceInfo empty_info {nullptr, DeviceReqVec()};
735*b7893ccfSSadaf Ebrahimi         DeviceInfoMap::const_iterator info = info_map.find(name);
736*b7893ccfSSadaf Ebrahimi         if ( info != info_map.cend()) {
737*b7893ccfSSadaf Ebrahimi             return info->second;
738*b7893ccfSSadaf Ebrahimi         }
739*b7893ccfSSadaf Ebrahimi         return empty_info;
740*b7893ccfSSadaf Ebrahimi     }
741*b7893ccfSSadaf Ebrahimi 
742*b7893ccfSSadaf Ebrahimi     DeviceExtensions() = default;
DeviceExtensionsDeviceExtensions743*b7893ccfSSadaf Ebrahimi     DeviceExtensions(const InstanceExtensions& instance_ext) : InstanceExtensions(instance_ext) {}
744*b7893ccfSSadaf Ebrahimi 
InitFromDeviceCreateInfoDeviceExtensions745*b7893ccfSSadaf Ebrahimi     uint32_t InitFromDeviceCreateInfo(const InstanceExtensions *instance_extensions, uint32_t requested_api_version,
746*b7893ccfSSadaf Ebrahimi                                       const VkDeviceCreateInfo *pCreateInfo) {
747*b7893ccfSSadaf Ebrahimi         // Initialize: this to defaults,  base class fields to input.
748*b7893ccfSSadaf Ebrahimi         assert(instance_extensions);
749*b7893ccfSSadaf Ebrahimi         *this = DeviceExtensions(*instance_extensions);
750*b7893ccfSSadaf Ebrahimi 
751*b7893ccfSSadaf Ebrahimi 
752*b7893ccfSSadaf Ebrahimi         static const std::vector<const char *> V_1_1_promoted_device_apis = {
753*b7893ccfSSadaf Ebrahimi             VK_KHR_16BIT_STORAGE_EXTENSION_NAME,
754*b7893ccfSSadaf Ebrahimi             VK_KHR_BIND_MEMORY_2_EXTENSION_NAME,
755*b7893ccfSSadaf Ebrahimi             VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME,
756*b7893ccfSSadaf Ebrahimi             VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME,
757*b7893ccfSSadaf Ebrahimi             VK_KHR_DEVICE_GROUP_EXTENSION_NAME,
758*b7893ccfSSadaf Ebrahimi             VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME,
759*b7893ccfSSadaf Ebrahimi             VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME,
760*b7893ccfSSadaf Ebrahimi             VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
761*b7893ccfSSadaf Ebrahimi             VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME,
762*b7893ccfSSadaf Ebrahimi             VK_KHR_MAINTENANCE1_EXTENSION_NAME,
763*b7893ccfSSadaf Ebrahimi             VK_KHR_MAINTENANCE2_EXTENSION_NAME,
764*b7893ccfSSadaf Ebrahimi             VK_KHR_MAINTENANCE3_EXTENSION_NAME,
765*b7893ccfSSadaf Ebrahimi             VK_KHR_MULTIVIEW_EXTENSION_NAME,
766*b7893ccfSSadaf Ebrahimi             VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME,
767*b7893ccfSSadaf Ebrahimi             VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME,
768*b7893ccfSSadaf Ebrahimi             VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME,
769*b7893ccfSSadaf Ebrahimi             VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME,
770*b7893ccfSSadaf Ebrahimi             VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME,
771*b7893ccfSSadaf Ebrahimi             "VK_VERSION_1_1",
772*b7893ccfSSadaf Ebrahimi         };
773*b7893ccfSSadaf Ebrahimi 
774*b7893ccfSSadaf Ebrahimi         // Initialize struct data, robust to invalid pCreateInfo
775*b7893ccfSSadaf Ebrahimi         if (pCreateInfo->ppEnabledExtensionNames) {
776*b7893ccfSSadaf Ebrahimi             for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
777*b7893ccfSSadaf Ebrahimi                 if (!pCreateInfo->ppEnabledExtensionNames[i]) continue;
778*b7893ccfSSadaf Ebrahimi                 auto info = get_info(pCreateInfo->ppEnabledExtensionNames[i]);
779*b7893ccfSSadaf Ebrahimi                 if(info.state) this->*(info.state) = true;
780*b7893ccfSSadaf Ebrahimi             }
781*b7893ccfSSadaf Ebrahimi         }
782*b7893ccfSSadaf Ebrahimi         uint32_t api_version = NormalizeApiVersion(requested_api_version);
783*b7893ccfSSadaf Ebrahimi         if (api_version >= VK_API_VERSION_1_1) {
784*b7893ccfSSadaf Ebrahimi             for (auto promoted_ext : V_1_1_promoted_device_apis) {
785*b7893ccfSSadaf Ebrahimi                 auto info = get_info(promoted_ext);
786*b7893ccfSSadaf Ebrahimi                 assert(info.state);
787*b7893ccfSSadaf Ebrahimi                 if (info.state) this->*(info.state) = true;
788*b7893ccfSSadaf Ebrahimi             }
789*b7893ccfSSadaf Ebrahimi         }
790*b7893ccfSSadaf Ebrahimi         return api_version;
791*b7893ccfSSadaf Ebrahimi     }
792*b7893ccfSSadaf Ebrahimi };
793*b7893ccfSSadaf Ebrahimi 
794*b7893ccfSSadaf Ebrahimi static const std::set<std::string> kDeviceExtensionNames = {
795*b7893ccfSSadaf Ebrahimi     VK_AMD_BUFFER_MARKER_EXTENSION_NAME,
796*b7893ccfSSadaf Ebrahimi     VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME,
797*b7893ccfSSadaf Ebrahimi     VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME,
798*b7893ccfSSadaf Ebrahimi     VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME,
799*b7893ccfSSadaf Ebrahimi     VK_AMD_GCN_SHADER_EXTENSION_NAME,
800*b7893ccfSSadaf Ebrahimi     VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME,
801*b7893ccfSSadaf Ebrahimi     VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME,
802*b7893ccfSSadaf Ebrahimi     VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME,
803*b7893ccfSSadaf Ebrahimi     VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME,
804*b7893ccfSSadaf Ebrahimi     VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME,
805*b7893ccfSSadaf Ebrahimi     VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME,
806*b7893ccfSSadaf Ebrahimi     VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME,
807*b7893ccfSSadaf Ebrahimi     VK_AMD_SHADER_BALLOT_EXTENSION_NAME,
808*b7893ccfSSadaf Ebrahimi     VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME,
809*b7893ccfSSadaf Ebrahimi     VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME,
810*b7893ccfSSadaf Ebrahimi     VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME,
811*b7893ccfSSadaf Ebrahimi     VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME,
812*b7893ccfSSadaf Ebrahimi     VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME,
813*b7893ccfSSadaf Ebrahimi     VK_AMD_SHADER_INFO_EXTENSION_NAME,
814*b7893ccfSSadaf Ebrahimi     VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME,
815*b7893ccfSSadaf Ebrahimi     VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME,
816*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
817*b7893ccfSSadaf Ebrahimi     VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME,
818*b7893ccfSSadaf Ebrahimi #endif
819*b7893ccfSSadaf Ebrahimi     VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME,
820*b7893ccfSSadaf Ebrahimi     VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME,
821*b7893ccfSSadaf Ebrahimi     VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME,
822*b7893ccfSSadaf Ebrahimi     VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME,
823*b7893ccfSSadaf Ebrahimi     VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME,
824*b7893ccfSSadaf Ebrahimi     VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME,
825*b7893ccfSSadaf Ebrahimi     VK_EXT_DEBUG_MARKER_EXTENSION_NAME,
826*b7893ccfSSadaf Ebrahimi     VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME,
827*b7893ccfSSadaf Ebrahimi     VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME,
828*b7893ccfSSadaf Ebrahimi     VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME,
829*b7893ccfSSadaf Ebrahimi     VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME,
830*b7893ccfSSadaf Ebrahimi     VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME,
831*b7893ccfSSadaf Ebrahimi     VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME,
832*b7893ccfSSadaf Ebrahimi     VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME,
833*b7893ccfSSadaf Ebrahimi     VK_EXT_FILTER_CUBIC_EXTENSION_NAME,
834*b7893ccfSSadaf Ebrahimi     VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME,
835*b7893ccfSSadaf Ebrahimi     VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME,
836*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
837*b7893ccfSSadaf Ebrahimi     VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME,
838*b7893ccfSSadaf Ebrahimi #endif
839*b7893ccfSSadaf Ebrahimi     VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME,
840*b7893ccfSSadaf Ebrahimi     VK_EXT_HDR_METADATA_EXTENSION_NAME,
841*b7893ccfSSadaf Ebrahimi     VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME,
842*b7893ccfSSadaf Ebrahimi     VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME,
843*b7893ccfSSadaf Ebrahimi     VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME,
844*b7893ccfSSadaf Ebrahimi     VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME,
845*b7893ccfSSadaf Ebrahimi     VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME,
846*b7893ccfSSadaf Ebrahimi     VK_EXT_MEMORY_BUDGET_EXTENSION_NAME,
847*b7893ccfSSadaf Ebrahimi     VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME,
848*b7893ccfSSadaf Ebrahimi     VK_EXT_PCI_BUS_INFO_EXTENSION_NAME,
849*b7893ccfSSadaf Ebrahimi     VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME,
850*b7893ccfSSadaf Ebrahimi     VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME,
851*b7893ccfSSadaf Ebrahimi     VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME,
852*b7893ccfSSadaf Ebrahimi     VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME,
853*b7893ccfSSadaf Ebrahimi     VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME,
854*b7893ccfSSadaf Ebrahimi     VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME,
855*b7893ccfSSadaf Ebrahimi     VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME,
856*b7893ccfSSadaf Ebrahimi     VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME,
857*b7893ccfSSadaf Ebrahimi     VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME,
858*b7893ccfSSadaf Ebrahimi     VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME,
859*b7893ccfSSadaf Ebrahimi     VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME,
860*b7893ccfSSadaf Ebrahimi     VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME,
861*b7893ccfSSadaf Ebrahimi     VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME,
862*b7893ccfSSadaf Ebrahimi     VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME,
863*b7893ccfSSadaf Ebrahimi     VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME,
864*b7893ccfSSadaf Ebrahimi     VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME,
865*b7893ccfSSadaf Ebrahimi     VK_EXT_VALIDATION_CACHE_EXTENSION_NAME,
866*b7893ccfSSadaf Ebrahimi     VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME,
867*b7893ccfSSadaf Ebrahimi     VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME,
868*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_GGP
869*b7893ccfSSadaf Ebrahimi     VK_GGP_FRAME_TOKEN_EXTENSION_NAME,
870*b7893ccfSSadaf Ebrahimi #endif
871*b7893ccfSSadaf Ebrahimi     VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME,
872*b7893ccfSSadaf Ebrahimi     VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME,
873*b7893ccfSSadaf Ebrahimi     VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME,
874*b7893ccfSSadaf Ebrahimi     VK_IMG_FILTER_CUBIC_EXTENSION_NAME,
875*b7893ccfSSadaf Ebrahimi     VK_IMG_FORMAT_PVRTC_EXTENSION_NAME,
876*b7893ccfSSadaf Ebrahimi     VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME,
877*b7893ccfSSadaf Ebrahimi     VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME,
878*b7893ccfSSadaf Ebrahimi     VK_KHR_16BIT_STORAGE_EXTENSION_NAME,
879*b7893ccfSSadaf Ebrahimi     VK_KHR_8BIT_STORAGE_EXTENSION_NAME,
880*b7893ccfSSadaf Ebrahimi     VK_KHR_BIND_MEMORY_2_EXTENSION_NAME,
881*b7893ccfSSadaf Ebrahimi     VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME,
882*b7893ccfSSadaf Ebrahimi     VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME,
883*b7893ccfSSadaf Ebrahimi     VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME,
884*b7893ccfSSadaf Ebrahimi     VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME,
885*b7893ccfSSadaf Ebrahimi     VK_KHR_DEVICE_GROUP_EXTENSION_NAME,
886*b7893ccfSSadaf Ebrahimi     VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME,
887*b7893ccfSSadaf Ebrahimi     VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME,
888*b7893ccfSSadaf Ebrahimi     VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME,
889*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME,
890*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME,
891*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
892*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME,
893*b7893ccfSSadaf Ebrahimi #endif
894*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME,
895*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME,
896*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
897*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME,
898*b7893ccfSSadaf Ebrahimi #endif
899*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
900*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME,
901*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
902*b7893ccfSSadaf Ebrahimi     VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME,
903*b7893ccfSSadaf Ebrahimi #endif
904*b7893ccfSSadaf Ebrahimi     VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME,
905*b7893ccfSSadaf Ebrahimi     VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME,
906*b7893ccfSSadaf Ebrahimi     VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME,
907*b7893ccfSSadaf Ebrahimi     VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME,
908*b7893ccfSSadaf Ebrahimi     VK_KHR_MAINTENANCE1_EXTENSION_NAME,
909*b7893ccfSSadaf Ebrahimi     VK_KHR_MAINTENANCE2_EXTENSION_NAME,
910*b7893ccfSSadaf Ebrahimi     VK_KHR_MAINTENANCE3_EXTENSION_NAME,
911*b7893ccfSSadaf Ebrahimi     VK_KHR_MULTIVIEW_EXTENSION_NAME,
912*b7893ccfSSadaf Ebrahimi     VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME,
913*b7893ccfSSadaf Ebrahimi     VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME,
914*b7893ccfSSadaf Ebrahimi     VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME,
915*b7893ccfSSadaf Ebrahimi     VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME,
916*b7893ccfSSadaf Ebrahimi     VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME,
917*b7893ccfSSadaf Ebrahimi     VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME,
918*b7893ccfSSadaf Ebrahimi     VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME,
919*b7893ccfSSadaf Ebrahimi     VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME,
920*b7893ccfSSadaf Ebrahimi     VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME,
921*b7893ccfSSadaf Ebrahimi     VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME,
922*b7893ccfSSadaf Ebrahimi     VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME,
923*b7893ccfSSadaf Ebrahimi     VK_KHR_SWAPCHAIN_EXTENSION_NAME,
924*b7893ccfSSadaf Ebrahimi     VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME,
925*b7893ccfSSadaf Ebrahimi     VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME,
926*b7893ccfSSadaf Ebrahimi     VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME,
927*b7893ccfSSadaf Ebrahimi     VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME,
928*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
929*b7893ccfSSadaf Ebrahimi     VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME,
930*b7893ccfSSadaf Ebrahimi #endif
931*b7893ccfSSadaf Ebrahimi     VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME,
932*b7893ccfSSadaf Ebrahimi     VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME,
933*b7893ccfSSadaf Ebrahimi     VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME,
934*b7893ccfSSadaf Ebrahimi     VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME,
935*b7893ccfSSadaf Ebrahimi     VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME,
936*b7893ccfSSadaf Ebrahimi     VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME,
937*b7893ccfSSadaf Ebrahimi     VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME,
938*b7893ccfSSadaf Ebrahimi     VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME,
939*b7893ccfSSadaf Ebrahimi     VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME,
940*b7893ccfSSadaf Ebrahimi     VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME,
941*b7893ccfSSadaf Ebrahimi     VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME,
942*b7893ccfSSadaf Ebrahimi     VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME,
943*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
944*b7893ccfSSadaf Ebrahimi     VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME,
945*b7893ccfSSadaf Ebrahimi #endif
946*b7893ccfSSadaf Ebrahimi     VK_NV_FILL_RECTANGLE_EXTENSION_NAME,
947*b7893ccfSSadaf Ebrahimi     VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME,
948*b7893ccfSSadaf Ebrahimi     VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME,
949*b7893ccfSSadaf Ebrahimi     VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME,
950*b7893ccfSSadaf Ebrahimi     VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME,
951*b7893ccfSSadaf Ebrahimi     VK_NV_GLSL_SHADER_EXTENSION_NAME,
952*b7893ccfSSadaf Ebrahimi     VK_NV_MESH_SHADER_EXTENSION_NAME,
953*b7893ccfSSadaf Ebrahimi     VK_NV_RAY_TRACING_EXTENSION_NAME,
954*b7893ccfSSadaf Ebrahimi     VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME,
955*b7893ccfSSadaf Ebrahimi     VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME,
956*b7893ccfSSadaf Ebrahimi     VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME,
957*b7893ccfSSadaf Ebrahimi     VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME,
958*b7893ccfSSadaf Ebrahimi     VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME,
959*b7893ccfSSadaf Ebrahimi     VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME,
960*b7893ccfSSadaf Ebrahimi     VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME,
961*b7893ccfSSadaf Ebrahimi     VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME,
962*b7893ccfSSadaf Ebrahimi     VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME,
963*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
964*b7893ccfSSadaf Ebrahimi     VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME,
965*b7893ccfSSadaf Ebrahimi #endif
966*b7893ccfSSadaf Ebrahimi };
967*b7893ccfSSadaf Ebrahimi 
968*b7893ccfSSadaf Ebrahimi 
969*b7893ccfSSadaf Ebrahimi #endif // VK_EXTENSION_HELPER_H_
970