• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2024 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 // clang-format off
20 
21 #ifndef VK_USE_PLATFORM_ANDROID_KHR
22 #define VK_USE_PLATFORM_ANDROID_KHR
23 #endif
24 
25 #include <cstddef>
26 #include <cstdarg>
27 #include <cstdio>
28 #include <cstring>
29 #include <cstdint>
30 #include <cassert>
31 #include <cmath>
32 #include <string>
33 #include <vector>
34 #include <algorithm>
35 #include <memory>
36 #include <map>
37 #include "vulkan_profiles.h"
38 
39 #include <cstdio>
40 
41 #ifndef VP_DEBUG_MESSAGE_CALLBACK
42 #if defined(ANDROID) || defined(__ANDROID__)
43 #include <android/log.h>
44 #define VP_DEBUG_MESSAGE_CALLBACK(MSG)     __android_log_print(ANDROID_LOG_ERROR, "vkprofiles ERROR", "%s", MSG); \
45     __android_log_print(ANDROID_LOG_DEBUG, "vkprofiles WARNING", "%s", MSG)
46 #else
47 #define VP_DEBUG_MESSAGE_CALLBACK(MSG) fprintf(stderr, "%s\n", MSG)
48 #endif
49 #else
50 void VP_DEBUG_MESSAGE_CALLBACK(const char*);
51 #endif
52 
53 #define VP_DEBUG_MSG(MSG) VP_DEBUG_MESSAGE_CALLBACK(MSG)
54 #define VP_DEBUG_MSGF(MSGFMT, ...) { char msg[1024]; snprintf(msg, sizeof(msg) - 1, (MSGFMT), __VA_ARGS__); VP_DEBUG_MESSAGE_CALLBACK(msg); }
55 #define VP_DEBUG_COND_MSG(COND, MSG) if (COND) VP_DEBUG_MSG(MSG)
56 #define VP_DEBUG_COND_MSGF(COND, MSGFMT, ...) if (COND) VP_DEBUG_MSGF(MSGFMT, __VA_ARGS__)
57 
58 #include <string>
59 
60 namespace detail {
61 
vpGetDeviceAndDriverInfoString(VkPhysicalDevice physicalDevice,PFN_vkGetPhysicalDeviceProperties2KHR pfnGetPhysicalDeviceProperties2)62 VPAPI_ATTR std::string vpGetDeviceAndDriverInfoString(VkPhysicalDevice physicalDevice,
63                                                       PFN_vkGetPhysicalDeviceProperties2KHR pfnGetPhysicalDeviceProperties2) {
64     VkPhysicalDeviceDriverPropertiesKHR driverProps{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR };
65     VkPhysicalDeviceProperties2KHR deviceProps{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR, &driverProps };
66     pfnGetPhysicalDeviceProperties2(physicalDevice, &deviceProps);
67     return std::string("deviceName=") + std::string(&deviceProps.properties.deviceName[0])
68                     + ", driverName=" + std::string(&driverProps.driverName[0])
69                     + ", driverInfo=" + std::string(&driverProps.driverInfo[0]);
70 }
71 
72 }
73 
74 namespace detail {
75 
76 
FormatString(const char * message,...)77 VPAPI_ATTR std::string FormatString(const char* message, ...) {
78     std::size_t const STRING_BUFFER(4096);
79 
80     assert(message != nullptr);
81     assert(strlen(message) >= 1 && strlen(message) < STRING_BUFFER);
82 
83     char buffer[STRING_BUFFER];
84     va_list list;
85 
86     va_start(list, message);
87     vsnprintf(buffer, STRING_BUFFER, message, list);
88     va_end(list);
89 
90     return buffer;
91 }
92 
vpGetStructure(const void * pNext,VkStructureType type)93 VPAPI_ATTR const void* vpGetStructure(const void* pNext, VkStructureType type) {
94     const VkBaseOutStructure* p = static_cast<const VkBaseOutStructure*>(pNext);
95     while (p != nullptr) {
96         if (p->sType == type) return p;
97         p = p->pNext;
98     }
99     return nullptr;
100 }
101 
vpGetStructure(void * pNext,VkStructureType type)102 VPAPI_ATTR void* vpGetStructure(void* pNext, VkStructureType type) {
103     VkBaseOutStructure* p = static_cast<VkBaseOutStructure*>(pNext);
104     while (p != nullptr) {
105         if (p->sType == type) return p;
106         p = p->pNext;
107     }
108     return nullptr;
109 }
110 
vpExtractStructure(VkPhysicalDeviceFeatures2KHR * pFeatures,VkStructureType structureType)111 VPAPI_ATTR VkBaseOutStructure* vpExtractStructure(VkPhysicalDeviceFeatures2KHR* pFeatures, VkStructureType structureType) {
112     if (structureType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR) {
113         return nullptr;
114     }
115 
116     VkBaseOutStructure* current = reinterpret_cast<VkBaseOutStructure*>(pFeatures);
117     VkBaseOutStructure* previous = nullptr;
118     VkBaseOutStructure* found = nullptr;
119 
120     while (current != nullptr) {
121         if (structureType == current->sType) {
122             found = current;
123             if (previous != nullptr) {
124                 previous->pNext = current->pNext;
125             }
126             current = nullptr;
127         } else {
128             previous = current;
129             current = current->pNext;
130         }
131     }
132 
133     if (found != nullptr) {
134         found->pNext = nullptr;
135         return found;
136     } else {
137         return nullptr;
138     }
139 }
140 
GatherStructureTypes(std::vector<VkStructureType> & structureTypes,VkBaseOutStructure * pNext)141 VPAPI_ATTR void GatherStructureTypes(std::vector<VkStructureType>& structureTypes, VkBaseOutStructure* pNext) {
142     while (pNext) {
143         if (std::find(structureTypes.begin(), structureTypes.end(), pNext->sType) == structureTypes.end()) {
144             structureTypes.push_back(pNext->sType);
145         }
146 
147         pNext = pNext->pNext;
148     }
149 }
150 
isMultiple(double source,double multiple)151 VPAPI_ATTR bool isMultiple(double source, double multiple) {
152     double mod = std::fmod(source, multiple);
153     return std::abs(mod) < 0.0001;
154 }
155 
isPowerOfTwo(double source)156 VPAPI_ATTR bool isPowerOfTwo(double source) {
157     double mod = std::fmod(source, 1.0);
158     if (std::abs(mod) >= 0.0001) return false;
159 
160     std::uint64_t value = static_cast<std::uint64_t>(std::abs(source));
161     return !(value & (value - static_cast<std::uint64_t>(1)));
162 }
163 
164 using PFN_vpStructFiller = void(*)(VkBaseOutStructure* p);
165 using PFN_vpStructComparator = bool(*)(VkBaseOutStructure* p);
166 using PFN_vpStructChainerCb = void(*)(VkBaseOutStructure* p, void* pUser);
167 using PFN_vpStructChainer = void(*)(VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb);
168 using PFN_vpStructArrayChainerCb = void(*)(uint32_t count, VkBaseOutStructure* p, void* pUser);
169 using PFN_vpStructArrayChainer = void(*)(uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb);
170 
171 struct VpFeatureDesc {
172     PFN_vpStructFiller              pfnFiller;
173     PFN_vpStructComparator          pfnComparator;
174 };
175 
176 struct VpPropertyDesc {
177     PFN_vpStructFiller              pfnFiller;
178     PFN_vpStructComparator          pfnComparator;
179 };
180 
181 struct VpQueueFamilyDesc {
182     PFN_vpStructFiller              pfnFiller;
183     PFN_vpStructComparator          pfnComparator;
184 };
185 
186 struct VpFormatDesc {
187     VkFormat                        format;
188     PFN_vpStructFiller              pfnFiller;
189     PFN_vpStructComparator          pfnComparator;
190 };
191 
192 struct VpStructChainerDesc {
193     PFN_vpStructChainer             pfnFeature;
194     PFN_vpStructChainer             pfnProperty;
195     PFN_vpStructArrayChainer        pfnQueueFamily;
196     PFN_vpStructChainer             pfnFormat;
197 };
198 
199 struct VpVideoProfileInfoDesc {
200     PFN_vpStructFiller              pfnFiller;
201     PFN_vpStructComparator          pfnComparator;
202 };
203 
204 struct VpVideoCapabilityDesc {
205     PFN_vpStructFiller              pfnFiller;
206     PFN_vpStructComparator          pfnComparator;
207 };
208 
209 struct VpVideoFormatDesc {
210     PFN_vpStructFiller              pfnFiller;
211     PFN_vpStructComparator          pfnComparator;
212 };
213 
214 struct VpVideoProfileStructChainerDesc {
215     PFN_vpStructChainer             pfnInfo;
216     PFN_vpStructChainer             pfnCapability;
217     PFN_vpStructArrayChainer        pfnFormat;
218 };
219 
220 struct VpVideoProfileDesc {
221     VpVideoProfileProperties properties;
222 
223     uint32_t infoStructTypeCount;
224     const VkStructureType* pInfoStructTypes;
225     VpVideoProfileInfoDesc info;
226 
227     uint32_t capabilityStructTypeCount;
228     const VkStructureType* pCapabilityStructTypes;
229     VpVideoCapabilityDesc capability;
230 
231     uint32_t formatStructTypeCount;
232     const VkStructureType* pFormatStructTypes;
233     uint32_t formatCount;
234     const VpVideoFormatDesc* pFormats;
235 
236     VpVideoProfileStructChainerDesc chainers;
237 };
238 
239 struct VpVariantDesc {
240     char blockName[VP_MAX_PROFILE_NAME_SIZE];
241 
242     uint32_t instanceExtensionCount;
243     const VkExtensionProperties* pInstanceExtensions;
244 
245     uint32_t deviceExtensionCount;
246     const VkExtensionProperties* pDeviceExtensions;
247 
248     uint32_t featureStructTypeCount;
249     const VkStructureType* pFeatureStructTypes;
250     VpFeatureDesc feature;
251 
252     uint32_t propertyStructTypeCount;
253     const VkStructureType* pPropertyStructTypes;
254     VpPropertyDesc property;
255 
256     uint32_t queueFamilyStructTypeCount;
257     const VkStructureType* pQueueFamilyStructTypes;
258     uint32_t queueFamilyCount;
259     const VpQueueFamilyDesc* pQueueFamilies;
260 
261     uint32_t formatStructTypeCount;
262     const VkStructureType* pFormatStructTypes;
263     uint32_t formatCount;
264     const VpFormatDesc* pFormats;
265 
266     VpStructChainerDesc chainers;
267 
268     uint32_t videoProfileCount;
269     const VpVideoProfileDesc* pVideoProfiles;
270 };
271 
272 struct VpCapabilitiesDesc {
273     uint32_t variantCount;
274     const VpVariantDesc* pVariants;
275 };
276 
277 struct VpProfileDesc {
278     VpProfileProperties             props;
279     uint32_t                        minApiVersion;
280 
281     const detail::VpVariantDesc*    pMergedCapabilities;
282 
283     uint32_t                        requiredProfileCount;
284     const VpProfileProperties*      pRequiredProfiles;
285 
286     uint32_t                        requiredCapabilityCount;
287     const VpCapabilitiesDesc*       pRequiredCapabilities;
288 
289     uint32_t                        fallbackCount;
290     const VpProfileProperties*      pFallbacks;
291 };
292 
293 template <typename T>
vpCheckFlags(const T & actual,const uint64_t expected)294 VPAPI_ATTR bool vpCheckFlags(const T& actual, const uint64_t expected) {
295     return (actual & expected) == expected;
296 }
297 
298 
299 #ifdef VK_KHR_video_queue
vpForEachMatchingVideoProfiles(VkVideoProfileInfoKHR * pVideoProfileInfo,void * pUser,PFN_vpStructChainerCb pfnCb)300 VPAPI_ATTR void vpForEachMatchingVideoProfiles(
301     VkVideoProfileInfoKHR*                      pVideoProfileInfo,
302     void*                                       pUser,
303     PFN_vpStructChainerCb                       pfnCb) {
304     const VkVideoChromaSubsamplingFlagsKHR chroma_subsampling_list[] = {
305         VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR,
306         VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR,
307         VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR,
308         VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR
309     };
310     const VkVideoComponentBitDepthFlagsKHR bit_depth_list[] = {
311         VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR,
312         VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR,
313         VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR
314     };
315     for (size_t chromaSubsampling_idx = 0; chromaSubsampling_idx < std::size(chroma_subsampling_list); ++chromaSubsampling_idx) {
316         pVideoProfileInfo->chromaSubsampling = chroma_subsampling_list[chromaSubsampling_idx];
317         for (size_t lumaBitDepth_idx = 0; lumaBitDepth_idx < std::size(bit_depth_list); ++lumaBitDepth_idx) {
318             pVideoProfileInfo->lumaBitDepth = bit_depth_list[lumaBitDepth_idx];
319             for (size_t chromaBitDepth_idx = 0; chromaBitDepth_idx < std::size(bit_depth_list); ++chromaBitDepth_idx) {
320                 pVideoProfileInfo->chromaBitDepth = bit_depth_list[chromaBitDepth_idx];
321                 {
322                     pVideoProfileInfo->pNext = nullptr;
323                     pVideoProfileInfo->videoCodecOperation = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR;
324                     VkVideoDecodeH264ProfileInfoKHR var_VideoDecodeH264ProfileInfoKHR = { VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR };
325                     var_VideoDecodeH264ProfileInfoKHR.pNext = pVideoProfileInfo->pNext;
326                     pVideoProfileInfo->pNext = &var_VideoDecodeH264ProfileInfoKHR;
327                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_BASELINE;
328                     var_VideoDecodeH264ProfileInfoKHR.pictureLayout = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR;
329                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
330                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_MAIN;
331                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
332                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_HIGH;
333                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
334                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE;
335                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
336                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_BASELINE;
337                     var_VideoDecodeH264ProfileInfoKHR.pictureLayout = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR;
338                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
339                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_MAIN;
340                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
341                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_HIGH;
342                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
343                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE;
344                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
345                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_BASELINE;
346                     var_VideoDecodeH264ProfileInfoKHR.pictureLayout = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR;
347                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
348                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_MAIN;
349                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
350                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_HIGH;
351                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
352                     var_VideoDecodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE;
353                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
354                 }
355                 {
356                     pVideoProfileInfo->pNext = nullptr;
357                     pVideoProfileInfo->videoCodecOperation = VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR;
358                     VkVideoDecodeH265ProfileInfoKHR var_VideoDecodeH265ProfileInfoKHR = { VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR };
359                     var_VideoDecodeH265ProfileInfoKHR.pNext = pVideoProfileInfo->pNext;
360                     pVideoProfileInfo->pNext = &var_VideoDecodeH265ProfileInfoKHR;
361                     var_VideoDecodeH265ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_MAIN;
362                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
363                     var_VideoDecodeH265ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_MAIN_10;
364                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
365                     var_VideoDecodeH265ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE;
366                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
367                     var_VideoDecodeH265ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS;
368                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
369                     var_VideoDecodeH265ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS;
370                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
371                 }
372                 {
373                     pVideoProfileInfo->pNext = nullptr;
374                     pVideoProfileInfo->videoCodecOperation = VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR;
375                     VkVideoDecodeAV1ProfileInfoKHR var_VideoDecodeAV1ProfileInfoKHR = { VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_KHR };
376                     var_VideoDecodeAV1ProfileInfoKHR.pNext = pVideoProfileInfo->pNext;
377                     pVideoProfileInfo->pNext = &var_VideoDecodeAV1ProfileInfoKHR;
378                     var_VideoDecodeAV1ProfileInfoKHR.stdProfile = STD_VIDEO_AV1_PROFILE_MAIN;
379                     var_VideoDecodeAV1ProfileInfoKHR.filmGrainSupport = VK_TRUE;
380                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
381                     var_VideoDecodeAV1ProfileInfoKHR.stdProfile = STD_VIDEO_AV1_PROFILE_HIGH;
382                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
383                     var_VideoDecodeAV1ProfileInfoKHR.stdProfile = STD_VIDEO_AV1_PROFILE_PROFESSIONAL;
384                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
385                     var_VideoDecodeAV1ProfileInfoKHR.stdProfile = STD_VIDEO_AV1_PROFILE_MAIN;
386                     var_VideoDecodeAV1ProfileInfoKHR.filmGrainSupport = VK_FALSE;
387                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
388                     var_VideoDecodeAV1ProfileInfoKHR.stdProfile = STD_VIDEO_AV1_PROFILE_HIGH;
389                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
390                     var_VideoDecodeAV1ProfileInfoKHR.stdProfile = STD_VIDEO_AV1_PROFILE_PROFESSIONAL;
391                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
392                 }
393                 {
394                     pVideoProfileInfo->pNext = nullptr;
395                     pVideoProfileInfo->videoCodecOperation = VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_KHR;
396                     VkVideoEncodeH264ProfileInfoKHR var_VideoEncodeH264ProfileInfoKHR = { VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_INFO_KHR };
397                     var_VideoEncodeH264ProfileInfoKHR.pNext = pVideoProfileInfo->pNext;
398                     pVideoProfileInfo->pNext = &var_VideoEncodeH264ProfileInfoKHR;
399                     var_VideoEncodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_BASELINE;
400                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
401                     var_VideoEncodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_MAIN;
402                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
403                     var_VideoEncodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_HIGH;
404                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
405                     var_VideoEncodeH264ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE;
406                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
407                 }
408                 {
409                     pVideoProfileInfo->pNext = nullptr;
410                     pVideoProfileInfo->videoCodecOperation = VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_KHR;
411                     VkVideoEncodeH265ProfileInfoKHR var_VideoEncodeH265ProfileInfoKHR = { VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_KHR };
412                     var_VideoEncodeH265ProfileInfoKHR.pNext = pVideoProfileInfo->pNext;
413                     pVideoProfileInfo->pNext = &var_VideoEncodeH265ProfileInfoKHR;
414                     var_VideoEncodeH265ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_MAIN;
415                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
416                     var_VideoEncodeH265ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_MAIN_10;
417                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
418                     var_VideoEncodeH265ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE;
419                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
420                     var_VideoEncodeH265ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS;
421                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
422                     var_VideoEncodeH265ProfileInfoKHR.stdProfileIdc = STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS;
423                     pfnCb(reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo), pUser);
424                 }
425             }
426         }
427     }
428 }
429 #endif  // VK_KHR_video_queue
430 #ifdef VP_ANDROID_15_minimums
431 namespace VP_ANDROID_15_MINIMUMS {
432 
433 static const VkStructureType featureStructTypes[] = {
434     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
435     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
436     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT,
437     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT,
438     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT,
439     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT,
440     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR,
441     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
442     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES,
443     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES,
444     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES,
445     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,
446     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT,
447     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT,
448     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG,
449 };
450 
451 static const VkStructureType propertyStructTypes[] = {
452     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR,
453     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES,
454 };
455 
456 static const VkStructureType formatStructTypes[] = {
457     VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR,
458     VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR,
459 };
460 
461 namespace blocks {
462 namespace MUST {
463 
464 static const VkExtensionProperties instanceExtensions[] = {
465     VkExtensionProperties{ VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME, 1 },
466     VkExtensionProperties{ VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME, 1 },
467 };
468 
469 static const VkExtensionProperties deviceExtensions[] = {
470     VkExtensionProperties{ VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_EXTENSION_NAME, 1 },
471     VkExtensionProperties{ VK_EXT_4444_FORMATS_EXTENSION_NAME, 1 },
472     VkExtensionProperties{ VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, 1 },
473     VkExtensionProperties{ VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME, 1 },
474     VkExtensionProperties{ VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXTENSION_NAME, 1 },
475     VkExtensionProperties{ VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, 1 },
476     VkExtensionProperties{ VK_EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME, 1 },
477     VkExtensionProperties{ VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME, 1 },
478     VkExtensionProperties{ VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME, 1 },
479     VkExtensionProperties{ VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, 1 },
480     VkExtensionProperties{ VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME, 1 },
481     VkExtensionProperties{ VK_KHR_16BIT_STORAGE_EXTENSION_NAME, 1 },
482     VkExtensionProperties{ VK_KHR_MAINTENANCE_5_EXTENSION_NAME, 1 },
483     VkExtensionProperties{ VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, 1 },
484     VkExtensionProperties{ VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, 1 },
485 };
486 
487 static const VpFeatureDesc featureDesc = {
__anon3431b7520102() 488     [](VkBaseOutStructure* p) { (void)p;
489             switch (p->sType) {
490                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
491                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
492                     s->features.drawIndirectFirstInstance = VK_TRUE;
493                     s->features.samplerAnisotropy = VK_TRUE;
494                     s->features.shaderImageGatherExtended = VK_TRUE;
495                     s->features.shaderStorageImageExtendedFormats = VK_TRUE;
496                     s->features.shaderStorageImageReadWithoutFormat = VK_TRUE;
497                     s->features.shaderStorageImageWriteWithoutFormat = VK_TRUE;
498                 } break;
499                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: {
500                     VkPhysicalDeviceVulkan12Features* s = static_cast<VkPhysicalDeviceVulkan12Features*>(static_cast<void*>(p));
501                     s->shaderFloat16 = VK_TRUE;
502                     s->shaderInt8 = VK_TRUE;
503                 } break;
504                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: {
505                     VkPhysicalDeviceCustomBorderColorFeaturesEXT* s = static_cast<VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(static_cast<void*>(p));
506                     s->customBorderColors = VK_TRUE;
507                 } break;
508                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: {
509                     VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* s = static_cast<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT*>(static_cast<void*>(p));
510                     s->primitiveTopologyListRestart = VK_TRUE;
511                 } break;
512                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: {
513                     VkPhysicalDeviceProvokingVertexFeaturesEXT* s = static_cast<VkPhysicalDeviceProvokingVertexFeaturesEXT*>(static_cast<void*>(p));
514                     s->provokingVertexLast = VK_TRUE;
515                 } break;
516                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT: {
517                     VkPhysicalDeviceIndexTypeUint8FeaturesEXT* s = static_cast<VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(static_cast<void*>(p));
518                     s->indexTypeUint8 = VK_TRUE;
519                 } break;
520                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR: {
521                     VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR* s = static_cast<VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR*>(static_cast<void*>(p));
522                     s->vertexAttributeInstanceRateDivisor = VK_TRUE;
523                 } break;
524                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
525                     VkPhysicalDeviceSamplerYcbcrConversionFeatures* s = static_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(static_cast<void*>(p));
526                     s->samplerYcbcrConversion = VK_TRUE;
527                 } break;
528                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: {
529                     VkPhysicalDeviceShaderFloat16Int8Features* s = static_cast<VkPhysicalDeviceShaderFloat16Int8Features*>(static_cast<void*>(p));
530                     s->shaderFloat16 = VK_TRUE;
531                     s->shaderInt8 = VK_TRUE;
532                 } break;
533                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: {
534                     VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* s = static_cast<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(static_cast<void*>(p));
535                     s->shaderSubgroupExtendedTypes = VK_TRUE;
536                 } break;
537                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: {
538                     VkPhysicalDevice8BitStorageFeatures* s = static_cast<VkPhysicalDevice8BitStorageFeatures*>(static_cast<void*>(p));
539                     s->storageBuffer8BitAccess = VK_TRUE;
540                 } break;
541                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: {
542                     VkPhysicalDevice16BitStorageFeatures* s = static_cast<VkPhysicalDevice16BitStorageFeatures*>(static_cast<void*>(p));
543                     s->storageBuffer16BitAccess = VK_TRUE;
544                 } break;
545                 default: break;
546             }
547     },
__anon3431b7520202() 548     [](VkBaseOutStructure* p) -> bool { (void)p;
549         bool ret = true;
550             switch (p->sType) {
551                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
552                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
553                     ret = ret && (s->features.drawIndirectFirstInstance == VK_TRUE);
554                     ret = ret && (s->features.samplerAnisotropy == VK_TRUE);
555                     ret = ret && (s->features.shaderImageGatherExtended == VK_TRUE);
556                     ret = ret && (s->features.shaderStorageImageExtendedFormats == VK_TRUE);
557                     ret = ret && (s->features.shaderStorageImageReadWithoutFormat == VK_TRUE);
558                     ret = ret && (s->features.shaderStorageImageWriteWithoutFormat == VK_TRUE);
559                 } break;
560                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: {
561                     VkPhysicalDeviceVulkan12Features* s = static_cast<VkPhysicalDeviceVulkan12Features*>(static_cast<void*>(p));
562                     ret = ret && (s->shaderFloat16 == VK_TRUE);
563                     ret = ret && (s->shaderInt8 == VK_TRUE);
564                 } break;
565                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: {
566                     VkPhysicalDeviceCustomBorderColorFeaturesEXT* s = static_cast<VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(static_cast<void*>(p));
567                     ret = ret && (s->customBorderColors == VK_TRUE);
568                 } break;
569                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: {
570                     VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* s = static_cast<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT*>(static_cast<void*>(p));
571                     ret = ret && (s->primitiveTopologyListRestart == VK_TRUE);
572                 } break;
573                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: {
574                     VkPhysicalDeviceProvokingVertexFeaturesEXT* s = static_cast<VkPhysicalDeviceProvokingVertexFeaturesEXT*>(static_cast<void*>(p));
575                     ret = ret && (s->provokingVertexLast == VK_TRUE);
576                 } break;
577                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT: {
578                     VkPhysicalDeviceIndexTypeUint8FeaturesEXT* s = static_cast<VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(static_cast<void*>(p));
579                     ret = ret && (s->indexTypeUint8 == VK_TRUE);
580                 } break;
581                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR: {
582                     VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR* s = static_cast<VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR*>(static_cast<void*>(p));
583                     ret = ret && (s->vertexAttributeInstanceRateDivisor == VK_TRUE);
584                 } break;
585                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
586                     VkPhysicalDeviceSamplerYcbcrConversionFeatures* s = static_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(static_cast<void*>(p));
587                     ret = ret && (s->samplerYcbcrConversion == VK_TRUE);
588                 } break;
589                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: {
590                     VkPhysicalDeviceShaderFloat16Int8Features* s = static_cast<VkPhysicalDeviceShaderFloat16Int8Features*>(static_cast<void*>(p));
591                     ret = ret && (s->shaderFloat16 == VK_TRUE);
592                     ret = ret && (s->shaderInt8 == VK_TRUE);
593                 } break;
594                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: {
595                     VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* s = static_cast<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(static_cast<void*>(p));
596                     ret = ret && (s->shaderSubgroupExtendedTypes == VK_TRUE);
597                 } break;
598                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: {
599                     VkPhysicalDevice8BitStorageFeatures* s = static_cast<VkPhysicalDevice8BitStorageFeatures*>(static_cast<void*>(p));
600                     ret = ret && (s->storageBuffer8BitAccess == VK_TRUE);
601                 } break;
602                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: {
603                     VkPhysicalDevice16BitStorageFeatures* s = static_cast<VkPhysicalDevice16BitStorageFeatures*>(static_cast<void*>(p));
604                     ret = ret && (s->storageBuffer16BitAccess == VK_TRUE);
605                 } break;
606                 default: break;
607             }
608         return ret;
609     }
610 };
611 
612 static const VpPropertyDesc propertyDesc = {
__anon3431b7520302() 613     [](VkBaseOutStructure* p) { (void)p;
614             switch (p->sType) {
615                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: {
616                     VkPhysicalDeviceProperties2KHR* s = static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p));
617                     s->properties.limits.maxColorAttachments = 8;
618                     s->properties.limits.maxPerStageDescriptorSampledImages = 128;
619                     s->properties.limits.maxPerStageDescriptorSamplers = 128;
620                     s->properties.limits.maxPerStageDescriptorStorageBuffers = 12;
621                     s->properties.limits.maxPerStageDescriptorUniformBuffers = 13;
622                 } break;
623                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: {
624                     VkPhysicalDeviceVulkan11Properties* s = static_cast<VkPhysicalDeviceVulkan11Properties*>(static_cast<void*>(p));
625                     s->subgroupSupportedOperations |= (VK_SUBGROUP_FEATURE_BASIC_BIT | VK_SUBGROUP_FEATURE_VOTE_BIT | VK_SUBGROUP_FEATURE_ARITHMETIC_BIT | VK_SUBGROUP_FEATURE_BALLOT_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT);
626                 } break;
627                 default: break;
628             }
629     },
__anon3431b7520402() 630     [](VkBaseOutStructure* p) -> bool { (void)p;
631         bool ret = true;
632             switch (p->sType) {
633                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: {
634                     VkPhysicalDeviceProperties2KHR* s = static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p));
635                     ret = ret && (s->properties.limits.maxColorAttachments >= 8);
636                     ret = ret && (s->properties.limits.maxPerStageDescriptorSampledImages >= 128);
637                     ret = ret && (s->properties.limits.maxPerStageDescriptorSamplers >= 128);
638                     ret = ret && (s->properties.limits.maxPerStageDescriptorStorageBuffers >= 12);
639                     ret = ret && (s->properties.limits.maxPerStageDescriptorUniformBuffers >= 13);
640                 } break;
641                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: {
642                     VkPhysicalDeviceVulkan11Properties* s = static_cast<VkPhysicalDeviceVulkan11Properties*>(static_cast<void*>(p));
643                     ret = ret && (vpCheckFlags(s->subgroupSupportedOperations, (VK_SUBGROUP_FEATURE_BASIC_BIT | VK_SUBGROUP_FEATURE_VOTE_BIT | VK_SUBGROUP_FEATURE_ARITHMETIC_BIT | VK_SUBGROUP_FEATURE_BALLOT_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT)));
644                 } break;
645                 default: break;
646             }
647         return ret;
648     }
649 };
650 
651 static const VpFormatDesc formatDesc[] = {
652     {
653         VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT,
__anon3431b7520502() 654         [](VkBaseOutStructure* p) { (void)p;
655             switch (p->sType) {
656                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
657                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
658                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
659                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
660                 } break;
661                 default: break;
662             }
663         },
__anon3431b7520602() 664         [](VkBaseOutStructure* p) -> bool { (void)p;
665             bool ret = true;
666             switch (p->sType) {
667                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
668                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
669                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
670                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
671                 } break;
672                 default: break;
673             }
674             return ret;
675         }
676     },
677     {
678         VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT,
__anon3431b7520702() 679         [](VkBaseOutStructure* p) { (void)p;
680             switch (p->sType) {
681                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
682                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
683                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
684                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
685                 } break;
686                 default: break;
687             }
688         },
__anon3431b7520802() 689         [](VkBaseOutStructure* p) -> bool { (void)p;
690             bool ret = true;
691             switch (p->sType) {
692                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
693                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
694                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
695                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
696                 } break;
697                 default: break;
698             }
699             return ret;
700         }
701     },
702 };
703 
704 static const VpStructChainerDesc chainerDesc = {
__anon3431b7520902() 705     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
706         VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, nullptr };
707         VkPhysicalDeviceCustomBorderColorFeaturesEXT physicalDeviceCustomBorderColorFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, &physicalDeviceVulkan12Features };
708         VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT physicalDevicePrimitiveTopologyListRestartFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, &physicalDeviceCustomBorderColorFeaturesEXT };
709         VkPhysicalDeviceProvokingVertexFeaturesEXT physicalDeviceProvokingVertexFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, &physicalDevicePrimitiveTopologyListRestartFeaturesEXT };
710         VkPhysicalDeviceIndexTypeUint8FeaturesEXT physicalDeviceIndexTypeUint8FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, &physicalDeviceProvokingVertexFeaturesEXT };
711         VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR physicalDeviceVertexAttributeDivisorFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR, &physicalDeviceIndexTypeUint8FeaturesEXT };
712         VkPhysicalDeviceSamplerYcbcrConversionFeatures physicalDeviceSamplerYcbcrConversionFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, &physicalDeviceVertexAttributeDivisorFeaturesKHR };
713         VkPhysicalDeviceShaderFloat16Int8Features physicalDeviceShaderFloat16Int8Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, &physicalDeviceSamplerYcbcrConversionFeatures };
714         VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, &physicalDeviceShaderFloat16Int8Features };
715         VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, &physicalDeviceShaderSubgroupExtendedTypesFeatures };
716         VkPhysicalDevice16BitStorageFeatures physicalDevice16BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, &physicalDevice8BitStorageFeatures };
717         VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT physicalDevicePrimitivesGeneratedQueryFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, &physicalDevice16BitStorageFeatures };
718         VkPhysicalDeviceLineRasterizationFeaturesEXT physicalDeviceLineRasterizationFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, &physicalDevicePrimitivesGeneratedQueryFeaturesEXT };
719         VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG physicalDeviceRelaxedLineRasterizationFeaturesIMG{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG, &physicalDeviceLineRasterizationFeaturesEXT };
720         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceRelaxedLineRasterizationFeaturesIMG));
721         pfnCb(p, pUser);
722     },
__anon3431b7520a02() 723     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
724         VkPhysicalDeviceVulkan11Properties physicalDeviceVulkan11Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, nullptr };
725         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceVulkan11Properties));
726         pfnCb(p, pUser);
727     },
__anon3431b7520b02() 728     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
729         pfnCb(count, p, pUser);
730     },
__anon3431b7520c02() 731     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
732         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
733         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
734         pfnCb(p, pUser);
735     },
736 };
737 } // namespace MUST
738 namespace primitivesGeneratedQuery {
739 
740 static const VkExtensionProperties deviceExtensions[] = {
741     VkExtensionProperties{ VK_EXT_PRIMITIVES_GENERATED_QUERY_EXTENSION_NAME, 1 },
742 };
743 
744 static const VpFeatureDesc featureDesc = {
__anon3431b7520d02() 745     [](VkBaseOutStructure* p) { (void)p;
746             switch (p->sType) {
747                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: {
748                     VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* s = static_cast<VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT*>(static_cast<void*>(p));
749                     s->primitivesGeneratedQuery = VK_TRUE;
750                 } break;
751                 default: break;
752             }
753     },
__anon3431b7520e02() 754     [](VkBaseOutStructure* p) -> bool { (void)p;
755         bool ret = true;
756             switch (p->sType) {
757                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: {
758                     VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* s = static_cast<VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT*>(static_cast<void*>(p));
759                     ret = ret && (s->primitivesGeneratedQuery == VK_TRUE);
760                 } break;
761                 default: break;
762             }
763         return ret;
764     }
765 };
766 
767 static const VpPropertyDesc propertyDesc = {
__anon3431b7520f02() 768     [](VkBaseOutStructure* p) { (void)p;
769     },
__anon3431b7521002() 770     [](VkBaseOutStructure* p) -> bool { (void)p;
771         bool ret = true;
772         return ret;
773     }
774 };
775 
776 static const VpStructChainerDesc chainerDesc = {
__anon3431b7521102() 777     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
778         VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, nullptr };
779         VkPhysicalDeviceCustomBorderColorFeaturesEXT physicalDeviceCustomBorderColorFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, &physicalDeviceVulkan12Features };
780         VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT physicalDevicePrimitiveTopologyListRestartFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, &physicalDeviceCustomBorderColorFeaturesEXT };
781         VkPhysicalDeviceProvokingVertexFeaturesEXT physicalDeviceProvokingVertexFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, &physicalDevicePrimitiveTopologyListRestartFeaturesEXT };
782         VkPhysicalDeviceIndexTypeUint8FeaturesEXT physicalDeviceIndexTypeUint8FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, &physicalDeviceProvokingVertexFeaturesEXT };
783         VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR physicalDeviceVertexAttributeDivisorFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR, &physicalDeviceIndexTypeUint8FeaturesEXT };
784         VkPhysicalDeviceSamplerYcbcrConversionFeatures physicalDeviceSamplerYcbcrConversionFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, &physicalDeviceVertexAttributeDivisorFeaturesKHR };
785         VkPhysicalDeviceShaderFloat16Int8Features physicalDeviceShaderFloat16Int8Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, &physicalDeviceSamplerYcbcrConversionFeatures };
786         VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, &physicalDeviceShaderFloat16Int8Features };
787         VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, &physicalDeviceShaderSubgroupExtendedTypesFeatures };
788         VkPhysicalDevice16BitStorageFeatures physicalDevice16BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, &physicalDevice8BitStorageFeatures };
789         VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT physicalDevicePrimitivesGeneratedQueryFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, &physicalDevice16BitStorageFeatures };
790         VkPhysicalDeviceLineRasterizationFeaturesEXT physicalDeviceLineRasterizationFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, &physicalDevicePrimitivesGeneratedQueryFeaturesEXT };
791         VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG physicalDeviceRelaxedLineRasterizationFeaturesIMG{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG, &physicalDeviceLineRasterizationFeaturesEXT };
792         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceRelaxedLineRasterizationFeaturesIMG));
793         pfnCb(p, pUser);
794     },
__anon3431b7521202() 795     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
796         VkPhysicalDeviceVulkan11Properties physicalDeviceVulkan11Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, nullptr };
797         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceVulkan11Properties));
798         pfnCb(p, pUser);
799     },
__anon3431b7521302() 800     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
801         pfnCb(count, p, pUser);
802     },
__anon3431b7521402() 803     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
804         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
805         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
806         pfnCb(p, pUser);
807     },
808 };
809 } // namespace primitivesGeneratedQuery
810 namespace pipelineStatisticsQuery {
811 
812 static const VpFeatureDesc featureDesc = {
__anon3431b7521502() 813     [](VkBaseOutStructure* p) { (void)p;
814             switch (p->sType) {
815                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
816                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
817                     s->features.pipelineStatisticsQuery = VK_TRUE;
818                 } break;
819                 default: break;
820             }
821     },
__anon3431b7521602() 822     [](VkBaseOutStructure* p) -> bool { (void)p;
823         bool ret = true;
824             switch (p->sType) {
825                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
826                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
827                     ret = ret && (s->features.pipelineStatisticsQuery == VK_TRUE);
828                 } break;
829                 default: break;
830             }
831         return ret;
832     }
833 };
834 
835 static const VpPropertyDesc propertyDesc = {
__anon3431b7521702() 836     [](VkBaseOutStructure* p) { (void)p;
837     },
__anon3431b7521802() 838     [](VkBaseOutStructure* p) -> bool { (void)p;
839         bool ret = true;
840         return ret;
841     }
842 };
843 
844 static const VpStructChainerDesc chainerDesc = {
__anon3431b7521902() 845     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
846         VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, nullptr };
847         VkPhysicalDeviceCustomBorderColorFeaturesEXT physicalDeviceCustomBorderColorFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, &physicalDeviceVulkan12Features };
848         VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT physicalDevicePrimitiveTopologyListRestartFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, &physicalDeviceCustomBorderColorFeaturesEXT };
849         VkPhysicalDeviceProvokingVertexFeaturesEXT physicalDeviceProvokingVertexFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, &physicalDevicePrimitiveTopologyListRestartFeaturesEXT };
850         VkPhysicalDeviceIndexTypeUint8FeaturesEXT physicalDeviceIndexTypeUint8FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, &physicalDeviceProvokingVertexFeaturesEXT };
851         VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR physicalDeviceVertexAttributeDivisorFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR, &physicalDeviceIndexTypeUint8FeaturesEXT };
852         VkPhysicalDeviceSamplerYcbcrConversionFeatures physicalDeviceSamplerYcbcrConversionFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, &physicalDeviceVertexAttributeDivisorFeaturesKHR };
853         VkPhysicalDeviceShaderFloat16Int8Features physicalDeviceShaderFloat16Int8Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, &physicalDeviceSamplerYcbcrConversionFeatures };
854         VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, &physicalDeviceShaderFloat16Int8Features };
855         VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, &physicalDeviceShaderSubgroupExtendedTypesFeatures };
856         VkPhysicalDevice16BitStorageFeatures physicalDevice16BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, &physicalDevice8BitStorageFeatures };
857         VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT physicalDevicePrimitivesGeneratedQueryFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, &physicalDevice16BitStorageFeatures };
858         VkPhysicalDeviceLineRasterizationFeaturesEXT physicalDeviceLineRasterizationFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, &physicalDevicePrimitivesGeneratedQueryFeaturesEXT };
859         VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG physicalDeviceRelaxedLineRasterizationFeaturesIMG{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG, &physicalDeviceLineRasterizationFeaturesEXT };
860         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceRelaxedLineRasterizationFeaturesIMG));
861         pfnCb(p, pUser);
862     },
__anon3431b7521a02() 863     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
864         VkPhysicalDeviceVulkan11Properties physicalDeviceVulkan11Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, nullptr };
865         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceVulkan11Properties));
866         pfnCb(p, pUser);
867     },
__anon3431b7521b02() 868     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
869         pfnCb(count, p, pUser);
870     },
__anon3431b7521c02() 871     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
872         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
873         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
874         pfnCb(p, pUser);
875     },
876 };
877 } // namespace pipelineStatisticsQuery
878 namespace swBresenhamLines {
879 
880 static const VkExtensionProperties deviceExtensions[] = {
881     VkExtensionProperties{ VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, 1 },
882 };
883 
884 static const VpFeatureDesc featureDesc = {
__anon3431b7521d02() 885     [](VkBaseOutStructure* p) { (void)p;
886             switch (p->sType) {
887                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: {
888                     VkPhysicalDeviceLineRasterizationFeaturesEXT* s = static_cast<VkPhysicalDeviceLineRasterizationFeaturesEXT*>(static_cast<void*>(p));
889                     s->bresenhamLines = VK_TRUE;
890                 } break;
891                 default: break;
892             }
893     },
__anon3431b7521e02() 894     [](VkBaseOutStructure* p) -> bool { (void)p;
895         bool ret = true;
896             switch (p->sType) {
897                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT: {
898                     VkPhysicalDeviceLineRasterizationFeaturesEXT* s = static_cast<VkPhysicalDeviceLineRasterizationFeaturesEXT*>(static_cast<void*>(p));
899                     ret = ret && (s->bresenhamLines == VK_TRUE);
900                 } break;
901                 default: break;
902             }
903         return ret;
904     }
905 };
906 
907 static const VpPropertyDesc propertyDesc = {
__anon3431b7521f02() 908     [](VkBaseOutStructure* p) { (void)p;
909     },
__anon3431b7522002() 910     [](VkBaseOutStructure* p) -> bool { (void)p;
911         bool ret = true;
912         return ret;
913     }
914 };
915 
916 static const VpStructChainerDesc chainerDesc = {
__anon3431b7522102() 917     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
918         VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, nullptr };
919         VkPhysicalDeviceCustomBorderColorFeaturesEXT physicalDeviceCustomBorderColorFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, &physicalDeviceVulkan12Features };
920         VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT physicalDevicePrimitiveTopologyListRestartFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, &physicalDeviceCustomBorderColorFeaturesEXT };
921         VkPhysicalDeviceProvokingVertexFeaturesEXT physicalDeviceProvokingVertexFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, &physicalDevicePrimitiveTopologyListRestartFeaturesEXT };
922         VkPhysicalDeviceIndexTypeUint8FeaturesEXT physicalDeviceIndexTypeUint8FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, &physicalDeviceProvokingVertexFeaturesEXT };
923         VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR physicalDeviceVertexAttributeDivisorFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR, &physicalDeviceIndexTypeUint8FeaturesEXT };
924         VkPhysicalDeviceSamplerYcbcrConversionFeatures physicalDeviceSamplerYcbcrConversionFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, &physicalDeviceVertexAttributeDivisorFeaturesKHR };
925         VkPhysicalDeviceShaderFloat16Int8Features physicalDeviceShaderFloat16Int8Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, &physicalDeviceSamplerYcbcrConversionFeatures };
926         VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, &physicalDeviceShaderFloat16Int8Features };
927         VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, &physicalDeviceShaderSubgroupExtendedTypesFeatures };
928         VkPhysicalDevice16BitStorageFeatures physicalDevice16BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, &physicalDevice8BitStorageFeatures };
929         VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT physicalDevicePrimitivesGeneratedQueryFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, &physicalDevice16BitStorageFeatures };
930         VkPhysicalDeviceLineRasterizationFeaturesEXT physicalDeviceLineRasterizationFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, &physicalDevicePrimitivesGeneratedQueryFeaturesEXT };
931         VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG physicalDeviceRelaxedLineRasterizationFeaturesIMG{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG, &physicalDeviceLineRasterizationFeaturesEXT };
932         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceRelaxedLineRasterizationFeaturesIMG));
933         pfnCb(p, pUser);
934     },
__anon3431b7522202() 935     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
936         VkPhysicalDeviceVulkan11Properties physicalDeviceVulkan11Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, nullptr };
937         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceVulkan11Properties));
938         pfnCb(p, pUser);
939     },
__anon3431b7522302() 940     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
941         pfnCb(count, p, pUser);
942     },
__anon3431b7522402() 943     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
944         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
945         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
946         pfnCb(p, pUser);
947     },
948 };
949 } // namespace swBresenhamLines
950 namespace hwBresenhamLines {
951 
952 static const VkExtensionProperties deviceExtensions[] = {
953     VkExtensionProperties{ VK_IMG_RELAXED_LINE_RASTERIZATION_EXTENSION_NAME, 1 },
954 };
955 
956 static const VpFeatureDesc featureDesc = {
__anon3431b7522502() 957     [](VkBaseOutStructure* p) { (void)p;
958             switch (p->sType) {
959                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG: {
960                     VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* s = static_cast<VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG*>(static_cast<void*>(p));
961                     s->relaxedLineRasterization = VK_TRUE;
962                 } break;
963                 default: break;
964             }
965     },
__anon3431b7522602() 966     [](VkBaseOutStructure* p) -> bool { (void)p;
967         bool ret = true;
968             switch (p->sType) {
969                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG: {
970                     VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* s = static_cast<VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG*>(static_cast<void*>(p));
971                     ret = ret && (s->relaxedLineRasterization == VK_TRUE);
972                 } break;
973                 default: break;
974             }
975         return ret;
976     }
977 };
978 
979 static const VpPropertyDesc propertyDesc = {
__anon3431b7522702() 980     [](VkBaseOutStructure* p) { (void)p;
981     },
__anon3431b7522802() 982     [](VkBaseOutStructure* p) -> bool { (void)p;
983         bool ret = true;
984         return ret;
985     }
986 };
987 
988 static const VpStructChainerDesc chainerDesc = {
__anon3431b7522902() 989     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
990         VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, nullptr };
991         VkPhysicalDeviceCustomBorderColorFeaturesEXT physicalDeviceCustomBorderColorFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, &physicalDeviceVulkan12Features };
992         VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT physicalDevicePrimitiveTopologyListRestartFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, &physicalDeviceCustomBorderColorFeaturesEXT };
993         VkPhysicalDeviceProvokingVertexFeaturesEXT physicalDeviceProvokingVertexFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, &physicalDevicePrimitiveTopologyListRestartFeaturesEXT };
994         VkPhysicalDeviceIndexTypeUint8FeaturesEXT physicalDeviceIndexTypeUint8FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, &physicalDeviceProvokingVertexFeaturesEXT };
995         VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR physicalDeviceVertexAttributeDivisorFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR, &physicalDeviceIndexTypeUint8FeaturesEXT };
996         VkPhysicalDeviceSamplerYcbcrConversionFeatures physicalDeviceSamplerYcbcrConversionFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, &physicalDeviceVertexAttributeDivisorFeaturesKHR };
997         VkPhysicalDeviceShaderFloat16Int8Features physicalDeviceShaderFloat16Int8Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, &physicalDeviceSamplerYcbcrConversionFeatures };
998         VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, &physicalDeviceShaderFloat16Int8Features };
999         VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, &physicalDeviceShaderSubgroupExtendedTypesFeatures };
1000         VkPhysicalDevice16BitStorageFeatures physicalDevice16BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, &physicalDevice8BitStorageFeatures };
1001         VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT physicalDevicePrimitivesGeneratedQueryFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, &physicalDevice16BitStorageFeatures };
1002         VkPhysicalDeviceLineRasterizationFeaturesEXT physicalDeviceLineRasterizationFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, &physicalDevicePrimitivesGeneratedQueryFeaturesEXT };
1003         VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG physicalDeviceRelaxedLineRasterizationFeaturesIMG{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG, &physicalDeviceLineRasterizationFeaturesEXT };
1004         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceRelaxedLineRasterizationFeaturesIMG));
1005         pfnCb(p, pUser);
1006     },
__anon3431b7522a02() 1007     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1008         VkPhysicalDeviceVulkan11Properties physicalDeviceVulkan11Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, nullptr };
1009         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceVulkan11Properties));
1010         pfnCb(p, pUser);
1011     },
__anon3431b7522b02() 1012     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
1013         pfnCb(count, p, pUser);
1014     },
__anon3431b7522c02() 1015     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1016         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
1017         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
1018         pfnCb(p, pUser);
1019     },
1020 };
1021 } // namespace hwBresenhamLines
1022 } // namespace blocks
1023 } // namespace VP_ANDROID_15_MINIMUMS
1024 #endif // VP_ANDROID_15_minimums
1025 
1026 #ifdef VP_ANDROID_16_minimums
1027 namespace VP_ANDROID_16_MINIMUMS {
1028 
1029 static const VkStructureType featureStructTypes[] = {
1030     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
1031     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
1032     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES,
1033     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES,
1034     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT,
1035     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT,
1036     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR,
1037 };
1038 
1039 static const VkStructureType propertyStructTypes[] = {
1040     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR,
1041     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES,
1042     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES,
1043 };
1044 
1045 namespace blocks {
1046 namespace MUST {
1047 
1048 static const VkExtensionProperties deviceExtensions[] = {
1049     VkExtensionProperties{ VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME, 1 },
1050     VkExtensionProperties{ VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME, 1 },
1051     VkExtensionProperties{ VK_EXT_PIPELINE_PROTECTED_ACCESS_EXTENSION_NAME, 1 },
1052     VkExtensionProperties{ VK_EXT_PIPELINE_ROBUSTNESS_EXTENSION_NAME, 1 },
1053     VkExtensionProperties{ VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, 1 },
1054     VkExtensionProperties{ VK_KHR_8BIT_STORAGE_EXTENSION_NAME, 1 },
1055     VkExtensionProperties{ VK_KHR_LOAD_STORE_OP_NONE_EXTENSION_NAME, 1 },
1056     VkExtensionProperties{ VK_KHR_MAINTENANCE_6_EXTENSION_NAME, 1 },
1057     VkExtensionProperties{ VK_KHR_MAP_MEMORY_2_EXTENSION_NAME, 1 },
1058     VkExtensionProperties{ VK_KHR_SHADER_EXPECT_ASSUME_EXTENSION_NAME, 1 },
1059     VkExtensionProperties{ VK_KHR_SHADER_FLOAT_CONTROLS_2_EXTENSION_NAME, 1 },
1060     VkExtensionProperties{ VK_KHR_SHADER_MAXIMAL_RECONVERGENCE_EXTENSION_NAME, 1 },
1061     VkExtensionProperties{ VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME, 1 },
1062     VkExtensionProperties{ VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME, 1 },
1063     VkExtensionProperties{ VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME, 1 },
1064 };
1065 
1066 static const VpFeatureDesc featureDesc = {
__anon3431b7522d02() 1067     [](VkBaseOutStructure* p) { (void)p;
1068             switch (p->sType) {
1069                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
1070                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
1071                     s->features.fullDrawIndexUint32 = VK_TRUE;
1072                     s->features.shaderInt16 = VK_TRUE;
1073                 } break;
1074                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: {
1075                     VkPhysicalDeviceVulkan12Features* s = static_cast<VkPhysicalDeviceVulkan12Features*>(static_cast<void*>(p));
1076                     s->samplerMirrorClampToEdge = VK_TRUE;
1077                     s->scalarBlockLayout = VK_TRUE;
1078                 } break;
1079                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: {
1080                     VkPhysicalDeviceProtectedMemoryFeatures* s = static_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(static_cast<void*>(p));
1081                     s->protectedMemory = VK_TRUE;
1082                 } break;
1083                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: {
1084                     VkPhysicalDeviceShaderIntegerDotProductFeatures* s = static_cast<VkPhysicalDeviceShaderIntegerDotProductFeatures*>(static_cast<void*>(p));
1085                     s->shaderIntegerDotProduct = VK_TRUE;
1086                 } break;
1087                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: {
1088                     VkPhysicalDeviceTransformFeedbackFeaturesEXT* s = static_cast<VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(static_cast<void*>(p));
1089                     s->transformFeedback = VK_TRUE;
1090                 } break;
1091                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: {
1092                     VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* s = static_cast<VkPhysicalDeviceImage2DViewOf3DFeaturesEXT*>(static_cast<void*>(p));
1093                     s->image2DViewOf3D = VK_TRUE;
1094                 } break;
1095                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR: {
1096                     VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* s = static_cast<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR*>(static_cast<void*>(p));
1097                     s->shaderSubgroupUniformControlFlow = VK_TRUE;
1098                 } break;
1099                 default: break;
1100             }
1101     },
__anon3431b7522e02() 1102     [](VkBaseOutStructure* p) -> bool { (void)p;
1103         bool ret = true;
1104             switch (p->sType) {
1105                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
1106                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
1107                     ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE);
1108                     ret = ret && (s->features.shaderInt16 == VK_TRUE);
1109                 } break;
1110                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: {
1111                     VkPhysicalDeviceVulkan12Features* s = static_cast<VkPhysicalDeviceVulkan12Features*>(static_cast<void*>(p));
1112                     ret = ret && (s->samplerMirrorClampToEdge == VK_TRUE);
1113                     ret = ret && (s->scalarBlockLayout == VK_TRUE);
1114                 } break;
1115                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: {
1116                     VkPhysicalDeviceProtectedMemoryFeatures* s = static_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(static_cast<void*>(p));
1117                     ret = ret && (s->protectedMemory == VK_TRUE);
1118                 } break;
1119                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: {
1120                     VkPhysicalDeviceShaderIntegerDotProductFeatures* s = static_cast<VkPhysicalDeviceShaderIntegerDotProductFeatures*>(static_cast<void*>(p));
1121                     ret = ret && (s->shaderIntegerDotProduct == VK_TRUE);
1122                 } break;
1123                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: {
1124                     VkPhysicalDeviceTransformFeedbackFeaturesEXT* s = static_cast<VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(static_cast<void*>(p));
1125                     ret = ret && (s->transformFeedback == VK_TRUE);
1126                 } break;
1127                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: {
1128                     VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* s = static_cast<VkPhysicalDeviceImage2DViewOf3DFeaturesEXT*>(static_cast<void*>(p));
1129                     ret = ret && (s->image2DViewOf3D == VK_TRUE);
1130                 } break;
1131                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR: {
1132                     VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* s = static_cast<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR*>(static_cast<void*>(p));
1133                     ret = ret && (s->shaderSubgroupUniformControlFlow == VK_TRUE);
1134                 } break;
1135                 default: break;
1136             }
1137         return ret;
1138     }
1139 };
1140 
1141 static const VpPropertyDesc propertyDesc = {
__anon3431b7522f02() 1142     [](VkBaseOutStructure* p) { (void)p;
1143             switch (p->sType) {
1144                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: {
1145                     VkPhysicalDeviceProperties2KHR* s = static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p));
1146                     s->properties.limits.bufferImageGranularity = 4096;
1147                     s->properties.limits.lineWidthGranularity = 0.5f;
1148                     s->properties.limits.maxColorAttachments = 8;
1149                     s->properties.limits.maxComputeWorkGroupInvocations = 256;
1150                     s->properties.limits.maxComputeWorkGroupSize[0] = 256;
1151                     s->properties.limits.maxComputeWorkGroupSize[1] = 256;
1152                     s->properties.limits.maxComputeWorkGroupSize[2] = 64;
1153                     s->properties.limits.maxDescriptorSetStorageBuffers = 96;
1154                     s->properties.limits.maxDescriptorSetUniformBuffers = 90;
1155                     s->properties.limits.maxFragmentCombinedOutputResources = 16;
1156                     s->properties.limits.maxImageArrayLayers = 2048;
1157                     s->properties.limits.maxImageDimension1D = 8192;
1158                     s->properties.limits.maxImageDimension2D = 8192;
1159                     s->properties.limits.maxImageDimensionCube = 8192;
1160                     s->properties.limits.maxPerStageDescriptorUniformBuffers = 15;
1161                     s->properties.limits.maxPerStageResources = 200;
1162                     s->properties.limits.maxSamplerLodBias = 14;
1163                     s->properties.limits.maxUniformBufferRange = 65536;
1164                     s->properties.limits.maxVertexOutputComponents = 72;
1165                     s->properties.limits.mipmapPrecisionBits = 6;
1166                     s->properties.limits.pointSizeGranularity = 0.125f;
1167                     s->properties.limits.standardSampleLocations = VK_TRUE;
1168                     s->properties.limits.subTexelPrecisionBits = 8;
1169                     s->properties.limits.timestampComputeAndGraphics = VK_TRUE;
1170                 } break;
1171                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES: {
1172                     VkPhysicalDeviceFloatControlsProperties* s = static_cast<VkPhysicalDeviceFloatControlsProperties*>(static_cast<void*>(p));
1173                     s->shaderSignedZeroInfNanPreserveFloat16 = VK_TRUE;
1174                     s->shaderSignedZeroInfNanPreserveFloat32 = VK_TRUE;
1175                 } break;
1176                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: {
1177                     VkPhysicalDeviceVulkan11Properties* s = static_cast<VkPhysicalDeviceVulkan11Properties*>(static_cast<void*>(p));
1178                     s->subgroupSupportedStages |= (VK_SHADER_STAGE_COMPUTE_BIT);
1179                 } break;
1180                 default: break;
1181             }
1182     },
__anon3431b7523002() 1183     [](VkBaseOutStructure* p) -> bool { (void)p;
1184         bool ret = true;
1185             switch (p->sType) {
1186                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: {
1187                     VkPhysicalDeviceProperties2KHR* s = static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p));
1188                     ret = ret && (s->properties.limits.bufferImageGranularity <= 4096);
1189                     ret = ret && ((4096 % s->properties.limits.bufferImageGranularity) == 0);
1190                     ret = ret && (s->properties.limits.lineWidthGranularity <= 0.5);
1191                     ret = ret && (isMultiple(0.5, s->properties.limits.lineWidthGranularity));
1192                     ret = ret && (s->properties.limits.maxColorAttachments >= 8);
1193                     ret = ret && (s->properties.limits.maxComputeWorkGroupInvocations >= 256);
1194                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[0] >= 256);
1195                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[1] >= 256);
1196                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[2] >= 64);
1197                     ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffers >= 96);
1198                     ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffers >= 90);
1199                     ret = ret && (s->properties.limits.maxFragmentCombinedOutputResources >= 16);
1200                     ret = ret && (s->properties.limits.maxImageArrayLayers >= 2048);
1201                     ret = ret && (s->properties.limits.maxImageDimension1D >= 8192);
1202                     ret = ret && (s->properties.limits.maxImageDimension2D >= 8192);
1203                     ret = ret && (s->properties.limits.maxImageDimensionCube >= 8192);
1204                     ret = ret && (s->properties.limits.maxPerStageDescriptorUniformBuffers >= 15);
1205                     ret = ret && (s->properties.limits.maxPerStageResources >= 200);
1206                     ret = ret && (s->properties.limits.maxSamplerLodBias >= 14);
1207                     ret = ret && (s->properties.limits.maxUniformBufferRange >= 65536);
1208                     ret = ret && (s->properties.limits.maxVertexOutputComponents >= 72);
1209                     ret = ret && (s->properties.limits.mipmapPrecisionBits >= 6);
1210                     ret = ret && (s->properties.limits.pointSizeGranularity <= 0.125);
1211                     ret = ret && (isMultiple(0.125, s->properties.limits.pointSizeGranularity));
1212                     ret = ret && (s->properties.limits.standardSampleLocations == VK_TRUE);
1213                     ret = ret && (s->properties.limits.subTexelPrecisionBits >= 8);
1214                     ret = ret && (vpCheckFlags(s->properties.limits.timestampComputeAndGraphics, VK_TRUE));
1215                 } break;
1216                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES: {
1217                     VkPhysicalDeviceFloatControlsProperties* s = static_cast<VkPhysicalDeviceFloatControlsProperties*>(static_cast<void*>(p));
1218                     ret = ret && (vpCheckFlags(s->shaderSignedZeroInfNanPreserveFloat16, VK_TRUE));
1219                     ret = ret && (vpCheckFlags(s->shaderSignedZeroInfNanPreserveFloat32, VK_TRUE));
1220                 } break;
1221                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES: {
1222                     VkPhysicalDeviceVulkan11Properties* s = static_cast<VkPhysicalDeviceVulkan11Properties*>(static_cast<void*>(p));
1223                     ret = ret && (vpCheckFlags(s->subgroupSupportedStages, (VK_SHADER_STAGE_COMPUTE_BIT)));
1224                 } break;
1225                 default: break;
1226             }
1227         return ret;
1228     }
1229 };
1230 
1231 static const VpStructChainerDesc chainerDesc = {
__anon3431b7523102() 1232     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1233         VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, nullptr };
1234         VkPhysicalDeviceProtectedMemoryFeatures physicalDeviceProtectedMemoryFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, &physicalDeviceVulkan12Features };
1235         VkPhysicalDeviceShaderIntegerDotProductFeatures physicalDeviceShaderIntegerDotProductFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, &physicalDeviceProtectedMemoryFeatures };
1236         VkPhysicalDeviceTransformFeedbackFeaturesEXT physicalDeviceTransformFeedbackFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, &physicalDeviceShaderIntegerDotProductFeatures };
1237         VkPhysicalDeviceImage2DViewOf3DFeaturesEXT physicalDeviceImage2DViewOf3DFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, &physicalDeviceTransformFeedbackFeaturesEXT };
1238         VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR, &physicalDeviceImage2DViewOf3DFeaturesEXT };
1239         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR));
1240         pfnCb(p, pUser);
1241     },
__anon3431b7523202() 1242     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1243         VkPhysicalDeviceFloatControlsProperties physicalDeviceFloatControlsProperties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, nullptr };
1244         VkPhysicalDeviceVulkan11Properties physicalDeviceVulkan11Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, &physicalDeviceFloatControlsProperties };
1245         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceVulkan11Properties));
1246         pfnCb(p, pUser);
1247     },
__anon3431b7523302() 1248     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
1249         pfnCb(count, p, pUser);
1250     },
__anon3431b7523402() 1251     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1252         pfnCb(p, pUser);
1253     },
1254 };
1255 } // namespace MUST
1256 namespace multisampledToSingleSampled {
1257 
1258 static const VkExtensionProperties deviceExtensions[] = {
1259     VkExtensionProperties{ VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_EXTENSION_NAME, 1 },
1260 };
1261 
1262 static const VpFeatureDesc featureDesc = {
__anon3431b7523502() 1263     [](VkBaseOutStructure* p) { (void)p;
1264     },
__anon3431b7523602() 1265     [](VkBaseOutStructure* p) -> bool { (void)p;
1266         bool ret = true;
1267         return ret;
1268     }
1269 };
1270 
1271 static const VpPropertyDesc propertyDesc = {
__anon3431b7523702() 1272     [](VkBaseOutStructure* p) { (void)p;
1273     },
__anon3431b7523802() 1274     [](VkBaseOutStructure* p) -> bool { (void)p;
1275         bool ret = true;
1276         return ret;
1277     }
1278 };
1279 
1280 static const VpStructChainerDesc chainerDesc = {
__anon3431b7523902() 1281     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1282         VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, nullptr };
1283         VkPhysicalDeviceProtectedMemoryFeatures physicalDeviceProtectedMemoryFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, &physicalDeviceVulkan12Features };
1284         VkPhysicalDeviceShaderIntegerDotProductFeatures physicalDeviceShaderIntegerDotProductFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, &physicalDeviceProtectedMemoryFeatures };
1285         VkPhysicalDeviceTransformFeedbackFeaturesEXT physicalDeviceTransformFeedbackFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, &physicalDeviceShaderIntegerDotProductFeatures };
1286         VkPhysicalDeviceImage2DViewOf3DFeaturesEXT physicalDeviceImage2DViewOf3DFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, &physicalDeviceTransformFeedbackFeaturesEXT };
1287         VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR, &physicalDeviceImage2DViewOf3DFeaturesEXT };
1288         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR));
1289         pfnCb(p, pUser);
1290     },
__anon3431b7523a02() 1291     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1292         VkPhysicalDeviceFloatControlsProperties physicalDeviceFloatControlsProperties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, nullptr };
1293         VkPhysicalDeviceVulkan11Properties physicalDeviceVulkan11Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, &physicalDeviceFloatControlsProperties };
1294         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceVulkan11Properties));
1295         pfnCb(p, pUser);
1296     },
__anon3431b7523b02() 1297     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
1298         pfnCb(count, p, pUser);
1299     },
__anon3431b7523c02() 1300     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1301         pfnCb(p, pUser);
1302     },
1303 };
1304 } // namespace multisampledToSingleSampled
1305 namespace shaderStencilExport {
1306 
1307 static const VkExtensionProperties deviceExtensions[] = {
1308     VkExtensionProperties{ VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, 1 },
1309 };
1310 
1311 static const VpFeatureDesc featureDesc = {
__anon3431b7523d02() 1312     [](VkBaseOutStructure* p) { (void)p;
1313     },
__anon3431b7523e02() 1314     [](VkBaseOutStructure* p) -> bool { (void)p;
1315         bool ret = true;
1316         return ret;
1317     }
1318 };
1319 
1320 static const VpPropertyDesc propertyDesc = {
__anon3431b7523f02() 1321     [](VkBaseOutStructure* p) { (void)p;
1322     },
__anon3431b7524002() 1323     [](VkBaseOutStructure* p) -> bool { (void)p;
1324         bool ret = true;
1325         return ret;
1326     }
1327 };
1328 
1329 static const VpStructChainerDesc chainerDesc = {
__anon3431b7524102() 1330     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1331         VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, nullptr };
1332         VkPhysicalDeviceProtectedMemoryFeatures physicalDeviceProtectedMemoryFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, &physicalDeviceVulkan12Features };
1333         VkPhysicalDeviceShaderIntegerDotProductFeatures physicalDeviceShaderIntegerDotProductFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, &physicalDeviceProtectedMemoryFeatures };
1334         VkPhysicalDeviceTransformFeedbackFeaturesEXT physicalDeviceTransformFeedbackFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, &physicalDeviceShaderIntegerDotProductFeatures };
1335         VkPhysicalDeviceImage2DViewOf3DFeaturesEXT physicalDeviceImage2DViewOf3DFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, &physicalDeviceTransformFeedbackFeaturesEXT };
1336         VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR, &physicalDeviceImage2DViewOf3DFeaturesEXT };
1337         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR));
1338         pfnCb(p, pUser);
1339     },
__anon3431b7524202() 1340     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1341         VkPhysicalDeviceFloatControlsProperties physicalDeviceFloatControlsProperties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, nullptr };
1342         VkPhysicalDeviceVulkan11Properties physicalDeviceVulkan11Properties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES, &physicalDeviceFloatControlsProperties };
1343         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceVulkan11Properties));
1344         pfnCb(p, pUser);
1345     },
__anon3431b7524302() 1346     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
1347         pfnCb(count, p, pUser);
1348     },
__anon3431b7524402() 1349     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1350         pfnCb(p, pUser);
1351     },
1352 };
1353 } // namespace shaderStencilExport
1354 } // namespace blocks
1355 } // namespace VP_ANDROID_16_MINIMUMS
1356 #endif // VP_ANDROID_16_minimums
1357 
1358 #ifdef VP_ANDROID_baseline_2021
1359 namespace VP_ANDROID_BASELINE_2021 {
1360 
1361 static const VkStructureType featureStructTypes[] = {
1362     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
1363 };
1364 
1365 static const VkStructureType propertyStructTypes[] = {
1366     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR,
1367 };
1368 
1369 static const VkStructureType formatStructTypes[] = {
1370     VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR,
1371     VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR,
1372 };
1373 
1374 static const VkExtensionProperties instanceExtensions[] = {
1375     VkExtensionProperties{ VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, 1 },
1376     VkExtensionProperties{ VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, 1 },
1377     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, 1 },
1378     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, 1 },
1379     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, 1 },
1380     VkExtensionProperties{ VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 1 },
1381     VkExtensionProperties{ VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, 1 },
1382     VkExtensionProperties{ VK_KHR_SURFACE_EXTENSION_NAME, 1 },
1383 };
1384 
1385 static const VkExtensionProperties deviceExtensions[] = {
1386     VkExtensionProperties{ VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME, 1 },
1387     VkExtensionProperties{ VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, 1 },
1388     VkExtensionProperties{ VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, 1 },
1389     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, 1 },
1390     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME, 1 },
1391     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, 1 },
1392     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, 1 },
1393     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, 1 },
1394     VkExtensionProperties{ VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, 1 },
1395     VkExtensionProperties{ VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME, 1 },
1396     VkExtensionProperties{ VK_KHR_MAINTENANCE_1_EXTENSION_NAME, 1 },
1397     VkExtensionProperties{ VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, 1 },
1398     VkExtensionProperties{ VK_KHR_SWAPCHAIN_EXTENSION_NAME, 1 },
1399     VkExtensionProperties{ VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, 1 },
1400 };
1401 
1402 static const VpFeatureDesc featureDesc = {
__anon3431b7524502() 1403     [](VkBaseOutStructure* p) { (void)p;
1404             switch (p->sType) {
1405                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
1406                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
1407                     s->features.depthBiasClamp = VK_TRUE;
1408                     s->features.fragmentStoresAndAtomics = VK_TRUE;
1409                     s->features.fullDrawIndexUint32 = VK_TRUE;
1410                     s->features.imageCubeArray = VK_TRUE;
1411                     s->features.independentBlend = VK_TRUE;
1412                     s->features.robustBufferAccess = VK_TRUE;
1413                     s->features.sampleRateShading = VK_TRUE;
1414                     s->features.shaderSampledImageArrayDynamicIndexing = VK_TRUE;
1415                     s->features.shaderStorageImageArrayDynamicIndexing = VK_TRUE;
1416                     s->features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE;
1417                     s->features.textureCompressionASTC_LDR = VK_TRUE;
1418                     s->features.textureCompressionETC2 = VK_TRUE;
1419                 } break;
1420                 default: break;
1421             }
1422     },
__anon3431b7524602() 1423     [](VkBaseOutStructure* p) -> bool { (void)p;
1424         bool ret = true;
1425             switch (p->sType) {
1426                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
1427                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
1428                     ret = ret && (s->features.depthBiasClamp == VK_TRUE);
1429                     ret = ret && (s->features.fragmentStoresAndAtomics == VK_TRUE);
1430                     ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE);
1431                     ret = ret && (s->features.imageCubeArray == VK_TRUE);
1432                     ret = ret && (s->features.independentBlend == VK_TRUE);
1433                     ret = ret && (s->features.robustBufferAccess == VK_TRUE);
1434                     ret = ret && (s->features.sampleRateShading == VK_TRUE);
1435                     ret = ret && (s->features.shaderSampledImageArrayDynamicIndexing == VK_TRUE);
1436                     ret = ret && (s->features.shaderStorageImageArrayDynamicIndexing == VK_TRUE);
1437                     ret = ret && (s->features.shaderUniformBufferArrayDynamicIndexing == VK_TRUE);
1438                     ret = ret && (s->features.textureCompressionASTC_LDR == VK_TRUE);
1439                     ret = ret && (s->features.textureCompressionETC2 == VK_TRUE);
1440                 } break;
1441                 default: break;
1442             }
1443         return ret;
1444     }
1445 };
1446 
1447 static const VpPropertyDesc propertyDesc = {
__anon3431b7524702() 1448     [](VkBaseOutStructure* p) { (void)p;
1449     },
__anon3431b7524802() 1450     [](VkBaseOutStructure* p) -> bool { (void)p;
1451         bool ret = true;
1452         return ret;
1453     }
1454 };
1455 
1456 static const VpStructChainerDesc chainerDesc = {
__anon3431b7524902() 1457     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1458         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(nullptr));
1459         pfnCb(p, pUser);
1460     },
__anon3431b7524a02() 1461     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1462         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(nullptr));
1463         pfnCb(p, pUser);
1464     },
__anon3431b7524b02() 1465     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
1466         pfnCb(count, p, pUser);
1467     },
__anon3431b7524c02() 1468     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
1469         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
1470         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
1471         pfnCb(p, pUser);
1472     },
1473 };
1474 
1475 namespace blocks {
1476 namespace baseline {
1477 
1478 static const VkExtensionProperties instanceExtensions[] = {
1479     VkExtensionProperties{ VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, 1 },
1480     VkExtensionProperties{ VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, 1 },
1481     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, 1 },
1482     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, 1 },
1483     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, 1 },
1484     VkExtensionProperties{ VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 1 },
1485     VkExtensionProperties{ VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, 1 },
1486     VkExtensionProperties{ VK_KHR_SURFACE_EXTENSION_NAME, 1 },
1487 };
1488 
1489 static const VkExtensionProperties deviceExtensions[] = {
1490     VkExtensionProperties{ VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME, 1 },
1491     VkExtensionProperties{ VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, 1 },
1492     VkExtensionProperties{ VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, 1 },
1493     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, 1 },
1494     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME, 1 },
1495     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, 1 },
1496     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, 1 },
1497     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, 1 },
1498     VkExtensionProperties{ VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, 1 },
1499     VkExtensionProperties{ VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME, 1 },
1500     VkExtensionProperties{ VK_KHR_MAINTENANCE_1_EXTENSION_NAME, 1 },
1501     VkExtensionProperties{ VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, 1 },
1502     VkExtensionProperties{ VK_KHR_SWAPCHAIN_EXTENSION_NAME, 1 },
1503     VkExtensionProperties{ VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, 1 },
1504 };
1505 
1506 static const VpFeatureDesc featureDesc = {
__anon3431b7524d02() 1507     [](VkBaseOutStructure* p) { (void)p;
1508             switch (p->sType) {
1509                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
1510                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
1511                     s->features.depthBiasClamp = VK_TRUE;
1512                     s->features.fragmentStoresAndAtomics = VK_TRUE;
1513                     s->features.fullDrawIndexUint32 = VK_TRUE;
1514                     s->features.imageCubeArray = VK_TRUE;
1515                     s->features.independentBlend = VK_TRUE;
1516                     s->features.robustBufferAccess = VK_TRUE;
1517                     s->features.sampleRateShading = VK_TRUE;
1518                     s->features.shaderSampledImageArrayDynamicIndexing = VK_TRUE;
1519                     s->features.shaderStorageImageArrayDynamicIndexing = VK_TRUE;
1520                     s->features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE;
1521                     s->features.textureCompressionASTC_LDR = VK_TRUE;
1522                     s->features.textureCompressionETC2 = VK_TRUE;
1523                 } break;
1524                 default: break;
1525             }
1526     },
__anon3431b7524e02() 1527     [](VkBaseOutStructure* p) -> bool { (void)p;
1528         bool ret = true;
1529             switch (p->sType) {
1530                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
1531                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
1532                     ret = ret && (s->features.depthBiasClamp == VK_TRUE);
1533                     ret = ret && (s->features.fragmentStoresAndAtomics == VK_TRUE);
1534                     ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE);
1535                     ret = ret && (s->features.imageCubeArray == VK_TRUE);
1536                     ret = ret && (s->features.independentBlend == VK_TRUE);
1537                     ret = ret && (s->features.robustBufferAccess == VK_TRUE);
1538                     ret = ret && (s->features.sampleRateShading == VK_TRUE);
1539                     ret = ret && (s->features.shaderSampledImageArrayDynamicIndexing == VK_TRUE);
1540                     ret = ret && (s->features.shaderStorageImageArrayDynamicIndexing == VK_TRUE);
1541                     ret = ret && (s->features.shaderUniformBufferArrayDynamicIndexing == VK_TRUE);
1542                     ret = ret && (s->features.textureCompressionASTC_LDR == VK_TRUE);
1543                     ret = ret && (s->features.textureCompressionETC2 == VK_TRUE);
1544                 } break;
1545                 default: break;
1546             }
1547         return ret;
1548     }
1549 };
1550 
1551 static const VpPropertyDesc propertyDesc = {
__anon3431b7524f02() 1552     [](VkBaseOutStructure* p) { (void)p;
1553             switch (p->sType) {
1554                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: {
1555                     VkPhysicalDeviceProperties2KHR* s = static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p));
1556                     s->properties.limits.discreteQueuePriorities = 2;
1557                     s->properties.limits.framebufferColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
1558                     s->properties.limits.framebufferDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
1559                     s->properties.limits.framebufferNoAttachmentsSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
1560                     s->properties.limits.framebufferStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
1561                     s->properties.limits.maxBoundDescriptorSets = 4;
1562                     s->properties.limits.maxColorAttachments = 4;
1563                     s->properties.limits.maxComputeSharedMemorySize = 16384;
1564                     s->properties.limits.maxComputeWorkGroupCount[0] = 65535;
1565                     s->properties.limits.maxComputeWorkGroupCount[1] = 65535;
1566                     s->properties.limits.maxComputeWorkGroupCount[2] = 65535;
1567                     s->properties.limits.maxComputeWorkGroupInvocations = 128;
1568                     s->properties.limits.maxComputeWorkGroupSize[0] = 128;
1569                     s->properties.limits.maxComputeWorkGroupSize[1] = 128;
1570                     s->properties.limits.maxComputeWorkGroupSize[2] = 64;
1571                     s->properties.limits.maxDescriptorSetInputAttachments = 4;
1572                     s->properties.limits.maxDescriptorSetSampledImages = 48;
1573                     s->properties.limits.maxDescriptorSetSamplers = 48;
1574                     s->properties.limits.maxDescriptorSetStorageBuffers = 24;
1575                     s->properties.limits.maxDescriptorSetStorageBuffersDynamic = 4;
1576                     s->properties.limits.maxDescriptorSetStorageImages = 12;
1577                     s->properties.limits.maxDescriptorSetUniformBuffers = 36;
1578                     s->properties.limits.maxDescriptorSetUniformBuffersDynamic = 8;
1579                     s->properties.limits.maxDrawIndexedIndexValue = 4294967295;
1580                     s->properties.limits.maxDrawIndirectCount = 1;
1581                     s->properties.limits.maxFragmentCombinedOutputResources = 8;
1582                     s->properties.limits.maxFragmentInputComponents = 64;
1583                     s->properties.limits.maxFragmentOutputAttachments = 4;
1584                     s->properties.limits.maxFramebufferHeight = 4096;
1585                     s->properties.limits.maxFramebufferLayers = 256;
1586                     s->properties.limits.maxFramebufferWidth = 4096;
1587                     s->properties.limits.maxImageArrayLayers = 256;
1588                     s->properties.limits.maxImageDimension1D = 4096;
1589                     s->properties.limits.maxImageDimension2D = 4096;
1590                     s->properties.limits.maxImageDimension3D = 512;
1591                     s->properties.limits.maxImageDimensionCube = 4096;
1592                     s->properties.limits.maxInterpolationOffset = 0.4375f;
1593                     s->properties.limits.maxMemoryAllocationCount = 4096;
1594                     s->properties.limits.maxPerStageDescriptorInputAttachments = 4;
1595                     s->properties.limits.maxPerStageDescriptorSampledImages = 16;
1596                     s->properties.limits.maxPerStageDescriptorSamplers = 16;
1597                     s->properties.limits.maxPerStageDescriptorStorageBuffers = 4;
1598                     s->properties.limits.maxPerStageDescriptorStorageImages = 4;
1599                     s->properties.limits.maxPerStageDescriptorUniformBuffers = 12;
1600                     s->properties.limits.maxPerStageResources = 44;
1601                     s->properties.limits.maxPushConstantsSize = 128;
1602                     s->properties.limits.maxSampleMaskWords = 1;
1603                     s->properties.limits.maxSamplerAllocationCount = 4000;
1604                     s->properties.limits.maxSamplerAnisotropy = 1.0f;
1605                     s->properties.limits.maxSamplerLodBias = 2.0f;
1606                     s->properties.limits.maxStorageBufferRange = 134217728;
1607                     s->properties.limits.maxTexelBufferElements = 65536;
1608                     s->properties.limits.maxTexelOffset = 7;
1609                     s->properties.limits.maxUniformBufferRange = 16384;
1610                     s->properties.limits.maxVertexInputAttributeOffset = 2047;
1611                     s->properties.limits.maxVertexInputAttributes = 16;
1612                     s->properties.limits.maxVertexInputBindingStride = 2048;
1613                     s->properties.limits.maxVertexInputBindings = 16;
1614                     s->properties.limits.maxVertexOutputComponents = 64;
1615                     s->properties.limits.maxViewportDimensions[0] = 4096;
1616                     s->properties.limits.maxViewportDimensions[1] = 4096;
1617                     s->properties.limits.maxViewports = 1;
1618                     s->properties.limits.minInterpolationOffset = -0.5f;
1619                     s->properties.limits.minMemoryMapAlignment = 4096;
1620                     s->properties.limits.minStorageBufferOffsetAlignment = 256;
1621                     s->properties.limits.minTexelBufferOffsetAlignment = 256;
1622                     s->properties.limits.minTexelOffset = -8;
1623                     s->properties.limits.minUniformBufferOffsetAlignment = 256;
1624                     s->properties.limits.mipmapPrecisionBits = 4;
1625                     s->properties.limits.pointSizeGranularity = 1;
1626                     s->properties.limits.sampledImageColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
1627                     s->properties.limits.sampledImageDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
1628                     s->properties.limits.sampledImageIntegerSampleCounts |= (VK_SAMPLE_COUNT_1_BIT);
1629                     s->properties.limits.sampledImageStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
1630                     s->properties.limits.standardSampleLocations = VK_TRUE;
1631                     s->properties.limits.storageImageSampleCounts |= (VK_SAMPLE_COUNT_1_BIT);
1632                     s->properties.limits.subPixelInterpolationOffsetBits = 4;
1633                     s->properties.limits.subPixelPrecisionBits = 4;
1634                     s->properties.limits.subTexelPrecisionBits = 4;
1635                     s->properties.limits.viewportBoundsRange[0] = -8192;
1636                     s->properties.limits.viewportBoundsRange[1] = 8191;
1637                 } break;
1638                 default: break;
1639             }
1640     },
__anon3431b7525002() 1641     [](VkBaseOutStructure* p) -> bool { (void)p;
1642         bool ret = true;
1643             switch (p->sType) {
1644                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: {
1645                     VkPhysicalDeviceProperties2KHR* s = static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p));
1646                     ret = ret && (s->properties.limits.discreteQueuePriorities >= 2);
1647                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
1648                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
1649                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferNoAttachmentsSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
1650                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
1651                     ret = ret && (s->properties.limits.maxBoundDescriptorSets >= 4);
1652                     ret = ret && (s->properties.limits.maxColorAttachments >= 4);
1653                     ret = ret && (s->properties.limits.maxComputeSharedMemorySize >= 16384);
1654                     ret = ret && (s->properties.limits.maxComputeWorkGroupCount[0] >= 65535);
1655                     ret = ret && (s->properties.limits.maxComputeWorkGroupCount[1] >= 65535);
1656                     ret = ret && (s->properties.limits.maxComputeWorkGroupCount[2] >= 65535);
1657                     ret = ret && (s->properties.limits.maxComputeWorkGroupInvocations >= 128);
1658                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[0] >= 128);
1659                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[1] >= 128);
1660                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[2] >= 64);
1661                     ret = ret && (s->properties.limits.maxDescriptorSetInputAttachments >= 4);
1662                     ret = ret && (s->properties.limits.maxDescriptorSetSampledImages >= 48);
1663                     ret = ret && (s->properties.limits.maxDescriptorSetSamplers >= 48);
1664                     ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffers >= 24);
1665                     ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffersDynamic >= 4);
1666                     ret = ret && (s->properties.limits.maxDescriptorSetStorageImages >= 12);
1667                     ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffers >= 36);
1668                     ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffersDynamic >= 8);
1669                     ret = ret && (s->properties.limits.maxDrawIndexedIndexValue >= 4294967295);
1670                     ret = ret && (s->properties.limits.maxDrawIndirectCount >= 1);
1671                     ret = ret && (s->properties.limits.maxFragmentCombinedOutputResources >= 8);
1672                     ret = ret && (s->properties.limits.maxFragmentInputComponents >= 64);
1673                     ret = ret && (s->properties.limits.maxFragmentOutputAttachments >= 4);
1674                     ret = ret && (s->properties.limits.maxFramebufferHeight >= 4096);
1675                     ret = ret && (s->properties.limits.maxFramebufferLayers >= 256);
1676                     ret = ret && (s->properties.limits.maxFramebufferWidth >= 4096);
1677                     ret = ret && (s->properties.limits.maxImageArrayLayers >= 256);
1678                     ret = ret && (s->properties.limits.maxImageDimension1D >= 4096);
1679                     ret = ret && (s->properties.limits.maxImageDimension2D >= 4096);
1680                     ret = ret && (s->properties.limits.maxImageDimension3D >= 512);
1681                     ret = ret && (s->properties.limits.maxImageDimensionCube >= 4096);
1682                     ret = ret && (s->properties.limits.maxInterpolationOffset >= 0.4375);
1683                     ret = ret && (s->properties.limits.maxMemoryAllocationCount >= 4096);
1684                     ret = ret && (s->properties.limits.maxPerStageDescriptorInputAttachments >= 4);
1685                     ret = ret && (s->properties.limits.maxPerStageDescriptorSampledImages >= 16);
1686                     ret = ret && (s->properties.limits.maxPerStageDescriptorSamplers >= 16);
1687                     ret = ret && (s->properties.limits.maxPerStageDescriptorStorageBuffers >= 4);
1688                     ret = ret && (s->properties.limits.maxPerStageDescriptorStorageImages >= 4);
1689                     ret = ret && (s->properties.limits.maxPerStageDescriptorUniformBuffers >= 12);
1690                     ret = ret && (s->properties.limits.maxPerStageResources >= 44);
1691                     ret = ret && (s->properties.limits.maxPushConstantsSize >= 128);
1692                     ret = ret && (s->properties.limits.maxSampleMaskWords >= 1);
1693                     ret = ret && (s->properties.limits.maxSamplerAllocationCount >= 4000);
1694                     ret = ret && (s->properties.limits.maxSamplerAnisotropy >= 1.0);
1695                     ret = ret && (s->properties.limits.maxSamplerLodBias >= 2.0);
1696                     ret = ret && (s->properties.limits.maxStorageBufferRange >= 134217728);
1697                     ret = ret && (s->properties.limits.maxTexelBufferElements >= 65536);
1698                     ret = ret && (s->properties.limits.maxTexelOffset >= 7);
1699                     ret = ret && (s->properties.limits.maxUniformBufferRange >= 16384);
1700                     ret = ret && (s->properties.limits.maxVertexInputAttributeOffset >= 2047);
1701                     ret = ret && (s->properties.limits.maxVertexInputAttributes >= 16);
1702                     ret = ret && (s->properties.limits.maxVertexInputBindingStride >= 2048);
1703                     ret = ret && (s->properties.limits.maxVertexInputBindings >= 16);
1704                     ret = ret && (s->properties.limits.maxVertexOutputComponents >= 64);
1705                     ret = ret && (s->properties.limits.maxViewportDimensions[0] >= 4096);
1706                     ret = ret && (s->properties.limits.maxViewportDimensions[1] >= 4096);
1707                     ret = ret && (s->properties.limits.maxViewports >= 1);
1708                     ret = ret && (s->properties.limits.minInterpolationOffset <= -0.5);
1709                     ret = ret && (s->properties.limits.minMemoryMapAlignment <= 4096);
1710                     ret = ret && ((s->properties.limits.minMemoryMapAlignment & (s->properties.limits.minMemoryMapAlignment - 1)) == 0);
1711                     ret = ret && (s->properties.limits.minStorageBufferOffsetAlignment <= 256);
1712                     ret = ret && ((s->properties.limits.minStorageBufferOffsetAlignment & (s->properties.limits.minStorageBufferOffsetAlignment - 1)) == 0);
1713                     ret = ret && (s->properties.limits.minTexelBufferOffsetAlignment <= 256);
1714                     ret = ret && ((s->properties.limits.minTexelBufferOffsetAlignment & (s->properties.limits.minTexelBufferOffsetAlignment - 1)) == 0);
1715                     ret = ret && (s->properties.limits.minTexelOffset <= -8);
1716                     ret = ret && (s->properties.limits.minUniformBufferOffsetAlignment <= 256);
1717                     ret = ret && ((s->properties.limits.minUniformBufferOffsetAlignment & (s->properties.limits.minUniformBufferOffsetAlignment - 1)) == 0);
1718                     ret = ret && (s->properties.limits.mipmapPrecisionBits >= 4);
1719                     ret = ret && (s->properties.limits.pointSizeGranularity <= 1);
1720                     ret = ret && (isMultiple(1, s->properties.limits.pointSizeGranularity));
1721                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
1722                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
1723                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageIntegerSampleCounts, (VK_SAMPLE_COUNT_1_BIT)));
1724                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
1725                     ret = ret && (s->properties.limits.standardSampleLocations == VK_TRUE);
1726                     ret = ret && (vpCheckFlags(s->properties.limits.storageImageSampleCounts, (VK_SAMPLE_COUNT_1_BIT)));
1727                     ret = ret && (s->properties.limits.subPixelInterpolationOffsetBits >= 4);
1728                     ret = ret && (s->properties.limits.subPixelPrecisionBits >= 4);
1729                     ret = ret && (s->properties.limits.subTexelPrecisionBits >= 4);
1730                     ret = ret && (s->properties.limits.viewportBoundsRange[0] <= -8192);
1731                     ret = ret && (s->properties.limits.viewportBoundsRange[1] >= 8191);
1732                 } break;
1733                 default: break;
1734             }
1735         return ret;
1736     }
1737 };
1738 
1739 static const VpFormatDesc formatDesc[] = {
1740     {
1741         VK_FORMAT_A1R5G5B5_UNORM_PACK16,
__anon3431b7525102() 1742         [](VkBaseOutStructure* p) { (void)p;
1743             switch (p->sType) {
1744                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1745                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1746                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1747                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1748                 } break;
1749                 default: break;
1750             }
1751         },
__anon3431b7525202() 1752         [](VkBaseOutStructure* p) -> bool { (void)p;
1753             bool ret = true;
1754             switch (p->sType) {
1755                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1756                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1757                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1758                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1759                 } break;
1760                 default: break;
1761             }
1762             return ret;
1763         }
1764     },
1765     {
1766         VK_FORMAT_A2B10G10R10_UINT_PACK32,
__anon3431b7525302() 1767         [](VkBaseOutStructure* p) { (void)p;
1768             switch (p->sType) {
1769                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1770                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1771                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT);
1772                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1773                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1774                 } break;
1775                 default: break;
1776             }
1777         },
__anon3431b7525402() 1778         [](VkBaseOutStructure* p) -> bool { (void)p;
1779             bool ret = true;
1780             switch (p->sType) {
1781                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1782                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1783                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)));
1784                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1785                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1786                 } break;
1787                 default: break;
1788             }
1789             return ret;
1790         }
1791     },
1792     {
1793         VK_FORMAT_A2B10G10R10_UNORM_PACK32,
__anon3431b7525502() 1794         [](VkBaseOutStructure* p) { (void)p;
1795             switch (p->sType) {
1796                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1797                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1798                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
1799                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1800                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1801                 } break;
1802                 default: break;
1803             }
1804         },
__anon3431b7525602() 1805         [](VkBaseOutStructure* p) -> bool { (void)p;
1806             bool ret = true;
1807             switch (p->sType) {
1808                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1809                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1810                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
1811                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1812                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1813                 } break;
1814                 default: break;
1815             }
1816             return ret;
1817         }
1818     },
1819     {
1820         VK_FORMAT_A8B8G8R8_SINT_PACK32,
__anon3431b7525702() 1821         [](VkBaseOutStructure* p) { (void)p;
1822             switch (p->sType) {
1823                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1824                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1825                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
1826                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1827                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1828                 } break;
1829                 default: break;
1830             }
1831         },
__anon3431b7525802() 1832         [](VkBaseOutStructure* p) -> bool { (void)p;
1833             bool ret = true;
1834             switch (p->sType) {
1835                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1836                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1837                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
1838                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1839                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1840                 } break;
1841                 default: break;
1842             }
1843             return ret;
1844         }
1845     },
1846     {
1847         VK_FORMAT_A8B8G8R8_SNORM_PACK32,
__anon3431b7525902() 1848         [](VkBaseOutStructure* p) { (void)p;
1849             switch (p->sType) {
1850                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1851                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1852                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
1853                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1854                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1855                 } break;
1856                 default: break;
1857             }
1858         },
__anon3431b7525a02() 1859         [](VkBaseOutStructure* p) -> bool { (void)p;
1860             bool ret = true;
1861             switch (p->sType) {
1862                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1863                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1864                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
1865                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1866                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1867                 } break;
1868                 default: break;
1869             }
1870             return ret;
1871         }
1872     },
1873     {
1874         VK_FORMAT_A8B8G8R8_SRGB_PACK32,
__anon3431b7525b02() 1875         [](VkBaseOutStructure* p) { (void)p;
1876             switch (p->sType) {
1877                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1878                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1879                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1880                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1881                 } break;
1882                 default: break;
1883             }
1884         },
__anon3431b7525c02() 1885         [](VkBaseOutStructure* p) -> bool { (void)p;
1886             bool ret = true;
1887             switch (p->sType) {
1888                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1889                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1890                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1891                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1892                 } break;
1893                 default: break;
1894             }
1895             return ret;
1896         }
1897     },
1898     {
1899         VK_FORMAT_A8B8G8R8_UINT_PACK32,
__anon3431b7525d02() 1900         [](VkBaseOutStructure* p) { (void)p;
1901             switch (p->sType) {
1902                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1903                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1904                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
1905                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1906                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1907                 } break;
1908                 default: break;
1909             }
1910         },
__anon3431b7525e02() 1911         [](VkBaseOutStructure* p) -> bool { (void)p;
1912             bool ret = true;
1913             switch (p->sType) {
1914                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1915                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1916                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
1917                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1918                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1919                 } break;
1920                 default: break;
1921             }
1922             return ret;
1923         }
1924     },
1925     {
1926         VK_FORMAT_A8B8G8R8_UNORM_PACK32,
__anon3431b7525f02() 1927         [](VkBaseOutStructure* p) { (void)p;
1928             switch (p->sType) {
1929                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1930                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1931                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
1932                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1933                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1934                 } break;
1935                 default: break;
1936             }
1937         },
__anon3431b7526002() 1938         [](VkBaseOutStructure* p) -> bool { (void)p;
1939             bool ret = true;
1940             switch (p->sType) {
1941                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1942                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1943                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
1944                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1945                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1946                 } break;
1947                 default: break;
1948             }
1949             return ret;
1950         }
1951     },
1952     {
1953         VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
__anon3431b7526102() 1954         [](VkBaseOutStructure* p) { (void)p;
1955             switch (p->sType) {
1956                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1957                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1958                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1959                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1960                 } break;
1961                 default: break;
1962             }
1963         },
__anon3431b7526202() 1964         [](VkBaseOutStructure* p) -> bool { (void)p;
1965             bool ret = true;
1966             switch (p->sType) {
1967                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1968                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1969                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1970                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1971                 } break;
1972                 default: break;
1973             }
1974             return ret;
1975         }
1976     },
1977     {
1978         VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
__anon3431b7526302() 1979         [](VkBaseOutStructure* p) { (void)p;
1980             switch (p->sType) {
1981                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1982                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1983                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1984                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
1985                 } break;
1986                 default: break;
1987             }
1988         },
__anon3431b7526402() 1989         [](VkBaseOutStructure* p) -> bool { (void)p;
1990             bool ret = true;
1991             switch (p->sType) {
1992                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
1993                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
1994                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1995                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
1996                 } break;
1997                 default: break;
1998             }
1999             return ret;
2000         }
2001     },
2002     {
2003         VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
__anon3431b7526502() 2004         [](VkBaseOutStructure* p) { (void)p;
2005             switch (p->sType) {
2006                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2007                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2008                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2009                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2010                 } break;
2011                 default: break;
2012             }
2013         },
__anon3431b7526602() 2014         [](VkBaseOutStructure* p) -> bool { (void)p;
2015             bool ret = true;
2016             switch (p->sType) {
2017                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2018                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2019                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2020                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2021                 } break;
2022                 default: break;
2023             }
2024             return ret;
2025         }
2026     },
2027     {
2028         VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
__anon3431b7526702() 2029         [](VkBaseOutStructure* p) { (void)p;
2030             switch (p->sType) {
2031                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2032                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2033                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2034                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2035                 } break;
2036                 default: break;
2037             }
2038         },
__anon3431b7526802() 2039         [](VkBaseOutStructure* p) -> bool { (void)p;
2040             bool ret = true;
2041             switch (p->sType) {
2042                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2043                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2044                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2045                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2046                 } break;
2047                 default: break;
2048             }
2049             return ret;
2050         }
2051     },
2052     {
2053         VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
__anon3431b7526902() 2054         [](VkBaseOutStructure* p) { (void)p;
2055             switch (p->sType) {
2056                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2057                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2058                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2059                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2060                 } break;
2061                 default: break;
2062             }
2063         },
__anon3431b7526a02() 2064         [](VkBaseOutStructure* p) -> bool { (void)p;
2065             bool ret = true;
2066             switch (p->sType) {
2067                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2068                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2069                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2070                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2071                 } break;
2072                 default: break;
2073             }
2074             return ret;
2075         }
2076     },
2077     {
2078         VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
__anon3431b7526b02() 2079         [](VkBaseOutStructure* p) { (void)p;
2080             switch (p->sType) {
2081                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2082                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2083                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2084                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2085                 } break;
2086                 default: break;
2087             }
2088         },
__anon3431b7526c02() 2089         [](VkBaseOutStructure* p) -> bool { (void)p;
2090             bool ret = true;
2091             switch (p->sType) {
2092                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2093                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2094                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2095                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2096                 } break;
2097                 default: break;
2098             }
2099             return ret;
2100         }
2101     },
2102     {
2103         VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
__anon3431b7526d02() 2104         [](VkBaseOutStructure* p) { (void)p;
2105             switch (p->sType) {
2106                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2107                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2108                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2109                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2110                 } break;
2111                 default: break;
2112             }
2113         },
__anon3431b7526e02() 2114         [](VkBaseOutStructure* p) -> bool { (void)p;
2115             bool ret = true;
2116             switch (p->sType) {
2117                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2118                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2119                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2120                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2121                 } break;
2122                 default: break;
2123             }
2124             return ret;
2125         }
2126     },
2127     {
2128         VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
__anon3431b7526f02() 2129         [](VkBaseOutStructure* p) { (void)p;
2130             switch (p->sType) {
2131                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2132                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2133                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2134                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2135                 } break;
2136                 default: break;
2137             }
2138         },
__anon3431b7527002() 2139         [](VkBaseOutStructure* p) -> bool { (void)p;
2140             bool ret = true;
2141             switch (p->sType) {
2142                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2143                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2144                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2145                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2146                 } break;
2147                 default: break;
2148             }
2149             return ret;
2150         }
2151     },
2152     {
2153         VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
__anon3431b7527102() 2154         [](VkBaseOutStructure* p) { (void)p;
2155             switch (p->sType) {
2156                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2157                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2158                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2159                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2160                 } break;
2161                 default: break;
2162             }
2163         },
__anon3431b7527202() 2164         [](VkBaseOutStructure* p) -> bool { (void)p;
2165             bool ret = true;
2166             switch (p->sType) {
2167                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2168                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2169                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2170                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2171                 } break;
2172                 default: break;
2173             }
2174             return ret;
2175         }
2176     },
2177     {
2178         VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
__anon3431b7527302() 2179         [](VkBaseOutStructure* p) { (void)p;
2180             switch (p->sType) {
2181                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2182                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2183                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2184                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2185                 } break;
2186                 default: break;
2187             }
2188         },
__anon3431b7527402() 2189         [](VkBaseOutStructure* p) -> bool { (void)p;
2190             bool ret = true;
2191             switch (p->sType) {
2192                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2193                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2194                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2195                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2196                 } break;
2197                 default: break;
2198             }
2199             return ret;
2200         }
2201     },
2202     {
2203         VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
__anon3431b7527502() 2204         [](VkBaseOutStructure* p) { (void)p;
2205             switch (p->sType) {
2206                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2207                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2208                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2209                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2210                 } break;
2211                 default: break;
2212             }
2213         },
__anon3431b7527602() 2214         [](VkBaseOutStructure* p) -> bool { (void)p;
2215             bool ret = true;
2216             switch (p->sType) {
2217                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2218                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2219                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2220                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2221                 } break;
2222                 default: break;
2223             }
2224             return ret;
2225         }
2226     },
2227     {
2228         VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
__anon3431b7527702() 2229         [](VkBaseOutStructure* p) { (void)p;
2230             switch (p->sType) {
2231                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2232                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2233                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2234                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2235                 } break;
2236                 default: break;
2237             }
2238         },
__anon3431b7527802() 2239         [](VkBaseOutStructure* p) -> bool { (void)p;
2240             bool ret = true;
2241             switch (p->sType) {
2242                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2243                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2244                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2245                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2246                 } break;
2247                 default: break;
2248             }
2249             return ret;
2250         }
2251     },
2252     {
2253         VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
__anon3431b7527902() 2254         [](VkBaseOutStructure* p) { (void)p;
2255             switch (p->sType) {
2256                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2257                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2258                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2259                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2260                 } break;
2261                 default: break;
2262             }
2263         },
__anon3431b7527a02() 2264         [](VkBaseOutStructure* p) -> bool { (void)p;
2265             bool ret = true;
2266             switch (p->sType) {
2267                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2268                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2269                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2270                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2271                 } break;
2272                 default: break;
2273             }
2274             return ret;
2275         }
2276     },
2277     {
2278         VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
__anon3431b7527b02() 2279         [](VkBaseOutStructure* p) { (void)p;
2280             switch (p->sType) {
2281                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2282                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2283                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2284                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2285                 } break;
2286                 default: break;
2287             }
2288         },
__anon3431b7527c02() 2289         [](VkBaseOutStructure* p) -> bool { (void)p;
2290             bool ret = true;
2291             switch (p->sType) {
2292                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2293                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2294                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2295                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2296                 } break;
2297                 default: break;
2298             }
2299             return ret;
2300         }
2301     },
2302     {
2303         VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
__anon3431b7527d02() 2304         [](VkBaseOutStructure* p) { (void)p;
2305             switch (p->sType) {
2306                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2307                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2308                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2309                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2310                 } break;
2311                 default: break;
2312             }
2313         },
__anon3431b7527e02() 2314         [](VkBaseOutStructure* p) -> bool { (void)p;
2315             bool ret = true;
2316             switch (p->sType) {
2317                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2318                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2319                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2320                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2321                 } break;
2322                 default: break;
2323             }
2324             return ret;
2325         }
2326     },
2327     {
2328         VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
__anon3431b7527f02() 2329         [](VkBaseOutStructure* p) { (void)p;
2330             switch (p->sType) {
2331                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2332                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2333                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2334                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2335                 } break;
2336                 default: break;
2337             }
2338         },
__anon3431b7528002() 2339         [](VkBaseOutStructure* p) -> bool { (void)p;
2340             bool ret = true;
2341             switch (p->sType) {
2342                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2343                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2344                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2345                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2346                 } break;
2347                 default: break;
2348             }
2349             return ret;
2350         }
2351     },
2352     {
2353         VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
__anon3431b7528102() 2354         [](VkBaseOutStructure* p) { (void)p;
2355             switch (p->sType) {
2356                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2357                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2358                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2359                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2360                 } break;
2361                 default: break;
2362             }
2363         },
__anon3431b7528202() 2364         [](VkBaseOutStructure* p) -> bool { (void)p;
2365             bool ret = true;
2366             switch (p->sType) {
2367                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2368                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2369                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2370                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2371                 } break;
2372                 default: break;
2373             }
2374             return ret;
2375         }
2376     },
2377     {
2378         VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
__anon3431b7528302() 2379         [](VkBaseOutStructure* p) { (void)p;
2380             switch (p->sType) {
2381                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2382                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2383                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2384                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2385                 } break;
2386                 default: break;
2387             }
2388         },
__anon3431b7528402() 2389         [](VkBaseOutStructure* p) -> bool { (void)p;
2390             bool ret = true;
2391             switch (p->sType) {
2392                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2393                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2394                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2395                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2396                 } break;
2397                 default: break;
2398             }
2399             return ret;
2400         }
2401     },
2402     {
2403         VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
__anon3431b7528502() 2404         [](VkBaseOutStructure* p) { (void)p;
2405             switch (p->sType) {
2406                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2407                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2408                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2409                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2410                 } break;
2411                 default: break;
2412             }
2413         },
__anon3431b7528602() 2414         [](VkBaseOutStructure* p) -> bool { (void)p;
2415             bool ret = true;
2416             switch (p->sType) {
2417                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2418                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2419                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2420                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2421                 } break;
2422                 default: break;
2423             }
2424             return ret;
2425         }
2426     },
2427     {
2428         VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
__anon3431b7528702() 2429         [](VkBaseOutStructure* p) { (void)p;
2430             switch (p->sType) {
2431                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2432                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2433                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2434                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2435                 } break;
2436                 default: break;
2437             }
2438         },
__anon3431b7528802() 2439         [](VkBaseOutStructure* p) -> bool { (void)p;
2440             bool ret = true;
2441             switch (p->sType) {
2442                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2443                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2444                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2445                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2446                 } break;
2447                 default: break;
2448             }
2449             return ret;
2450         }
2451     },
2452     {
2453         VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
__anon3431b7528902() 2454         [](VkBaseOutStructure* p) { (void)p;
2455             switch (p->sType) {
2456                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2457                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2458                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2459                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2460                 } break;
2461                 default: break;
2462             }
2463         },
__anon3431b7528a02() 2464         [](VkBaseOutStructure* p) -> bool { (void)p;
2465             bool ret = true;
2466             switch (p->sType) {
2467                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2468                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2469                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2470                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2471                 } break;
2472                 default: break;
2473             }
2474             return ret;
2475         }
2476     },
2477     {
2478         VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
__anon3431b7528b02() 2479         [](VkBaseOutStructure* p) { (void)p;
2480             switch (p->sType) {
2481                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2482                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2483                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2484                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2485                 } break;
2486                 default: break;
2487             }
2488         },
__anon3431b7528c02() 2489         [](VkBaseOutStructure* p) -> bool { (void)p;
2490             bool ret = true;
2491             switch (p->sType) {
2492                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2493                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2494                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2495                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2496                 } break;
2497                 default: break;
2498             }
2499             return ret;
2500         }
2501     },
2502     {
2503         VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
__anon3431b7528d02() 2504         [](VkBaseOutStructure* p) { (void)p;
2505             switch (p->sType) {
2506                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2507                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2508                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2509                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2510                 } break;
2511                 default: break;
2512             }
2513         },
__anon3431b7528e02() 2514         [](VkBaseOutStructure* p) -> bool { (void)p;
2515             bool ret = true;
2516             switch (p->sType) {
2517                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2518                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2519                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2520                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2521                 } break;
2522                 default: break;
2523             }
2524             return ret;
2525         }
2526     },
2527     {
2528         VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
__anon3431b7528f02() 2529         [](VkBaseOutStructure* p) { (void)p;
2530             switch (p->sType) {
2531                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2532                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2533                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2534                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2535                 } break;
2536                 default: break;
2537             }
2538         },
__anon3431b7529002() 2539         [](VkBaseOutStructure* p) -> bool { (void)p;
2540             bool ret = true;
2541             switch (p->sType) {
2542                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2543                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2544                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2545                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2546                 } break;
2547                 default: break;
2548             }
2549             return ret;
2550         }
2551     },
2552     {
2553         VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
__anon3431b7529102() 2554         [](VkBaseOutStructure* p) { (void)p;
2555             switch (p->sType) {
2556                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2557                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2558                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2559                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2560                 } break;
2561                 default: break;
2562             }
2563         },
__anon3431b7529202() 2564         [](VkBaseOutStructure* p) -> bool { (void)p;
2565             bool ret = true;
2566             switch (p->sType) {
2567                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2568                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2569                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2570                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2571                 } break;
2572                 default: break;
2573             }
2574             return ret;
2575         }
2576     },
2577     {
2578         VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
__anon3431b7529302() 2579         [](VkBaseOutStructure* p) { (void)p;
2580             switch (p->sType) {
2581                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2582                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2583                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2584                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2585                 } break;
2586                 default: break;
2587             }
2588         },
__anon3431b7529402() 2589         [](VkBaseOutStructure* p) -> bool { (void)p;
2590             bool ret = true;
2591             switch (p->sType) {
2592                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2593                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2594                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2595                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2596                 } break;
2597                 default: break;
2598             }
2599             return ret;
2600         }
2601     },
2602     {
2603         VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
__anon3431b7529502() 2604         [](VkBaseOutStructure* p) { (void)p;
2605             switch (p->sType) {
2606                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2607                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2608                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2609                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2610                 } break;
2611                 default: break;
2612             }
2613         },
__anon3431b7529602() 2614         [](VkBaseOutStructure* p) -> bool { (void)p;
2615             bool ret = true;
2616             switch (p->sType) {
2617                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2618                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2619                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2620                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2621                 } break;
2622                 default: break;
2623             }
2624             return ret;
2625         }
2626     },
2627     {
2628         VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
__anon3431b7529702() 2629         [](VkBaseOutStructure* p) { (void)p;
2630             switch (p->sType) {
2631                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2632                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2633                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2634                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2635                 } break;
2636                 default: break;
2637             }
2638         },
__anon3431b7529802() 2639         [](VkBaseOutStructure* p) -> bool { (void)p;
2640             bool ret = true;
2641             switch (p->sType) {
2642                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2643                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2644                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2645                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2646                 } break;
2647                 default: break;
2648             }
2649             return ret;
2650         }
2651     },
2652     {
2653         VK_FORMAT_B10G11R11_UFLOAT_PACK32,
__anon3431b7529902() 2654         [](VkBaseOutStructure* p) { (void)p;
2655             switch (p->sType) {
2656                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2657                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2658                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT);
2659                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2660                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2661                 } break;
2662                 default: break;
2663             }
2664         },
__anon3431b7529a02() 2665         [](VkBaseOutStructure* p) -> bool { (void)p;
2666             bool ret = true;
2667             switch (p->sType) {
2668                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2669                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2670                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)));
2671                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2672                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2673                 } break;
2674                 default: break;
2675             }
2676             return ret;
2677         }
2678     },
2679     {
2680         VK_FORMAT_B4G4R4A4_UNORM_PACK16,
__anon3431b7529b02() 2681         [](VkBaseOutStructure* p) { (void)p;
2682             switch (p->sType) {
2683                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2684                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2685                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2686                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2687                 } break;
2688                 default: break;
2689             }
2690         },
__anon3431b7529c02() 2691         [](VkBaseOutStructure* p) -> bool { (void)p;
2692             bool ret = true;
2693             switch (p->sType) {
2694                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2695                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2696                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2697                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2698                 } break;
2699                 default: break;
2700             }
2701             return ret;
2702         }
2703     },
2704     {
2705         VK_FORMAT_B8G8R8A8_SRGB,
__anon3431b7529d02() 2706         [](VkBaseOutStructure* p) { (void)p;
2707             switch (p->sType) {
2708                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2709                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2710                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2711                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2712                 } break;
2713                 default: break;
2714             }
2715         },
__anon3431b7529e02() 2716         [](VkBaseOutStructure* p) -> bool { (void)p;
2717             bool ret = true;
2718             switch (p->sType) {
2719                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2720                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2721                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2722                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2723                 } break;
2724                 default: break;
2725             }
2726             return ret;
2727         }
2728     },
2729     {
2730         VK_FORMAT_B8G8R8A8_UNORM,
__anon3431b7529f02() 2731         [](VkBaseOutStructure* p) { (void)p;
2732             switch (p->sType) {
2733                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2734                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2735                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
2736                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2737                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2738                 } break;
2739                 default: break;
2740             }
2741         },
__anon3431b752a002() 2742         [](VkBaseOutStructure* p) -> bool { (void)p;
2743             bool ret = true;
2744             switch (p->sType) {
2745                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2746                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2747                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
2748                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2749                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2750                 } break;
2751                 default: break;
2752             }
2753             return ret;
2754         }
2755     },
2756     {
2757         VK_FORMAT_D16_UNORM,
__anon3431b752a102() 2758         [](VkBaseOutStructure* p) { (void)p;
2759             switch (p->sType) {
2760                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2761                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2762                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2763                 } break;
2764                 default: break;
2765             }
2766         },
__anon3431b752a202() 2767         [](VkBaseOutStructure* p) -> bool { (void)p;
2768             bool ret = true;
2769             switch (p->sType) {
2770                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2771                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2772                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2773                 } break;
2774                 default: break;
2775             }
2776             return ret;
2777         }
2778     },
2779     {
2780         VK_FORMAT_D32_SFLOAT,
__anon3431b752a302() 2781         [](VkBaseOutStructure* p) { (void)p;
2782             switch (p->sType) {
2783                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2784                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2785                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2786                 } break;
2787                 default: break;
2788             }
2789         },
__anon3431b752a402() 2790         [](VkBaseOutStructure* p) -> bool { (void)p;
2791             bool ret = true;
2792             switch (p->sType) {
2793                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2794                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2795                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2796                 } break;
2797                 default: break;
2798             }
2799             return ret;
2800         }
2801     },
2802     {
2803         VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
__anon3431b752a502() 2804         [](VkBaseOutStructure* p) { (void)p;
2805             switch (p->sType) {
2806                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2807                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2808                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2809                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2810                 } break;
2811                 default: break;
2812             }
2813         },
__anon3431b752a602() 2814         [](VkBaseOutStructure* p) -> bool { (void)p;
2815             bool ret = true;
2816             switch (p->sType) {
2817                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2818                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2819                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2820                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2821                 } break;
2822                 default: break;
2823             }
2824             return ret;
2825         }
2826     },
2827     {
2828         VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
__anon3431b752a702() 2829         [](VkBaseOutStructure* p) { (void)p;
2830             switch (p->sType) {
2831                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2832                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2833                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2834                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2835                 } break;
2836                 default: break;
2837             }
2838         },
__anon3431b752a802() 2839         [](VkBaseOutStructure* p) -> bool { (void)p;
2840             bool ret = true;
2841             switch (p->sType) {
2842                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2843                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2844                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2845                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2846                 } break;
2847                 default: break;
2848             }
2849             return ret;
2850         }
2851     },
2852     {
2853         VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
__anon3431b752a902() 2854         [](VkBaseOutStructure* p) { (void)p;
2855             switch (p->sType) {
2856                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2857                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2858                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2859                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2860                 } break;
2861                 default: break;
2862             }
2863         },
__anon3431b752aa02() 2864         [](VkBaseOutStructure* p) -> bool { (void)p;
2865             bool ret = true;
2866             switch (p->sType) {
2867                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2868                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2869                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2870                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2871                 } break;
2872                 default: break;
2873             }
2874             return ret;
2875         }
2876     },
2877     {
2878         VK_FORMAT_EAC_R11_SNORM_BLOCK,
__anon3431b752ab02() 2879         [](VkBaseOutStructure* p) { (void)p;
2880             switch (p->sType) {
2881                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2882                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2883                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2884                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2885                 } break;
2886                 default: break;
2887             }
2888         },
__anon3431b752ac02() 2889         [](VkBaseOutStructure* p) -> bool { (void)p;
2890             bool ret = true;
2891             switch (p->sType) {
2892                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2893                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2894                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2895                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2896                 } break;
2897                 default: break;
2898             }
2899             return ret;
2900         }
2901     },
2902     {
2903         VK_FORMAT_EAC_R11_UNORM_BLOCK,
__anon3431b752ad02() 2904         [](VkBaseOutStructure* p) { (void)p;
2905             switch (p->sType) {
2906                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2907                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2908                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2909                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2910                 } break;
2911                 default: break;
2912             }
2913         },
__anon3431b752ae02() 2914         [](VkBaseOutStructure* p) -> bool { (void)p;
2915             bool ret = true;
2916             switch (p->sType) {
2917                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2918                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2919                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2920                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2921                 } break;
2922                 default: break;
2923             }
2924             return ret;
2925         }
2926     },
2927     {
2928         VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
__anon3431b752af02() 2929         [](VkBaseOutStructure* p) { (void)p;
2930             switch (p->sType) {
2931                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2932                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2933                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2934                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2935                 } break;
2936                 default: break;
2937             }
2938         },
__anon3431b752b002() 2939         [](VkBaseOutStructure* p) -> bool { (void)p;
2940             bool ret = true;
2941             switch (p->sType) {
2942                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2943                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2944                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2945                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2946                 } break;
2947                 default: break;
2948             }
2949             return ret;
2950         }
2951     },
2952     {
2953         VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
__anon3431b752b102() 2954         [](VkBaseOutStructure* p) { (void)p;
2955             switch (p->sType) {
2956                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2957                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2958                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2959                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2960                 } break;
2961                 default: break;
2962             }
2963         },
__anon3431b752b202() 2964         [](VkBaseOutStructure* p) -> bool { (void)p;
2965             bool ret = true;
2966             switch (p->sType) {
2967                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2968                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2969                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2970                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2971                 } break;
2972                 default: break;
2973             }
2974             return ret;
2975         }
2976     },
2977     {
2978         VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
__anon3431b752b302() 2979         [](VkBaseOutStructure* p) { (void)p;
2980             switch (p->sType) {
2981                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2982                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2983                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2984                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
2985                 } break;
2986                 default: break;
2987             }
2988         },
__anon3431b752b402() 2989         [](VkBaseOutStructure* p) -> bool { (void)p;
2990             bool ret = true;
2991             switch (p->sType) {
2992                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
2993                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
2994                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2995                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
2996                 } break;
2997                 default: break;
2998             }
2999             return ret;
3000         }
3001     },
3002     {
3003         VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
__anon3431b752b502() 3004         [](VkBaseOutStructure* p) { (void)p;
3005             switch (p->sType) {
3006                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3007                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3008                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3009                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3010                 } break;
3011                 default: break;
3012             }
3013         },
__anon3431b752b602() 3014         [](VkBaseOutStructure* p) -> bool { (void)p;
3015             bool ret = true;
3016             switch (p->sType) {
3017                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3018                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3019                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3020                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3021                 } break;
3022                 default: break;
3023             }
3024             return ret;
3025         }
3026     },
3027     {
3028         VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
__anon3431b752b702() 3029         [](VkBaseOutStructure* p) { (void)p;
3030             switch (p->sType) {
3031                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3032                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3033                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3034                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3035                 } break;
3036                 default: break;
3037             }
3038         },
__anon3431b752b802() 3039         [](VkBaseOutStructure* p) -> bool { (void)p;
3040             bool ret = true;
3041             switch (p->sType) {
3042                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3043                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3044                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3045                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3046                 } break;
3047                 default: break;
3048             }
3049             return ret;
3050         }
3051     },
3052     {
3053         VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
__anon3431b752b902() 3054         [](VkBaseOutStructure* p) { (void)p;
3055             switch (p->sType) {
3056                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3057                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3058                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3059                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3060                 } break;
3061                 default: break;
3062             }
3063         },
__anon3431b752ba02() 3064         [](VkBaseOutStructure* p) -> bool { (void)p;
3065             bool ret = true;
3066             switch (p->sType) {
3067                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3068                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3069                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3070                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3071                 } break;
3072                 default: break;
3073             }
3074             return ret;
3075         }
3076     },
3077     {
3078         VK_FORMAT_R16G16B16A16_SFLOAT,
__anon3431b752bb02() 3079         [](VkBaseOutStructure* p) { (void)p;
3080             switch (p->sType) {
3081                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3082                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3083                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3084                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3085                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3086                 } break;
3087                 default: break;
3088             }
3089         },
__anon3431b752bc02() 3090         [](VkBaseOutStructure* p) -> bool { (void)p;
3091             bool ret = true;
3092             switch (p->sType) {
3093                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3094                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3095                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3096                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3097                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3098                 } break;
3099                 default: break;
3100             }
3101             return ret;
3102         }
3103     },
3104     {
3105         VK_FORMAT_R16G16B16A16_SINT,
__anon3431b752bd02() 3106         [](VkBaseOutStructure* p) { (void)p;
3107             switch (p->sType) {
3108                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3109                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3110                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3111                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3112                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3113                 } break;
3114                 default: break;
3115             }
3116         },
__anon3431b752be02() 3117         [](VkBaseOutStructure* p) -> bool { (void)p;
3118             bool ret = true;
3119             switch (p->sType) {
3120                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3121                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3122                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3123                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3124                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3125                 } break;
3126                 default: break;
3127             }
3128             return ret;
3129         }
3130     },
3131     {
3132         VK_FORMAT_R16G16B16A16_SNORM,
__anon3431b752bf02() 3133         [](VkBaseOutStructure* p) { (void)p;
3134             switch (p->sType) {
3135                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3136                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3137                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3138                 } break;
3139                 default: break;
3140             }
3141         },
__anon3431b752c002() 3142         [](VkBaseOutStructure* p) -> bool { (void)p;
3143             bool ret = true;
3144             switch (p->sType) {
3145                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3146                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3147                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3148                 } break;
3149                 default: break;
3150             }
3151             return ret;
3152         }
3153     },
3154     {
3155         VK_FORMAT_R16G16B16A16_UINT,
__anon3431b752c102() 3156         [](VkBaseOutStructure* p) { (void)p;
3157             switch (p->sType) {
3158                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3159                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3160                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3161                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3162                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3163                 } break;
3164                 default: break;
3165             }
3166         },
__anon3431b752c202() 3167         [](VkBaseOutStructure* p) -> bool { (void)p;
3168             bool ret = true;
3169             switch (p->sType) {
3170                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3171                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3172                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3173                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3174                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3175                 } break;
3176                 default: break;
3177             }
3178             return ret;
3179         }
3180     },
3181     {
3182         VK_FORMAT_R16G16_SFLOAT,
__anon3431b752c302() 3183         [](VkBaseOutStructure* p) { (void)p;
3184             switch (p->sType) {
3185                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3186                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3187                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3188                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3189                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3190                 } break;
3191                 default: break;
3192             }
3193         },
__anon3431b752c402() 3194         [](VkBaseOutStructure* p) -> bool { (void)p;
3195             bool ret = true;
3196             switch (p->sType) {
3197                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3198                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3199                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3200                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3201                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3202                 } break;
3203                 default: break;
3204             }
3205             return ret;
3206         }
3207     },
3208     {
3209         VK_FORMAT_R16G16_SINT,
__anon3431b752c502() 3210         [](VkBaseOutStructure* p) { (void)p;
3211             switch (p->sType) {
3212                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3213                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3214                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3215                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3216                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3217                 } break;
3218                 default: break;
3219             }
3220         },
__anon3431b752c602() 3221         [](VkBaseOutStructure* p) -> bool { (void)p;
3222             bool ret = true;
3223             switch (p->sType) {
3224                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3225                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3226                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3227                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3228                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3229                 } break;
3230                 default: break;
3231             }
3232             return ret;
3233         }
3234     },
3235     {
3236         VK_FORMAT_R16G16_SNORM,
__anon3431b752c702() 3237         [](VkBaseOutStructure* p) { (void)p;
3238             switch (p->sType) {
3239                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3240                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3241                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3242                 } break;
3243                 default: break;
3244             }
3245         },
__anon3431b752c802() 3246         [](VkBaseOutStructure* p) -> bool { (void)p;
3247             bool ret = true;
3248             switch (p->sType) {
3249                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3250                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3251                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3252                 } break;
3253                 default: break;
3254             }
3255             return ret;
3256         }
3257     },
3258     {
3259         VK_FORMAT_R16G16_UINT,
__anon3431b752c902() 3260         [](VkBaseOutStructure* p) { (void)p;
3261             switch (p->sType) {
3262                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3263                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3264                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3265                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3266                 } break;
3267                 default: break;
3268             }
3269         },
__anon3431b752ca02() 3270         [](VkBaseOutStructure* p) -> bool { (void)p;
3271             bool ret = true;
3272             switch (p->sType) {
3273                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3274                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3275                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3276                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3277                 } break;
3278                 default: break;
3279             }
3280             return ret;
3281         }
3282     },
3283     {
3284         VK_FORMAT_R16_SFLOAT,
__anon3431b752cb02() 3285         [](VkBaseOutStructure* p) { (void)p;
3286             switch (p->sType) {
3287                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3288                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3289                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3290                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3291                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3292                 } break;
3293                 default: break;
3294             }
3295         },
__anon3431b752cc02() 3296         [](VkBaseOutStructure* p) -> bool { (void)p;
3297             bool ret = true;
3298             switch (p->sType) {
3299                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3300                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3301                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3302                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3303                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3304                 } break;
3305                 default: break;
3306             }
3307             return ret;
3308         }
3309     },
3310     {
3311         VK_FORMAT_R16_SINT,
__anon3431b752cd02() 3312         [](VkBaseOutStructure* p) { (void)p;
3313             switch (p->sType) {
3314                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3315                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3316                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3317                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3318                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3319                 } break;
3320                 default: break;
3321             }
3322         },
__anon3431b752ce02() 3323         [](VkBaseOutStructure* p) -> bool { (void)p;
3324             bool ret = true;
3325             switch (p->sType) {
3326                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3327                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3328                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3329                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3330                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3331                 } break;
3332                 default: break;
3333             }
3334             return ret;
3335         }
3336     },
3337     {
3338         VK_FORMAT_R16_SNORM,
__anon3431b752cf02() 3339         [](VkBaseOutStructure* p) { (void)p;
3340             switch (p->sType) {
3341                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3342                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3343                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3344                 } break;
3345                 default: break;
3346             }
3347         },
__anon3431b752d002() 3348         [](VkBaseOutStructure* p) -> bool { (void)p;
3349             bool ret = true;
3350             switch (p->sType) {
3351                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3352                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3353                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3354                 } break;
3355                 default: break;
3356             }
3357             return ret;
3358         }
3359     },
3360     {
3361         VK_FORMAT_R16_UINT,
__anon3431b752d102() 3362         [](VkBaseOutStructure* p) { (void)p;
3363             switch (p->sType) {
3364                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3365                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3366                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3367                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3368                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3369                 } break;
3370                 default: break;
3371             }
3372         },
__anon3431b752d202() 3373         [](VkBaseOutStructure* p) -> bool { (void)p;
3374             bool ret = true;
3375             switch (p->sType) {
3376                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3377                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3378                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3379                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3380                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3381                 } break;
3382                 default: break;
3383             }
3384             return ret;
3385         }
3386     },
3387     {
3388         VK_FORMAT_R16_UNORM,
__anon3431b752d302() 3389         [](VkBaseOutStructure* p) { (void)p;
3390             switch (p->sType) {
3391                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3392                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3393                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3394                 } break;
3395                 default: break;
3396             }
3397         },
__anon3431b752d402() 3398         [](VkBaseOutStructure* p) -> bool { (void)p;
3399             bool ret = true;
3400             switch (p->sType) {
3401                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3402                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3403                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3404                 } break;
3405                 default: break;
3406             }
3407             return ret;
3408         }
3409     },
3410     {
3411         VK_FORMAT_R32G32B32A32_SFLOAT,
__anon3431b752d502() 3412         [](VkBaseOutStructure* p) { (void)p;
3413             switch (p->sType) {
3414                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3415                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3416                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3417                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3418                 } break;
3419                 default: break;
3420             }
3421         },
__anon3431b752d602() 3422         [](VkBaseOutStructure* p) -> bool { (void)p;
3423             bool ret = true;
3424             switch (p->sType) {
3425                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3426                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3427                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3428                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3429                 } break;
3430                 default: break;
3431             }
3432             return ret;
3433         }
3434     },
3435     {
3436         VK_FORMAT_R32G32B32A32_SINT,
__anon3431b752d702() 3437         [](VkBaseOutStructure* p) { (void)p;
3438             switch (p->sType) {
3439                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3440                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3441                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3442                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3443                 } break;
3444                 default: break;
3445             }
3446         },
__anon3431b752d802() 3447         [](VkBaseOutStructure* p) -> bool { (void)p;
3448             bool ret = true;
3449             switch (p->sType) {
3450                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3451                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3452                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3453                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3454                 } break;
3455                 default: break;
3456             }
3457             return ret;
3458         }
3459     },
3460     {
3461         VK_FORMAT_R32G32B32A32_UINT,
__anon3431b752d902() 3462         [](VkBaseOutStructure* p) { (void)p;
3463             switch (p->sType) {
3464                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3465                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3466                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3467                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3468                 } break;
3469                 default: break;
3470             }
3471         },
__anon3431b752da02() 3472         [](VkBaseOutStructure* p) -> bool { (void)p;
3473             bool ret = true;
3474             switch (p->sType) {
3475                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3476                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3477                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3478                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3479                 } break;
3480                 default: break;
3481             }
3482             return ret;
3483         }
3484     },
3485     {
3486         VK_FORMAT_R32G32_SFLOAT,
__anon3431b752db02() 3487         [](VkBaseOutStructure* p) { (void)p;
3488             switch (p->sType) {
3489                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3490                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3491                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3492                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3493                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3494                 } break;
3495                 default: break;
3496             }
3497         },
__anon3431b752dc02() 3498         [](VkBaseOutStructure* p) -> bool { (void)p;
3499             bool ret = true;
3500             switch (p->sType) {
3501                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3502                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3503                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3504                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3505                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3506                 } break;
3507                 default: break;
3508             }
3509             return ret;
3510         }
3511     },
3512     {
3513         VK_FORMAT_R32G32_SINT,
__anon3431b752dd02() 3514         [](VkBaseOutStructure* p) { (void)p;
3515             switch (p->sType) {
3516                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3517                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3518                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3519                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3520                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3521                 } break;
3522                 default: break;
3523             }
3524         },
__anon3431b752de02() 3525         [](VkBaseOutStructure* p) -> bool { (void)p;
3526             bool ret = true;
3527             switch (p->sType) {
3528                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3529                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3530                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3531                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3532                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3533                 } break;
3534                 default: break;
3535             }
3536             return ret;
3537         }
3538     },
3539     {
3540         VK_FORMAT_R32G32_UINT,
__anon3431b752df02() 3541         [](VkBaseOutStructure* p) { (void)p;
3542             switch (p->sType) {
3543                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3544                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3545                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3546                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3547                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3548                 } break;
3549                 default: break;
3550             }
3551         },
__anon3431b752e002() 3552         [](VkBaseOutStructure* p) -> bool { (void)p;
3553             bool ret = true;
3554             switch (p->sType) {
3555                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3556                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3557                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3558                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3559                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3560                 } break;
3561                 default: break;
3562             }
3563             return ret;
3564         }
3565     },
3566     {
3567         VK_FORMAT_R32_SFLOAT,
__anon3431b752e102() 3568         [](VkBaseOutStructure* p) { (void)p;
3569             switch (p->sType) {
3570                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3571                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3572                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3573                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3574                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3575                 } break;
3576                 default: break;
3577             }
3578         },
__anon3431b752e202() 3579         [](VkBaseOutStructure* p) -> bool { (void)p;
3580             bool ret = true;
3581             switch (p->sType) {
3582                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3583                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3584                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3585                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3586                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3587                 } break;
3588                 default: break;
3589             }
3590             return ret;
3591         }
3592     },
3593     {
3594         VK_FORMAT_R32_SINT,
__anon3431b752e302() 3595         [](VkBaseOutStructure* p) { (void)p;
3596             switch (p->sType) {
3597                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3598                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3599                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3600                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3601                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3602                 } break;
3603                 default: break;
3604             }
3605         },
__anon3431b752e402() 3606         [](VkBaseOutStructure* p) -> bool { (void)p;
3607             bool ret = true;
3608             switch (p->sType) {
3609                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3610                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3611                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3612                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3613                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3614                 } break;
3615                 default: break;
3616             }
3617             return ret;
3618         }
3619     },
3620     {
3621         VK_FORMAT_R32_UINT,
__anon3431b752e502() 3622         [](VkBaseOutStructure* p) { (void)p;
3623             switch (p->sType) {
3624                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3625                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3626                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3627                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3628                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3629                 } break;
3630                 default: break;
3631             }
3632         },
__anon3431b752e602() 3633         [](VkBaseOutStructure* p) -> bool { (void)p;
3634             bool ret = true;
3635             switch (p->sType) {
3636                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3637                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3638                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3639                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3640                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3641                 } break;
3642                 default: break;
3643             }
3644             return ret;
3645         }
3646     },
3647     {
3648         VK_FORMAT_R5G6B5_UNORM_PACK16,
__anon3431b752e702() 3649         [](VkBaseOutStructure* p) { (void)p;
3650             switch (p->sType) {
3651                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3652                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3653                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3654                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3655                 } break;
3656                 default: break;
3657             }
3658         },
__anon3431b752e802() 3659         [](VkBaseOutStructure* p) -> bool { (void)p;
3660             bool ret = true;
3661             switch (p->sType) {
3662                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3663                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3664                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3665                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3666                 } break;
3667                 default: break;
3668             }
3669             return ret;
3670         }
3671     },
3672     {
3673         VK_FORMAT_R8G8B8A8_SINT,
__anon3431b752e902() 3674         [](VkBaseOutStructure* p) { (void)p;
3675             switch (p->sType) {
3676                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3677                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3678                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3679                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3680                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3681                 } break;
3682                 default: break;
3683             }
3684         },
__anon3431b752ea02() 3685         [](VkBaseOutStructure* p) -> bool { (void)p;
3686             bool ret = true;
3687             switch (p->sType) {
3688                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3689                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3690                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3691                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3692                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3693                 } break;
3694                 default: break;
3695             }
3696             return ret;
3697         }
3698     },
3699     {
3700         VK_FORMAT_R8G8B8A8_SNORM,
__anon3431b752eb02() 3701         [](VkBaseOutStructure* p) { (void)p;
3702             switch (p->sType) {
3703                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3704                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3705                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3706                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3707                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3708                 } break;
3709                 default: break;
3710             }
3711         },
__anon3431b752ec02() 3712         [](VkBaseOutStructure* p) -> bool { (void)p;
3713             bool ret = true;
3714             switch (p->sType) {
3715                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3716                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3717                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3718                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3719                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3720                 } break;
3721                 default: break;
3722             }
3723             return ret;
3724         }
3725     },
3726     {
3727         VK_FORMAT_R8G8B8A8_SRGB,
__anon3431b752ed02() 3728         [](VkBaseOutStructure* p) { (void)p;
3729             switch (p->sType) {
3730                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3731                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3732                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3733                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3734                 } break;
3735                 default: break;
3736             }
3737         },
__anon3431b752ee02() 3738         [](VkBaseOutStructure* p) -> bool { (void)p;
3739             bool ret = true;
3740             switch (p->sType) {
3741                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3742                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3743                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3744                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3745                 } break;
3746                 default: break;
3747             }
3748             return ret;
3749         }
3750     },
3751     {
3752         VK_FORMAT_R8G8B8A8_UINT,
__anon3431b752ef02() 3753         [](VkBaseOutStructure* p) { (void)p;
3754             switch (p->sType) {
3755                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3756                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3757                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3758                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3759                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3760                 } break;
3761                 default: break;
3762             }
3763         },
__anon3431b752f002() 3764         [](VkBaseOutStructure* p) -> bool { (void)p;
3765             bool ret = true;
3766             switch (p->sType) {
3767                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3768                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3769                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3770                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3771                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3772                 } break;
3773                 default: break;
3774             }
3775             return ret;
3776         }
3777     },
3778     {
3779         VK_FORMAT_R8G8B8A8_UNORM,
__anon3431b752f102() 3780         [](VkBaseOutStructure* p) { (void)p;
3781             switch (p->sType) {
3782                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3783                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3784                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3785                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3786                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3787                 } break;
3788                 default: break;
3789             }
3790         },
__anon3431b752f202() 3791         [](VkBaseOutStructure* p) -> bool { (void)p;
3792             bool ret = true;
3793             switch (p->sType) {
3794                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3795                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3796                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3797                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3798                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3799                 } break;
3800                 default: break;
3801             }
3802             return ret;
3803         }
3804     },
3805     {
3806         VK_FORMAT_R8G8_SINT,
__anon3431b752f302() 3807         [](VkBaseOutStructure* p) { (void)p;
3808             switch (p->sType) {
3809                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3810                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3811                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3812                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3813                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3814                 } break;
3815                 default: break;
3816             }
3817         },
__anon3431b752f402() 3818         [](VkBaseOutStructure* p) -> bool { (void)p;
3819             bool ret = true;
3820             switch (p->sType) {
3821                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3822                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3823                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3824                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3825                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3826                 } break;
3827                 default: break;
3828             }
3829             return ret;
3830         }
3831     },
3832     {
3833         VK_FORMAT_R8G8_SNORM,
__anon3431b752f502() 3834         [](VkBaseOutStructure* p) { (void)p;
3835             switch (p->sType) {
3836                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3837                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3838                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3839                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3840                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3841                 } break;
3842                 default: break;
3843             }
3844         },
__anon3431b752f602() 3845         [](VkBaseOutStructure* p) -> bool { (void)p;
3846             bool ret = true;
3847             switch (p->sType) {
3848                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3849                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3850                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3851                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3852                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3853                 } break;
3854                 default: break;
3855             }
3856             return ret;
3857         }
3858     },
3859     {
3860         VK_FORMAT_R8G8_UINT,
__anon3431b752f702() 3861         [](VkBaseOutStructure* p) { (void)p;
3862             switch (p->sType) {
3863                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3864                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3865                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3866                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3867                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3868                 } break;
3869                 default: break;
3870             }
3871         },
__anon3431b752f802() 3872         [](VkBaseOutStructure* p) -> bool { (void)p;
3873             bool ret = true;
3874             switch (p->sType) {
3875                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3876                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3877                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3878                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3879                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3880                 } break;
3881                 default: break;
3882             }
3883             return ret;
3884         }
3885     },
3886     {
3887         VK_FORMAT_R8G8_UNORM,
__anon3431b752f902() 3888         [](VkBaseOutStructure* p) { (void)p;
3889             switch (p->sType) {
3890                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3891                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3892                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3893                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3894                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3895                 } break;
3896                 default: break;
3897             }
3898         },
__anon3431b752fa02() 3899         [](VkBaseOutStructure* p) -> bool { (void)p;
3900             bool ret = true;
3901             switch (p->sType) {
3902                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3903                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3904                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3905                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3906                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3907                 } break;
3908                 default: break;
3909             }
3910             return ret;
3911         }
3912     },
3913     {
3914         VK_FORMAT_R8_SINT,
__anon3431b752fb02() 3915         [](VkBaseOutStructure* p) { (void)p;
3916             switch (p->sType) {
3917                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3918                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3919                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3920                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3921                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3922                 } break;
3923                 default: break;
3924             }
3925         },
__anon3431b752fc02() 3926         [](VkBaseOutStructure* p) -> bool { (void)p;
3927             bool ret = true;
3928             switch (p->sType) {
3929                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3930                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3931                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3932                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3933                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3934                 } break;
3935                 default: break;
3936             }
3937             return ret;
3938         }
3939     },
3940     {
3941         VK_FORMAT_R8_SNORM,
__anon3431b752fd02() 3942         [](VkBaseOutStructure* p) { (void)p;
3943             switch (p->sType) {
3944                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3945                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3946                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3947                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3948                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3949                 } break;
3950                 default: break;
3951             }
3952         },
__anon3431b752fe02() 3953         [](VkBaseOutStructure* p) -> bool { (void)p;
3954             bool ret = true;
3955             switch (p->sType) {
3956                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3957                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3958                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3959                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3960                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3961                 } break;
3962                 default: break;
3963             }
3964             return ret;
3965         }
3966     },
3967     {
3968         VK_FORMAT_R8_UINT,
__anon3431b752ff02() 3969         [](VkBaseOutStructure* p) { (void)p;
3970             switch (p->sType) {
3971                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3972                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3973                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
3974                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3975                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
3976                 } break;
3977                 default: break;
3978             }
3979         },
__anon3431b75210002() 3980         [](VkBaseOutStructure* p) -> bool { (void)p;
3981             bool ret = true;
3982             switch (p->sType) {
3983                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3984                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
3985                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
3986                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3987                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
3988                 } break;
3989                 default: break;
3990             }
3991             return ret;
3992         }
3993     },
3994     {
3995         VK_FORMAT_R8_UNORM,
__anon3431b75210102() 3996         [](VkBaseOutStructure* p) { (void)p;
3997             switch (p->sType) {
3998                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
3999                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4000                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
4001                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4002                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4003                 } break;
4004                 default: break;
4005             }
4006         },
__anon3431b75210202() 4007         [](VkBaseOutStructure* p) -> bool { (void)p;
4008             bool ret = true;
4009             switch (p->sType) {
4010                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4011                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4012                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
4013                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4014                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4015                 } break;
4016                 default: break;
4017             }
4018             return ret;
4019         }
4020     },
4021 };
4022 
4023 static const VpStructChainerDesc chainerDesc = {
__anon3431b75210302() 4024     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
4025         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(nullptr));
4026         pfnCb(p, pUser);
4027     },
__anon3431b75210402() 4028     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
4029         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(nullptr));
4030         pfnCb(p, pUser);
4031     },
__anon3431b75210502() 4032     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
4033         pfnCb(count, p, pUser);
4034     },
__anon3431b75210602() 4035     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
4036         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
4037         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
4038         pfnCb(p, pUser);
4039     },
4040 };
4041 } // namespace baseline
4042 } // namespace blocks
4043 } // namespace VP_ANDROID_BASELINE_2021
4044 #endif // VP_ANDROID_baseline_2021
4045 
4046 #ifdef VP_ANDROID_baseline_2021_cpu_only
4047 namespace VP_ANDROID_BASELINE_2021_CPU_ONLY {
4048 
4049 static const VkStructureType featureStructTypes[] = {
4050     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
4051 };
4052 
4053 static const VkStructureType propertyStructTypes[] = {
4054     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR,
4055 };
4056 
4057 static const VkStructureType formatStructTypes[] = {
4058     VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR,
4059     VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR,
4060 };
4061 
4062 static const VkExtensionProperties instanceExtensions[] = {
4063     VkExtensionProperties{ VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, 1 },
4064     VkExtensionProperties{ VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, 1 },
4065     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, 1 },
4066     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, 1 },
4067     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, 1 },
4068     VkExtensionProperties{ VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 1 },
4069     VkExtensionProperties{ VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, 1 },
4070     VkExtensionProperties{ VK_KHR_SURFACE_EXTENSION_NAME, 1 },
4071 };
4072 
4073 static const VkExtensionProperties deviceExtensions[] = {
4074     VkExtensionProperties{ VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, 1 },
4075     VkExtensionProperties{ VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, 1 },
4076     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, 1 },
4077     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, 1 },
4078     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, 1 },
4079     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, 1 },
4080     VkExtensionProperties{ VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, 1 },
4081     VkExtensionProperties{ VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME, 1 },
4082     VkExtensionProperties{ VK_KHR_MAINTENANCE_1_EXTENSION_NAME, 1 },
4083     VkExtensionProperties{ VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, 1 },
4084     VkExtensionProperties{ VK_KHR_SWAPCHAIN_EXTENSION_NAME, 1 },
4085 };
4086 
4087 static const VpFeatureDesc featureDesc = {
__anon3431b75210702() 4088     [](VkBaseOutStructure* p) { (void)p;
4089             switch (p->sType) {
4090                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
4091                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
4092                     s->features.depthBiasClamp = VK_TRUE;
4093                     s->features.fragmentStoresAndAtomics = VK_TRUE;
4094                     s->features.fullDrawIndexUint32 = VK_TRUE;
4095                     s->features.imageCubeArray = VK_TRUE;
4096                     s->features.independentBlend = VK_TRUE;
4097                     s->features.robustBufferAccess = VK_TRUE;
4098                     s->features.sampleRateShading = VK_TRUE;
4099                     s->features.shaderSampledImageArrayDynamicIndexing = VK_TRUE;
4100                     s->features.shaderStorageImageArrayDynamicIndexing = VK_TRUE;
4101                     s->features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE;
4102                     s->features.textureCompressionASTC_LDR = VK_TRUE;
4103                     s->features.textureCompressionETC2 = VK_TRUE;
4104                 } break;
4105                 default: break;
4106             }
4107     },
__anon3431b75210802() 4108     [](VkBaseOutStructure* p) -> bool { (void)p;
4109         bool ret = true;
4110             switch (p->sType) {
4111                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
4112                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
4113                     ret = ret && (s->features.depthBiasClamp == VK_TRUE);
4114                     ret = ret && (s->features.fragmentStoresAndAtomics == VK_TRUE);
4115                     ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE);
4116                     ret = ret && (s->features.imageCubeArray == VK_TRUE);
4117                     ret = ret && (s->features.independentBlend == VK_TRUE);
4118                     ret = ret && (s->features.robustBufferAccess == VK_TRUE);
4119                     ret = ret && (s->features.sampleRateShading == VK_TRUE);
4120                     ret = ret && (s->features.shaderSampledImageArrayDynamicIndexing == VK_TRUE);
4121                     ret = ret && (s->features.shaderStorageImageArrayDynamicIndexing == VK_TRUE);
4122                     ret = ret && (s->features.shaderUniformBufferArrayDynamicIndexing == VK_TRUE);
4123                     ret = ret && (s->features.textureCompressionASTC_LDR == VK_TRUE);
4124                     ret = ret && (s->features.textureCompressionETC2 == VK_TRUE);
4125                 } break;
4126                 default: break;
4127             }
4128         return ret;
4129     }
4130 };
4131 
4132 static const VpPropertyDesc propertyDesc = {
__anon3431b75210902() 4133     [](VkBaseOutStructure* p) { (void)p;
4134     },
__anon3431b75210a02() 4135     [](VkBaseOutStructure* p) -> bool { (void)p;
4136         bool ret = true;
4137         return ret;
4138     }
4139 };
4140 
4141 static const VpStructChainerDesc chainerDesc = {
__anon3431b75210b02() 4142     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
4143         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(nullptr));
4144         pfnCb(p, pUser);
4145     },
__anon3431b75210c02() 4146     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
4147         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(nullptr));
4148         pfnCb(p, pUser);
4149     },
__anon3431b75210d02() 4150     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
4151         pfnCb(count, p, pUser);
4152     },
__anon3431b75210e02() 4153     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
4154         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
4155         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
4156         pfnCb(p, pUser);
4157     },
4158 };
4159 
4160 namespace blocks {
4161 namespace baseline {
4162 
4163 static const VkExtensionProperties instanceExtensions[] = {
4164     VkExtensionProperties{ VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, 1 },
4165     VkExtensionProperties{ VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, 1 },
4166     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, 1 },
4167     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, 1 },
4168     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, 1 },
4169     VkExtensionProperties{ VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 1 },
4170     VkExtensionProperties{ VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, 1 },
4171     VkExtensionProperties{ VK_KHR_SURFACE_EXTENSION_NAME, 1 },
4172 };
4173 
4174 static const VkExtensionProperties deviceExtensions[] = {
4175     VkExtensionProperties{ VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, 1 },
4176     VkExtensionProperties{ VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, 1 },
4177     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, 1 },
4178     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, 1 },
4179     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, 1 },
4180     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, 1 },
4181     VkExtensionProperties{ VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, 1 },
4182     VkExtensionProperties{ VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME, 1 },
4183     VkExtensionProperties{ VK_KHR_MAINTENANCE_1_EXTENSION_NAME, 1 },
4184     VkExtensionProperties{ VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, 1 },
4185     VkExtensionProperties{ VK_KHR_SWAPCHAIN_EXTENSION_NAME, 1 },
4186 };
4187 
4188 static const VpFeatureDesc featureDesc = {
__anon3431b75210f02() 4189     [](VkBaseOutStructure* p) { (void)p;
4190             switch (p->sType) {
4191                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
4192                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
4193                     s->features.depthBiasClamp = VK_TRUE;
4194                     s->features.fragmentStoresAndAtomics = VK_TRUE;
4195                     s->features.fullDrawIndexUint32 = VK_TRUE;
4196                     s->features.imageCubeArray = VK_TRUE;
4197                     s->features.independentBlend = VK_TRUE;
4198                     s->features.robustBufferAccess = VK_TRUE;
4199                     s->features.sampleRateShading = VK_TRUE;
4200                     s->features.shaderSampledImageArrayDynamicIndexing = VK_TRUE;
4201                     s->features.shaderStorageImageArrayDynamicIndexing = VK_TRUE;
4202                     s->features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE;
4203                     s->features.textureCompressionASTC_LDR = VK_TRUE;
4204                     s->features.textureCompressionETC2 = VK_TRUE;
4205                 } break;
4206                 default: break;
4207             }
4208     },
__anon3431b75211002() 4209     [](VkBaseOutStructure* p) -> bool { (void)p;
4210         bool ret = true;
4211             switch (p->sType) {
4212                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
4213                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
4214                     ret = ret && (s->features.depthBiasClamp == VK_TRUE);
4215                     ret = ret && (s->features.fragmentStoresAndAtomics == VK_TRUE);
4216                     ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE);
4217                     ret = ret && (s->features.imageCubeArray == VK_TRUE);
4218                     ret = ret && (s->features.independentBlend == VK_TRUE);
4219                     ret = ret && (s->features.robustBufferAccess == VK_TRUE);
4220                     ret = ret && (s->features.sampleRateShading == VK_TRUE);
4221                     ret = ret && (s->features.shaderSampledImageArrayDynamicIndexing == VK_TRUE);
4222                     ret = ret && (s->features.shaderStorageImageArrayDynamicIndexing == VK_TRUE);
4223                     ret = ret && (s->features.shaderUniformBufferArrayDynamicIndexing == VK_TRUE);
4224                     ret = ret && (s->features.textureCompressionASTC_LDR == VK_TRUE);
4225                     ret = ret && (s->features.textureCompressionETC2 == VK_TRUE);
4226                 } break;
4227                 default: break;
4228             }
4229         return ret;
4230     }
4231 };
4232 
4233 static const VpPropertyDesc propertyDesc = {
__anon3431b75211102() 4234     [](VkBaseOutStructure* p) { (void)p;
4235             switch (p->sType) {
4236                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: {
4237                     VkPhysicalDeviceProperties2KHR* s = static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p));
4238                     s->properties.limits.discreteQueuePriorities = 2;
4239                     s->properties.limits.framebufferColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
4240                     s->properties.limits.framebufferDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
4241                     s->properties.limits.framebufferNoAttachmentsSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
4242                     s->properties.limits.framebufferStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
4243                     s->properties.limits.maxBoundDescriptorSets = 4;
4244                     s->properties.limits.maxColorAttachments = 4;
4245                     s->properties.limits.maxComputeSharedMemorySize = 16384;
4246                     s->properties.limits.maxComputeWorkGroupCount[0] = 65535;
4247                     s->properties.limits.maxComputeWorkGroupCount[1] = 65535;
4248                     s->properties.limits.maxComputeWorkGroupCount[2] = 65535;
4249                     s->properties.limits.maxComputeWorkGroupInvocations = 128;
4250                     s->properties.limits.maxComputeWorkGroupSize[0] = 128;
4251                     s->properties.limits.maxComputeWorkGroupSize[1] = 128;
4252                     s->properties.limits.maxComputeWorkGroupSize[2] = 64;
4253                     s->properties.limits.maxDescriptorSetInputAttachments = 4;
4254                     s->properties.limits.maxDescriptorSetSampledImages = 48;
4255                     s->properties.limits.maxDescriptorSetSamplers = 48;
4256                     s->properties.limits.maxDescriptorSetStorageBuffers = 24;
4257                     s->properties.limits.maxDescriptorSetStorageBuffersDynamic = 4;
4258                     s->properties.limits.maxDescriptorSetStorageImages = 12;
4259                     s->properties.limits.maxDescriptorSetUniformBuffers = 36;
4260                     s->properties.limits.maxDescriptorSetUniformBuffersDynamic = 8;
4261                     s->properties.limits.maxDrawIndexedIndexValue = 4294967295;
4262                     s->properties.limits.maxDrawIndirectCount = 1;
4263                     s->properties.limits.maxFragmentCombinedOutputResources = 8;
4264                     s->properties.limits.maxFragmentInputComponents = 64;
4265                     s->properties.limits.maxFragmentOutputAttachments = 4;
4266                     s->properties.limits.maxFramebufferHeight = 4096;
4267                     s->properties.limits.maxFramebufferLayers = 256;
4268                     s->properties.limits.maxFramebufferWidth = 4096;
4269                     s->properties.limits.maxImageArrayLayers = 256;
4270                     s->properties.limits.maxImageDimension1D = 4096;
4271                     s->properties.limits.maxImageDimension2D = 4096;
4272                     s->properties.limits.maxImageDimension3D = 512;
4273                     s->properties.limits.maxImageDimensionCube = 4096;
4274                     s->properties.limits.maxInterpolationOffset = 0.4375f;
4275                     s->properties.limits.maxMemoryAllocationCount = 4096;
4276                     s->properties.limits.maxPerStageDescriptorInputAttachments = 4;
4277                     s->properties.limits.maxPerStageDescriptorSampledImages = 16;
4278                     s->properties.limits.maxPerStageDescriptorSamplers = 16;
4279                     s->properties.limits.maxPerStageDescriptorStorageBuffers = 4;
4280                     s->properties.limits.maxPerStageDescriptorStorageImages = 4;
4281                     s->properties.limits.maxPerStageDescriptorUniformBuffers = 12;
4282                     s->properties.limits.maxPerStageResources = 44;
4283                     s->properties.limits.maxPushConstantsSize = 128;
4284                     s->properties.limits.maxSampleMaskWords = 1;
4285                     s->properties.limits.maxSamplerAllocationCount = 4000;
4286                     s->properties.limits.maxSamplerAnisotropy = 1.0f;
4287                     s->properties.limits.maxSamplerLodBias = 2.0f;
4288                     s->properties.limits.maxStorageBufferRange = 134217728;
4289                     s->properties.limits.maxTexelBufferElements = 65536;
4290                     s->properties.limits.maxTexelOffset = 7;
4291                     s->properties.limits.maxUniformBufferRange = 16384;
4292                     s->properties.limits.maxVertexInputAttributeOffset = 2047;
4293                     s->properties.limits.maxVertexInputAttributes = 16;
4294                     s->properties.limits.maxVertexInputBindingStride = 2048;
4295                     s->properties.limits.maxVertexInputBindings = 16;
4296                     s->properties.limits.maxVertexOutputComponents = 64;
4297                     s->properties.limits.maxViewportDimensions[0] = 4096;
4298                     s->properties.limits.maxViewportDimensions[1] = 4096;
4299                     s->properties.limits.maxViewports = 1;
4300                     s->properties.limits.minInterpolationOffset = -0.5f;
4301                     s->properties.limits.minMemoryMapAlignment = 4096;
4302                     s->properties.limits.minStorageBufferOffsetAlignment = 256;
4303                     s->properties.limits.minTexelBufferOffsetAlignment = 256;
4304                     s->properties.limits.minTexelOffset = -8;
4305                     s->properties.limits.minUniformBufferOffsetAlignment = 256;
4306                     s->properties.limits.mipmapPrecisionBits = 4;
4307                     s->properties.limits.sampledImageColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
4308                     s->properties.limits.sampledImageDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
4309                     s->properties.limits.sampledImageIntegerSampleCounts |= (VK_SAMPLE_COUNT_1_BIT);
4310                     s->properties.limits.sampledImageStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
4311                     s->properties.limits.standardSampleLocations = VK_TRUE;
4312                     s->properties.limits.storageImageSampleCounts |= (VK_SAMPLE_COUNT_1_BIT);
4313                     s->properties.limits.subPixelInterpolationOffsetBits = 4;
4314                     s->properties.limits.subPixelPrecisionBits = 4;
4315                     s->properties.limits.subTexelPrecisionBits = 4;
4316                     s->properties.limits.viewportBoundsRange[0] = -8192;
4317                     s->properties.limits.viewportBoundsRange[1] = 8191;
4318                 } break;
4319                 default: break;
4320             }
4321     },
__anon3431b75211202() 4322     [](VkBaseOutStructure* p) -> bool { (void)p;
4323         bool ret = true;
4324             switch (p->sType) {
4325                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: {
4326                     VkPhysicalDeviceProperties2KHR* s = static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p));
4327                     ret = ret && (s->properties.limits.discreteQueuePriorities >= 2);
4328                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
4329                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
4330                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferNoAttachmentsSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
4331                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
4332                     ret = ret && (s->properties.limits.maxBoundDescriptorSets >= 4);
4333                     ret = ret && (s->properties.limits.maxColorAttachments >= 4);
4334                     ret = ret && (s->properties.limits.maxComputeSharedMemorySize >= 16384);
4335                     ret = ret && (s->properties.limits.maxComputeWorkGroupCount[0] >= 65535);
4336                     ret = ret && (s->properties.limits.maxComputeWorkGroupCount[1] >= 65535);
4337                     ret = ret && (s->properties.limits.maxComputeWorkGroupCount[2] >= 65535);
4338                     ret = ret && (s->properties.limits.maxComputeWorkGroupInvocations >= 128);
4339                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[0] >= 128);
4340                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[1] >= 128);
4341                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[2] >= 64);
4342                     ret = ret && (s->properties.limits.maxDescriptorSetInputAttachments >= 4);
4343                     ret = ret && (s->properties.limits.maxDescriptorSetSampledImages >= 48);
4344                     ret = ret && (s->properties.limits.maxDescriptorSetSamplers >= 48);
4345                     ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffers >= 24);
4346                     ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffersDynamic >= 4);
4347                     ret = ret && (s->properties.limits.maxDescriptorSetStorageImages >= 12);
4348                     ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffers >= 36);
4349                     ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffersDynamic >= 8);
4350                     ret = ret && (s->properties.limits.maxDrawIndexedIndexValue >= 4294967295);
4351                     ret = ret && (s->properties.limits.maxDrawIndirectCount >= 1);
4352                     ret = ret && (s->properties.limits.maxFragmentCombinedOutputResources >= 8);
4353                     ret = ret && (s->properties.limits.maxFragmentInputComponents >= 64);
4354                     ret = ret && (s->properties.limits.maxFragmentOutputAttachments >= 4);
4355                     ret = ret && (s->properties.limits.maxFramebufferHeight >= 4096);
4356                     ret = ret && (s->properties.limits.maxFramebufferLayers >= 256);
4357                     ret = ret && (s->properties.limits.maxFramebufferWidth >= 4096);
4358                     ret = ret && (s->properties.limits.maxImageArrayLayers >= 256);
4359                     ret = ret && (s->properties.limits.maxImageDimension1D >= 4096);
4360                     ret = ret && (s->properties.limits.maxImageDimension2D >= 4096);
4361                     ret = ret && (s->properties.limits.maxImageDimension3D >= 512);
4362                     ret = ret && (s->properties.limits.maxImageDimensionCube >= 4096);
4363                     ret = ret && (s->properties.limits.maxInterpolationOffset >= 0.4375);
4364                     ret = ret && (s->properties.limits.maxMemoryAllocationCount >= 4096);
4365                     ret = ret && (s->properties.limits.maxPerStageDescriptorInputAttachments >= 4);
4366                     ret = ret && (s->properties.limits.maxPerStageDescriptorSampledImages >= 16);
4367                     ret = ret && (s->properties.limits.maxPerStageDescriptorSamplers >= 16);
4368                     ret = ret && (s->properties.limits.maxPerStageDescriptorStorageBuffers >= 4);
4369                     ret = ret && (s->properties.limits.maxPerStageDescriptorStorageImages >= 4);
4370                     ret = ret && (s->properties.limits.maxPerStageDescriptorUniformBuffers >= 12);
4371                     ret = ret && (s->properties.limits.maxPerStageResources >= 44);
4372                     ret = ret && (s->properties.limits.maxPushConstantsSize >= 128);
4373                     ret = ret && (s->properties.limits.maxSampleMaskWords >= 1);
4374                     ret = ret && (s->properties.limits.maxSamplerAllocationCount >= 4000);
4375                     ret = ret && (s->properties.limits.maxSamplerAnisotropy >= 1.0);
4376                     ret = ret && (s->properties.limits.maxSamplerLodBias >= 2.0);
4377                     ret = ret && (s->properties.limits.maxStorageBufferRange >= 134217728);
4378                     ret = ret && (s->properties.limits.maxTexelBufferElements >= 65536);
4379                     ret = ret && (s->properties.limits.maxTexelOffset >= 7);
4380                     ret = ret && (s->properties.limits.maxUniformBufferRange >= 16384);
4381                     ret = ret && (s->properties.limits.maxVertexInputAttributeOffset >= 2047);
4382                     ret = ret && (s->properties.limits.maxVertexInputAttributes >= 16);
4383                     ret = ret && (s->properties.limits.maxVertexInputBindingStride >= 2048);
4384                     ret = ret && (s->properties.limits.maxVertexInputBindings >= 16);
4385                     ret = ret && (s->properties.limits.maxVertexOutputComponents >= 64);
4386                     ret = ret && (s->properties.limits.maxViewportDimensions[0] >= 4096);
4387                     ret = ret && (s->properties.limits.maxViewportDimensions[1] >= 4096);
4388                     ret = ret && (s->properties.limits.maxViewports >= 1);
4389                     ret = ret && (s->properties.limits.minInterpolationOffset <= -0.5);
4390                     ret = ret && (s->properties.limits.minMemoryMapAlignment <= 4096);
4391                     ret = ret && ((s->properties.limits.minMemoryMapAlignment & (s->properties.limits.minMemoryMapAlignment - 1)) == 0);
4392                     ret = ret && (s->properties.limits.minStorageBufferOffsetAlignment <= 256);
4393                     ret = ret && ((s->properties.limits.minStorageBufferOffsetAlignment & (s->properties.limits.minStorageBufferOffsetAlignment - 1)) == 0);
4394                     ret = ret && (s->properties.limits.minTexelBufferOffsetAlignment <= 256);
4395                     ret = ret && ((s->properties.limits.minTexelBufferOffsetAlignment & (s->properties.limits.minTexelBufferOffsetAlignment - 1)) == 0);
4396                     ret = ret && (s->properties.limits.minTexelOffset <= -8);
4397                     ret = ret && (s->properties.limits.minUniformBufferOffsetAlignment <= 256);
4398                     ret = ret && ((s->properties.limits.minUniformBufferOffsetAlignment & (s->properties.limits.minUniformBufferOffsetAlignment - 1)) == 0);
4399                     ret = ret && (s->properties.limits.mipmapPrecisionBits >= 4);
4400                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
4401                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
4402                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageIntegerSampleCounts, (VK_SAMPLE_COUNT_1_BIT)));
4403                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
4404                     ret = ret && (s->properties.limits.standardSampleLocations == VK_TRUE);
4405                     ret = ret && (vpCheckFlags(s->properties.limits.storageImageSampleCounts, (VK_SAMPLE_COUNT_1_BIT)));
4406                     ret = ret && (s->properties.limits.subPixelInterpolationOffsetBits >= 4);
4407                     ret = ret && (s->properties.limits.subPixelPrecisionBits >= 4);
4408                     ret = ret && (s->properties.limits.subTexelPrecisionBits >= 4);
4409                     ret = ret && (s->properties.limits.viewportBoundsRange[0] <= -8192);
4410                     ret = ret && (s->properties.limits.viewportBoundsRange[1] >= 8191);
4411                 } break;
4412                 default: break;
4413             }
4414         return ret;
4415     }
4416 };
4417 
4418 static const VpFormatDesc formatDesc[] = {
4419     {
4420         VK_FORMAT_A1R5G5B5_UNORM_PACK16,
__anon3431b75211302() 4421         [](VkBaseOutStructure* p) { (void)p;
4422             switch (p->sType) {
4423                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4424                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4425                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4426                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4427                 } break;
4428                 default: break;
4429             }
4430         },
__anon3431b75211402() 4431         [](VkBaseOutStructure* p) -> bool { (void)p;
4432             bool ret = true;
4433             switch (p->sType) {
4434                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4435                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4436                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4437                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4438                 } break;
4439                 default: break;
4440             }
4441             return ret;
4442         }
4443     },
4444     {
4445         VK_FORMAT_A2B10G10R10_UINT_PACK32,
__anon3431b75211502() 4446         [](VkBaseOutStructure* p) { (void)p;
4447             switch (p->sType) {
4448                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4449                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4450                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT);
4451                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4452                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4453                 } break;
4454                 default: break;
4455             }
4456         },
__anon3431b75211602() 4457         [](VkBaseOutStructure* p) -> bool { (void)p;
4458             bool ret = true;
4459             switch (p->sType) {
4460                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4461                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4462                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)));
4463                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4464                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4465                 } break;
4466                 default: break;
4467             }
4468             return ret;
4469         }
4470     },
4471     {
4472         VK_FORMAT_A2B10G10R10_UNORM_PACK32,
__anon3431b75211702() 4473         [](VkBaseOutStructure* p) { (void)p;
4474             switch (p->sType) {
4475                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4476                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4477                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
4478                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4479                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4480                 } break;
4481                 default: break;
4482             }
4483         },
__anon3431b75211802() 4484         [](VkBaseOutStructure* p) -> bool { (void)p;
4485             bool ret = true;
4486             switch (p->sType) {
4487                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4488                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4489                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
4490                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4491                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4492                 } break;
4493                 default: break;
4494             }
4495             return ret;
4496         }
4497     },
4498     {
4499         VK_FORMAT_A8B8G8R8_SINT_PACK32,
__anon3431b75211902() 4500         [](VkBaseOutStructure* p) { (void)p;
4501             switch (p->sType) {
4502                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4503                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4504                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
4505                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4506                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4507                 } break;
4508                 default: break;
4509             }
4510         },
__anon3431b75211a02() 4511         [](VkBaseOutStructure* p) -> bool { (void)p;
4512             bool ret = true;
4513             switch (p->sType) {
4514                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4515                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4516                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
4517                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4518                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4519                 } break;
4520                 default: break;
4521             }
4522             return ret;
4523         }
4524     },
4525     {
4526         VK_FORMAT_A8B8G8R8_SNORM_PACK32,
__anon3431b75211b02() 4527         [](VkBaseOutStructure* p) { (void)p;
4528             switch (p->sType) {
4529                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4530                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4531                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
4532                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4533                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4534                 } break;
4535                 default: break;
4536             }
4537         },
__anon3431b75211c02() 4538         [](VkBaseOutStructure* p) -> bool { (void)p;
4539             bool ret = true;
4540             switch (p->sType) {
4541                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4542                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4543                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
4544                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4545                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4546                 } break;
4547                 default: break;
4548             }
4549             return ret;
4550         }
4551     },
4552     {
4553         VK_FORMAT_A8B8G8R8_SRGB_PACK32,
__anon3431b75211d02() 4554         [](VkBaseOutStructure* p) { (void)p;
4555             switch (p->sType) {
4556                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4557                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4558                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4559                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4560                 } break;
4561                 default: break;
4562             }
4563         },
__anon3431b75211e02() 4564         [](VkBaseOutStructure* p) -> bool { (void)p;
4565             bool ret = true;
4566             switch (p->sType) {
4567                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4568                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4569                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4570                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4571                 } break;
4572                 default: break;
4573             }
4574             return ret;
4575         }
4576     },
4577     {
4578         VK_FORMAT_A8B8G8R8_UINT_PACK32,
__anon3431b75211f02() 4579         [](VkBaseOutStructure* p) { (void)p;
4580             switch (p->sType) {
4581                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4582                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4583                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
4584                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4585                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4586                 } break;
4587                 default: break;
4588             }
4589         },
__anon3431b75212002() 4590         [](VkBaseOutStructure* p) -> bool { (void)p;
4591             bool ret = true;
4592             switch (p->sType) {
4593                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4594                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4595                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
4596                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4597                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4598                 } break;
4599                 default: break;
4600             }
4601             return ret;
4602         }
4603     },
4604     {
4605         VK_FORMAT_A8B8G8R8_UNORM_PACK32,
__anon3431b75212102() 4606         [](VkBaseOutStructure* p) { (void)p;
4607             switch (p->sType) {
4608                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4609                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4610                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
4611                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4612                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4613                 } break;
4614                 default: break;
4615             }
4616         },
__anon3431b75212202() 4617         [](VkBaseOutStructure* p) -> bool { (void)p;
4618             bool ret = true;
4619             switch (p->sType) {
4620                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4621                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4622                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
4623                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4624                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4625                 } break;
4626                 default: break;
4627             }
4628             return ret;
4629         }
4630     },
4631     {
4632         VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
__anon3431b75212302() 4633         [](VkBaseOutStructure* p) { (void)p;
4634             switch (p->sType) {
4635                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4636                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4637                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4638                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4639                 } break;
4640                 default: break;
4641             }
4642         },
__anon3431b75212402() 4643         [](VkBaseOutStructure* p) -> bool { (void)p;
4644             bool ret = true;
4645             switch (p->sType) {
4646                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4647                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4648                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4649                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4650                 } break;
4651                 default: break;
4652             }
4653             return ret;
4654         }
4655     },
4656     {
4657         VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
__anon3431b75212502() 4658         [](VkBaseOutStructure* p) { (void)p;
4659             switch (p->sType) {
4660                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4661                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4662                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4663                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4664                 } break;
4665                 default: break;
4666             }
4667         },
__anon3431b75212602() 4668         [](VkBaseOutStructure* p) -> bool { (void)p;
4669             bool ret = true;
4670             switch (p->sType) {
4671                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4672                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4673                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4674                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4675                 } break;
4676                 default: break;
4677             }
4678             return ret;
4679         }
4680     },
4681     {
4682         VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
__anon3431b75212702() 4683         [](VkBaseOutStructure* p) { (void)p;
4684             switch (p->sType) {
4685                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4686                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4687                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4688                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4689                 } break;
4690                 default: break;
4691             }
4692         },
__anon3431b75212802() 4693         [](VkBaseOutStructure* p) -> bool { (void)p;
4694             bool ret = true;
4695             switch (p->sType) {
4696                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4697                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4698                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4699                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4700                 } break;
4701                 default: break;
4702             }
4703             return ret;
4704         }
4705     },
4706     {
4707         VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
__anon3431b75212902() 4708         [](VkBaseOutStructure* p) { (void)p;
4709             switch (p->sType) {
4710                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4711                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4712                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4713                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4714                 } break;
4715                 default: break;
4716             }
4717         },
__anon3431b75212a02() 4718         [](VkBaseOutStructure* p) -> bool { (void)p;
4719             bool ret = true;
4720             switch (p->sType) {
4721                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4722                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4723                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4724                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4725                 } break;
4726                 default: break;
4727             }
4728             return ret;
4729         }
4730     },
4731     {
4732         VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
__anon3431b75212b02() 4733         [](VkBaseOutStructure* p) { (void)p;
4734             switch (p->sType) {
4735                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4736                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4737                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4738                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4739                 } break;
4740                 default: break;
4741             }
4742         },
__anon3431b75212c02() 4743         [](VkBaseOutStructure* p) -> bool { (void)p;
4744             bool ret = true;
4745             switch (p->sType) {
4746                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4747                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4748                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4749                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4750                 } break;
4751                 default: break;
4752             }
4753             return ret;
4754         }
4755     },
4756     {
4757         VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
__anon3431b75212d02() 4758         [](VkBaseOutStructure* p) { (void)p;
4759             switch (p->sType) {
4760                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4761                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4762                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4763                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4764                 } break;
4765                 default: break;
4766             }
4767         },
__anon3431b75212e02() 4768         [](VkBaseOutStructure* p) -> bool { (void)p;
4769             bool ret = true;
4770             switch (p->sType) {
4771                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4772                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4773                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4774                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4775                 } break;
4776                 default: break;
4777             }
4778             return ret;
4779         }
4780     },
4781     {
4782         VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
__anon3431b75212f02() 4783         [](VkBaseOutStructure* p) { (void)p;
4784             switch (p->sType) {
4785                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4786                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4787                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4788                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4789                 } break;
4790                 default: break;
4791             }
4792         },
__anon3431b75213002() 4793         [](VkBaseOutStructure* p) -> bool { (void)p;
4794             bool ret = true;
4795             switch (p->sType) {
4796                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4797                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4798                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4799                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4800                 } break;
4801                 default: break;
4802             }
4803             return ret;
4804         }
4805     },
4806     {
4807         VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
__anon3431b75213102() 4808         [](VkBaseOutStructure* p) { (void)p;
4809             switch (p->sType) {
4810                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4811                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4812                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4813                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4814                 } break;
4815                 default: break;
4816             }
4817         },
__anon3431b75213202() 4818         [](VkBaseOutStructure* p) -> bool { (void)p;
4819             bool ret = true;
4820             switch (p->sType) {
4821                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4822                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4823                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4824                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4825                 } break;
4826                 default: break;
4827             }
4828             return ret;
4829         }
4830     },
4831     {
4832         VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
__anon3431b75213302() 4833         [](VkBaseOutStructure* p) { (void)p;
4834             switch (p->sType) {
4835                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4836                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4837                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4838                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4839                 } break;
4840                 default: break;
4841             }
4842         },
__anon3431b75213402() 4843         [](VkBaseOutStructure* p) -> bool { (void)p;
4844             bool ret = true;
4845             switch (p->sType) {
4846                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4847                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4848                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4849                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4850                 } break;
4851                 default: break;
4852             }
4853             return ret;
4854         }
4855     },
4856     {
4857         VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
__anon3431b75213502() 4858         [](VkBaseOutStructure* p) { (void)p;
4859             switch (p->sType) {
4860                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4861                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4862                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4863                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4864                 } break;
4865                 default: break;
4866             }
4867         },
__anon3431b75213602() 4868         [](VkBaseOutStructure* p) -> bool { (void)p;
4869             bool ret = true;
4870             switch (p->sType) {
4871                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4872                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4873                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4874                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4875                 } break;
4876                 default: break;
4877             }
4878             return ret;
4879         }
4880     },
4881     {
4882         VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
__anon3431b75213702() 4883         [](VkBaseOutStructure* p) { (void)p;
4884             switch (p->sType) {
4885                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4886                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4887                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4888                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4889                 } break;
4890                 default: break;
4891             }
4892         },
__anon3431b75213802() 4893         [](VkBaseOutStructure* p) -> bool { (void)p;
4894             bool ret = true;
4895             switch (p->sType) {
4896                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4897                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4898                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4899                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4900                 } break;
4901                 default: break;
4902             }
4903             return ret;
4904         }
4905     },
4906     {
4907         VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
__anon3431b75213902() 4908         [](VkBaseOutStructure* p) { (void)p;
4909             switch (p->sType) {
4910                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4911                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4912                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4913                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4914                 } break;
4915                 default: break;
4916             }
4917         },
__anon3431b75213a02() 4918         [](VkBaseOutStructure* p) -> bool { (void)p;
4919             bool ret = true;
4920             switch (p->sType) {
4921                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4922                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4923                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4924                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4925                 } break;
4926                 default: break;
4927             }
4928             return ret;
4929         }
4930     },
4931     {
4932         VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
__anon3431b75213b02() 4933         [](VkBaseOutStructure* p) { (void)p;
4934             switch (p->sType) {
4935                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4936                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4937                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4938                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4939                 } break;
4940                 default: break;
4941             }
4942         },
__anon3431b75213c02() 4943         [](VkBaseOutStructure* p) -> bool { (void)p;
4944             bool ret = true;
4945             switch (p->sType) {
4946                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4947                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4948                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4949                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4950                 } break;
4951                 default: break;
4952             }
4953             return ret;
4954         }
4955     },
4956     {
4957         VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
__anon3431b75213d02() 4958         [](VkBaseOutStructure* p) { (void)p;
4959             switch (p->sType) {
4960                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4961                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4962                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4963                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4964                 } break;
4965                 default: break;
4966             }
4967         },
__anon3431b75213e02() 4968         [](VkBaseOutStructure* p) -> bool { (void)p;
4969             bool ret = true;
4970             switch (p->sType) {
4971                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4972                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4973                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4974                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4975                 } break;
4976                 default: break;
4977             }
4978             return ret;
4979         }
4980     },
4981     {
4982         VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
__anon3431b75213f02() 4983         [](VkBaseOutStructure* p) { (void)p;
4984             switch (p->sType) {
4985                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4986                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4987                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4988                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
4989                 } break;
4990                 default: break;
4991             }
4992         },
__anon3431b75214002() 4993         [](VkBaseOutStructure* p) -> bool { (void)p;
4994             bool ret = true;
4995             switch (p->sType) {
4996                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
4997                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
4998                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
4999                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5000                 } break;
5001                 default: break;
5002             }
5003             return ret;
5004         }
5005     },
5006     {
5007         VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
__anon3431b75214102() 5008         [](VkBaseOutStructure* p) { (void)p;
5009             switch (p->sType) {
5010                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5011                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5012                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5013                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5014                 } break;
5015                 default: break;
5016             }
5017         },
__anon3431b75214202() 5018         [](VkBaseOutStructure* p) -> bool { (void)p;
5019             bool ret = true;
5020             switch (p->sType) {
5021                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5022                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5023                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5024                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5025                 } break;
5026                 default: break;
5027             }
5028             return ret;
5029         }
5030     },
5031     {
5032         VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
__anon3431b75214302() 5033         [](VkBaseOutStructure* p) { (void)p;
5034             switch (p->sType) {
5035                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5036                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5037                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5038                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5039                 } break;
5040                 default: break;
5041             }
5042         },
__anon3431b75214402() 5043         [](VkBaseOutStructure* p) -> bool { (void)p;
5044             bool ret = true;
5045             switch (p->sType) {
5046                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5047                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5048                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5049                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5050                 } break;
5051                 default: break;
5052             }
5053             return ret;
5054         }
5055     },
5056     {
5057         VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
__anon3431b75214502() 5058         [](VkBaseOutStructure* p) { (void)p;
5059             switch (p->sType) {
5060                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5061                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5062                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5063                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5064                 } break;
5065                 default: break;
5066             }
5067         },
__anon3431b75214602() 5068         [](VkBaseOutStructure* p) -> bool { (void)p;
5069             bool ret = true;
5070             switch (p->sType) {
5071                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5072                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5073                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5074                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5075                 } break;
5076                 default: break;
5077             }
5078             return ret;
5079         }
5080     },
5081     {
5082         VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
__anon3431b75214702() 5083         [](VkBaseOutStructure* p) { (void)p;
5084             switch (p->sType) {
5085                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5086                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5087                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5088                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5089                 } break;
5090                 default: break;
5091             }
5092         },
__anon3431b75214802() 5093         [](VkBaseOutStructure* p) -> bool { (void)p;
5094             bool ret = true;
5095             switch (p->sType) {
5096                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5097                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5098                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5099                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5100                 } break;
5101                 default: break;
5102             }
5103             return ret;
5104         }
5105     },
5106     {
5107         VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
__anon3431b75214902() 5108         [](VkBaseOutStructure* p) { (void)p;
5109             switch (p->sType) {
5110                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5111                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5112                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5113                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5114                 } break;
5115                 default: break;
5116             }
5117         },
__anon3431b75214a02() 5118         [](VkBaseOutStructure* p) -> bool { (void)p;
5119             bool ret = true;
5120             switch (p->sType) {
5121                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5122                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5123                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5124                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5125                 } break;
5126                 default: break;
5127             }
5128             return ret;
5129         }
5130     },
5131     {
5132         VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
__anon3431b75214b02() 5133         [](VkBaseOutStructure* p) { (void)p;
5134             switch (p->sType) {
5135                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5136                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5137                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5138                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5139                 } break;
5140                 default: break;
5141             }
5142         },
__anon3431b75214c02() 5143         [](VkBaseOutStructure* p) -> bool { (void)p;
5144             bool ret = true;
5145             switch (p->sType) {
5146                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5147                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5148                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5149                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5150                 } break;
5151                 default: break;
5152             }
5153             return ret;
5154         }
5155     },
5156     {
5157         VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
__anon3431b75214d02() 5158         [](VkBaseOutStructure* p) { (void)p;
5159             switch (p->sType) {
5160                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5161                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5162                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5163                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5164                 } break;
5165                 default: break;
5166             }
5167         },
__anon3431b75214e02() 5168         [](VkBaseOutStructure* p) -> bool { (void)p;
5169             bool ret = true;
5170             switch (p->sType) {
5171                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5172                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5173                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5174                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5175                 } break;
5176                 default: break;
5177             }
5178             return ret;
5179         }
5180     },
5181     {
5182         VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
__anon3431b75214f02() 5183         [](VkBaseOutStructure* p) { (void)p;
5184             switch (p->sType) {
5185                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5186                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5187                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5188                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5189                 } break;
5190                 default: break;
5191             }
5192         },
__anon3431b75215002() 5193         [](VkBaseOutStructure* p) -> bool { (void)p;
5194             bool ret = true;
5195             switch (p->sType) {
5196                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5197                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5198                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5199                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5200                 } break;
5201                 default: break;
5202             }
5203             return ret;
5204         }
5205     },
5206     {
5207         VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
__anon3431b75215102() 5208         [](VkBaseOutStructure* p) { (void)p;
5209             switch (p->sType) {
5210                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5211                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5212                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5213                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5214                 } break;
5215                 default: break;
5216             }
5217         },
__anon3431b75215202() 5218         [](VkBaseOutStructure* p) -> bool { (void)p;
5219             bool ret = true;
5220             switch (p->sType) {
5221                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5222                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5223                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5224                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5225                 } break;
5226                 default: break;
5227             }
5228             return ret;
5229         }
5230     },
5231     {
5232         VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
__anon3431b75215302() 5233         [](VkBaseOutStructure* p) { (void)p;
5234             switch (p->sType) {
5235                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5236                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5237                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5238                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5239                 } break;
5240                 default: break;
5241             }
5242         },
__anon3431b75215402() 5243         [](VkBaseOutStructure* p) -> bool { (void)p;
5244             bool ret = true;
5245             switch (p->sType) {
5246                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5247                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5248                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5249                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5250                 } break;
5251                 default: break;
5252             }
5253             return ret;
5254         }
5255     },
5256     {
5257         VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
__anon3431b75215502() 5258         [](VkBaseOutStructure* p) { (void)p;
5259             switch (p->sType) {
5260                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5261                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5262                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5263                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5264                 } break;
5265                 default: break;
5266             }
5267         },
__anon3431b75215602() 5268         [](VkBaseOutStructure* p) -> bool { (void)p;
5269             bool ret = true;
5270             switch (p->sType) {
5271                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5272                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5273                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5274                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5275                 } break;
5276                 default: break;
5277             }
5278             return ret;
5279         }
5280     },
5281     {
5282         VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
__anon3431b75215702() 5283         [](VkBaseOutStructure* p) { (void)p;
5284             switch (p->sType) {
5285                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5286                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5287                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5288                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5289                 } break;
5290                 default: break;
5291             }
5292         },
__anon3431b75215802() 5293         [](VkBaseOutStructure* p) -> bool { (void)p;
5294             bool ret = true;
5295             switch (p->sType) {
5296                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5297                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5298                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5299                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5300                 } break;
5301                 default: break;
5302             }
5303             return ret;
5304         }
5305     },
5306     {
5307         VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
__anon3431b75215902() 5308         [](VkBaseOutStructure* p) { (void)p;
5309             switch (p->sType) {
5310                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5311                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5312                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5313                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5314                 } break;
5315                 default: break;
5316             }
5317         },
__anon3431b75215a02() 5318         [](VkBaseOutStructure* p) -> bool { (void)p;
5319             bool ret = true;
5320             switch (p->sType) {
5321                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5322                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5323                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5324                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5325                 } break;
5326                 default: break;
5327             }
5328             return ret;
5329         }
5330     },
5331     {
5332         VK_FORMAT_B10G11R11_UFLOAT_PACK32,
__anon3431b75215b02() 5333         [](VkBaseOutStructure* p) { (void)p;
5334             switch (p->sType) {
5335                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5336                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5337                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT);
5338                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5339                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5340                 } break;
5341                 default: break;
5342             }
5343         },
__anon3431b75215c02() 5344         [](VkBaseOutStructure* p) -> bool { (void)p;
5345             bool ret = true;
5346             switch (p->sType) {
5347                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5348                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5349                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)));
5350                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5351                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5352                 } break;
5353                 default: break;
5354             }
5355             return ret;
5356         }
5357     },
5358     {
5359         VK_FORMAT_B4G4R4A4_UNORM_PACK16,
__anon3431b75215d02() 5360         [](VkBaseOutStructure* p) { (void)p;
5361             switch (p->sType) {
5362                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5363                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5364                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5365                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5366                 } break;
5367                 default: break;
5368             }
5369         },
__anon3431b75215e02() 5370         [](VkBaseOutStructure* p) -> bool { (void)p;
5371             bool ret = true;
5372             switch (p->sType) {
5373                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5374                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5375                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5376                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5377                 } break;
5378                 default: break;
5379             }
5380             return ret;
5381         }
5382     },
5383     {
5384         VK_FORMAT_B8G8R8A8_SRGB,
__anon3431b75215f02() 5385         [](VkBaseOutStructure* p) { (void)p;
5386             switch (p->sType) {
5387                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5388                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5389                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5390                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5391                 } break;
5392                 default: break;
5393             }
5394         },
__anon3431b75216002() 5395         [](VkBaseOutStructure* p) -> bool { (void)p;
5396             bool ret = true;
5397             switch (p->sType) {
5398                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5399                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5400                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5401                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5402                 } break;
5403                 default: break;
5404             }
5405             return ret;
5406         }
5407     },
5408     {
5409         VK_FORMAT_B8G8R8A8_UNORM,
__anon3431b75216102() 5410         [](VkBaseOutStructure* p) { (void)p;
5411             switch (p->sType) {
5412                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5413                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5414                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
5415                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5416                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5417                 } break;
5418                 default: break;
5419             }
5420         },
__anon3431b75216202() 5421         [](VkBaseOutStructure* p) -> bool { (void)p;
5422             bool ret = true;
5423             switch (p->sType) {
5424                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5425                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5426                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
5427                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5428                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5429                 } break;
5430                 default: break;
5431             }
5432             return ret;
5433         }
5434     },
5435     {
5436         VK_FORMAT_D16_UNORM,
__anon3431b75216302() 5437         [](VkBaseOutStructure* p) { (void)p;
5438             switch (p->sType) {
5439                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5440                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5441                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5442                 } break;
5443                 default: break;
5444             }
5445         },
__anon3431b75216402() 5446         [](VkBaseOutStructure* p) -> bool { (void)p;
5447             bool ret = true;
5448             switch (p->sType) {
5449                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5450                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5451                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5452                 } break;
5453                 default: break;
5454             }
5455             return ret;
5456         }
5457     },
5458     {
5459         VK_FORMAT_D32_SFLOAT,
__anon3431b75216502() 5460         [](VkBaseOutStructure* p) { (void)p;
5461             switch (p->sType) {
5462                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5463                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5464                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5465                 } break;
5466                 default: break;
5467             }
5468         },
__anon3431b75216602() 5469         [](VkBaseOutStructure* p) -> bool { (void)p;
5470             bool ret = true;
5471             switch (p->sType) {
5472                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5473                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5474                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5475                 } break;
5476                 default: break;
5477             }
5478             return ret;
5479         }
5480     },
5481     {
5482         VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
__anon3431b75216702() 5483         [](VkBaseOutStructure* p) { (void)p;
5484             switch (p->sType) {
5485                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5486                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5487                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5488                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5489                 } break;
5490                 default: break;
5491             }
5492         },
__anon3431b75216802() 5493         [](VkBaseOutStructure* p) -> bool { (void)p;
5494             bool ret = true;
5495             switch (p->sType) {
5496                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5497                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5498                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5499                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5500                 } break;
5501                 default: break;
5502             }
5503             return ret;
5504         }
5505     },
5506     {
5507         VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
__anon3431b75216902() 5508         [](VkBaseOutStructure* p) { (void)p;
5509             switch (p->sType) {
5510                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5511                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5512                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5513                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5514                 } break;
5515                 default: break;
5516             }
5517         },
__anon3431b75216a02() 5518         [](VkBaseOutStructure* p) -> bool { (void)p;
5519             bool ret = true;
5520             switch (p->sType) {
5521                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5522                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5523                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5524                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5525                 } break;
5526                 default: break;
5527             }
5528             return ret;
5529         }
5530     },
5531     {
5532         VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
__anon3431b75216b02() 5533         [](VkBaseOutStructure* p) { (void)p;
5534             switch (p->sType) {
5535                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5536                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5537                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5538                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5539                 } break;
5540                 default: break;
5541             }
5542         },
__anon3431b75216c02() 5543         [](VkBaseOutStructure* p) -> bool { (void)p;
5544             bool ret = true;
5545             switch (p->sType) {
5546                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5547                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5548                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5549                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5550                 } break;
5551                 default: break;
5552             }
5553             return ret;
5554         }
5555     },
5556     {
5557         VK_FORMAT_EAC_R11_SNORM_BLOCK,
__anon3431b75216d02() 5558         [](VkBaseOutStructure* p) { (void)p;
5559             switch (p->sType) {
5560                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5561                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5562                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5563                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5564                 } break;
5565                 default: break;
5566             }
5567         },
__anon3431b75216e02() 5568         [](VkBaseOutStructure* p) -> bool { (void)p;
5569             bool ret = true;
5570             switch (p->sType) {
5571                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5572                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5573                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5574                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5575                 } break;
5576                 default: break;
5577             }
5578             return ret;
5579         }
5580     },
5581     {
5582         VK_FORMAT_EAC_R11_UNORM_BLOCK,
__anon3431b75216f02() 5583         [](VkBaseOutStructure* p) { (void)p;
5584             switch (p->sType) {
5585                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5586                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5587                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5588                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5589                 } break;
5590                 default: break;
5591             }
5592         },
__anon3431b75217002() 5593         [](VkBaseOutStructure* p) -> bool { (void)p;
5594             bool ret = true;
5595             switch (p->sType) {
5596                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5597                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5598                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5599                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5600                 } break;
5601                 default: break;
5602             }
5603             return ret;
5604         }
5605     },
5606     {
5607         VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
__anon3431b75217102() 5608         [](VkBaseOutStructure* p) { (void)p;
5609             switch (p->sType) {
5610                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5611                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5612                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5613                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5614                 } break;
5615                 default: break;
5616             }
5617         },
__anon3431b75217202() 5618         [](VkBaseOutStructure* p) -> bool { (void)p;
5619             bool ret = true;
5620             switch (p->sType) {
5621                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5622                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5623                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5624                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5625                 } break;
5626                 default: break;
5627             }
5628             return ret;
5629         }
5630     },
5631     {
5632         VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
__anon3431b75217302() 5633         [](VkBaseOutStructure* p) { (void)p;
5634             switch (p->sType) {
5635                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5636                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5637                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5638                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5639                 } break;
5640                 default: break;
5641             }
5642         },
__anon3431b75217402() 5643         [](VkBaseOutStructure* p) -> bool { (void)p;
5644             bool ret = true;
5645             switch (p->sType) {
5646                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5647                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5648                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5649                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5650                 } break;
5651                 default: break;
5652             }
5653             return ret;
5654         }
5655     },
5656     {
5657         VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
__anon3431b75217502() 5658         [](VkBaseOutStructure* p) { (void)p;
5659             switch (p->sType) {
5660                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5661                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5662                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5663                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5664                 } break;
5665                 default: break;
5666             }
5667         },
__anon3431b75217602() 5668         [](VkBaseOutStructure* p) -> bool { (void)p;
5669             bool ret = true;
5670             switch (p->sType) {
5671                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5672                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5673                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5674                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5675                 } break;
5676                 default: break;
5677             }
5678             return ret;
5679         }
5680     },
5681     {
5682         VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
__anon3431b75217702() 5683         [](VkBaseOutStructure* p) { (void)p;
5684             switch (p->sType) {
5685                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5686                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5687                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5688                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5689                 } break;
5690                 default: break;
5691             }
5692         },
__anon3431b75217802() 5693         [](VkBaseOutStructure* p) -> bool { (void)p;
5694             bool ret = true;
5695             switch (p->sType) {
5696                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5697                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5698                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5699                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5700                 } break;
5701                 default: break;
5702             }
5703             return ret;
5704         }
5705     },
5706     {
5707         VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
__anon3431b75217902() 5708         [](VkBaseOutStructure* p) { (void)p;
5709             switch (p->sType) {
5710                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5711                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5712                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5713                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5714                 } break;
5715                 default: break;
5716             }
5717         },
__anon3431b75217a02() 5718         [](VkBaseOutStructure* p) -> bool { (void)p;
5719             bool ret = true;
5720             switch (p->sType) {
5721                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5722                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5723                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5724                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5725                 } break;
5726                 default: break;
5727             }
5728             return ret;
5729         }
5730     },
5731     {
5732         VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
__anon3431b75217b02() 5733         [](VkBaseOutStructure* p) { (void)p;
5734             switch (p->sType) {
5735                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5736                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5737                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5738                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5739                 } break;
5740                 default: break;
5741             }
5742         },
__anon3431b75217c02() 5743         [](VkBaseOutStructure* p) -> bool { (void)p;
5744             bool ret = true;
5745             switch (p->sType) {
5746                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5747                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5748                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5749                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5750                 } break;
5751                 default: break;
5752             }
5753             return ret;
5754         }
5755     },
5756     {
5757         VK_FORMAT_R16G16B16A16_SFLOAT,
__anon3431b75217d02() 5758         [](VkBaseOutStructure* p) { (void)p;
5759             switch (p->sType) {
5760                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5761                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5762                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
5763                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5764                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5765                 } break;
5766                 default: break;
5767             }
5768         },
__anon3431b75217e02() 5769         [](VkBaseOutStructure* p) -> bool { (void)p;
5770             bool ret = true;
5771             switch (p->sType) {
5772                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5773                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5774                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
5775                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5776                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5777                 } break;
5778                 default: break;
5779             }
5780             return ret;
5781         }
5782     },
5783     {
5784         VK_FORMAT_R16G16B16A16_SINT,
__anon3431b75217f02() 5785         [](VkBaseOutStructure* p) { (void)p;
5786             switch (p->sType) {
5787                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5788                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5789                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
5790                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5791                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5792                 } break;
5793                 default: break;
5794             }
5795         },
__anon3431b75218002() 5796         [](VkBaseOutStructure* p) -> bool { (void)p;
5797             bool ret = true;
5798             switch (p->sType) {
5799                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5800                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5801                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
5802                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5803                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5804                 } break;
5805                 default: break;
5806             }
5807             return ret;
5808         }
5809     },
5810     {
5811         VK_FORMAT_R16G16B16A16_SNORM,
__anon3431b75218102() 5812         [](VkBaseOutStructure* p) { (void)p;
5813             switch (p->sType) {
5814                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5815                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5816                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
5817                 } break;
5818                 default: break;
5819             }
5820         },
__anon3431b75218202() 5821         [](VkBaseOutStructure* p) -> bool { (void)p;
5822             bool ret = true;
5823             switch (p->sType) {
5824                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5825                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5826                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
5827                 } break;
5828                 default: break;
5829             }
5830             return ret;
5831         }
5832     },
5833     {
5834         VK_FORMAT_R16G16B16A16_UINT,
__anon3431b75218302() 5835         [](VkBaseOutStructure* p) { (void)p;
5836             switch (p->sType) {
5837                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5838                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5839                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
5840                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5841                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5842                 } break;
5843                 default: break;
5844             }
5845         },
__anon3431b75218402() 5846         [](VkBaseOutStructure* p) -> bool { (void)p;
5847             bool ret = true;
5848             switch (p->sType) {
5849                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5850                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5851                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
5852                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5853                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5854                 } break;
5855                 default: break;
5856             }
5857             return ret;
5858         }
5859     },
5860     {
5861         VK_FORMAT_R16G16_SFLOAT,
__anon3431b75218502() 5862         [](VkBaseOutStructure* p) { (void)p;
5863             switch (p->sType) {
5864                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5865                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5866                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
5867                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5868                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5869                 } break;
5870                 default: break;
5871             }
5872         },
__anon3431b75218602() 5873         [](VkBaseOutStructure* p) -> bool { (void)p;
5874             bool ret = true;
5875             switch (p->sType) {
5876                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5877                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5878                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
5879                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5880                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5881                 } break;
5882                 default: break;
5883             }
5884             return ret;
5885         }
5886     },
5887     {
5888         VK_FORMAT_R16G16_SINT,
__anon3431b75218702() 5889         [](VkBaseOutStructure* p) { (void)p;
5890             switch (p->sType) {
5891                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5892                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5893                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
5894                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5895                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5896                 } break;
5897                 default: break;
5898             }
5899         },
__anon3431b75218802() 5900         [](VkBaseOutStructure* p) -> bool { (void)p;
5901             bool ret = true;
5902             switch (p->sType) {
5903                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5904                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5905                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
5906                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5907                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5908                 } break;
5909                 default: break;
5910             }
5911             return ret;
5912         }
5913     },
5914     {
5915         VK_FORMAT_R16G16_SNORM,
__anon3431b75218902() 5916         [](VkBaseOutStructure* p) { (void)p;
5917             switch (p->sType) {
5918                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5919                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5920                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
5921                 } break;
5922                 default: break;
5923             }
5924         },
__anon3431b75218a02() 5925         [](VkBaseOutStructure* p) -> bool { (void)p;
5926             bool ret = true;
5927             switch (p->sType) {
5928                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5929                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5930                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
5931                 } break;
5932                 default: break;
5933             }
5934             return ret;
5935         }
5936     },
5937     {
5938         VK_FORMAT_R16G16_UINT,
__anon3431b75218b02() 5939         [](VkBaseOutStructure* p) { (void)p;
5940             switch (p->sType) {
5941                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5942                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5943                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5944                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5945                 } break;
5946                 default: break;
5947             }
5948         },
__anon3431b75218c02() 5949         [](VkBaseOutStructure* p) -> bool { (void)p;
5950             bool ret = true;
5951             switch (p->sType) {
5952                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5953                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5954                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5955                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5956                 } break;
5957                 default: break;
5958             }
5959             return ret;
5960         }
5961     },
5962     {
5963         VK_FORMAT_R16_SFLOAT,
__anon3431b75218d02() 5964         [](VkBaseOutStructure* p) { (void)p;
5965             switch (p->sType) {
5966                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5967                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5968                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
5969                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5970                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5971                 } break;
5972                 default: break;
5973             }
5974         },
__anon3431b75218e02() 5975         [](VkBaseOutStructure* p) -> bool { (void)p;
5976             bool ret = true;
5977             switch (p->sType) {
5978                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5979                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5980                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
5981                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5982                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
5983                 } break;
5984                 default: break;
5985             }
5986             return ret;
5987         }
5988     },
5989     {
5990         VK_FORMAT_R16_SINT,
__anon3431b75218f02() 5991         [](VkBaseOutStructure* p) { (void)p;
5992             switch (p->sType) {
5993                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
5994                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
5995                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
5996                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5997                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
5998                 } break;
5999                 default: break;
6000             }
6001         },
__anon3431b75219002() 6002         [](VkBaseOutStructure* p) -> bool { (void)p;
6003             bool ret = true;
6004             switch (p->sType) {
6005                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6006                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6007                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6008                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6009                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6010                 } break;
6011                 default: break;
6012             }
6013             return ret;
6014         }
6015     },
6016     {
6017         VK_FORMAT_R16_SNORM,
__anon3431b75219102() 6018         [](VkBaseOutStructure* p) { (void)p;
6019             switch (p->sType) {
6020                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6021                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6022                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6023                 } break;
6024                 default: break;
6025             }
6026         },
__anon3431b75219202() 6027         [](VkBaseOutStructure* p) -> bool { (void)p;
6028             bool ret = true;
6029             switch (p->sType) {
6030                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6031                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6032                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6033                 } break;
6034                 default: break;
6035             }
6036             return ret;
6037         }
6038     },
6039     {
6040         VK_FORMAT_R16_UINT,
__anon3431b75219302() 6041         [](VkBaseOutStructure* p) { (void)p;
6042             switch (p->sType) {
6043                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6044                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6045                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6046                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6047                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6048                 } break;
6049                 default: break;
6050             }
6051         },
__anon3431b75219402() 6052         [](VkBaseOutStructure* p) -> bool { (void)p;
6053             bool ret = true;
6054             switch (p->sType) {
6055                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6056                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6057                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6058                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6059                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6060                 } break;
6061                 default: break;
6062             }
6063             return ret;
6064         }
6065     },
6066     {
6067         VK_FORMAT_R16_UNORM,
__anon3431b75219502() 6068         [](VkBaseOutStructure* p) { (void)p;
6069             switch (p->sType) {
6070                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6071                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6072                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6073                 } break;
6074                 default: break;
6075             }
6076         },
__anon3431b75219602() 6077         [](VkBaseOutStructure* p) -> bool { (void)p;
6078             bool ret = true;
6079             switch (p->sType) {
6080                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6081                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6082                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6083                 } break;
6084                 default: break;
6085             }
6086             return ret;
6087         }
6088     },
6089     {
6090         VK_FORMAT_R32G32B32A32_SFLOAT,
__anon3431b75219702() 6091         [](VkBaseOutStructure* p) { (void)p;
6092             switch (p->sType) {
6093                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6094                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6095                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6096                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6097                 } break;
6098                 default: break;
6099             }
6100         },
__anon3431b75219802() 6101         [](VkBaseOutStructure* p) -> bool { (void)p;
6102             bool ret = true;
6103             switch (p->sType) {
6104                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6105                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6106                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6107                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6108                 } break;
6109                 default: break;
6110             }
6111             return ret;
6112         }
6113     },
6114     {
6115         VK_FORMAT_R32G32B32A32_SINT,
__anon3431b75219902() 6116         [](VkBaseOutStructure* p) { (void)p;
6117             switch (p->sType) {
6118                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6119                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6120                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6121                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6122                 } break;
6123                 default: break;
6124             }
6125         },
__anon3431b75219a02() 6126         [](VkBaseOutStructure* p) -> bool { (void)p;
6127             bool ret = true;
6128             switch (p->sType) {
6129                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6130                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6131                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6132                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6133                 } break;
6134                 default: break;
6135             }
6136             return ret;
6137         }
6138     },
6139     {
6140         VK_FORMAT_R32G32B32A32_UINT,
__anon3431b75219b02() 6141         [](VkBaseOutStructure* p) { (void)p;
6142             switch (p->sType) {
6143                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6144                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6145                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6146                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6147                 } break;
6148                 default: break;
6149             }
6150         },
__anon3431b75219c02() 6151         [](VkBaseOutStructure* p) -> bool { (void)p;
6152             bool ret = true;
6153             switch (p->sType) {
6154                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6155                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6156                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6157                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6158                 } break;
6159                 default: break;
6160             }
6161             return ret;
6162         }
6163     },
6164     {
6165         VK_FORMAT_R32G32_SFLOAT,
__anon3431b75219d02() 6166         [](VkBaseOutStructure* p) { (void)p;
6167             switch (p->sType) {
6168                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6169                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6170                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6171                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6172                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6173                 } break;
6174                 default: break;
6175             }
6176         },
__anon3431b75219e02() 6177         [](VkBaseOutStructure* p) -> bool { (void)p;
6178             bool ret = true;
6179             switch (p->sType) {
6180                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6181                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6182                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6183                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6184                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6185                 } break;
6186                 default: break;
6187             }
6188             return ret;
6189         }
6190     },
6191     {
6192         VK_FORMAT_R32G32_SINT,
__anon3431b75219f02() 6193         [](VkBaseOutStructure* p) { (void)p;
6194             switch (p->sType) {
6195                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6196                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6197                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6198                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6199                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6200                 } break;
6201                 default: break;
6202             }
6203         },
__anon3431b7521a002() 6204         [](VkBaseOutStructure* p) -> bool { (void)p;
6205             bool ret = true;
6206             switch (p->sType) {
6207                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6208                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6209                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6210                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6211                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6212                 } break;
6213                 default: break;
6214             }
6215             return ret;
6216         }
6217     },
6218     {
6219         VK_FORMAT_R32G32_UINT,
__anon3431b7521a102() 6220         [](VkBaseOutStructure* p) { (void)p;
6221             switch (p->sType) {
6222                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6223                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6224                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6225                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6226                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6227                 } break;
6228                 default: break;
6229             }
6230         },
__anon3431b7521a202() 6231         [](VkBaseOutStructure* p) -> bool { (void)p;
6232             bool ret = true;
6233             switch (p->sType) {
6234                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6235                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6236                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6237                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6238                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6239                 } break;
6240                 default: break;
6241             }
6242             return ret;
6243         }
6244     },
6245     {
6246         VK_FORMAT_R32_SFLOAT,
__anon3431b7521a302() 6247         [](VkBaseOutStructure* p) { (void)p;
6248             switch (p->sType) {
6249                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6250                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6251                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6252                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6253                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6254                 } break;
6255                 default: break;
6256             }
6257         },
__anon3431b7521a402() 6258         [](VkBaseOutStructure* p) -> bool { (void)p;
6259             bool ret = true;
6260             switch (p->sType) {
6261                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6262                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6263                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6264                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6265                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6266                 } break;
6267                 default: break;
6268             }
6269             return ret;
6270         }
6271     },
6272     {
6273         VK_FORMAT_R32_SINT,
__anon3431b7521a502() 6274         [](VkBaseOutStructure* p) { (void)p;
6275             switch (p->sType) {
6276                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6277                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6278                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6279                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6280                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6281                 } break;
6282                 default: break;
6283             }
6284         },
__anon3431b7521a602() 6285         [](VkBaseOutStructure* p) -> bool { (void)p;
6286             bool ret = true;
6287             switch (p->sType) {
6288                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6289                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6290                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6291                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6292                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6293                 } break;
6294                 default: break;
6295             }
6296             return ret;
6297         }
6298     },
6299     {
6300         VK_FORMAT_R32_UINT,
__anon3431b7521a702() 6301         [](VkBaseOutStructure* p) { (void)p;
6302             switch (p->sType) {
6303                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6304                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6305                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6306                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6307                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6308                 } break;
6309                 default: break;
6310             }
6311         },
__anon3431b7521a802() 6312         [](VkBaseOutStructure* p) -> bool { (void)p;
6313             bool ret = true;
6314             switch (p->sType) {
6315                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6316                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6317                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6318                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6319                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6320                 } break;
6321                 default: break;
6322             }
6323             return ret;
6324         }
6325     },
6326     {
6327         VK_FORMAT_R5G6B5_UNORM_PACK16,
__anon3431b7521a902() 6328         [](VkBaseOutStructure* p) { (void)p;
6329             switch (p->sType) {
6330                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6331                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6332                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6333                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6334                 } break;
6335                 default: break;
6336             }
6337         },
__anon3431b7521aa02() 6338         [](VkBaseOutStructure* p) -> bool { (void)p;
6339             bool ret = true;
6340             switch (p->sType) {
6341                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6342                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6343                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6344                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6345                 } break;
6346                 default: break;
6347             }
6348             return ret;
6349         }
6350     },
6351     {
6352         VK_FORMAT_R8G8B8A8_SINT,
__anon3431b7521ab02() 6353         [](VkBaseOutStructure* p) { (void)p;
6354             switch (p->sType) {
6355                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6356                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6357                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6358                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6359                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6360                 } break;
6361                 default: break;
6362             }
6363         },
__anon3431b7521ac02() 6364         [](VkBaseOutStructure* p) -> bool { (void)p;
6365             bool ret = true;
6366             switch (p->sType) {
6367                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6368                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6369                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6370                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6371                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6372                 } break;
6373                 default: break;
6374             }
6375             return ret;
6376         }
6377     },
6378     {
6379         VK_FORMAT_R8G8B8A8_SNORM,
__anon3431b7521ad02() 6380         [](VkBaseOutStructure* p) { (void)p;
6381             switch (p->sType) {
6382                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6383                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6384                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6385                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6386                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6387                 } break;
6388                 default: break;
6389             }
6390         },
__anon3431b7521ae02() 6391         [](VkBaseOutStructure* p) -> bool { (void)p;
6392             bool ret = true;
6393             switch (p->sType) {
6394                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6395                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6396                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6397                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6398                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6399                 } break;
6400                 default: break;
6401             }
6402             return ret;
6403         }
6404     },
6405     {
6406         VK_FORMAT_R8G8B8A8_SRGB,
__anon3431b7521af02() 6407         [](VkBaseOutStructure* p) { (void)p;
6408             switch (p->sType) {
6409                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6410                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6411                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6412                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6413                 } break;
6414                 default: break;
6415             }
6416         },
__anon3431b7521b002() 6417         [](VkBaseOutStructure* p) -> bool { (void)p;
6418             bool ret = true;
6419             switch (p->sType) {
6420                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6421                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6422                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6423                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6424                 } break;
6425                 default: break;
6426             }
6427             return ret;
6428         }
6429     },
6430     {
6431         VK_FORMAT_R8G8B8A8_UINT,
__anon3431b7521b102() 6432         [](VkBaseOutStructure* p) { (void)p;
6433             switch (p->sType) {
6434                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6435                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6436                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6437                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6438                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6439                 } break;
6440                 default: break;
6441             }
6442         },
__anon3431b7521b202() 6443         [](VkBaseOutStructure* p) -> bool { (void)p;
6444             bool ret = true;
6445             switch (p->sType) {
6446                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6447                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6448                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6449                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6450                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6451                 } break;
6452                 default: break;
6453             }
6454             return ret;
6455         }
6456     },
6457     {
6458         VK_FORMAT_R8G8B8A8_UNORM,
__anon3431b7521b302() 6459         [](VkBaseOutStructure* p) { (void)p;
6460             switch (p->sType) {
6461                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6462                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6463                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6464                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6465                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6466                 } break;
6467                 default: break;
6468             }
6469         },
__anon3431b7521b402() 6470         [](VkBaseOutStructure* p) -> bool { (void)p;
6471             bool ret = true;
6472             switch (p->sType) {
6473                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6474                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6475                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6476                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6477                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6478                 } break;
6479                 default: break;
6480             }
6481             return ret;
6482         }
6483     },
6484     {
6485         VK_FORMAT_R8G8_SINT,
__anon3431b7521b502() 6486         [](VkBaseOutStructure* p) { (void)p;
6487             switch (p->sType) {
6488                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6489                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6490                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6491                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6492                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6493                 } break;
6494                 default: break;
6495             }
6496         },
__anon3431b7521b602() 6497         [](VkBaseOutStructure* p) -> bool { (void)p;
6498             bool ret = true;
6499             switch (p->sType) {
6500                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6501                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6502                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6503                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6504                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6505                 } break;
6506                 default: break;
6507             }
6508             return ret;
6509         }
6510     },
6511     {
6512         VK_FORMAT_R8G8_SNORM,
__anon3431b7521b702() 6513         [](VkBaseOutStructure* p) { (void)p;
6514             switch (p->sType) {
6515                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6516                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6517                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6518                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6519                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6520                 } break;
6521                 default: break;
6522             }
6523         },
__anon3431b7521b802() 6524         [](VkBaseOutStructure* p) -> bool { (void)p;
6525             bool ret = true;
6526             switch (p->sType) {
6527                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6528                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6529                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6530                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6531                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6532                 } break;
6533                 default: break;
6534             }
6535             return ret;
6536         }
6537     },
6538     {
6539         VK_FORMAT_R8G8_UINT,
__anon3431b7521b902() 6540         [](VkBaseOutStructure* p) { (void)p;
6541             switch (p->sType) {
6542                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6543                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6544                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6545                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6546                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6547                 } break;
6548                 default: break;
6549             }
6550         },
__anon3431b7521ba02() 6551         [](VkBaseOutStructure* p) -> bool { (void)p;
6552             bool ret = true;
6553             switch (p->sType) {
6554                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6555                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6556                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6557                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6558                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6559                 } break;
6560                 default: break;
6561             }
6562             return ret;
6563         }
6564     },
6565     {
6566         VK_FORMAT_R8G8_UNORM,
__anon3431b7521bb02() 6567         [](VkBaseOutStructure* p) { (void)p;
6568             switch (p->sType) {
6569                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6570                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6571                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6572                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6573                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6574                 } break;
6575                 default: break;
6576             }
6577         },
__anon3431b7521bc02() 6578         [](VkBaseOutStructure* p) -> bool { (void)p;
6579             bool ret = true;
6580             switch (p->sType) {
6581                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6582                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6583                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6584                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6585                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6586                 } break;
6587                 default: break;
6588             }
6589             return ret;
6590         }
6591     },
6592     {
6593         VK_FORMAT_R8_SINT,
__anon3431b7521bd02() 6594         [](VkBaseOutStructure* p) { (void)p;
6595             switch (p->sType) {
6596                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6597                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6598                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6599                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6600                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6601                 } break;
6602                 default: break;
6603             }
6604         },
__anon3431b7521be02() 6605         [](VkBaseOutStructure* p) -> bool { (void)p;
6606             bool ret = true;
6607             switch (p->sType) {
6608                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6609                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6610                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6611                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6612                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6613                 } break;
6614                 default: break;
6615             }
6616             return ret;
6617         }
6618     },
6619     {
6620         VK_FORMAT_R8_SNORM,
__anon3431b7521bf02() 6621         [](VkBaseOutStructure* p) { (void)p;
6622             switch (p->sType) {
6623                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6624                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6625                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6626                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6627                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6628                 } break;
6629                 default: break;
6630             }
6631         },
__anon3431b7521c002() 6632         [](VkBaseOutStructure* p) -> bool { (void)p;
6633             bool ret = true;
6634             switch (p->sType) {
6635                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6636                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6637                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6638                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6639                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6640                 } break;
6641                 default: break;
6642             }
6643             return ret;
6644         }
6645     },
6646     {
6647         VK_FORMAT_R8_UINT,
__anon3431b7521c102() 6648         [](VkBaseOutStructure* p) { (void)p;
6649             switch (p->sType) {
6650                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6651                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6652                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6653                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6654                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6655                 } break;
6656                 default: break;
6657             }
6658         },
__anon3431b7521c202() 6659         [](VkBaseOutStructure* p) -> bool { (void)p;
6660             bool ret = true;
6661             switch (p->sType) {
6662                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6663                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6664                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6665                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6666                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6667                 } break;
6668                 default: break;
6669             }
6670             return ret;
6671         }
6672     },
6673     {
6674         VK_FORMAT_R8_UNORM,
__anon3431b7521c302() 6675         [](VkBaseOutStructure* p) { (void)p;
6676             switch (p->sType) {
6677                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6678                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6679                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
6680                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6681                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
6682                 } break;
6683                 default: break;
6684             }
6685         },
__anon3431b7521c402() 6686         [](VkBaseOutStructure* p) -> bool { (void)p;
6687             bool ret = true;
6688             switch (p->sType) {
6689                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
6690                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
6691                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
6692                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6693                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
6694                 } break;
6695                 default: break;
6696             }
6697             return ret;
6698         }
6699     },
6700 };
6701 
6702 static const VpStructChainerDesc chainerDesc = {
__anon3431b7521c502() 6703     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
6704         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(nullptr));
6705         pfnCb(p, pUser);
6706     },
__anon3431b7521c602() 6707     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
6708         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(nullptr));
6709         pfnCb(p, pUser);
6710     },
__anon3431b7521c702() 6711     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
6712         pfnCb(count, p, pUser);
6713     },
__anon3431b7521c802() 6714     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
6715         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
6716         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
6717         pfnCb(p, pUser);
6718     },
6719 };
6720 } // namespace baseline
6721 } // namespace blocks
6722 } // namespace VP_ANDROID_BASELINE_2021_CPU_ONLY
6723 #endif // VP_ANDROID_baseline_2021_cpu_only
6724 
6725 #ifdef VP_ANDROID_baseline_2022
6726 namespace VP_ANDROID_BASELINE_2022 {
6727 
6728 static const VkStructureType featureStructTypes[] = {
6729     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
6730     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
6731     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
6732     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
6733     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
6734 };
6735 
6736 static const VkStructureType propertyStructTypes[] = {
6737     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR,
6738     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
6739 };
6740 
6741 static const VkStructureType formatStructTypes[] = {
6742     VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR,
6743     VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR,
6744 };
6745 
6746 static const VkExtensionProperties instanceExtensions[] = {
6747     VkExtensionProperties{ VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, 1 },
6748     VkExtensionProperties{ VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, 1 },
6749     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, 1 },
6750     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, 1 },
6751     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, 1 },
6752     VkExtensionProperties{ VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 1 },
6753     VkExtensionProperties{ VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, 1 },
6754     VkExtensionProperties{ VK_KHR_SURFACE_EXTENSION_NAME, 1 },
6755 };
6756 
6757 static const VkExtensionProperties deviceExtensions[] = {
6758     VkExtensionProperties{ VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME, 1 },
6759     VkExtensionProperties{ VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME, 1 },
6760     VkExtensionProperties{ VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME, 1 },
6761     VkExtensionProperties{ VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, 1 },
6762     VkExtensionProperties{ VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, 1 },
6763     VkExtensionProperties{ VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, 1 },
6764     VkExtensionProperties{ VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, 1 },
6765     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, 1 },
6766     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME, 1 },
6767     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, 1 },
6768     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, 1 },
6769     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, 1 },
6770     VkExtensionProperties{ VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, 1 },
6771     VkExtensionProperties{ VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME, 1 },
6772     VkExtensionProperties{ VK_KHR_MAINTENANCE_1_EXTENSION_NAME, 1 },
6773     VkExtensionProperties{ VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME, 1 },
6774     VkExtensionProperties{ VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, 1 },
6775     VkExtensionProperties{ VK_KHR_SWAPCHAIN_EXTENSION_NAME, 1 },
6776     VkExtensionProperties{ VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, 1 },
6777 };
6778 
6779 static const VpFeatureDesc featureDesc = {
__anon3431b7521c902() 6780     [](VkBaseOutStructure* p) { (void)p;
6781             switch (p->sType) {
6782                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
6783                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
6784                     s->features.depthBiasClamp = VK_TRUE;
6785                     s->features.fragmentStoresAndAtomics = VK_TRUE;
6786                     s->features.fullDrawIndexUint32 = VK_TRUE;
6787                     s->features.imageCubeArray = VK_TRUE;
6788                     s->features.independentBlend = VK_TRUE;
6789                     s->features.largePoints = VK_TRUE;
6790                     s->features.robustBufferAccess = VK_TRUE;
6791                     s->features.sampleRateShading = VK_TRUE;
6792                     s->features.shaderInt16 = VK_TRUE;
6793                     s->features.shaderSampledImageArrayDynamicIndexing = VK_TRUE;
6794                     s->features.shaderStorageBufferArrayDynamicIndexing = VK_TRUE;
6795                     s->features.shaderStorageImageArrayDynamicIndexing = VK_TRUE;
6796                     s->features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE;
6797                     s->features.textureCompressionASTC_LDR = VK_TRUE;
6798                     s->features.textureCompressionETC2 = VK_TRUE;
6799                 } break;
6800                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: {
6801                     VkPhysicalDeviceMultiviewFeatures* s = static_cast<VkPhysicalDeviceMultiviewFeatures*>(static_cast<void*>(p));
6802                     s->multiview = VK_TRUE;
6803                 } break;
6804                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
6805                     VkPhysicalDeviceSamplerYcbcrConversionFeatures* s = static_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(static_cast<void*>(p));
6806                     s->samplerYcbcrConversion = VK_TRUE;
6807                 } break;
6808                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: {
6809                     VkPhysicalDeviceShaderDrawParametersFeatures* s = static_cast<VkPhysicalDeviceShaderDrawParametersFeatures*>(static_cast<void*>(p));
6810                     s->shaderDrawParameters = VK_TRUE;
6811                 } break;
6812                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: {
6813                     VkPhysicalDeviceVariablePointersFeatures* s = static_cast<VkPhysicalDeviceVariablePointersFeatures*>(static_cast<void*>(p));
6814                     s->variablePointers = VK_TRUE;
6815                     s->variablePointersStorageBuffer = VK_TRUE;
6816                 } break;
6817                 default: break;
6818             }
6819     },
__anon3431b7521ca02() 6820     [](VkBaseOutStructure* p) -> bool { (void)p;
6821         bool ret = true;
6822             switch (p->sType) {
6823                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
6824                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
6825                     ret = ret && (s->features.depthBiasClamp == VK_TRUE);
6826                     ret = ret && (s->features.fragmentStoresAndAtomics == VK_TRUE);
6827                     ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE);
6828                     ret = ret && (s->features.imageCubeArray == VK_TRUE);
6829                     ret = ret && (s->features.independentBlend == VK_TRUE);
6830                     ret = ret && (s->features.largePoints == VK_TRUE);
6831                     ret = ret && (s->features.robustBufferAccess == VK_TRUE);
6832                     ret = ret && (s->features.sampleRateShading == VK_TRUE);
6833                     ret = ret && (s->features.shaderInt16 == VK_TRUE);
6834                     ret = ret && (s->features.shaderSampledImageArrayDynamicIndexing == VK_TRUE);
6835                     ret = ret && (s->features.shaderStorageBufferArrayDynamicIndexing == VK_TRUE);
6836                     ret = ret && (s->features.shaderStorageImageArrayDynamicIndexing == VK_TRUE);
6837                     ret = ret && (s->features.shaderUniformBufferArrayDynamicIndexing == VK_TRUE);
6838                     ret = ret && (s->features.textureCompressionASTC_LDR == VK_TRUE);
6839                     ret = ret && (s->features.textureCompressionETC2 == VK_TRUE);
6840                 } break;
6841                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: {
6842                     VkPhysicalDeviceMultiviewFeatures* s = static_cast<VkPhysicalDeviceMultiviewFeatures*>(static_cast<void*>(p));
6843                     ret = ret && (s->multiview == VK_TRUE);
6844                 } break;
6845                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
6846                     VkPhysicalDeviceSamplerYcbcrConversionFeatures* s = static_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(static_cast<void*>(p));
6847                     ret = ret && (s->samplerYcbcrConversion == VK_TRUE);
6848                 } break;
6849                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: {
6850                     VkPhysicalDeviceShaderDrawParametersFeatures* s = static_cast<VkPhysicalDeviceShaderDrawParametersFeatures*>(static_cast<void*>(p));
6851                     ret = ret && (s->shaderDrawParameters == VK_TRUE);
6852                 } break;
6853                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: {
6854                     VkPhysicalDeviceVariablePointersFeatures* s = static_cast<VkPhysicalDeviceVariablePointersFeatures*>(static_cast<void*>(p));
6855                     ret = ret && (s->variablePointers == VK_TRUE);
6856                     ret = ret && (s->variablePointersStorageBuffer == VK_TRUE);
6857                 } break;
6858                 default: break;
6859             }
6860         return ret;
6861     }
6862 };
6863 
6864 static const VpPropertyDesc propertyDesc = {
__anon3431b7521cb02() 6865     [](VkBaseOutStructure* p) { (void)p;
6866     },
__anon3431b7521cc02() 6867     [](VkBaseOutStructure* p) -> bool { (void)p;
6868         bool ret = true;
6869         return ret;
6870     }
6871 };
6872 
6873 static const VpStructChainerDesc chainerDesc = {
__anon3431b7521cd02() 6874     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
6875         VkPhysicalDeviceMultiviewFeatures physicalDeviceMultiviewFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, nullptr };
6876         VkPhysicalDeviceSamplerYcbcrConversionFeatures physicalDeviceSamplerYcbcrConversionFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, &physicalDeviceMultiviewFeatures };
6877         VkPhysicalDeviceShaderDrawParametersFeatures physicalDeviceShaderDrawParametersFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, &physicalDeviceSamplerYcbcrConversionFeatures };
6878         VkPhysicalDeviceVariablePointersFeatures physicalDeviceVariablePointersFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, &physicalDeviceShaderDrawParametersFeatures };
6879         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceVariablePointersFeatures));
6880         pfnCb(p, pUser);
6881     },
__anon3431b7521ce02() 6882     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
6883         VkPhysicalDeviceMultiviewProperties physicalDeviceMultiviewProperties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, nullptr };
6884         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceMultiviewProperties));
6885         pfnCb(p, pUser);
6886     },
__anon3431b7521cf02() 6887     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
6888         pfnCb(count, p, pUser);
6889     },
__anon3431b7521d002() 6890     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
6891         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
6892         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
6893         pfnCb(p, pUser);
6894     },
6895 };
6896 
6897 namespace blocks {
6898 namespace baseline {
6899 
6900 static const VkExtensionProperties instanceExtensions[] = {
6901     VkExtensionProperties{ VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, 1 },
6902     VkExtensionProperties{ VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, 1 },
6903     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, 1 },
6904     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, 1 },
6905     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, 1 },
6906     VkExtensionProperties{ VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, 1 },
6907     VkExtensionProperties{ VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, 1 },
6908     VkExtensionProperties{ VK_KHR_SURFACE_EXTENSION_NAME, 1 },
6909 };
6910 
6911 static const VkExtensionProperties deviceExtensions[] = {
6912     VkExtensionProperties{ VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME, 1 },
6913     VkExtensionProperties{ VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME, 1 },
6914     VkExtensionProperties{ VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME, 1 },
6915     VkExtensionProperties{ VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, 1 },
6916     VkExtensionProperties{ VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, 1 },
6917     VkExtensionProperties{ VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, 1 },
6918     VkExtensionProperties{ VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, 1 },
6919     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, 1 },
6920     VkExtensionProperties{ VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME, 1 },
6921     VkExtensionProperties{ VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, 1 },
6922     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, 1 },
6923     VkExtensionProperties{ VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, 1 },
6924     VkExtensionProperties{ VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, 1 },
6925     VkExtensionProperties{ VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME, 1 },
6926     VkExtensionProperties{ VK_KHR_MAINTENANCE_1_EXTENSION_NAME, 1 },
6927     VkExtensionProperties{ VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME, 1 },
6928     VkExtensionProperties{ VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, 1 },
6929     VkExtensionProperties{ VK_KHR_SWAPCHAIN_EXTENSION_NAME, 1 },
6930     VkExtensionProperties{ VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, 1 },
6931 };
6932 
6933 static const VpFeatureDesc featureDesc = {
__anon3431b7521d102() 6934     [](VkBaseOutStructure* p) { (void)p;
6935             switch (p->sType) {
6936                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
6937                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
6938                     s->features.depthBiasClamp = VK_TRUE;
6939                     s->features.fragmentStoresAndAtomics = VK_TRUE;
6940                     s->features.fullDrawIndexUint32 = VK_TRUE;
6941                     s->features.imageCubeArray = VK_TRUE;
6942                     s->features.independentBlend = VK_TRUE;
6943                     s->features.largePoints = VK_TRUE;
6944                     s->features.robustBufferAccess = VK_TRUE;
6945                     s->features.sampleRateShading = VK_TRUE;
6946                     s->features.shaderInt16 = VK_TRUE;
6947                     s->features.shaderSampledImageArrayDynamicIndexing = VK_TRUE;
6948                     s->features.shaderStorageBufferArrayDynamicIndexing = VK_TRUE;
6949                     s->features.shaderStorageImageArrayDynamicIndexing = VK_TRUE;
6950                     s->features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE;
6951                     s->features.textureCompressionASTC_LDR = VK_TRUE;
6952                     s->features.textureCompressionETC2 = VK_TRUE;
6953                 } break;
6954                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: {
6955                     VkPhysicalDeviceMultiviewFeatures* s = static_cast<VkPhysicalDeviceMultiviewFeatures*>(static_cast<void*>(p));
6956                     s->multiview = VK_TRUE;
6957                 } break;
6958                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
6959                     VkPhysicalDeviceSamplerYcbcrConversionFeatures* s = static_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(static_cast<void*>(p));
6960                     s->samplerYcbcrConversion = VK_TRUE;
6961                 } break;
6962                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: {
6963                     VkPhysicalDeviceShaderDrawParametersFeatures* s = static_cast<VkPhysicalDeviceShaderDrawParametersFeatures*>(static_cast<void*>(p));
6964                     s->shaderDrawParameters = VK_TRUE;
6965                 } break;
6966                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: {
6967                     VkPhysicalDeviceVariablePointersFeatures* s = static_cast<VkPhysicalDeviceVariablePointersFeatures*>(static_cast<void*>(p));
6968                     s->variablePointers = VK_TRUE;
6969                     s->variablePointersStorageBuffer = VK_TRUE;
6970                 } break;
6971                 default: break;
6972             }
6973     },
__anon3431b7521d202() 6974     [](VkBaseOutStructure* p) -> bool { (void)p;
6975         bool ret = true;
6976             switch (p->sType) {
6977                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR: {
6978                     VkPhysicalDeviceFeatures2KHR* s = static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p));
6979                     ret = ret && (s->features.depthBiasClamp == VK_TRUE);
6980                     ret = ret && (s->features.fragmentStoresAndAtomics == VK_TRUE);
6981                     ret = ret && (s->features.fullDrawIndexUint32 == VK_TRUE);
6982                     ret = ret && (s->features.imageCubeArray == VK_TRUE);
6983                     ret = ret && (s->features.independentBlend == VK_TRUE);
6984                     ret = ret && (s->features.largePoints == VK_TRUE);
6985                     ret = ret && (s->features.robustBufferAccess == VK_TRUE);
6986                     ret = ret && (s->features.sampleRateShading == VK_TRUE);
6987                     ret = ret && (s->features.shaderInt16 == VK_TRUE);
6988                     ret = ret && (s->features.shaderSampledImageArrayDynamicIndexing == VK_TRUE);
6989                     ret = ret && (s->features.shaderStorageBufferArrayDynamicIndexing == VK_TRUE);
6990                     ret = ret && (s->features.shaderStorageImageArrayDynamicIndexing == VK_TRUE);
6991                     ret = ret && (s->features.shaderUniformBufferArrayDynamicIndexing == VK_TRUE);
6992                     ret = ret && (s->features.textureCompressionASTC_LDR == VK_TRUE);
6993                     ret = ret && (s->features.textureCompressionETC2 == VK_TRUE);
6994                 } break;
6995                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: {
6996                     VkPhysicalDeviceMultiviewFeatures* s = static_cast<VkPhysicalDeviceMultiviewFeatures*>(static_cast<void*>(p));
6997                     ret = ret && (s->multiview == VK_TRUE);
6998                 } break;
6999                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
7000                     VkPhysicalDeviceSamplerYcbcrConversionFeatures* s = static_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(static_cast<void*>(p));
7001                     ret = ret && (s->samplerYcbcrConversion == VK_TRUE);
7002                 } break;
7003                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: {
7004                     VkPhysicalDeviceShaderDrawParametersFeatures* s = static_cast<VkPhysicalDeviceShaderDrawParametersFeatures*>(static_cast<void*>(p));
7005                     ret = ret && (s->shaderDrawParameters == VK_TRUE);
7006                 } break;
7007                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: {
7008                     VkPhysicalDeviceVariablePointersFeatures* s = static_cast<VkPhysicalDeviceVariablePointersFeatures*>(static_cast<void*>(p));
7009                     ret = ret && (s->variablePointers == VK_TRUE);
7010                     ret = ret && (s->variablePointersStorageBuffer == VK_TRUE);
7011                 } break;
7012                 default: break;
7013             }
7014         return ret;
7015     }
7016 };
7017 
7018 static const VpPropertyDesc propertyDesc = {
__anon3431b7521d302() 7019     [](VkBaseOutStructure* p) { (void)p;
7020             switch (p->sType) {
7021                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: {
7022                     VkPhysicalDeviceProperties2KHR* s = static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p));
7023                     s->properties.limits.discreteQueuePriorities = 2;
7024                     s->properties.limits.framebufferColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
7025                     s->properties.limits.framebufferDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
7026                     s->properties.limits.framebufferNoAttachmentsSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
7027                     s->properties.limits.framebufferStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
7028                     s->properties.limits.maxBoundDescriptorSets = 4;
7029                     s->properties.limits.maxColorAttachments = 4;
7030                     s->properties.limits.maxComputeSharedMemorySize = 16384;
7031                     s->properties.limits.maxComputeWorkGroupCount[0] = 65535;
7032                     s->properties.limits.maxComputeWorkGroupCount[1] = 65535;
7033                     s->properties.limits.maxComputeWorkGroupCount[2] = 65535;
7034                     s->properties.limits.maxComputeWorkGroupInvocations = 128;
7035                     s->properties.limits.maxComputeWorkGroupSize[0] = 128;
7036                     s->properties.limits.maxComputeWorkGroupSize[1] = 128;
7037                     s->properties.limits.maxComputeWorkGroupSize[2] = 64;
7038                     s->properties.limits.maxDescriptorSetInputAttachments = 4;
7039                     s->properties.limits.maxDescriptorSetSampledImages = 48;
7040                     s->properties.limits.maxDescriptorSetSamplers = 48;
7041                     s->properties.limits.maxDescriptorSetStorageBuffers = 24;
7042                     s->properties.limits.maxDescriptorSetStorageBuffersDynamic = 4;
7043                     s->properties.limits.maxDescriptorSetStorageImages = 12;
7044                     s->properties.limits.maxDescriptorSetUniformBuffers = 36;
7045                     s->properties.limits.maxDescriptorSetUniformBuffersDynamic = 8;
7046                     s->properties.limits.maxDrawIndexedIndexValue = 4294967295;
7047                     s->properties.limits.maxDrawIndirectCount = 1;
7048                     s->properties.limits.maxFragmentCombinedOutputResources = 8;
7049                     s->properties.limits.maxFragmentInputComponents = 64;
7050                     s->properties.limits.maxFragmentOutputAttachments = 4;
7051                     s->properties.limits.maxFramebufferHeight = 4096;
7052                     s->properties.limits.maxFramebufferLayers = 256;
7053                     s->properties.limits.maxFramebufferWidth = 4096;
7054                     s->properties.limits.maxImageArrayLayers = 256;
7055                     s->properties.limits.maxImageDimension1D = 4096;
7056                     s->properties.limits.maxImageDimension2D = 4096;
7057                     s->properties.limits.maxImageDimension3D = 512;
7058                     s->properties.limits.maxImageDimensionCube = 4096;
7059                     s->properties.limits.maxInterpolationOffset = 0.4375f;
7060                     s->properties.limits.maxMemoryAllocationCount = 4096;
7061                     s->properties.limits.maxPerStageDescriptorInputAttachments = 4;
7062                     s->properties.limits.maxPerStageDescriptorSampledImages = 16;
7063                     s->properties.limits.maxPerStageDescriptorSamplers = 16;
7064                     s->properties.limits.maxPerStageDescriptorStorageBuffers = 4;
7065                     s->properties.limits.maxPerStageDescriptorStorageImages = 4;
7066                     s->properties.limits.maxPerStageDescriptorUniformBuffers = 12;
7067                     s->properties.limits.maxPerStageResources = 44;
7068                     s->properties.limits.maxPushConstantsSize = 128;
7069                     s->properties.limits.maxSampleMaskWords = 1;
7070                     s->properties.limits.maxSamplerAllocationCount = 4000;
7071                     s->properties.limits.maxSamplerAnisotropy = 1.0f;
7072                     s->properties.limits.maxSamplerLodBias = 2.0f;
7073                     s->properties.limits.maxStorageBufferRange = 134217728;
7074                     s->properties.limits.maxTexelBufferElements = 65536;
7075                     s->properties.limits.maxTexelOffset = 7;
7076                     s->properties.limits.maxUniformBufferRange = 16384;
7077                     s->properties.limits.maxVertexInputAttributeOffset = 2047;
7078                     s->properties.limits.maxVertexInputAttributes = 16;
7079                     s->properties.limits.maxVertexInputBindingStride = 2048;
7080                     s->properties.limits.maxVertexInputBindings = 16;
7081                     s->properties.limits.maxVertexOutputComponents = 64;
7082                     s->properties.limits.maxViewportDimensions[0] = 4096;
7083                     s->properties.limits.maxViewportDimensions[1] = 4096;
7084                     s->properties.limits.maxViewports = 1;
7085                     s->properties.limits.minInterpolationOffset = -0.5f;
7086                     s->properties.limits.minMemoryMapAlignment = 4096;
7087                     s->properties.limits.minStorageBufferOffsetAlignment = 256;
7088                     s->properties.limits.minTexelBufferOffsetAlignment = 256;
7089                     s->properties.limits.minTexelOffset = -8;
7090                     s->properties.limits.minUniformBufferOffsetAlignment = 256;
7091                     s->properties.limits.mipmapPrecisionBits = 4;
7092                     s->properties.limits.pointSizeGranularity = 1;
7093                     s->properties.limits.pointSizeRange[0] = 1.0f;
7094                     s->properties.limits.pointSizeRange[1] = 511;
7095                     s->properties.limits.sampledImageColorSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
7096                     s->properties.limits.sampledImageDepthSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
7097                     s->properties.limits.sampledImageIntegerSampleCounts |= (VK_SAMPLE_COUNT_1_BIT);
7098                     s->properties.limits.sampledImageStencilSampleCounts |= (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT);
7099                     s->properties.limits.standardSampleLocations = VK_TRUE;
7100                     s->properties.limits.storageImageSampleCounts |= (VK_SAMPLE_COUNT_1_BIT);
7101                     s->properties.limits.subPixelInterpolationOffsetBits = 4;
7102                     s->properties.limits.subPixelPrecisionBits = 4;
7103                     s->properties.limits.subTexelPrecisionBits = 4;
7104                     s->properties.limits.viewportBoundsRange[0] = -8192;
7105                     s->properties.limits.viewportBoundsRange[1] = 8191;
7106                 } break;
7107                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: {
7108                     VkPhysicalDeviceMultiviewProperties* s = static_cast<VkPhysicalDeviceMultiviewProperties*>(static_cast<void*>(p));
7109                     s->maxMultiviewInstanceIndex = 134217727;
7110                     s->maxMultiviewViewCount = 6;
7111                 } break;
7112                 default: break;
7113             }
7114     },
__anon3431b7521d402() 7115     [](VkBaseOutStructure* p) -> bool { (void)p;
7116         bool ret = true;
7117             switch (p->sType) {
7118                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR: {
7119                     VkPhysicalDeviceProperties2KHR* s = static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p));
7120                     ret = ret && (s->properties.limits.discreteQueuePriorities >= 2);
7121                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
7122                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
7123                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferNoAttachmentsSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
7124                     ret = ret && (vpCheckFlags(s->properties.limits.framebufferStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
7125                     ret = ret && (s->properties.limits.maxBoundDescriptorSets >= 4);
7126                     ret = ret && (s->properties.limits.maxColorAttachments >= 4);
7127                     ret = ret && (s->properties.limits.maxComputeSharedMemorySize >= 16384);
7128                     ret = ret && (s->properties.limits.maxComputeWorkGroupCount[0] >= 65535);
7129                     ret = ret && (s->properties.limits.maxComputeWorkGroupCount[1] >= 65535);
7130                     ret = ret && (s->properties.limits.maxComputeWorkGroupCount[2] >= 65535);
7131                     ret = ret && (s->properties.limits.maxComputeWorkGroupInvocations >= 128);
7132                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[0] >= 128);
7133                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[1] >= 128);
7134                     ret = ret && (s->properties.limits.maxComputeWorkGroupSize[2] >= 64);
7135                     ret = ret && (s->properties.limits.maxDescriptorSetInputAttachments >= 4);
7136                     ret = ret && (s->properties.limits.maxDescriptorSetSampledImages >= 48);
7137                     ret = ret && (s->properties.limits.maxDescriptorSetSamplers >= 48);
7138                     ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffers >= 24);
7139                     ret = ret && (s->properties.limits.maxDescriptorSetStorageBuffersDynamic >= 4);
7140                     ret = ret && (s->properties.limits.maxDescriptorSetStorageImages >= 12);
7141                     ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffers >= 36);
7142                     ret = ret && (s->properties.limits.maxDescriptorSetUniformBuffersDynamic >= 8);
7143                     ret = ret && (s->properties.limits.maxDrawIndexedIndexValue >= 4294967295);
7144                     ret = ret && (s->properties.limits.maxDrawIndirectCount >= 1);
7145                     ret = ret && (s->properties.limits.maxFragmentCombinedOutputResources >= 8);
7146                     ret = ret && (s->properties.limits.maxFragmentInputComponents >= 64);
7147                     ret = ret && (s->properties.limits.maxFragmentOutputAttachments >= 4);
7148                     ret = ret && (s->properties.limits.maxFramebufferHeight >= 4096);
7149                     ret = ret && (s->properties.limits.maxFramebufferLayers >= 256);
7150                     ret = ret && (s->properties.limits.maxFramebufferWidth >= 4096);
7151                     ret = ret && (s->properties.limits.maxImageArrayLayers >= 256);
7152                     ret = ret && (s->properties.limits.maxImageDimension1D >= 4096);
7153                     ret = ret && (s->properties.limits.maxImageDimension2D >= 4096);
7154                     ret = ret && (s->properties.limits.maxImageDimension3D >= 512);
7155                     ret = ret && (s->properties.limits.maxImageDimensionCube >= 4096);
7156                     ret = ret && (s->properties.limits.maxInterpolationOffset >= 0.4375);
7157                     ret = ret && (s->properties.limits.maxMemoryAllocationCount >= 4096);
7158                     ret = ret && (s->properties.limits.maxPerStageDescriptorInputAttachments >= 4);
7159                     ret = ret && (s->properties.limits.maxPerStageDescriptorSampledImages >= 16);
7160                     ret = ret && (s->properties.limits.maxPerStageDescriptorSamplers >= 16);
7161                     ret = ret && (s->properties.limits.maxPerStageDescriptorStorageBuffers >= 4);
7162                     ret = ret && (s->properties.limits.maxPerStageDescriptorStorageImages >= 4);
7163                     ret = ret && (s->properties.limits.maxPerStageDescriptorUniformBuffers >= 12);
7164                     ret = ret && (s->properties.limits.maxPerStageResources >= 44);
7165                     ret = ret && (s->properties.limits.maxPushConstantsSize >= 128);
7166                     ret = ret && (s->properties.limits.maxSampleMaskWords >= 1);
7167                     ret = ret && (s->properties.limits.maxSamplerAllocationCount >= 4000);
7168                     ret = ret && (s->properties.limits.maxSamplerAnisotropy >= 1.0);
7169                     ret = ret && (s->properties.limits.maxSamplerLodBias >= 2.0);
7170                     ret = ret && (s->properties.limits.maxStorageBufferRange >= 134217728);
7171                     ret = ret && (s->properties.limits.maxTexelBufferElements >= 65536);
7172                     ret = ret && (s->properties.limits.maxTexelOffset >= 7);
7173                     ret = ret && (s->properties.limits.maxUniformBufferRange >= 16384);
7174                     ret = ret && (s->properties.limits.maxVertexInputAttributeOffset >= 2047);
7175                     ret = ret && (s->properties.limits.maxVertexInputAttributes >= 16);
7176                     ret = ret && (s->properties.limits.maxVertexInputBindingStride >= 2048);
7177                     ret = ret && (s->properties.limits.maxVertexInputBindings >= 16);
7178                     ret = ret && (s->properties.limits.maxVertexOutputComponents >= 64);
7179                     ret = ret && (s->properties.limits.maxViewportDimensions[0] >= 4096);
7180                     ret = ret && (s->properties.limits.maxViewportDimensions[1] >= 4096);
7181                     ret = ret && (s->properties.limits.maxViewports >= 1);
7182                     ret = ret && (s->properties.limits.minInterpolationOffset <= -0.5);
7183                     ret = ret && (s->properties.limits.minMemoryMapAlignment <= 4096);
7184                     ret = ret && ((s->properties.limits.minMemoryMapAlignment & (s->properties.limits.minMemoryMapAlignment - 1)) == 0);
7185                     ret = ret && (s->properties.limits.minStorageBufferOffsetAlignment <= 256);
7186                     ret = ret && ((s->properties.limits.minStorageBufferOffsetAlignment & (s->properties.limits.minStorageBufferOffsetAlignment - 1)) == 0);
7187                     ret = ret && (s->properties.limits.minTexelBufferOffsetAlignment <= 256);
7188                     ret = ret && ((s->properties.limits.minTexelBufferOffsetAlignment & (s->properties.limits.minTexelBufferOffsetAlignment - 1)) == 0);
7189                     ret = ret && (s->properties.limits.minTexelOffset <= -8);
7190                     ret = ret && (s->properties.limits.minUniformBufferOffsetAlignment <= 256);
7191                     ret = ret && ((s->properties.limits.minUniformBufferOffsetAlignment & (s->properties.limits.minUniformBufferOffsetAlignment - 1)) == 0);
7192                     ret = ret && (s->properties.limits.mipmapPrecisionBits >= 4);
7193                     ret = ret && (s->properties.limits.pointSizeGranularity <= 1);
7194                     ret = ret && (isMultiple(1, s->properties.limits.pointSizeGranularity));
7195                     ret = ret && (s->properties.limits.pointSizeRange[0] <= 1.0);
7196                     ret = ret && (s->properties.limits.pointSizeRange[1] >= 511);
7197                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageColorSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
7198                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageDepthSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
7199                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageIntegerSampleCounts, (VK_SAMPLE_COUNT_1_BIT)));
7200                     ret = ret && (vpCheckFlags(s->properties.limits.sampledImageStencilSampleCounts, (VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT)));
7201                     ret = ret && (s->properties.limits.standardSampleLocations == VK_TRUE);
7202                     ret = ret && (vpCheckFlags(s->properties.limits.storageImageSampleCounts, (VK_SAMPLE_COUNT_1_BIT)));
7203                     ret = ret && (s->properties.limits.subPixelInterpolationOffsetBits >= 4);
7204                     ret = ret && (s->properties.limits.subPixelPrecisionBits >= 4);
7205                     ret = ret && (s->properties.limits.subTexelPrecisionBits >= 4);
7206                     ret = ret && (s->properties.limits.viewportBoundsRange[0] <= -8192);
7207                     ret = ret && (s->properties.limits.viewportBoundsRange[1] >= 8191);
7208                 } break;
7209                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES: {
7210                     VkPhysicalDeviceMultiviewProperties* s = static_cast<VkPhysicalDeviceMultiviewProperties*>(static_cast<void*>(p));
7211                     ret = ret && (s->maxMultiviewInstanceIndex >= 134217727);
7212                     ret = ret && (s->maxMultiviewViewCount >= 6);
7213                 } break;
7214                 default: break;
7215             }
7216         return ret;
7217     }
7218 };
7219 
7220 static const VpFormatDesc formatDesc[] = {
7221     {
7222         VK_FORMAT_A1R5G5B5_UNORM_PACK16,
__anon3431b7521d502() 7223         [](VkBaseOutStructure* p) { (void)p;
7224             switch (p->sType) {
7225                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7226                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7227                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7228                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7229                 } break;
7230                 default: break;
7231             }
7232         },
__anon3431b7521d602() 7233         [](VkBaseOutStructure* p) -> bool { (void)p;
7234             bool ret = true;
7235             switch (p->sType) {
7236                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7237                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7238                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7239                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7240                 } break;
7241                 default: break;
7242             }
7243             return ret;
7244         }
7245     },
7246     {
7247         VK_FORMAT_A2B10G10R10_UINT_PACK32,
__anon3431b7521d702() 7248         [](VkBaseOutStructure* p) { (void)p;
7249             switch (p->sType) {
7250                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7251                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7252                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT);
7253                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7254                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7255                 } break;
7256                 default: break;
7257             }
7258         },
__anon3431b7521d802() 7259         [](VkBaseOutStructure* p) -> bool { (void)p;
7260             bool ret = true;
7261             switch (p->sType) {
7262                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7263                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7264                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)));
7265                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7266                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7267                 } break;
7268                 default: break;
7269             }
7270             return ret;
7271         }
7272     },
7273     {
7274         VK_FORMAT_A2B10G10R10_UNORM_PACK32,
__anon3431b7521d902() 7275         [](VkBaseOutStructure* p) { (void)p;
7276             switch (p->sType) {
7277                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7278                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7279                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
7280                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7281                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7282                 } break;
7283                 default: break;
7284             }
7285         },
__anon3431b7521da02() 7286         [](VkBaseOutStructure* p) -> bool { (void)p;
7287             bool ret = true;
7288             switch (p->sType) {
7289                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7290                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7291                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
7292                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7293                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7294                 } break;
7295                 default: break;
7296             }
7297             return ret;
7298         }
7299     },
7300     {
7301         VK_FORMAT_A8B8G8R8_SINT_PACK32,
__anon3431b7521db02() 7302         [](VkBaseOutStructure* p) { (void)p;
7303             switch (p->sType) {
7304                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7305                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7306                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
7307                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7308                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7309                 } break;
7310                 default: break;
7311             }
7312         },
__anon3431b7521dc02() 7313         [](VkBaseOutStructure* p) -> bool { (void)p;
7314             bool ret = true;
7315             switch (p->sType) {
7316                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7317                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7318                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
7319                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7320                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7321                 } break;
7322                 default: break;
7323             }
7324             return ret;
7325         }
7326     },
7327     {
7328         VK_FORMAT_A8B8G8R8_SNORM_PACK32,
__anon3431b7521dd02() 7329         [](VkBaseOutStructure* p) { (void)p;
7330             switch (p->sType) {
7331                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7332                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7333                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
7334                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7335                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7336                 } break;
7337                 default: break;
7338             }
7339         },
__anon3431b7521de02() 7340         [](VkBaseOutStructure* p) -> bool { (void)p;
7341             bool ret = true;
7342             switch (p->sType) {
7343                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7344                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7345                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
7346                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7347                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7348                 } break;
7349                 default: break;
7350             }
7351             return ret;
7352         }
7353     },
7354     {
7355         VK_FORMAT_A8B8G8R8_SRGB_PACK32,
__anon3431b7521df02() 7356         [](VkBaseOutStructure* p) { (void)p;
7357             switch (p->sType) {
7358                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7359                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7360                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7361                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7362                 } break;
7363                 default: break;
7364             }
7365         },
__anon3431b7521e002() 7366         [](VkBaseOutStructure* p) -> bool { (void)p;
7367             bool ret = true;
7368             switch (p->sType) {
7369                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7370                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7371                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7372                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7373                 } break;
7374                 default: break;
7375             }
7376             return ret;
7377         }
7378     },
7379     {
7380         VK_FORMAT_A8B8G8R8_UINT_PACK32,
__anon3431b7521e102() 7381         [](VkBaseOutStructure* p) { (void)p;
7382             switch (p->sType) {
7383                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7384                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7385                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
7386                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7387                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7388                 } break;
7389                 default: break;
7390             }
7391         },
__anon3431b7521e202() 7392         [](VkBaseOutStructure* p) -> bool { (void)p;
7393             bool ret = true;
7394             switch (p->sType) {
7395                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7396                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7397                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
7398                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7399                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7400                 } break;
7401                 default: break;
7402             }
7403             return ret;
7404         }
7405     },
7406     {
7407         VK_FORMAT_A8B8G8R8_UNORM_PACK32,
__anon3431b7521e302() 7408         [](VkBaseOutStructure* p) { (void)p;
7409             switch (p->sType) {
7410                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7411                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7412                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
7413                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7414                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7415                 } break;
7416                 default: break;
7417             }
7418         },
__anon3431b7521e402() 7419         [](VkBaseOutStructure* p) -> bool { (void)p;
7420             bool ret = true;
7421             switch (p->sType) {
7422                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7423                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7424                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
7425                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7426                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7427                 } break;
7428                 default: break;
7429             }
7430             return ret;
7431         }
7432     },
7433     {
7434         VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
__anon3431b7521e502() 7435         [](VkBaseOutStructure* p) { (void)p;
7436             switch (p->sType) {
7437                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7438                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7439                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7440                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7441                 } break;
7442                 default: break;
7443             }
7444         },
__anon3431b7521e602() 7445         [](VkBaseOutStructure* p) -> bool { (void)p;
7446             bool ret = true;
7447             switch (p->sType) {
7448                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7449                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7450                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7451                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7452                 } break;
7453                 default: break;
7454             }
7455             return ret;
7456         }
7457     },
7458     {
7459         VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
__anon3431b7521e702() 7460         [](VkBaseOutStructure* p) { (void)p;
7461             switch (p->sType) {
7462                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7463                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7464                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7465                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7466                 } break;
7467                 default: break;
7468             }
7469         },
__anon3431b7521e802() 7470         [](VkBaseOutStructure* p) -> bool { (void)p;
7471             bool ret = true;
7472             switch (p->sType) {
7473                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7474                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7475                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7476                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7477                 } break;
7478                 default: break;
7479             }
7480             return ret;
7481         }
7482     },
7483     {
7484         VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
__anon3431b7521e902() 7485         [](VkBaseOutStructure* p) { (void)p;
7486             switch (p->sType) {
7487                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7488                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7489                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7490                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7491                 } break;
7492                 default: break;
7493             }
7494         },
__anon3431b7521ea02() 7495         [](VkBaseOutStructure* p) -> bool { (void)p;
7496             bool ret = true;
7497             switch (p->sType) {
7498                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7499                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7500                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7501                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7502                 } break;
7503                 default: break;
7504             }
7505             return ret;
7506         }
7507     },
7508     {
7509         VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
__anon3431b7521eb02() 7510         [](VkBaseOutStructure* p) { (void)p;
7511             switch (p->sType) {
7512                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7513                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7514                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7515                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7516                 } break;
7517                 default: break;
7518             }
7519         },
__anon3431b7521ec02() 7520         [](VkBaseOutStructure* p) -> bool { (void)p;
7521             bool ret = true;
7522             switch (p->sType) {
7523                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7524                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7525                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7526                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7527                 } break;
7528                 default: break;
7529             }
7530             return ret;
7531         }
7532     },
7533     {
7534         VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
__anon3431b7521ed02() 7535         [](VkBaseOutStructure* p) { (void)p;
7536             switch (p->sType) {
7537                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7538                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7539                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7540                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7541                 } break;
7542                 default: break;
7543             }
7544         },
__anon3431b7521ee02() 7545         [](VkBaseOutStructure* p) -> bool { (void)p;
7546             bool ret = true;
7547             switch (p->sType) {
7548                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7549                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7550                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7551                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7552                 } break;
7553                 default: break;
7554             }
7555             return ret;
7556         }
7557     },
7558     {
7559         VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
__anon3431b7521ef02() 7560         [](VkBaseOutStructure* p) { (void)p;
7561             switch (p->sType) {
7562                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7563                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7564                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7565                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7566                 } break;
7567                 default: break;
7568             }
7569         },
__anon3431b7521f002() 7570         [](VkBaseOutStructure* p) -> bool { (void)p;
7571             bool ret = true;
7572             switch (p->sType) {
7573                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7574                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7575                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7576                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7577                 } break;
7578                 default: break;
7579             }
7580             return ret;
7581         }
7582     },
7583     {
7584         VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
__anon3431b7521f102() 7585         [](VkBaseOutStructure* p) { (void)p;
7586             switch (p->sType) {
7587                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7588                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7589                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7590                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7591                 } break;
7592                 default: break;
7593             }
7594         },
__anon3431b7521f202() 7595         [](VkBaseOutStructure* p) -> bool { (void)p;
7596             bool ret = true;
7597             switch (p->sType) {
7598                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7599                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7600                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7601                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7602                 } break;
7603                 default: break;
7604             }
7605             return ret;
7606         }
7607     },
7608     {
7609         VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
__anon3431b7521f302() 7610         [](VkBaseOutStructure* p) { (void)p;
7611             switch (p->sType) {
7612                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7613                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7614                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7615                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7616                 } break;
7617                 default: break;
7618             }
7619         },
__anon3431b7521f402() 7620         [](VkBaseOutStructure* p) -> bool { (void)p;
7621             bool ret = true;
7622             switch (p->sType) {
7623                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7624                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7625                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7626                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7627                 } break;
7628                 default: break;
7629             }
7630             return ret;
7631         }
7632     },
7633     {
7634         VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
__anon3431b7521f502() 7635         [](VkBaseOutStructure* p) { (void)p;
7636             switch (p->sType) {
7637                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7638                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7639                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7640                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7641                 } break;
7642                 default: break;
7643             }
7644         },
__anon3431b7521f602() 7645         [](VkBaseOutStructure* p) -> bool { (void)p;
7646             bool ret = true;
7647             switch (p->sType) {
7648                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7649                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7650                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7651                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7652                 } break;
7653                 default: break;
7654             }
7655             return ret;
7656         }
7657     },
7658     {
7659         VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
__anon3431b7521f702() 7660         [](VkBaseOutStructure* p) { (void)p;
7661             switch (p->sType) {
7662                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7663                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7664                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7665                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7666                 } break;
7667                 default: break;
7668             }
7669         },
__anon3431b7521f802() 7670         [](VkBaseOutStructure* p) -> bool { (void)p;
7671             bool ret = true;
7672             switch (p->sType) {
7673                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7674                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7675                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7676                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7677                 } break;
7678                 default: break;
7679             }
7680             return ret;
7681         }
7682     },
7683     {
7684         VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
__anon3431b7521f902() 7685         [](VkBaseOutStructure* p) { (void)p;
7686             switch (p->sType) {
7687                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7688                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7689                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7690                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7691                 } break;
7692                 default: break;
7693             }
7694         },
__anon3431b7521fa02() 7695         [](VkBaseOutStructure* p) -> bool { (void)p;
7696             bool ret = true;
7697             switch (p->sType) {
7698                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7699                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7700                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7701                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7702                 } break;
7703                 default: break;
7704             }
7705             return ret;
7706         }
7707     },
7708     {
7709         VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
__anon3431b7521fb02() 7710         [](VkBaseOutStructure* p) { (void)p;
7711             switch (p->sType) {
7712                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7713                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7714                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7715                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7716                 } break;
7717                 default: break;
7718             }
7719         },
__anon3431b7521fc02() 7720         [](VkBaseOutStructure* p) -> bool { (void)p;
7721             bool ret = true;
7722             switch (p->sType) {
7723                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7724                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7725                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7726                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7727                 } break;
7728                 default: break;
7729             }
7730             return ret;
7731         }
7732     },
7733     {
7734         VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
__anon3431b7521fd02() 7735         [](VkBaseOutStructure* p) { (void)p;
7736             switch (p->sType) {
7737                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7738                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7739                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7740                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7741                 } break;
7742                 default: break;
7743             }
7744         },
__anon3431b7521fe02() 7745         [](VkBaseOutStructure* p) -> bool { (void)p;
7746             bool ret = true;
7747             switch (p->sType) {
7748                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7749                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7750                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7751                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7752                 } break;
7753                 default: break;
7754             }
7755             return ret;
7756         }
7757     },
7758     {
7759         VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
__anon3431b7521ff02() 7760         [](VkBaseOutStructure* p) { (void)p;
7761             switch (p->sType) {
7762                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7763                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7764                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7765                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7766                 } break;
7767                 default: break;
7768             }
7769         },
__anon3431b75220002() 7770         [](VkBaseOutStructure* p) -> bool { (void)p;
7771             bool ret = true;
7772             switch (p->sType) {
7773                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7774                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7775                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7776                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7777                 } break;
7778                 default: break;
7779             }
7780             return ret;
7781         }
7782     },
7783     {
7784         VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
__anon3431b75220102() 7785         [](VkBaseOutStructure* p) { (void)p;
7786             switch (p->sType) {
7787                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7788                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7789                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7790                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7791                 } break;
7792                 default: break;
7793             }
7794         },
__anon3431b75220202() 7795         [](VkBaseOutStructure* p) -> bool { (void)p;
7796             bool ret = true;
7797             switch (p->sType) {
7798                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7799                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7800                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7801                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7802                 } break;
7803                 default: break;
7804             }
7805             return ret;
7806         }
7807     },
7808     {
7809         VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
__anon3431b75220302() 7810         [](VkBaseOutStructure* p) { (void)p;
7811             switch (p->sType) {
7812                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7813                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7814                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7815                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7816                 } break;
7817                 default: break;
7818             }
7819         },
__anon3431b75220402() 7820         [](VkBaseOutStructure* p) -> bool { (void)p;
7821             bool ret = true;
7822             switch (p->sType) {
7823                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7824                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7825                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7826                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7827                 } break;
7828                 default: break;
7829             }
7830             return ret;
7831         }
7832     },
7833     {
7834         VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
__anon3431b75220502() 7835         [](VkBaseOutStructure* p) { (void)p;
7836             switch (p->sType) {
7837                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7838                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7839                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7840                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7841                 } break;
7842                 default: break;
7843             }
7844         },
__anon3431b75220602() 7845         [](VkBaseOutStructure* p) -> bool { (void)p;
7846             bool ret = true;
7847             switch (p->sType) {
7848                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7849                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7850                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7851                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7852                 } break;
7853                 default: break;
7854             }
7855             return ret;
7856         }
7857     },
7858     {
7859         VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
__anon3431b75220702() 7860         [](VkBaseOutStructure* p) { (void)p;
7861             switch (p->sType) {
7862                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7863                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7864                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7865                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7866                 } break;
7867                 default: break;
7868             }
7869         },
__anon3431b75220802() 7870         [](VkBaseOutStructure* p) -> bool { (void)p;
7871             bool ret = true;
7872             switch (p->sType) {
7873                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7874                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7875                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7876                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7877                 } break;
7878                 default: break;
7879             }
7880             return ret;
7881         }
7882     },
7883     {
7884         VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
__anon3431b75220902() 7885         [](VkBaseOutStructure* p) { (void)p;
7886             switch (p->sType) {
7887                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7888                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7889                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7890                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7891                 } break;
7892                 default: break;
7893             }
7894         },
__anon3431b75220a02() 7895         [](VkBaseOutStructure* p) -> bool { (void)p;
7896             bool ret = true;
7897             switch (p->sType) {
7898                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7899                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7900                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7901                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7902                 } break;
7903                 default: break;
7904             }
7905             return ret;
7906         }
7907     },
7908     {
7909         VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
__anon3431b75220b02() 7910         [](VkBaseOutStructure* p) { (void)p;
7911             switch (p->sType) {
7912                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7913                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7914                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7915                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7916                 } break;
7917                 default: break;
7918             }
7919         },
__anon3431b75220c02() 7920         [](VkBaseOutStructure* p) -> bool { (void)p;
7921             bool ret = true;
7922             switch (p->sType) {
7923                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7924                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7925                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7926                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7927                 } break;
7928                 default: break;
7929             }
7930             return ret;
7931         }
7932     },
7933     {
7934         VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
__anon3431b75220d02() 7935         [](VkBaseOutStructure* p) { (void)p;
7936             switch (p->sType) {
7937                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7938                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7939                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7940                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7941                 } break;
7942                 default: break;
7943             }
7944         },
__anon3431b75220e02() 7945         [](VkBaseOutStructure* p) -> bool { (void)p;
7946             bool ret = true;
7947             switch (p->sType) {
7948                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7949                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7950                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7951                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7952                 } break;
7953                 default: break;
7954             }
7955             return ret;
7956         }
7957     },
7958     {
7959         VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
__anon3431b75220f02() 7960         [](VkBaseOutStructure* p) { (void)p;
7961             switch (p->sType) {
7962                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7963                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7964                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7965                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7966                 } break;
7967                 default: break;
7968             }
7969         },
__anon3431b75221002() 7970         [](VkBaseOutStructure* p) -> bool { (void)p;
7971             bool ret = true;
7972             switch (p->sType) {
7973                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7974                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7975                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7976                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
7977                 } break;
7978                 default: break;
7979             }
7980             return ret;
7981         }
7982     },
7983     {
7984         VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
__anon3431b75221102() 7985         [](VkBaseOutStructure* p) { (void)p;
7986             switch (p->sType) {
7987                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7988                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
7989                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7990                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
7991                 } break;
7992                 default: break;
7993             }
7994         },
__anon3431b75221202() 7995         [](VkBaseOutStructure* p) -> bool { (void)p;
7996             bool ret = true;
7997             switch (p->sType) {
7998                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
7999                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8000                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8001                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8002                 } break;
8003                 default: break;
8004             }
8005             return ret;
8006         }
8007     },
8008     {
8009         VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
__anon3431b75221302() 8010         [](VkBaseOutStructure* p) { (void)p;
8011             switch (p->sType) {
8012                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8013                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8014                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8015                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8016                 } break;
8017                 default: break;
8018             }
8019         },
__anon3431b75221402() 8020         [](VkBaseOutStructure* p) -> bool { (void)p;
8021             bool ret = true;
8022             switch (p->sType) {
8023                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8024                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8025                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8026                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8027                 } break;
8028                 default: break;
8029             }
8030             return ret;
8031         }
8032     },
8033     {
8034         VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
__anon3431b75221502() 8035         [](VkBaseOutStructure* p) { (void)p;
8036             switch (p->sType) {
8037                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8038                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8039                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8040                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8041                 } break;
8042                 default: break;
8043             }
8044         },
__anon3431b75221602() 8045         [](VkBaseOutStructure* p) -> bool { (void)p;
8046             bool ret = true;
8047             switch (p->sType) {
8048                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8049                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8050                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8051                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8052                 } break;
8053                 default: break;
8054             }
8055             return ret;
8056         }
8057     },
8058     {
8059         VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
__anon3431b75221702() 8060         [](VkBaseOutStructure* p) { (void)p;
8061             switch (p->sType) {
8062                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8063                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8064                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8065                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8066                 } break;
8067                 default: break;
8068             }
8069         },
__anon3431b75221802() 8070         [](VkBaseOutStructure* p) -> bool { (void)p;
8071             bool ret = true;
8072             switch (p->sType) {
8073                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8074                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8075                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8076                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8077                 } break;
8078                 default: break;
8079             }
8080             return ret;
8081         }
8082     },
8083     {
8084         VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
__anon3431b75221902() 8085         [](VkBaseOutStructure* p) { (void)p;
8086             switch (p->sType) {
8087                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8088                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8089                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8090                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8091                 } break;
8092                 default: break;
8093             }
8094         },
__anon3431b75221a02() 8095         [](VkBaseOutStructure* p) -> bool { (void)p;
8096             bool ret = true;
8097             switch (p->sType) {
8098                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8099                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8100                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8101                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8102                 } break;
8103                 default: break;
8104             }
8105             return ret;
8106         }
8107     },
8108     {
8109         VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
__anon3431b75221b02() 8110         [](VkBaseOutStructure* p) { (void)p;
8111             switch (p->sType) {
8112                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8113                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8114                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8115                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8116                 } break;
8117                 default: break;
8118             }
8119         },
__anon3431b75221c02() 8120         [](VkBaseOutStructure* p) -> bool { (void)p;
8121             bool ret = true;
8122             switch (p->sType) {
8123                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8124                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8125                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8126                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8127                 } break;
8128                 default: break;
8129             }
8130             return ret;
8131         }
8132     },
8133     {
8134         VK_FORMAT_B10G11R11_UFLOAT_PACK32,
__anon3431b75221d02() 8135         [](VkBaseOutStructure* p) { (void)p;
8136             switch (p->sType) {
8137                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8138                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8139                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT);
8140                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8141                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8142                 } break;
8143                 default: break;
8144             }
8145         },
__anon3431b75221e02() 8146         [](VkBaseOutStructure* p) -> bool { (void)p;
8147             bool ret = true;
8148             switch (p->sType) {
8149                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8150                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8151                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)));
8152                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8153                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8154                 } break;
8155                 default: break;
8156             }
8157             return ret;
8158         }
8159     },
8160     {
8161         VK_FORMAT_B4G4R4A4_UNORM_PACK16,
__anon3431b75221f02() 8162         [](VkBaseOutStructure* p) { (void)p;
8163             switch (p->sType) {
8164                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8165                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8166                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8167                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8168                 } break;
8169                 default: break;
8170             }
8171         },
__anon3431b75222002() 8172         [](VkBaseOutStructure* p) -> bool { (void)p;
8173             bool ret = true;
8174             switch (p->sType) {
8175                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8176                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8177                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8178                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8179                 } break;
8180                 default: break;
8181             }
8182             return ret;
8183         }
8184     },
8185     {
8186         VK_FORMAT_B8G8R8A8_SRGB,
__anon3431b75222102() 8187         [](VkBaseOutStructure* p) { (void)p;
8188             switch (p->sType) {
8189                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8190                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8191                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8192                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8193                 } break;
8194                 default: break;
8195             }
8196         },
__anon3431b75222202() 8197         [](VkBaseOutStructure* p) -> bool { (void)p;
8198             bool ret = true;
8199             switch (p->sType) {
8200                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8201                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8202                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8203                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8204                 } break;
8205                 default: break;
8206             }
8207             return ret;
8208         }
8209     },
8210     {
8211         VK_FORMAT_B8G8R8A8_UNORM,
__anon3431b75222302() 8212         [](VkBaseOutStructure* p) { (void)p;
8213             switch (p->sType) {
8214                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8215                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8216                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8217                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8218                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8219                 } break;
8220                 default: break;
8221             }
8222         },
__anon3431b75222402() 8223         [](VkBaseOutStructure* p) -> bool { (void)p;
8224             bool ret = true;
8225             switch (p->sType) {
8226                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8227                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8228                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8229                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8230                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8231                 } break;
8232                 default: break;
8233             }
8234             return ret;
8235         }
8236     },
8237     {
8238         VK_FORMAT_D16_UNORM,
__anon3431b75222502() 8239         [](VkBaseOutStructure* p) { (void)p;
8240             switch (p->sType) {
8241                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8242                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8243                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8244                 } break;
8245                 default: break;
8246             }
8247         },
__anon3431b75222602() 8248         [](VkBaseOutStructure* p) -> bool { (void)p;
8249             bool ret = true;
8250             switch (p->sType) {
8251                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8252                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8253                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8254                 } break;
8255                 default: break;
8256             }
8257             return ret;
8258         }
8259     },
8260     {
8261         VK_FORMAT_D32_SFLOAT,
__anon3431b75222702() 8262         [](VkBaseOutStructure* p) { (void)p;
8263             switch (p->sType) {
8264                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8265                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8266                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8267                 } break;
8268                 default: break;
8269             }
8270         },
__anon3431b75222802() 8271         [](VkBaseOutStructure* p) -> bool { (void)p;
8272             bool ret = true;
8273             switch (p->sType) {
8274                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8275                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8276                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8277                 } break;
8278                 default: break;
8279             }
8280             return ret;
8281         }
8282     },
8283     {
8284         VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
__anon3431b75222902() 8285         [](VkBaseOutStructure* p) { (void)p;
8286             switch (p->sType) {
8287                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8288                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8289                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8290                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8291                 } break;
8292                 default: break;
8293             }
8294         },
__anon3431b75222a02() 8295         [](VkBaseOutStructure* p) -> bool { (void)p;
8296             bool ret = true;
8297             switch (p->sType) {
8298                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8299                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8300                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8301                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8302                 } break;
8303                 default: break;
8304             }
8305             return ret;
8306         }
8307     },
8308     {
8309         VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
__anon3431b75222b02() 8310         [](VkBaseOutStructure* p) { (void)p;
8311             switch (p->sType) {
8312                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8313                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8314                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8315                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8316                 } break;
8317                 default: break;
8318             }
8319         },
__anon3431b75222c02() 8320         [](VkBaseOutStructure* p) -> bool { (void)p;
8321             bool ret = true;
8322             switch (p->sType) {
8323                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8324                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8325                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8326                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8327                 } break;
8328                 default: break;
8329             }
8330             return ret;
8331         }
8332     },
8333     {
8334         VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
__anon3431b75222d02() 8335         [](VkBaseOutStructure* p) { (void)p;
8336             switch (p->sType) {
8337                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8338                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8339                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8340                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8341                 } break;
8342                 default: break;
8343             }
8344         },
__anon3431b75222e02() 8345         [](VkBaseOutStructure* p) -> bool { (void)p;
8346             bool ret = true;
8347             switch (p->sType) {
8348                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8349                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8350                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8351                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8352                 } break;
8353                 default: break;
8354             }
8355             return ret;
8356         }
8357     },
8358     {
8359         VK_FORMAT_EAC_R11_SNORM_BLOCK,
__anon3431b75222f02() 8360         [](VkBaseOutStructure* p) { (void)p;
8361             switch (p->sType) {
8362                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8363                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8364                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8365                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8366                 } break;
8367                 default: break;
8368             }
8369         },
__anon3431b75223002() 8370         [](VkBaseOutStructure* p) -> bool { (void)p;
8371             bool ret = true;
8372             switch (p->sType) {
8373                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8374                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8375                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8376                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8377                 } break;
8378                 default: break;
8379             }
8380             return ret;
8381         }
8382     },
8383     {
8384         VK_FORMAT_EAC_R11_UNORM_BLOCK,
__anon3431b75223102() 8385         [](VkBaseOutStructure* p) { (void)p;
8386             switch (p->sType) {
8387                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8388                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8389                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8390                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8391                 } break;
8392                 default: break;
8393             }
8394         },
__anon3431b75223202() 8395         [](VkBaseOutStructure* p) -> bool { (void)p;
8396             bool ret = true;
8397             switch (p->sType) {
8398                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8399                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8400                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8401                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8402                 } break;
8403                 default: break;
8404             }
8405             return ret;
8406         }
8407     },
8408     {
8409         VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
__anon3431b75223302() 8410         [](VkBaseOutStructure* p) { (void)p;
8411             switch (p->sType) {
8412                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8413                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8414                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8415                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8416                 } break;
8417                 default: break;
8418             }
8419         },
__anon3431b75223402() 8420         [](VkBaseOutStructure* p) -> bool { (void)p;
8421             bool ret = true;
8422             switch (p->sType) {
8423                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8424                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8425                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8426                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8427                 } break;
8428                 default: break;
8429             }
8430             return ret;
8431         }
8432     },
8433     {
8434         VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
__anon3431b75223502() 8435         [](VkBaseOutStructure* p) { (void)p;
8436             switch (p->sType) {
8437                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8438                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8439                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8440                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8441                 } break;
8442                 default: break;
8443             }
8444         },
__anon3431b75223602() 8445         [](VkBaseOutStructure* p) -> bool { (void)p;
8446             bool ret = true;
8447             switch (p->sType) {
8448                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8449                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8450                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8451                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8452                 } break;
8453                 default: break;
8454             }
8455             return ret;
8456         }
8457     },
8458     {
8459         VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
__anon3431b75223702() 8460         [](VkBaseOutStructure* p) { (void)p;
8461             switch (p->sType) {
8462                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8463                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8464                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8465                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8466                 } break;
8467                 default: break;
8468             }
8469         },
__anon3431b75223802() 8470         [](VkBaseOutStructure* p) -> bool { (void)p;
8471             bool ret = true;
8472             switch (p->sType) {
8473                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8474                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8475                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8476                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8477                 } break;
8478                 default: break;
8479             }
8480             return ret;
8481         }
8482     },
8483     {
8484         VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
__anon3431b75223902() 8485         [](VkBaseOutStructure* p) { (void)p;
8486             switch (p->sType) {
8487                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8488                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8489                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8490                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8491                 } break;
8492                 default: break;
8493             }
8494         },
__anon3431b75223a02() 8495         [](VkBaseOutStructure* p) -> bool { (void)p;
8496             bool ret = true;
8497             switch (p->sType) {
8498                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8499                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8500                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8501                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8502                 } break;
8503                 default: break;
8504             }
8505             return ret;
8506         }
8507     },
8508     {
8509         VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
__anon3431b75223b02() 8510         [](VkBaseOutStructure* p) { (void)p;
8511             switch (p->sType) {
8512                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8513                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8514                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8515                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8516                 } break;
8517                 default: break;
8518             }
8519         },
__anon3431b75223c02() 8520         [](VkBaseOutStructure* p) -> bool { (void)p;
8521             bool ret = true;
8522             switch (p->sType) {
8523                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8524                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8525                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8526                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8527                 } break;
8528                 default: break;
8529             }
8530             return ret;
8531         }
8532     },
8533     {
8534         VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
__anon3431b75223d02() 8535         [](VkBaseOutStructure* p) { (void)p;
8536             switch (p->sType) {
8537                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8538                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8539                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8540                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8541                 } break;
8542                 default: break;
8543             }
8544         },
__anon3431b75223e02() 8545         [](VkBaseOutStructure* p) -> bool { (void)p;
8546             bool ret = true;
8547             switch (p->sType) {
8548                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8549                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8550                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8551                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8552                 } break;
8553                 default: break;
8554             }
8555             return ret;
8556         }
8557     },
8558     {
8559         VK_FORMAT_R16G16B16A16_SFLOAT,
__anon3431b75223f02() 8560         [](VkBaseOutStructure* p) { (void)p;
8561             switch (p->sType) {
8562                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8563                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8564                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8565                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8566                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8567                 } break;
8568                 default: break;
8569             }
8570         },
__anon3431b75224002() 8571         [](VkBaseOutStructure* p) -> bool { (void)p;
8572             bool ret = true;
8573             switch (p->sType) {
8574                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8575                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8576                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8577                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8578                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8579                 } break;
8580                 default: break;
8581             }
8582             return ret;
8583         }
8584     },
8585     {
8586         VK_FORMAT_R16G16B16A16_SINT,
__anon3431b75224102() 8587         [](VkBaseOutStructure* p) { (void)p;
8588             switch (p->sType) {
8589                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8590                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8591                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8592                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8593                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8594                 } break;
8595                 default: break;
8596             }
8597         },
__anon3431b75224202() 8598         [](VkBaseOutStructure* p) -> bool { (void)p;
8599             bool ret = true;
8600             switch (p->sType) {
8601                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8602                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8603                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8604                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8605                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8606                 } break;
8607                 default: break;
8608             }
8609             return ret;
8610         }
8611     },
8612     {
8613         VK_FORMAT_R16G16B16A16_SNORM,
__anon3431b75224302() 8614         [](VkBaseOutStructure* p) { (void)p;
8615             switch (p->sType) {
8616                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8617                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8618                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8619                 } break;
8620                 default: break;
8621             }
8622         },
__anon3431b75224402() 8623         [](VkBaseOutStructure* p) -> bool { (void)p;
8624             bool ret = true;
8625             switch (p->sType) {
8626                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8627                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8628                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8629                 } break;
8630                 default: break;
8631             }
8632             return ret;
8633         }
8634     },
8635     {
8636         VK_FORMAT_R16G16B16A16_UINT,
__anon3431b75224502() 8637         [](VkBaseOutStructure* p) { (void)p;
8638             switch (p->sType) {
8639                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8640                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8641                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8642                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8643                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8644                 } break;
8645                 default: break;
8646             }
8647         },
__anon3431b75224602() 8648         [](VkBaseOutStructure* p) -> bool { (void)p;
8649             bool ret = true;
8650             switch (p->sType) {
8651                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8652                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8653                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8654                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8655                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8656                 } break;
8657                 default: break;
8658             }
8659             return ret;
8660         }
8661     },
8662     {
8663         VK_FORMAT_R16G16_SFLOAT,
__anon3431b75224702() 8664         [](VkBaseOutStructure* p) { (void)p;
8665             switch (p->sType) {
8666                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8667                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8668                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8669                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8670                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8671                 } break;
8672                 default: break;
8673             }
8674         },
__anon3431b75224802() 8675         [](VkBaseOutStructure* p) -> bool { (void)p;
8676             bool ret = true;
8677             switch (p->sType) {
8678                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8679                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8680                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8681                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8682                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8683                 } break;
8684                 default: break;
8685             }
8686             return ret;
8687         }
8688     },
8689     {
8690         VK_FORMAT_R16G16_SINT,
__anon3431b75224902() 8691         [](VkBaseOutStructure* p) { (void)p;
8692             switch (p->sType) {
8693                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8694                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8695                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8696                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8697                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8698                 } break;
8699                 default: break;
8700             }
8701         },
__anon3431b75224a02() 8702         [](VkBaseOutStructure* p) -> bool { (void)p;
8703             bool ret = true;
8704             switch (p->sType) {
8705                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8706                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8707                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8708                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8709                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8710                 } break;
8711                 default: break;
8712             }
8713             return ret;
8714         }
8715     },
8716     {
8717         VK_FORMAT_R16G16_SNORM,
__anon3431b75224b02() 8718         [](VkBaseOutStructure* p) { (void)p;
8719             switch (p->sType) {
8720                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8721                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8722                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8723                 } break;
8724                 default: break;
8725             }
8726         },
__anon3431b75224c02() 8727         [](VkBaseOutStructure* p) -> bool { (void)p;
8728             bool ret = true;
8729             switch (p->sType) {
8730                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8731                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8732                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8733                 } break;
8734                 default: break;
8735             }
8736             return ret;
8737         }
8738     },
8739     {
8740         VK_FORMAT_R16G16_UINT,
__anon3431b75224d02() 8741         [](VkBaseOutStructure* p) { (void)p;
8742             switch (p->sType) {
8743                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8744                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8745                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8746                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8747                 } break;
8748                 default: break;
8749             }
8750         },
__anon3431b75224e02() 8751         [](VkBaseOutStructure* p) -> bool { (void)p;
8752             bool ret = true;
8753             switch (p->sType) {
8754                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8755                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8756                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8757                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8758                 } break;
8759                 default: break;
8760             }
8761             return ret;
8762         }
8763     },
8764     {
8765         VK_FORMAT_R16_SFLOAT,
__anon3431b75224f02() 8766         [](VkBaseOutStructure* p) { (void)p;
8767             switch (p->sType) {
8768                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8769                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8770                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8771                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8772                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8773                 } break;
8774                 default: break;
8775             }
8776         },
__anon3431b75225002() 8777         [](VkBaseOutStructure* p) -> bool { (void)p;
8778             bool ret = true;
8779             switch (p->sType) {
8780                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8781                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8782                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8783                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8784                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8785                 } break;
8786                 default: break;
8787             }
8788             return ret;
8789         }
8790     },
8791     {
8792         VK_FORMAT_R16_SINT,
__anon3431b75225102() 8793         [](VkBaseOutStructure* p) { (void)p;
8794             switch (p->sType) {
8795                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8796                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8797                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8798                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8799                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8800                 } break;
8801                 default: break;
8802             }
8803         },
__anon3431b75225202() 8804         [](VkBaseOutStructure* p) -> bool { (void)p;
8805             bool ret = true;
8806             switch (p->sType) {
8807                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8808                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8809                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8810                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8811                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8812                 } break;
8813                 default: break;
8814             }
8815             return ret;
8816         }
8817     },
8818     {
8819         VK_FORMAT_R16_SNORM,
__anon3431b75225302() 8820         [](VkBaseOutStructure* p) { (void)p;
8821             switch (p->sType) {
8822                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8823                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8824                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8825                 } break;
8826                 default: break;
8827             }
8828         },
__anon3431b75225402() 8829         [](VkBaseOutStructure* p) -> bool { (void)p;
8830             bool ret = true;
8831             switch (p->sType) {
8832                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8833                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8834                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8835                 } break;
8836                 default: break;
8837             }
8838             return ret;
8839         }
8840     },
8841     {
8842         VK_FORMAT_R16_UINT,
__anon3431b75225502() 8843         [](VkBaseOutStructure* p) { (void)p;
8844             switch (p->sType) {
8845                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8846                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8847                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8848                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8849                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8850                 } break;
8851                 default: break;
8852             }
8853         },
__anon3431b75225602() 8854         [](VkBaseOutStructure* p) -> bool { (void)p;
8855             bool ret = true;
8856             switch (p->sType) {
8857                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8858                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8859                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8860                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8861                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8862                 } break;
8863                 default: break;
8864             }
8865             return ret;
8866         }
8867     },
8868     {
8869         VK_FORMAT_R16_UNORM,
__anon3431b75225702() 8870         [](VkBaseOutStructure* p) { (void)p;
8871             switch (p->sType) {
8872                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8873                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8874                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8875                 } break;
8876                 default: break;
8877             }
8878         },
__anon3431b75225802() 8879         [](VkBaseOutStructure* p) -> bool { (void)p;
8880             bool ret = true;
8881             switch (p->sType) {
8882                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8883                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8884                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8885                 } break;
8886                 default: break;
8887             }
8888             return ret;
8889         }
8890     },
8891     {
8892         VK_FORMAT_R32G32B32A32_SFLOAT,
__anon3431b75225902() 8893         [](VkBaseOutStructure* p) { (void)p;
8894             switch (p->sType) {
8895                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8896                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8897                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8898                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8899                 } break;
8900                 default: break;
8901             }
8902         },
__anon3431b75225a02() 8903         [](VkBaseOutStructure* p) -> bool { (void)p;
8904             bool ret = true;
8905             switch (p->sType) {
8906                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8907                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8908                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8909                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8910                 } break;
8911                 default: break;
8912             }
8913             return ret;
8914         }
8915     },
8916     {
8917         VK_FORMAT_R32G32B32A32_SINT,
__anon3431b75225b02() 8918         [](VkBaseOutStructure* p) { (void)p;
8919             switch (p->sType) {
8920                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8921                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8922                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8923                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8924                 } break;
8925                 default: break;
8926             }
8927         },
__anon3431b75225c02() 8928         [](VkBaseOutStructure* p) -> bool { (void)p;
8929             bool ret = true;
8930             switch (p->sType) {
8931                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8932                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8933                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8934                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8935                 } break;
8936                 default: break;
8937             }
8938             return ret;
8939         }
8940     },
8941     {
8942         VK_FORMAT_R32G32B32A32_UINT,
__anon3431b75225d02() 8943         [](VkBaseOutStructure* p) { (void)p;
8944             switch (p->sType) {
8945                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8946                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8947                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8948                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8949                 } break;
8950                 default: break;
8951             }
8952         },
__anon3431b75225e02() 8953         [](VkBaseOutStructure* p) -> bool { (void)p;
8954             bool ret = true;
8955             switch (p->sType) {
8956                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8957                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8958                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8959                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8960                 } break;
8961                 default: break;
8962             }
8963             return ret;
8964         }
8965     },
8966     {
8967         VK_FORMAT_R32G32_SFLOAT,
__anon3431b75225f02() 8968         [](VkBaseOutStructure* p) { (void)p;
8969             switch (p->sType) {
8970                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8971                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8972                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
8973                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8974                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
8975                 } break;
8976                 default: break;
8977             }
8978         },
__anon3431b75226002() 8979         [](VkBaseOutStructure* p) -> bool { (void)p;
8980             bool ret = true;
8981             switch (p->sType) {
8982                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8983                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8984                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
8985                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8986                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
8987                 } break;
8988                 default: break;
8989             }
8990             return ret;
8991         }
8992     },
8993     {
8994         VK_FORMAT_R32G32_SINT,
__anon3431b75226102() 8995         [](VkBaseOutStructure* p) { (void)p;
8996             switch (p->sType) {
8997                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
8998                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
8999                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9000                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9001                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9002                 } break;
9003                 default: break;
9004             }
9005         },
__anon3431b75226202() 9006         [](VkBaseOutStructure* p) -> bool { (void)p;
9007             bool ret = true;
9008             switch (p->sType) {
9009                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9010                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9011                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9012                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9013                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9014                 } break;
9015                 default: break;
9016             }
9017             return ret;
9018         }
9019     },
9020     {
9021         VK_FORMAT_R32G32_UINT,
__anon3431b75226302() 9022         [](VkBaseOutStructure* p) { (void)p;
9023             switch (p->sType) {
9024                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9025                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9026                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9027                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9028                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9029                 } break;
9030                 default: break;
9031             }
9032         },
__anon3431b75226402() 9033         [](VkBaseOutStructure* p) -> bool { (void)p;
9034             bool ret = true;
9035             switch (p->sType) {
9036                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9037                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9038                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9039                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9040                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9041                 } break;
9042                 default: break;
9043             }
9044             return ret;
9045         }
9046     },
9047     {
9048         VK_FORMAT_R32_SFLOAT,
__anon3431b75226502() 9049         [](VkBaseOutStructure* p) { (void)p;
9050             switch (p->sType) {
9051                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9052                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9053                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9054                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9055                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9056                 } break;
9057                 default: break;
9058             }
9059         },
__anon3431b75226602() 9060         [](VkBaseOutStructure* p) -> bool { (void)p;
9061             bool ret = true;
9062             switch (p->sType) {
9063                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9064                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9065                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9066                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9067                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9068                 } break;
9069                 default: break;
9070             }
9071             return ret;
9072         }
9073     },
9074     {
9075         VK_FORMAT_R32_SINT,
__anon3431b75226702() 9076         [](VkBaseOutStructure* p) { (void)p;
9077             switch (p->sType) {
9078                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9079                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9080                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9081                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9082                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9083                 } break;
9084                 default: break;
9085             }
9086         },
__anon3431b75226802() 9087         [](VkBaseOutStructure* p) -> bool { (void)p;
9088             bool ret = true;
9089             switch (p->sType) {
9090                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9091                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9092                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9093                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9094                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9095                 } break;
9096                 default: break;
9097             }
9098             return ret;
9099         }
9100     },
9101     {
9102         VK_FORMAT_R32_UINT,
__anon3431b75226902() 9103         [](VkBaseOutStructure* p) { (void)p;
9104             switch (p->sType) {
9105                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9106                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9107                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9108                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9109                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9110                 } break;
9111                 default: break;
9112             }
9113         },
__anon3431b75226a02() 9114         [](VkBaseOutStructure* p) -> bool { (void)p;
9115             bool ret = true;
9116             switch (p->sType) {
9117                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9118                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9119                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9120                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9121                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9122                 } break;
9123                 default: break;
9124             }
9125             return ret;
9126         }
9127     },
9128     {
9129         VK_FORMAT_R5G6B5_UNORM_PACK16,
__anon3431b75226b02() 9130         [](VkBaseOutStructure* p) { (void)p;
9131             switch (p->sType) {
9132                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9133                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9134                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9135                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9136                 } break;
9137                 default: break;
9138             }
9139         },
__anon3431b75226c02() 9140         [](VkBaseOutStructure* p) -> bool { (void)p;
9141             bool ret = true;
9142             switch (p->sType) {
9143                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9144                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9145                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9146                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9147                 } break;
9148                 default: break;
9149             }
9150             return ret;
9151         }
9152     },
9153     {
9154         VK_FORMAT_R8G8B8A8_SINT,
__anon3431b75226d02() 9155         [](VkBaseOutStructure* p) { (void)p;
9156             switch (p->sType) {
9157                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9158                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9159                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9160                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9161                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9162                 } break;
9163                 default: break;
9164             }
9165         },
__anon3431b75226e02() 9166         [](VkBaseOutStructure* p) -> bool { (void)p;
9167             bool ret = true;
9168             switch (p->sType) {
9169                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9170                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9171                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9172                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9173                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9174                 } break;
9175                 default: break;
9176             }
9177             return ret;
9178         }
9179     },
9180     {
9181         VK_FORMAT_R8G8B8A8_SNORM,
__anon3431b75226f02() 9182         [](VkBaseOutStructure* p) { (void)p;
9183             switch (p->sType) {
9184                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9185                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9186                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9187                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9188                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9189                 } break;
9190                 default: break;
9191             }
9192         },
__anon3431b75227002() 9193         [](VkBaseOutStructure* p) -> bool { (void)p;
9194             bool ret = true;
9195             switch (p->sType) {
9196                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9197                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9198                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9199                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9200                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9201                 } break;
9202                 default: break;
9203             }
9204             return ret;
9205         }
9206     },
9207     {
9208         VK_FORMAT_R8G8B8A8_SRGB,
__anon3431b75227102() 9209         [](VkBaseOutStructure* p) { (void)p;
9210             switch (p->sType) {
9211                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9212                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9213                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9214                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9215                 } break;
9216                 default: break;
9217             }
9218         },
__anon3431b75227202() 9219         [](VkBaseOutStructure* p) -> bool { (void)p;
9220             bool ret = true;
9221             switch (p->sType) {
9222                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9223                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9224                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9225                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9226                 } break;
9227                 default: break;
9228             }
9229             return ret;
9230         }
9231     },
9232     {
9233         VK_FORMAT_R8G8B8A8_UINT,
__anon3431b75227302() 9234         [](VkBaseOutStructure* p) { (void)p;
9235             switch (p->sType) {
9236                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9237                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9238                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9239                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9240                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9241                 } break;
9242                 default: break;
9243             }
9244         },
__anon3431b75227402() 9245         [](VkBaseOutStructure* p) -> bool { (void)p;
9246             bool ret = true;
9247             switch (p->sType) {
9248                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9249                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9250                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9251                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9252                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9253                 } break;
9254                 default: break;
9255             }
9256             return ret;
9257         }
9258     },
9259     {
9260         VK_FORMAT_R8G8B8A8_UNORM,
__anon3431b75227502() 9261         [](VkBaseOutStructure* p) { (void)p;
9262             switch (p->sType) {
9263                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9264                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9265                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9266                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9267                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9268                 } break;
9269                 default: break;
9270             }
9271         },
__anon3431b75227602() 9272         [](VkBaseOutStructure* p) -> bool { (void)p;
9273             bool ret = true;
9274             switch (p->sType) {
9275                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9276                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9277                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9278                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9279                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9280                 } break;
9281                 default: break;
9282             }
9283             return ret;
9284         }
9285     },
9286     {
9287         VK_FORMAT_R8G8_SINT,
__anon3431b75227702() 9288         [](VkBaseOutStructure* p) { (void)p;
9289             switch (p->sType) {
9290                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9291                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9292                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9293                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9294                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9295                 } break;
9296                 default: break;
9297             }
9298         },
__anon3431b75227802() 9299         [](VkBaseOutStructure* p) -> bool { (void)p;
9300             bool ret = true;
9301             switch (p->sType) {
9302                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9303                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9304                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9305                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9306                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9307                 } break;
9308                 default: break;
9309             }
9310             return ret;
9311         }
9312     },
9313     {
9314         VK_FORMAT_R8G8_SNORM,
__anon3431b75227902() 9315         [](VkBaseOutStructure* p) { (void)p;
9316             switch (p->sType) {
9317                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9318                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9319                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9320                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9321                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9322                 } break;
9323                 default: break;
9324             }
9325         },
__anon3431b75227a02() 9326         [](VkBaseOutStructure* p) -> bool { (void)p;
9327             bool ret = true;
9328             switch (p->sType) {
9329                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9330                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9331                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9332                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9333                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9334                 } break;
9335                 default: break;
9336             }
9337             return ret;
9338         }
9339     },
9340     {
9341         VK_FORMAT_R8G8_UINT,
__anon3431b75227b02() 9342         [](VkBaseOutStructure* p) { (void)p;
9343             switch (p->sType) {
9344                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9345                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9346                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9347                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9348                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9349                 } break;
9350                 default: break;
9351             }
9352         },
__anon3431b75227c02() 9353         [](VkBaseOutStructure* p) -> bool { (void)p;
9354             bool ret = true;
9355             switch (p->sType) {
9356                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9357                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9358                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9359                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9360                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9361                 } break;
9362                 default: break;
9363             }
9364             return ret;
9365         }
9366     },
9367     {
9368         VK_FORMAT_R8G8_UNORM,
__anon3431b75227d02() 9369         [](VkBaseOutStructure* p) { (void)p;
9370             switch (p->sType) {
9371                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9372                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9373                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9374                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9375                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9376                 } break;
9377                 default: break;
9378             }
9379         },
__anon3431b75227e02() 9380         [](VkBaseOutStructure* p) -> bool { (void)p;
9381             bool ret = true;
9382             switch (p->sType) {
9383                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9384                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9385                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9386                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9387                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9388                 } break;
9389                 default: break;
9390             }
9391             return ret;
9392         }
9393     },
9394     {
9395         VK_FORMAT_R8_SINT,
__anon3431b75227f02() 9396         [](VkBaseOutStructure* p) { (void)p;
9397             switch (p->sType) {
9398                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9399                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9400                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9401                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9402                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9403                 } break;
9404                 default: break;
9405             }
9406         },
__anon3431b75228002() 9407         [](VkBaseOutStructure* p) -> bool { (void)p;
9408             bool ret = true;
9409             switch (p->sType) {
9410                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9411                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9412                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9413                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9414                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9415                 } break;
9416                 default: break;
9417             }
9418             return ret;
9419         }
9420     },
9421     {
9422         VK_FORMAT_R8_SNORM,
__anon3431b75228102() 9423         [](VkBaseOutStructure* p) { (void)p;
9424             switch (p->sType) {
9425                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9426                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9427                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9428                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9429                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9430                 } break;
9431                 default: break;
9432             }
9433         },
__anon3431b75228202() 9434         [](VkBaseOutStructure* p) -> bool { (void)p;
9435             bool ret = true;
9436             switch (p->sType) {
9437                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9438                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9439                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9440                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9441                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9442                 } break;
9443                 default: break;
9444             }
9445             return ret;
9446         }
9447     },
9448     {
9449         VK_FORMAT_R8_UINT,
__anon3431b75228302() 9450         [](VkBaseOutStructure* p) { (void)p;
9451             switch (p->sType) {
9452                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9453                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9454                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9455                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9456                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9457                 } break;
9458                 default: break;
9459             }
9460         },
__anon3431b75228402() 9461         [](VkBaseOutStructure* p) -> bool { (void)p;
9462             bool ret = true;
9463             switch (p->sType) {
9464                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9465                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9466                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9467                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9468                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9469                 } break;
9470                 default: break;
9471             }
9472             return ret;
9473         }
9474     },
9475     {
9476         VK_FORMAT_R8_UNORM,
__anon3431b75228502() 9477         [](VkBaseOutStructure* p) { (void)p;
9478             switch (p->sType) {
9479                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9480                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9481                     s->formatProperties.bufferFeatures |= (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT);
9482                     s->formatProperties.linearTilingFeatures |= (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9483                     s->formatProperties.optimalTilingFeatures |= (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
9484                 } break;
9485                 default: break;
9486             }
9487         },
__anon3431b75228602() 9488         [](VkBaseOutStructure* p) -> bool { (void)p;
9489             bool ret = true;
9490             switch (p->sType) {
9491                 case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR: {
9492                     VkFormatProperties2KHR* s = static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p));
9493                     ret = ret && (vpCheckFlags(s->formatProperties.bufferFeatures, (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)));
9494                     ret = ret && (vpCheckFlags(s->formatProperties.linearTilingFeatures, (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9495                     ret = ret && (vpCheckFlags(s->formatProperties.optimalTilingFeatures, (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT | VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)));
9496                 } break;
9497                 default: break;
9498             }
9499             return ret;
9500         }
9501     },
9502 };
9503 
9504 static const VpStructChainerDesc chainerDesc = {
__anon3431b75228702() 9505     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
9506         VkPhysicalDeviceMultiviewFeatures physicalDeviceMultiviewFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, nullptr };
9507         VkPhysicalDeviceSamplerYcbcrConversionFeatures physicalDeviceSamplerYcbcrConversionFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, &physicalDeviceMultiviewFeatures };
9508         VkPhysicalDeviceShaderDrawParametersFeatures physicalDeviceShaderDrawParametersFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, &physicalDeviceSamplerYcbcrConversionFeatures };
9509         VkPhysicalDeviceVariablePointersFeatures physicalDeviceVariablePointersFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, &physicalDeviceShaderDrawParametersFeatures };
9510         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceVariablePointersFeatures));
9511         pfnCb(p, pUser);
9512     },
__anon3431b75228802() 9513     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
9514         VkPhysicalDeviceMultiviewProperties physicalDeviceMultiviewProperties{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, nullptr };
9515         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&physicalDeviceMultiviewProperties));
9516         pfnCb(p, pUser);
9517     },
__anon3431b75228902() 9518     [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {
9519         pfnCb(count, p, pUser);
9520     },
__anon3431b75228a02() 9521     [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {
9522         VkFormatProperties3KHR formatProperties3KHR{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, nullptr };
9523         p->pNext = static_cast<VkBaseOutStructure*>(static_cast<void*>(&formatProperties3KHR));
9524         pfnCb(p, pUser);
9525     },
9526 };
9527 } // namespace baseline
9528 } // namespace blocks
9529 } // namespace VP_ANDROID_BASELINE_2022
9530 #endif // VP_ANDROID_baseline_2022
9531 
9532 
9533 #ifdef VP_ANDROID_15_minimums
9534 namespace VP_ANDROID_15_MINIMUMS {
9535     namespace blocks {
9536         namespace MUST {
9537             static const VpVariantDesc variants[] = {
9538                 {
9539                     "MUST",
9540                     static_cast<uint32_t>(std::size(blocks::MUST::instanceExtensions)), blocks::MUST::instanceExtensions,
9541                     static_cast<uint32_t>(std::size(blocks::MUST::deviceExtensions)), blocks::MUST::deviceExtensions,
9542                     static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9543                     blocks::MUST::featureDesc,
9544                     static_cast<uint32_t>(std::size(propertyStructTypes)), propertyStructTypes,
9545                     blocks::MUST::propertyDesc,
9546                     0, nullptr,
9547                     0, nullptr,
9548                     static_cast<uint32_t>(std::size(formatStructTypes)), formatStructTypes,
9549                     static_cast<uint32_t>(std::size(blocks::MUST::formatDesc)), blocks::MUST::formatDesc,
9550                     blocks::MUST::chainerDesc,
9551                     0, nullptr,
9552                 },
9553             };
9554             static const uint32_t variantCount = static_cast<uint32_t>(std::size(variants));
9555         } // namespace MUST
9556 
9557         namespace primitivesGeneratedQuery_pipelineStatisticsQuery_ {
9558             static const VpVariantDesc variants[] = {
9559                 {
9560                     "primitivesGeneratedQuery",
9561                     0, nullptr,
9562                     static_cast<uint32_t>(std::size(blocks::primitivesGeneratedQuery::deviceExtensions)), blocks::primitivesGeneratedQuery::deviceExtensions,
9563                     static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9564                     blocks::primitivesGeneratedQuery::featureDesc,
9565                     0, nullptr,
9566                     blocks::primitivesGeneratedQuery::propertyDesc,
9567                     0, nullptr,
9568                     0, nullptr,
9569                     0, nullptr,
9570                     0, nullptr,
9571                     blocks::primitivesGeneratedQuery::chainerDesc,
9572                     0, nullptr,
9573                 },
9574                 {
9575                     "pipelineStatisticsQuery",
9576                     0, nullptr,
9577                     0, nullptr,
9578                     static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9579                     blocks::pipelineStatisticsQuery::featureDesc,
9580                     0, nullptr,
9581                     blocks::pipelineStatisticsQuery::propertyDesc,
9582                     0, nullptr,
9583                     0, nullptr,
9584                     0, nullptr,
9585                     0, nullptr,
9586                     blocks::pipelineStatisticsQuery::chainerDesc,
9587                     0, nullptr,
9588                 },
9589             };
9590             static const uint32_t variantCount = static_cast<uint32_t>(std::size(variants));
9591         } // namespace primitivesGeneratedQuery_pipelineStatisticsQuery_
9592 
9593         namespace swBresenhamLines_hwBresenhamLines_ {
9594             static const VpVariantDesc variants[] = {
9595                 {
9596                     "swBresenhamLines",
9597                     0, nullptr,
9598                     static_cast<uint32_t>(std::size(blocks::swBresenhamLines::deviceExtensions)), blocks::swBresenhamLines::deviceExtensions,
9599                     static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9600                     blocks::swBresenhamLines::featureDesc,
9601                     0, nullptr,
9602                     blocks::swBresenhamLines::propertyDesc,
9603                     0, nullptr,
9604                     0, nullptr,
9605                     0, nullptr,
9606                     0, nullptr,
9607                     blocks::swBresenhamLines::chainerDesc,
9608                     0, nullptr,
9609                 },
9610                 {
9611                     "hwBresenhamLines",
9612                     0, nullptr,
9613                     static_cast<uint32_t>(std::size(blocks::hwBresenhamLines::deviceExtensions)), blocks::hwBresenhamLines::deviceExtensions,
9614                     static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9615                     blocks::hwBresenhamLines::featureDesc,
9616                     0, nullptr,
9617                     blocks::hwBresenhamLines::propertyDesc,
9618                     0, nullptr,
9619                     0, nullptr,
9620                     0, nullptr,
9621                     0, nullptr,
9622                     blocks::hwBresenhamLines::chainerDesc,
9623                     0, nullptr,
9624                 },
9625             };
9626             static const uint32_t variantCount = static_cast<uint32_t>(std::size(variants));
9627         } // namespace swBresenhamLines_hwBresenhamLines_
9628     } // namespace blocks
9629 
9630     static const VpCapabilitiesDesc capabilities[] = {
9631         { blocks::MUST::variantCount, blocks::MUST::variants },
9632         { blocks::primitivesGeneratedQuery_pipelineStatisticsQuery_::variantCount, blocks::primitivesGeneratedQuery_pipelineStatisticsQuery_::variants },
9633         { blocks::swBresenhamLines_hwBresenhamLines_::variantCount, blocks::swBresenhamLines_hwBresenhamLines_::variants },
9634     };
9635     static const uint32_t capabilityCount = static_cast<uint32_t>(std::size(capabilities));
9636 
9637     static const VpProfileProperties profiles[] = {
9638         {VP_ANDROID_BASELINE_2022_NAME, VP_ANDROID_BASELINE_2022_SPEC_VERSION},
9639     };
9640     static const uint32_t profileCount = static_cast<uint32_t>(std::size(profiles));
9641 } // namespace VP_ANDROID_15_MINIMUMS
9642 #endif //VP_ANDROID_15_minimums
9643 
9644 #ifdef VP_ANDROID_16_minimums
9645 namespace VP_ANDROID_16_MINIMUMS {
9646     namespace blocks {
9647         namespace MUST {
9648             static const VpVariantDesc variants[] = {
9649                 {
9650                     "MUST",
9651                     0, nullptr,
9652                     static_cast<uint32_t>(std::size(blocks::MUST::deviceExtensions)), blocks::MUST::deviceExtensions,
9653                     static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9654                     blocks::MUST::featureDesc,
9655                     static_cast<uint32_t>(std::size(propertyStructTypes)), propertyStructTypes,
9656                     blocks::MUST::propertyDesc,
9657                     0, nullptr,
9658                     0, nullptr,
9659                     0, nullptr,
9660                     0, nullptr,
9661                     blocks::MUST::chainerDesc,
9662                     0, nullptr,
9663                 },
9664             };
9665             static const uint32_t variantCount = static_cast<uint32_t>(std::size(variants));
9666         } // namespace MUST
9667 
9668         namespace multisampledToSingleSampled_shaderStencilExport_ {
9669             static const VpVariantDesc variants[] = {
9670                 {
9671                     "multisampledToSingleSampled",
9672                     0, nullptr,
9673                     static_cast<uint32_t>(std::size(blocks::multisampledToSingleSampled::deviceExtensions)), blocks::multisampledToSingleSampled::deviceExtensions,
9674                     0, nullptr,
9675                     blocks::multisampledToSingleSampled::featureDesc,
9676                     0, nullptr,
9677                     blocks::multisampledToSingleSampled::propertyDesc,
9678                     0, nullptr,
9679                     0, nullptr,
9680                     0, nullptr,
9681                     0, nullptr,
9682                     blocks::multisampledToSingleSampled::chainerDesc,
9683                     0, nullptr,
9684                 },
9685                 {
9686                     "shaderStencilExport",
9687                     0, nullptr,
9688                     static_cast<uint32_t>(std::size(blocks::shaderStencilExport::deviceExtensions)), blocks::shaderStencilExport::deviceExtensions,
9689                     0, nullptr,
9690                     blocks::shaderStencilExport::featureDesc,
9691                     0, nullptr,
9692                     blocks::shaderStencilExport::propertyDesc,
9693                     0, nullptr,
9694                     0, nullptr,
9695                     0, nullptr,
9696                     0, nullptr,
9697                     blocks::shaderStencilExport::chainerDesc,
9698                     0, nullptr,
9699                 },
9700             };
9701             static const uint32_t variantCount = static_cast<uint32_t>(std::size(variants));
9702         } // namespace multisampledToSingleSampled_shaderStencilExport_
9703     } // namespace blocks
9704 
9705     static const VpCapabilitiesDesc capabilities[] = {
9706         { blocks::MUST::variantCount, blocks::MUST::variants },
9707         { blocks::multisampledToSingleSampled_shaderStencilExport_::variantCount, blocks::multisampledToSingleSampled_shaderStencilExport_::variants },
9708     };
9709     static const uint32_t capabilityCount = static_cast<uint32_t>(std::size(capabilities));
9710 
9711     static const VpProfileProperties profiles[] = {
9712         {VP_ANDROID_BASELINE_2022_NAME, VP_ANDROID_BASELINE_2022_SPEC_VERSION},
9713         {VP_ANDROID_15_MINIMUMS_NAME, VP_ANDROID_15_MINIMUMS_SPEC_VERSION},
9714     };
9715     static const uint32_t profileCount = static_cast<uint32_t>(std::size(profiles));
9716 } // namespace VP_ANDROID_16_MINIMUMS
9717 #endif //VP_ANDROID_16_minimums
9718 
9719 #ifdef VP_ANDROID_baseline_2021
9720 namespace VP_ANDROID_BASELINE_2021 {
9721     static const VpVariantDesc mergedCapabilities[] = {
9722         {
9723         "MERGED",
9724         static_cast<uint32_t>(std::size(instanceExtensions)), instanceExtensions,
9725         static_cast<uint32_t>(std::size(deviceExtensions)), deviceExtensions,
9726         static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9727             featureDesc,
9728         0, nullptr,
9729             propertyDesc,
9730         0, nullptr,
9731         0, nullptr,
9732         0, nullptr,
9733         0, nullptr,
9734         chainerDesc,
9735         0, nullptr,
9736         },
9737     };
9738 
9739     namespace blocks {
9740         namespace baseline {
9741             static const VpVariantDesc variants[] = {
9742                 {
9743                     "baseline",
9744                     static_cast<uint32_t>(std::size(blocks::baseline::instanceExtensions)), blocks::baseline::instanceExtensions,
9745                     static_cast<uint32_t>(std::size(blocks::baseline::deviceExtensions)), blocks::baseline::deviceExtensions,
9746                     static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9747                     blocks::baseline::featureDesc,
9748                     static_cast<uint32_t>(std::size(propertyStructTypes)), propertyStructTypes,
9749                     blocks::baseline::propertyDesc,
9750                     0, nullptr,
9751                     0, nullptr,
9752                     static_cast<uint32_t>(std::size(formatStructTypes)), formatStructTypes,
9753                     static_cast<uint32_t>(std::size(blocks::baseline::formatDesc)), blocks::baseline::formatDesc,
9754                     blocks::baseline::chainerDesc,
9755                     0, nullptr,
9756                 },
9757             };
9758             static const uint32_t variantCount = static_cast<uint32_t>(std::size(variants));
9759         } // namespace baseline
9760     } // namespace blocks
9761 
9762     static const VpCapabilitiesDesc capabilities[] = {
9763         { blocks::baseline::variantCount, blocks::baseline::variants },
9764     };
9765     static const uint32_t capabilityCount = static_cast<uint32_t>(std::size(capabilities));
9766 } // namespace VP_ANDROID_BASELINE_2021
9767 #endif //VP_ANDROID_baseline_2021
9768 
9769 #ifdef VP_ANDROID_baseline_2021_cpu_only
9770 namespace VP_ANDROID_BASELINE_2021_CPU_ONLY {
9771     static const VpVariantDesc mergedCapabilities[] = {
9772         {
9773         "MERGED",
9774         static_cast<uint32_t>(std::size(instanceExtensions)), instanceExtensions,
9775         static_cast<uint32_t>(std::size(deviceExtensions)), deviceExtensions,
9776         static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9777             featureDesc,
9778         0, nullptr,
9779             propertyDesc,
9780         0, nullptr,
9781         0, nullptr,
9782         0, nullptr,
9783         0, nullptr,
9784         chainerDesc,
9785         0, nullptr,
9786         },
9787     };
9788 
9789     namespace blocks {
9790         namespace baseline {
9791             static const VpVariantDesc variants[] = {
9792                 {
9793                     "baseline",
9794                     static_cast<uint32_t>(std::size(blocks::baseline::instanceExtensions)), blocks::baseline::instanceExtensions,
9795                     static_cast<uint32_t>(std::size(blocks::baseline::deviceExtensions)), blocks::baseline::deviceExtensions,
9796                     static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9797                     blocks::baseline::featureDesc,
9798                     static_cast<uint32_t>(std::size(propertyStructTypes)), propertyStructTypes,
9799                     blocks::baseline::propertyDesc,
9800                     0, nullptr,
9801                     0, nullptr,
9802                     static_cast<uint32_t>(std::size(formatStructTypes)), formatStructTypes,
9803                     static_cast<uint32_t>(std::size(blocks::baseline::formatDesc)), blocks::baseline::formatDesc,
9804                     blocks::baseline::chainerDesc,
9805                     0, nullptr,
9806                 },
9807             };
9808             static const uint32_t variantCount = static_cast<uint32_t>(std::size(variants));
9809         } // namespace baseline
9810     } // namespace blocks
9811 
9812     static const VpCapabilitiesDesc capabilities[] = {
9813         { blocks::baseline::variantCount, blocks::baseline::variants },
9814     };
9815     static const uint32_t capabilityCount = static_cast<uint32_t>(std::size(capabilities));
9816 } // namespace VP_ANDROID_BASELINE_2021_CPU_ONLY
9817 #endif //VP_ANDROID_baseline_2021_cpu_only
9818 
9819 #ifdef VP_ANDROID_baseline_2022
9820 namespace VP_ANDROID_BASELINE_2022 {
9821     static const VpVariantDesc mergedCapabilities[] = {
9822         {
9823         "MERGED",
9824         static_cast<uint32_t>(std::size(instanceExtensions)), instanceExtensions,
9825         static_cast<uint32_t>(std::size(deviceExtensions)), deviceExtensions,
9826         static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9827             featureDesc,
9828         0, nullptr,
9829             propertyDesc,
9830         0, nullptr,
9831         0, nullptr,
9832         0, nullptr,
9833         0, nullptr,
9834         chainerDesc,
9835         0, nullptr,
9836         },
9837     };
9838 
9839     namespace blocks {
9840         namespace baseline {
9841             static const VpVariantDesc variants[] = {
9842                 {
9843                     "baseline",
9844                     static_cast<uint32_t>(std::size(blocks::baseline::instanceExtensions)), blocks::baseline::instanceExtensions,
9845                     static_cast<uint32_t>(std::size(blocks::baseline::deviceExtensions)), blocks::baseline::deviceExtensions,
9846                     static_cast<uint32_t>(std::size(featureStructTypes)), featureStructTypes,
9847                     blocks::baseline::featureDesc,
9848                     static_cast<uint32_t>(std::size(propertyStructTypes)), propertyStructTypes,
9849                     blocks::baseline::propertyDesc,
9850                     0, nullptr,
9851                     0, nullptr,
9852                     static_cast<uint32_t>(std::size(formatStructTypes)), formatStructTypes,
9853                     static_cast<uint32_t>(std::size(blocks::baseline::formatDesc)), blocks::baseline::formatDesc,
9854                     blocks::baseline::chainerDesc,
9855                     0, nullptr,
9856                 },
9857             };
9858             static const uint32_t variantCount = static_cast<uint32_t>(std::size(variants));
9859         } // namespace baseline
9860     } // namespace blocks
9861 
9862     static const VpCapabilitiesDesc capabilities[] = {
9863         { blocks::baseline::variantCount, blocks::baseline::variants },
9864     };
9865     static const uint32_t capabilityCount = static_cast<uint32_t>(std::size(capabilities));
9866 } // namespace VP_ANDROID_BASELINE_2022
9867 #endif //VP_ANDROID_baseline_2022
9868 
9869 static const VpProfileDesc profiles[] = {
9870 #ifdef VP_ANDROID_15_minimums
9871     VpProfileDesc{
9872         VpProfileProperties{ VP_ANDROID_15_MINIMUMS_NAME, VP_ANDROID_15_MINIMUMS_SPEC_VERSION },
9873         VP_ANDROID_15_MINIMUMS_MIN_API_VERSION,
9874         nullptr,
9875         VP_ANDROID_15_MINIMUMS::profileCount, VP_ANDROID_15_MINIMUMS::profiles,
9876         VP_ANDROID_15_MINIMUMS::capabilityCount, VP_ANDROID_15_MINIMUMS::capabilities,
9877         0, nullptr,
9878     },
9879 #endif // VP_ANDROID_15_MINIMUMS
9880 #ifdef VP_ANDROID_16_minimums
9881     VpProfileDesc{
9882         VpProfileProperties{ VP_ANDROID_16_MINIMUMS_NAME, VP_ANDROID_16_MINIMUMS_SPEC_VERSION },
9883         VP_ANDROID_16_MINIMUMS_MIN_API_VERSION,
9884         nullptr,
9885         VP_ANDROID_16_MINIMUMS::profileCount, VP_ANDROID_16_MINIMUMS::profiles,
9886         VP_ANDROID_16_MINIMUMS::capabilityCount, VP_ANDROID_16_MINIMUMS::capabilities,
9887         0, nullptr,
9888     },
9889 #endif // VP_ANDROID_16_MINIMUMS
9890 #ifdef VP_ANDROID_baseline_2021
9891     VpProfileDesc{
9892         VpProfileProperties{ VP_ANDROID_BASELINE_2021_NAME, VP_ANDROID_BASELINE_2021_SPEC_VERSION },
9893         VP_ANDROID_BASELINE_2021_MIN_API_VERSION,
9894         VP_ANDROID_BASELINE_2021::mergedCapabilities,
9895         0, nullptr,
9896         VP_ANDROID_BASELINE_2021::capabilityCount, VP_ANDROID_BASELINE_2021::capabilities,
9897         0, nullptr,
9898     },
9899 #endif // VP_ANDROID_BASELINE_2021
9900 #ifdef VP_ANDROID_baseline_2021_cpu_only
9901     VpProfileDesc{
9902         VpProfileProperties{ VP_ANDROID_BASELINE_2021_CPU_ONLY_NAME, VP_ANDROID_BASELINE_2021_CPU_ONLY_SPEC_VERSION },
9903         VP_ANDROID_BASELINE_2021_CPU_ONLY_MIN_API_VERSION,
9904         VP_ANDROID_BASELINE_2021_CPU_ONLY::mergedCapabilities,
9905         0, nullptr,
9906         VP_ANDROID_BASELINE_2021_CPU_ONLY::capabilityCount, VP_ANDROID_BASELINE_2021_CPU_ONLY::capabilities,
9907         0, nullptr,
9908     },
9909 #endif // VP_ANDROID_BASELINE_2021_CPU_ONLY
9910 #ifdef VP_ANDROID_baseline_2022
9911     VpProfileDesc{
9912         VpProfileProperties{ VP_ANDROID_BASELINE_2022_NAME, VP_ANDROID_BASELINE_2022_SPEC_VERSION },
9913         VP_ANDROID_BASELINE_2022_MIN_API_VERSION,
9914         VP_ANDROID_BASELINE_2022::mergedCapabilities,
9915         0, nullptr,
9916         VP_ANDROID_BASELINE_2022::capabilityCount, VP_ANDROID_BASELINE_2022::capabilities,
9917         0, nullptr,
9918     },
9919 #endif // VP_ANDROID_BASELINE_2022
9920 };
9921 static const uint32_t profileCount = static_cast<uint32_t>(std::size(profiles));
9922 
9923 
9924 struct FeaturesChain {
9925     std::map<VkStructureType, std::size_t> structureSize;
9926 
9927     template<typename T>
sizedetail::FeaturesChain9928     constexpr std::size_t size() const {
9929         return (sizeof(T) - sizeof(VkBaseOutStructure)) / sizeof(VkBool32);
9930     }
9931 
9932 	// Chain with all Vulkan Features structures
9933     VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV physicalDeviceDeviceGeneratedCommandsFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV, nullptr };
9934     VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV, nullptr };
9935     VkPhysicalDevicePrivateDataFeatures physicalDevicePrivateDataFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, nullptr };
9936     VkPhysicalDeviceVariablePointersFeatures physicalDeviceVariablePointersFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, nullptr };
9937     VkPhysicalDeviceMultiviewFeatures physicalDeviceMultiviewFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, nullptr };
9938     VkPhysicalDevicePresentIdFeaturesKHR physicalDevicePresentIdFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, nullptr };
9939     VkPhysicalDevicePresentWaitFeaturesKHR physicalDevicePresentWaitFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, nullptr };
9940     VkPhysicalDevice16BitStorageFeatures physicalDevice16BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, nullptr };
9941     VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, nullptr };
9942     VkPhysicalDeviceSamplerYcbcrConversionFeatures physicalDeviceSamplerYcbcrConversionFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, nullptr };
9943     VkPhysicalDeviceProtectedMemoryFeatures physicalDeviceProtectedMemoryFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, nullptr };
9944     VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT physicalDeviceBlendOperationAdvancedFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, nullptr };
9945     VkPhysicalDeviceMultiDrawFeaturesEXT physicalDeviceMultiDrawFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT, nullptr };
9946     VkPhysicalDeviceInlineUniformBlockFeatures physicalDeviceInlineUniformBlockFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, nullptr };
9947     VkPhysicalDeviceMaintenance4Features physicalDeviceMaintenance4Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, nullptr };
9948     VkPhysicalDeviceMaintenance5Features physicalDeviceMaintenance5Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES, nullptr };
9949     VkPhysicalDeviceMaintenance6Features physicalDeviceMaintenance6Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES, nullptr };
9950     VkPhysicalDeviceMaintenance7FeaturesKHR physicalDeviceMaintenance7FeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR, nullptr };
9951     VkPhysicalDeviceShaderDrawParametersFeatures physicalDeviceShaderDrawParametersFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, nullptr };
9952     VkPhysicalDeviceShaderFloat16Int8Features physicalDeviceShaderFloat16Int8Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, nullptr };
9953     VkPhysicalDeviceHostQueryResetFeatures physicalDeviceHostQueryResetFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, nullptr };
9954     VkPhysicalDeviceGlobalPriorityQueryFeatures physicalDeviceGlobalPriorityQueryFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, nullptr };
9955     VkPhysicalDeviceDeviceMemoryReportFeaturesEXT physicalDeviceDeviceMemoryReportFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT, nullptr };
9956     VkPhysicalDeviceDescriptorIndexingFeatures physicalDeviceDescriptorIndexingFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, nullptr };
9957     VkPhysicalDeviceTimelineSemaphoreFeatures physicalDeviceTimelineSemaphoreFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, nullptr };
9958     VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, nullptr };
9959     VkPhysicalDeviceConditionalRenderingFeaturesEXT physicalDeviceConditionalRenderingFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, nullptr };
9960     VkPhysicalDeviceVulkanMemoryModelFeatures physicalDeviceVulkanMemoryModelFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, nullptr };
9961     VkPhysicalDeviceShaderAtomicInt64Features physicalDeviceShaderAtomicInt64Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, nullptr };
9962     VkPhysicalDeviceShaderAtomicFloatFeaturesEXT physicalDeviceShaderAtomicFloatFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, nullptr };
9963     VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT physicalDeviceShaderAtomicFloat2FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT, nullptr };
9964     VkPhysicalDeviceVertexAttributeDivisorFeatures physicalDeviceVertexAttributeDivisorFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, nullptr };
9965     VkPhysicalDeviceASTCDecodeFeaturesEXT physicalDeviceASTCDecodeFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, nullptr };
9966     VkPhysicalDeviceTransformFeedbackFeaturesEXT physicalDeviceTransformFeedbackFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, nullptr };
9967     VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV physicalDeviceRepresentativeFragmentTestFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, nullptr };
9968     VkPhysicalDeviceExclusiveScissorFeaturesNV physicalDeviceExclusiveScissorFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, nullptr };
9969     VkPhysicalDeviceCornerSampledImageFeaturesNV physicalDeviceCornerSampledImageFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, nullptr };
9970     VkPhysicalDeviceShaderImageFootprintFeaturesNV physicalDeviceShaderImageFootprintFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, nullptr };
9971     VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV physicalDeviceDedicatedAllocationImageAliasingFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, nullptr };
9972     VkPhysicalDeviceCopyMemoryIndirectFeaturesNV physicalDeviceCopyMemoryIndirectFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV, nullptr };
9973     VkPhysicalDeviceMemoryDecompressionFeaturesNV physicalDeviceMemoryDecompressionFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV, nullptr };
9974     VkPhysicalDeviceShadingRateImageFeaturesNV physicalDeviceShadingRateImageFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, nullptr };
9975     VkPhysicalDeviceInvocationMaskFeaturesHUAWEI physicalDeviceInvocationMaskFeaturesHUAWEI{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI, nullptr };
9976     VkPhysicalDeviceMeshShaderFeaturesNV physicalDeviceMeshShaderFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, nullptr };
9977     VkPhysicalDeviceMeshShaderFeaturesEXT physicalDeviceMeshShaderFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT, nullptr };
9978     VkPhysicalDeviceAccelerationStructureFeaturesKHR physicalDeviceAccelerationStructureFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR, nullptr };
9979     VkPhysicalDeviceRayTracingPipelineFeaturesKHR physicalDeviceRayTracingPipelineFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR, nullptr };
9980     VkPhysicalDeviceRayQueryFeaturesKHR physicalDeviceRayQueryFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR, nullptr };
9981     VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR physicalDeviceRayTracingMaintenance1FeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR, nullptr };
9982     VkPhysicalDeviceFragmentDensityMapFeaturesEXT physicalDeviceFragmentDensityMapFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, nullptr };
9983     VkPhysicalDeviceFragmentDensityMap2FeaturesEXT physicalDeviceFragmentDensityMap2FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT, nullptr };
9984     VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM physicalDeviceFragmentDensityMapOffsetFeaturesQCOM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM, nullptr };
9985     VkPhysicalDeviceScalarBlockLayoutFeatures physicalDeviceScalarBlockLayoutFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, nullptr };
9986     VkPhysicalDeviceUniformBufferStandardLayoutFeatures physicalDeviceUniformBufferStandardLayoutFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, nullptr };
9987     VkPhysicalDeviceDepthClipEnableFeaturesEXT physicalDeviceDepthClipEnableFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, nullptr };
9988     VkPhysicalDeviceMemoryPriorityFeaturesEXT physicalDeviceMemoryPriorityFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, nullptr };
9989     VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT physicalDevicePageableDeviceLocalMemoryFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT, nullptr };
9990     VkPhysicalDeviceBufferDeviceAddressFeatures physicalDeviceBufferDeviceAddressFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, nullptr };
9991     VkPhysicalDeviceBufferDeviceAddressFeaturesEXT physicalDeviceBufferDeviceAddressFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, nullptr };
9992     VkPhysicalDeviceImagelessFramebufferFeatures physicalDeviceImagelessFramebufferFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, nullptr };
9993     VkPhysicalDeviceTextureCompressionASTCHDRFeatures physicalDeviceTextureCompressionASTCHDRFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, nullptr };
9994     VkPhysicalDeviceCooperativeMatrixFeaturesNV physicalDeviceCooperativeMatrixFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, nullptr };
9995     VkPhysicalDeviceYcbcrImageArraysFeaturesEXT physicalDeviceYcbcrImageArraysFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, nullptr };
9996     VkPhysicalDevicePresentBarrierFeaturesNV physicalDevicePresentBarrierFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV, nullptr };
9997     VkPhysicalDevicePerformanceQueryFeaturesKHR physicalDevicePerformanceQueryFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, nullptr };
9998     VkPhysicalDeviceCoverageReductionModeFeaturesNV physicalDeviceCoverageReductionModeFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, nullptr };
9999     VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL physicalDeviceShaderIntegerFunctions2FeaturesINTEL{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, nullptr };
10000     VkPhysicalDeviceShaderClockFeaturesKHR physicalDeviceShaderClockFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, nullptr };
10001     VkPhysicalDeviceIndexTypeUint8Features physicalDeviceIndexTypeUint8Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, nullptr };
10002     VkPhysicalDeviceShaderSMBuiltinsFeaturesNV physicalDeviceShaderSMBuiltinsFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV, nullptr };
10003     VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT physicalDeviceFragmentShaderInterlockFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, nullptr };
10004     VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures physicalDeviceSeparateDepthStencilLayoutsFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, nullptr };
10005     VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT physicalDevicePrimitiveTopologyListRestartFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, nullptr };
10006     VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR physicalDevicePipelineExecutablePropertiesFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, nullptr };
10007     VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures physicalDeviceShaderDemoteToHelperInvocationFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, nullptr };
10008     VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT physicalDeviceTexelBufferAlignmentFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, nullptr };
10009     VkPhysicalDeviceSubgroupSizeControlFeatures physicalDeviceSubgroupSizeControlFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, nullptr };
10010     VkPhysicalDeviceLineRasterizationFeatures physicalDeviceLineRasterizationFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, nullptr };
10011     VkPhysicalDevicePipelineCreationCacheControlFeatures physicalDevicePipelineCreationCacheControlFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, nullptr };
10012     VkPhysicalDeviceVulkan11Features physicalDeviceVulkan11Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, nullptr };
10013     VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, nullptr };
10014     VkPhysicalDeviceVulkan13Features physicalDeviceVulkan13Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, nullptr };
10015     VkPhysicalDeviceVulkan14Features physicalDeviceVulkan14Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES, nullptr };
10016     VkPhysicalDeviceCoherentMemoryFeaturesAMD physicalDeviceCoherentMemoryFeaturesAMD{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, nullptr };
10017     VkPhysicalDeviceCustomBorderColorFeaturesEXT physicalDeviceCustomBorderColorFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, nullptr };
10018     VkPhysicalDeviceBorderColorSwizzleFeaturesEXT physicalDeviceBorderColorSwizzleFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT, nullptr };
10019     VkPhysicalDeviceExtendedDynamicStateFeaturesEXT physicalDeviceExtendedDynamicStateFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, nullptr };
10020     VkPhysicalDeviceExtendedDynamicState2FeaturesEXT physicalDeviceExtendedDynamicState2FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, nullptr };
10021     VkPhysicalDeviceExtendedDynamicState3FeaturesEXT physicalDeviceExtendedDynamicState3FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT, nullptr };
10022     VkPhysicalDeviceDiagnosticsConfigFeaturesNV physicalDeviceDiagnosticsConfigFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, nullptr };
10023     VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures physicalDeviceZeroInitializeWorkgroupMemoryFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES, nullptr };
10024     VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR, nullptr };
10025     VkPhysicalDeviceRobustness2FeaturesEXT physicalDeviceRobustness2FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, nullptr };
10026     VkPhysicalDeviceImageRobustnessFeatures physicalDeviceImageRobustnessFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, nullptr };
10027     VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR, nullptr };
10028 #ifdef VK_ENABLE_BETA_EXTENSIONS
10029     VkPhysicalDevicePortabilitySubsetFeaturesKHR physicalDevicePortabilitySubsetFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR, nullptr };
10030 #endif
10031     VkPhysicalDevice4444FormatsFeaturesEXT physicalDevice4444FormatsFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, nullptr };
10032     VkPhysicalDeviceSubpassShadingFeaturesHUAWEI physicalDeviceSubpassShadingFeaturesHUAWEI{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI, nullptr };
10033     VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI physicalDeviceClusterCullingShaderFeaturesHUAWEI{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI, nullptr };
10034     VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT physicalDeviceShaderImageAtomicInt64FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT, nullptr };
10035     VkPhysicalDeviceFragmentShadingRateFeaturesKHR physicalDeviceFragmentShadingRateFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR, nullptr };
10036     VkPhysicalDeviceShaderTerminateInvocationFeatures physicalDeviceShaderTerminateInvocationFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, nullptr };
10037     VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV physicalDeviceFragmentShadingRateEnumsFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV, nullptr };
10038     VkPhysicalDeviceImage2DViewOf3DFeaturesEXT physicalDeviceImage2DViewOf3DFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, nullptr };
10039     VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT physicalDeviceImageSlicedViewOf3DFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT, nullptr };
10040     VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT, nullptr };
10041     VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT physicalDeviceLegacyVertexAttributesFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT, nullptr };
10042     VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT physicalDeviceMutableDescriptorTypeFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, nullptr };
10043     VkPhysicalDeviceDepthClipControlFeaturesEXT physicalDeviceDepthClipControlFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT, nullptr };
10044     VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT physicalDeviceVertexInputDynamicStateFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT, nullptr };
10045     VkPhysicalDeviceExternalMemoryRDMAFeaturesNV physicalDeviceExternalMemoryRDMAFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV, nullptr };
10046     VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR physicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR, nullptr };
10047     VkPhysicalDeviceColorWriteEnableFeaturesEXT physicalDeviceColorWriteEnableFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT, nullptr };
10048     VkPhysicalDeviceSynchronization2Features physicalDeviceSynchronization2Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, nullptr };
10049     VkPhysicalDeviceHostImageCopyFeatures physicalDeviceHostImageCopyFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES, nullptr };
10050     VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT physicalDevicePrimitivesGeneratedQueryFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, nullptr };
10051     VkPhysicalDeviceLegacyDitheringFeaturesEXT physicalDeviceLegacyDitheringFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT, nullptr };
10052     VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT, nullptr };
10053     VkPhysicalDevicePipelineProtectedAccessFeatures physicalDevicePipelineProtectedAccessFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, nullptr };
10054     VkPhysicalDeviceVideoMaintenance1FeaturesKHR physicalDeviceVideoMaintenance1FeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR, nullptr };
10055     VkPhysicalDeviceInheritedViewportScissorFeaturesNV physicalDeviceInheritedViewportScissorFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV, nullptr };
10056     VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT physicalDeviceYcbcr2Plane444FormatsFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT, nullptr };
10057     VkPhysicalDeviceProvokingVertexFeaturesEXT physicalDeviceProvokingVertexFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, nullptr };
10058     VkPhysicalDeviceDescriptorBufferFeaturesEXT physicalDeviceDescriptorBufferFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT, nullptr };
10059     VkPhysicalDeviceShaderIntegerDotProductFeatures physicalDeviceShaderIntegerDotProductFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, nullptr };
10060     VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR physicalDeviceFragmentShaderBarycentricFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR, nullptr };
10061     VkPhysicalDeviceRayTracingMotionBlurFeaturesNV physicalDeviceRayTracingMotionBlurFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV, nullptr };
10062     VkPhysicalDeviceRayTracingValidationFeaturesNV physicalDeviceRayTracingValidationFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV, nullptr };
10063     VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT physicalDeviceRGBA10X6FormatsFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT, nullptr };
10064     VkPhysicalDeviceDynamicRenderingFeatures physicalDeviceDynamicRenderingFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, nullptr };
10065     VkPhysicalDeviceImageViewMinLodFeaturesEXT physicalDeviceImageViewMinLodFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT, nullptr };
10066     VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, nullptr };
10067     VkPhysicalDeviceLinearColorAttachmentFeaturesNV physicalDeviceLinearColorAttachmentFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV, nullptr };
10068     VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT physicalDeviceGraphicsPipelineLibraryFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT, nullptr };
10069     VkPhysicalDevicePipelineBinaryFeaturesKHR physicalDevicePipelineBinaryFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_FEATURES_KHR, nullptr };
10070     VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE physicalDeviceDescriptorSetHostMappingFeaturesVALVE{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE, nullptr };
10071     VkPhysicalDeviceNestedCommandBufferFeaturesEXT physicalDeviceNestedCommandBufferFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT, nullptr };
10072     VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT physicalDeviceShaderModuleIdentifierFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT, nullptr };
10073     VkPhysicalDeviceImageCompressionControlFeaturesEXT physicalDeviceImageCompressionControlFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT, nullptr };
10074     VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT physicalDeviceImageCompressionControlSwapchainFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT, nullptr };
10075     VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT physicalDeviceSubpassMergeFeedbackFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT, nullptr };
10076     VkPhysicalDeviceOpacityMicromapFeaturesEXT physicalDeviceOpacityMicromapFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT, nullptr };
10077 #ifdef VK_ENABLE_BETA_EXTENSIONS
10078     VkPhysicalDeviceDisplacementMicromapFeaturesNV physicalDeviceDisplacementMicromapFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV, nullptr };
10079 #endif
10080     VkPhysicalDevicePipelinePropertiesFeaturesEXT physicalDevicePipelinePropertiesFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT, nullptr };
10081     VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD, nullptr };
10082     VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT physicalDeviceNonSeamlessCubeMapFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT, nullptr };
10083     VkPhysicalDevicePipelineRobustnessFeatures physicalDevicePipelineRobustnessFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, nullptr };
10084     VkPhysicalDeviceImageProcessingFeaturesQCOM physicalDeviceImageProcessingFeaturesQCOM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM, nullptr };
10085     VkPhysicalDeviceTilePropertiesFeaturesQCOM physicalDeviceTilePropertiesFeaturesQCOM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM, nullptr };
10086     VkPhysicalDeviceAmigoProfilingFeaturesSEC physicalDeviceAmigoProfilingFeaturesSEC{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC, nullptr };
10087     VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT, nullptr };
10088     VkPhysicalDeviceDepthClampZeroOneFeaturesEXT physicalDeviceDepthClampZeroOneFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT, nullptr };
10089     VkPhysicalDeviceAddressBindingReportFeaturesEXT physicalDeviceAddressBindingReportFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT, nullptr };
10090     VkPhysicalDeviceOpticalFlowFeaturesNV physicalDeviceOpticalFlowFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV, nullptr };
10091     VkPhysicalDeviceFaultFeaturesEXT physicalDeviceFaultFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT, nullptr };
10092     VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT physicalDevicePipelineLibraryGroupHandlesFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT, nullptr };
10093     VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM physicalDeviceShaderCoreBuiltinsFeaturesARM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM, nullptr };
10094     VkPhysicalDeviceFrameBoundaryFeaturesEXT physicalDeviceFrameBoundaryFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT, nullptr };
10095     VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT, nullptr };
10096     VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT physicalDeviceSwapchainMaintenance1FeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT, nullptr };
10097     VkPhysicalDeviceDepthBiasControlFeaturesEXT physicalDeviceDepthBiasControlFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT, nullptr };
10098     VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV physicalDeviceRayTracingInvocationReorderFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV, nullptr };
10099     VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV physicalDeviceExtendedSparseAddressSpaceFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV, nullptr };
10100     VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM physicalDeviceMultiviewPerViewViewportsFeaturesQCOM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM, nullptr };
10101     VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR physicalDeviceRayTracingPositionFetchFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR, nullptr };
10102     VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM physicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM, nullptr };
10103     VkPhysicalDeviceShaderObjectFeaturesEXT physicalDeviceShaderObjectFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT, nullptr };
10104     VkPhysicalDeviceShaderTileImageFeaturesEXT physicalDeviceShaderTileImageFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT, nullptr };
10105 #ifdef VK_USE_PLATFORM_SCREEN_QNX
10106     VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX physicalDeviceExternalMemoryScreenBufferFeaturesQNX{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX, nullptr };
10107 #endif
10108     VkPhysicalDeviceCooperativeMatrixFeaturesKHR physicalDeviceCooperativeMatrixFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR, nullptr };
10109 #ifdef VK_ENABLE_BETA_EXTENSIONS
10110     VkPhysicalDeviceShaderEnqueueFeaturesAMDX physicalDeviceShaderEnqueueFeaturesAMDX{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX, nullptr };
10111 #endif
10112     VkPhysicalDeviceAntiLagFeaturesAMD physicalDeviceAntiLagFeaturesAMD{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD, nullptr };
10113     VkPhysicalDeviceCubicClampFeaturesQCOM physicalDeviceCubicClampFeaturesQCOM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM, nullptr };
10114     VkPhysicalDeviceYcbcrDegammaFeaturesQCOM physicalDeviceYcbcrDegammaFeaturesQCOM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM, nullptr };
10115     VkPhysicalDeviceCubicWeightsFeaturesQCOM physicalDeviceCubicWeightsFeaturesQCOM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM, nullptr };
10116     VkPhysicalDeviceImageProcessing2FeaturesQCOM physicalDeviceImageProcessing2FeaturesQCOM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM, nullptr };
10117     VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV physicalDeviceDescriptorPoolOverallocationFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV, nullptr };
10118     VkPhysicalDevicePerStageDescriptorSetFeaturesNV physicalDevicePerStageDescriptorSetFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV, nullptr };
10119 #ifdef VK_USE_PLATFORM_ANDROID_KHR
10120     VkPhysicalDeviceExternalFormatResolveFeaturesANDROID physicalDeviceExternalFormatResolveFeaturesANDROID{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID, nullptr };
10121 #endif
10122     VkPhysicalDeviceCudaKernelLaunchFeaturesNV physicalDeviceCudaKernelLaunchFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV, nullptr };
10123     VkPhysicalDeviceSchedulingControlsFeaturesARM physicalDeviceSchedulingControlsFeaturesARM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM, nullptr };
10124     VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG physicalDeviceRelaxedLineRasterizationFeaturesIMG{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG, nullptr };
10125     VkPhysicalDeviceRenderPassStripedFeaturesARM physicalDeviceRenderPassStripedFeaturesARM{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM, nullptr };
10126     VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR physicalDeviceShaderMaximalReconvergenceFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR, nullptr };
10127     VkPhysicalDeviceShaderSubgroupRotateFeatures physicalDeviceShaderSubgroupRotateFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES, nullptr };
10128     VkPhysicalDeviceShaderExpectAssumeFeatures physicalDeviceShaderExpectAssumeFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES, nullptr };
10129     VkPhysicalDeviceShaderFloatControls2Features physicalDeviceShaderFloatControls2Features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES, nullptr };
10130     VkPhysicalDeviceDynamicRenderingLocalReadFeatures physicalDeviceDynamicRenderingLocalReadFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES, nullptr };
10131     VkPhysicalDeviceShaderQuadControlFeaturesKHR physicalDeviceShaderQuadControlFeaturesKHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR, nullptr };
10132     VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV physicalDeviceShaderAtomicFloat16VectorFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV, nullptr };
10133     VkPhysicalDeviceMapMemoryPlacedFeaturesEXT physicalDeviceMapMemoryPlacedFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT, nullptr };
10134     VkPhysicalDeviceRawAccessChainsFeaturesNV physicalDeviceRawAccessChainsFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV, nullptr };
10135     VkPhysicalDeviceCommandBufferInheritanceFeaturesNV physicalDeviceCommandBufferInheritanceFeaturesNV{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV, nullptr };
10136     VkPhysicalDeviceImageAlignmentControlFeaturesMESA physicalDeviceImageAlignmentControlFeaturesMESA{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA, nullptr };
10137     VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT physicalDeviceShaderReplicatedCompositesFeaturesEXT{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT, nullptr };
10138     VkPhysicalDeviceFeatures2KHR physicalDeviceFeatures2KHR{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, nullptr };
10139 
FeaturesChaindetail::FeaturesChain10140     FeaturesChain() {
10141         // Initializing all feature structures, number of Features (VkBool32) per structure.
10142         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV, size<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV>() });
10143         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV, size<VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV>() });
10144         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, size<VkPhysicalDevicePrivateDataFeatures>() });
10145         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, size<VkPhysicalDeviceVariablePointersFeatures>() });
10146         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, size<VkPhysicalDeviceMultiviewFeatures>() });
10147         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, size<VkPhysicalDevicePresentIdFeaturesKHR>() });
10148         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, size<VkPhysicalDevicePresentWaitFeaturesKHR>() });
10149         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, size<VkPhysicalDevice16BitStorageFeatures>() });
10150         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, size<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>() });
10151         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, size<VkPhysicalDeviceSamplerYcbcrConversionFeatures>() });
10152         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, size<VkPhysicalDeviceProtectedMemoryFeatures>() });
10153         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, size<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>() });
10154         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT, size<VkPhysicalDeviceMultiDrawFeaturesEXT>() });
10155         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, size<VkPhysicalDeviceInlineUniformBlockFeatures>() });
10156         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, size<VkPhysicalDeviceMaintenance4Features>() });
10157         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES, size<VkPhysicalDeviceMaintenance5Features>() });
10158         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES, size<VkPhysicalDeviceMaintenance6Features>() });
10159         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR, size<VkPhysicalDeviceMaintenance7FeaturesKHR>() });
10160         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, size<VkPhysicalDeviceShaderDrawParametersFeatures>() });
10161         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, size<VkPhysicalDeviceShaderFloat16Int8Features>() });
10162         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, size<VkPhysicalDeviceHostQueryResetFeatures>() });
10163         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, size<VkPhysicalDeviceGlobalPriorityQueryFeatures>() });
10164         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT, size<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT>() });
10165         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, size<VkPhysicalDeviceDescriptorIndexingFeatures>() });
10166         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, size<VkPhysicalDeviceTimelineSemaphoreFeatures>() });
10167         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, size<VkPhysicalDevice8BitStorageFeatures>() });
10168         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, size<VkPhysicalDeviceConditionalRenderingFeaturesEXT>() });
10169         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, size<VkPhysicalDeviceVulkanMemoryModelFeatures>() });
10170         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, size<VkPhysicalDeviceShaderAtomicInt64Features>() });
10171         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, size<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>() });
10172         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT, size<VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT>() });
10173         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, size<VkPhysicalDeviceVertexAttributeDivisorFeatures>() });
10174         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, size<VkPhysicalDeviceASTCDecodeFeaturesEXT>() });
10175         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, size<VkPhysicalDeviceTransformFeedbackFeaturesEXT>() });
10176         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, size<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>() });
10177         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, size<VkPhysicalDeviceExclusiveScissorFeaturesNV>() });
10178         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, size<VkPhysicalDeviceCornerSampledImageFeaturesNV>() });
10179         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, size<VkPhysicalDeviceShaderImageFootprintFeaturesNV>() });
10180         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, size<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>() });
10181         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV, size<VkPhysicalDeviceCopyMemoryIndirectFeaturesNV>() });
10182         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV, size<VkPhysicalDeviceMemoryDecompressionFeaturesNV>() });
10183         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, size<VkPhysicalDeviceShadingRateImageFeaturesNV>() });
10184         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI, size<VkPhysicalDeviceInvocationMaskFeaturesHUAWEI>() });
10185         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, size<VkPhysicalDeviceMeshShaderFeaturesNV>() });
10186         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT, size<VkPhysicalDeviceMeshShaderFeaturesEXT>() });
10187         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR, size<VkPhysicalDeviceAccelerationStructureFeaturesKHR>() });
10188         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR, size<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>() });
10189         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR, size<VkPhysicalDeviceRayQueryFeaturesKHR>() });
10190         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR, size<VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR>() });
10191         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, size<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>() });
10192         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT, size<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>() });
10193         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM, size<VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>() });
10194         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, size<VkPhysicalDeviceScalarBlockLayoutFeatures>() });
10195         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, size<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>() });
10196         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, size<VkPhysicalDeviceDepthClipEnableFeaturesEXT>() });
10197         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, size<VkPhysicalDeviceMemoryPriorityFeaturesEXT>() });
10198         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT, size<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>() });
10199         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, size<VkPhysicalDeviceBufferDeviceAddressFeatures>() });
10200         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, size<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>() });
10201         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, size<VkPhysicalDeviceImagelessFramebufferFeatures>() });
10202         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, size<VkPhysicalDeviceTextureCompressionASTCHDRFeatures>() });
10203         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, size<VkPhysicalDeviceCooperativeMatrixFeaturesNV>() });
10204         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, size<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>() });
10205         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV, size<VkPhysicalDevicePresentBarrierFeaturesNV>() });
10206         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, size<VkPhysicalDevicePerformanceQueryFeaturesKHR>() });
10207         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, size<VkPhysicalDeviceCoverageReductionModeFeaturesNV>() });
10208         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, size<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>() });
10209         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, size<VkPhysicalDeviceShaderClockFeaturesKHR>() });
10210         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, size<VkPhysicalDeviceIndexTypeUint8Features>() });
10211         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV, size<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>() });
10212         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, size<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>() });
10213         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, size<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>() });
10214         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, size<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>() });
10215         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, size<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>() });
10216         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, size<VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures>() });
10217         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, size<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>() });
10218         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, size<VkPhysicalDeviceSubgroupSizeControlFeatures>() });
10219         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, size<VkPhysicalDeviceLineRasterizationFeatures>() });
10220         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES, size<VkPhysicalDevicePipelineCreationCacheControlFeatures>() });
10221         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, size<VkPhysicalDeviceVulkan11Features>() });
10222         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, size<VkPhysicalDeviceVulkan12Features>() });
10223         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, size<VkPhysicalDeviceVulkan13Features>() });
10224         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES, size<VkPhysicalDeviceVulkan14Features>() });
10225         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, size<VkPhysicalDeviceCoherentMemoryFeaturesAMD>() });
10226         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, size<VkPhysicalDeviceCustomBorderColorFeaturesEXT>() });
10227         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT, size<VkPhysicalDeviceBorderColorSwizzleFeaturesEXT>() });
10228         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, size<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>() });
10229         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, size<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>() });
10230         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT, size<VkPhysicalDeviceExtendedDynamicState3FeaturesEXT>() });
10231         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, size<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>() });
10232         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES, size<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures>() });
10233         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR, size<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>() });
10234         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, size<VkPhysicalDeviceRobustness2FeaturesEXT>() });
10235         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, size<VkPhysicalDeviceImageRobustnessFeatures>() });
10236         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR, size<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>() });
10237 #ifdef VK_ENABLE_BETA_EXTENSIONS
10238         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR, size<VkPhysicalDevicePortabilitySubsetFeaturesKHR>() });
10239 #endif
10240         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, size<VkPhysicalDevice4444FormatsFeaturesEXT>() });
10241         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI, size<VkPhysicalDeviceSubpassShadingFeaturesHUAWEI>() });
10242         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI, size<VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI>() });
10243         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT, size<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>() });
10244         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR, size<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>() });
10245         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, size<VkPhysicalDeviceShaderTerminateInvocationFeatures>() });
10246         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV, size<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV>() });
10247         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, size<VkPhysicalDeviceImage2DViewOf3DFeaturesEXT>() });
10248         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT, size<VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT>() });
10249         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT, size<VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT>() });
10250         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT, size<VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT>() });
10251         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, size<VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT>() });
10252         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT, size<VkPhysicalDeviceDepthClipControlFeaturesEXT>() });
10253         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT, size<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>() });
10254         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV, size<VkPhysicalDeviceExternalMemoryRDMAFeaturesNV>() });
10255         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR, size<VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR>() });
10256         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT, size<VkPhysicalDeviceColorWriteEnableFeaturesEXT>() });
10257         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES, size<VkPhysicalDeviceSynchronization2Features>() });
10258         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES, size<VkPhysicalDeviceHostImageCopyFeatures>() });
10259         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, size<VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT>() });
10260         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT, size<VkPhysicalDeviceLegacyDitheringFeaturesEXT>() });
10261         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT, size<VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT>() });
10262         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, size<VkPhysicalDevicePipelineProtectedAccessFeatures>() });
10263         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR, size<VkPhysicalDeviceVideoMaintenance1FeaturesKHR>() });
10264         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV, size<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>() });
10265         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT, size<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>() });
10266         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT, size<VkPhysicalDeviceProvokingVertexFeaturesEXT>() });
10267         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT, size<VkPhysicalDeviceDescriptorBufferFeaturesEXT>() });
10268         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, size<VkPhysicalDeviceShaderIntegerDotProductFeatures>() });
10269         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR, size<VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR>() });
10270         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV, size<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV>() });
10271         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV, size<VkPhysicalDeviceRayTracingValidationFeaturesNV>() });
10272         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT, size<VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT>() });
10273         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES, size<VkPhysicalDeviceDynamicRenderingFeatures>() });
10274         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT, size<VkPhysicalDeviceImageViewMinLodFeaturesEXT>() });
10275         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, size<VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT>() });
10276         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV, size<VkPhysicalDeviceLinearColorAttachmentFeaturesNV>() });
10277         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT, size<VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT>() });
10278         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_BINARY_FEATURES_KHR, size<VkPhysicalDevicePipelineBinaryFeaturesKHR>() });
10279         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE, size<VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE>() });
10280         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT, size<VkPhysicalDeviceNestedCommandBufferFeaturesEXT>() });
10281         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT, size<VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT>() });
10282         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT, size<VkPhysicalDeviceImageCompressionControlFeaturesEXT>() });
10283         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT, size<VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT>() });
10284         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT, size<VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT>() });
10285         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT, size<VkPhysicalDeviceOpacityMicromapFeaturesEXT>() });
10286 #ifdef VK_ENABLE_BETA_EXTENSIONS
10287         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV, size<VkPhysicalDeviceDisplacementMicromapFeaturesNV>() });
10288 #endif
10289         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT, size<VkPhysicalDevicePipelinePropertiesFeaturesEXT>() });
10290         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD, size<VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD>() });
10291         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT, size<VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT>() });
10292         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, size<VkPhysicalDevicePipelineRobustnessFeatures>() });
10293         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM, size<VkPhysicalDeviceImageProcessingFeaturesQCOM>() });
10294         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM, size<VkPhysicalDeviceTilePropertiesFeaturesQCOM>() });
10295         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC, size<VkPhysicalDeviceAmigoProfilingFeaturesSEC>() });
10296         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT, size<VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT>() });
10297         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT, size<VkPhysicalDeviceDepthClampZeroOneFeaturesEXT>() });
10298         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT, size<VkPhysicalDeviceAddressBindingReportFeaturesEXT>() });
10299         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV, size<VkPhysicalDeviceOpticalFlowFeaturesNV>() });
10300         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT, size<VkPhysicalDeviceFaultFeaturesEXT>() });
10301         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT, size<VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT>() });
10302         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM, size<VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM>() });
10303         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT, size<VkPhysicalDeviceFrameBoundaryFeaturesEXT>() });
10304         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT, size<VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT>() });
10305         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT, size<VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT>() });
10306         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT, size<VkPhysicalDeviceDepthBiasControlFeaturesEXT>() });
10307         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV, size<VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV>() });
10308         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV, size<VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV>() });
10309         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM, size<VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM>() });
10310         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR, size<VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR>() });
10311         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM, size<VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM>() });
10312         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT, size<VkPhysicalDeviceShaderObjectFeaturesEXT>() });
10313         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT, size<VkPhysicalDeviceShaderTileImageFeaturesEXT>() });
10314 #ifdef VK_USE_PLATFORM_SCREEN_QNX
10315         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX, size<VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX>() });
10316 #endif
10317         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR, size<VkPhysicalDeviceCooperativeMatrixFeaturesKHR>() });
10318 #ifdef VK_ENABLE_BETA_EXTENSIONS
10319         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX, size<VkPhysicalDeviceShaderEnqueueFeaturesAMDX>() });
10320 #endif
10321         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD, size<VkPhysicalDeviceAntiLagFeaturesAMD>() });
10322         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM, size<VkPhysicalDeviceCubicClampFeaturesQCOM>() });
10323         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM, size<VkPhysicalDeviceYcbcrDegammaFeaturesQCOM>() });
10324         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM, size<VkPhysicalDeviceCubicWeightsFeaturesQCOM>() });
10325         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM, size<VkPhysicalDeviceImageProcessing2FeaturesQCOM>() });
10326         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV, size<VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV>() });
10327         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV, size<VkPhysicalDevicePerStageDescriptorSetFeaturesNV>() });
10328 #ifdef VK_USE_PLATFORM_ANDROID_KHR
10329         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID, size<VkPhysicalDeviceExternalFormatResolveFeaturesANDROID>() });
10330 #endif
10331         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV, size<VkPhysicalDeviceCudaKernelLaunchFeaturesNV>() });
10332         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM, size<VkPhysicalDeviceSchedulingControlsFeaturesARM>() });
10333         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG, size<VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG>() });
10334         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM, size<VkPhysicalDeviceRenderPassStripedFeaturesARM>() });
10335         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR, size<VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR>() });
10336         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES, size<VkPhysicalDeviceShaderSubgroupRotateFeatures>() });
10337         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES, size<VkPhysicalDeviceShaderExpectAssumeFeatures>() });
10338         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES, size<VkPhysicalDeviceShaderFloatControls2Features>() });
10339         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES, size<VkPhysicalDeviceDynamicRenderingLocalReadFeatures>() });
10340         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR, size<VkPhysicalDeviceShaderQuadControlFeaturesKHR>() });
10341         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV, size<VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV>() });
10342         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT, size<VkPhysicalDeviceMapMemoryPlacedFeaturesEXT>() });
10343         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV, size<VkPhysicalDeviceRawAccessChainsFeaturesNV>() });
10344         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV, size<VkPhysicalDeviceCommandBufferInheritanceFeaturesNV>() });
10345         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA, size<VkPhysicalDeviceImageAlignmentControlFeaturesMESA>() });
10346         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT, size<VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT>() });
10347         this->structureSize.insert({ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, size<VkPhysicalDeviceFeatures2KHR>() });
10348 
10349         //Initializing the full list of available structure features
10350         void* pNext = nullptr;
10351         physicalDeviceDeviceGeneratedCommandsFeaturesNV.pNext = pNext;
10352         pNext = &physicalDeviceDeviceGeneratedCommandsFeaturesNV;
10353         physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.pNext = pNext;
10354         pNext = &physicalDeviceDeviceGeneratedCommandsComputeFeaturesNV;
10355         physicalDevicePrivateDataFeatures.pNext = pNext;
10356         pNext = &physicalDevicePrivateDataFeatures;
10357         physicalDeviceVariablePointersFeatures.pNext = pNext;
10358         pNext = &physicalDeviceVariablePointersFeatures;
10359         physicalDeviceMultiviewFeatures.pNext = pNext;
10360         pNext = &physicalDeviceMultiviewFeatures;
10361         physicalDevicePresentIdFeaturesKHR.pNext = pNext;
10362         pNext = &physicalDevicePresentIdFeaturesKHR;
10363         physicalDevicePresentWaitFeaturesKHR.pNext = pNext;
10364         pNext = &physicalDevicePresentWaitFeaturesKHR;
10365         physicalDevice16BitStorageFeatures.pNext = pNext;
10366         pNext = &physicalDevice16BitStorageFeatures;
10367         physicalDeviceShaderSubgroupExtendedTypesFeatures.pNext = pNext;
10368         pNext = &physicalDeviceShaderSubgroupExtendedTypesFeatures;
10369         physicalDeviceSamplerYcbcrConversionFeatures.pNext = pNext;
10370         pNext = &physicalDeviceSamplerYcbcrConversionFeatures;
10371         physicalDeviceProtectedMemoryFeatures.pNext = pNext;
10372         pNext = &physicalDeviceProtectedMemoryFeatures;
10373         physicalDeviceBlendOperationAdvancedFeaturesEXT.pNext = pNext;
10374         pNext = &physicalDeviceBlendOperationAdvancedFeaturesEXT;
10375         physicalDeviceMultiDrawFeaturesEXT.pNext = pNext;
10376         pNext = &physicalDeviceMultiDrawFeaturesEXT;
10377         physicalDeviceInlineUniformBlockFeatures.pNext = pNext;
10378         pNext = &physicalDeviceInlineUniformBlockFeatures;
10379         physicalDeviceMaintenance4Features.pNext = pNext;
10380         pNext = &physicalDeviceMaintenance4Features;
10381         physicalDeviceMaintenance5Features.pNext = pNext;
10382         pNext = &physicalDeviceMaintenance5Features;
10383         physicalDeviceMaintenance6Features.pNext = pNext;
10384         pNext = &physicalDeviceMaintenance6Features;
10385         physicalDeviceMaintenance7FeaturesKHR.pNext = pNext;
10386         pNext = &physicalDeviceMaintenance7FeaturesKHR;
10387         physicalDeviceShaderDrawParametersFeatures.pNext = pNext;
10388         pNext = &physicalDeviceShaderDrawParametersFeatures;
10389         physicalDeviceShaderFloat16Int8Features.pNext = pNext;
10390         pNext = &physicalDeviceShaderFloat16Int8Features;
10391         physicalDeviceHostQueryResetFeatures.pNext = pNext;
10392         pNext = &physicalDeviceHostQueryResetFeatures;
10393         physicalDeviceGlobalPriorityQueryFeatures.pNext = pNext;
10394         pNext = &physicalDeviceGlobalPriorityQueryFeatures;
10395         physicalDeviceDeviceMemoryReportFeaturesEXT.pNext = pNext;
10396         pNext = &physicalDeviceDeviceMemoryReportFeaturesEXT;
10397         physicalDeviceDescriptorIndexingFeatures.pNext = pNext;
10398         pNext = &physicalDeviceDescriptorIndexingFeatures;
10399         physicalDeviceTimelineSemaphoreFeatures.pNext = pNext;
10400         pNext = &physicalDeviceTimelineSemaphoreFeatures;
10401         physicalDevice8BitStorageFeatures.pNext = pNext;
10402         pNext = &physicalDevice8BitStorageFeatures;
10403         physicalDeviceConditionalRenderingFeaturesEXT.pNext = pNext;
10404         pNext = &physicalDeviceConditionalRenderingFeaturesEXT;
10405         physicalDeviceVulkanMemoryModelFeatures.pNext = pNext;
10406         pNext = &physicalDeviceVulkanMemoryModelFeatures;
10407         physicalDeviceShaderAtomicInt64Features.pNext = pNext;
10408         pNext = &physicalDeviceShaderAtomicInt64Features;
10409         physicalDeviceShaderAtomicFloatFeaturesEXT.pNext = pNext;
10410         pNext = &physicalDeviceShaderAtomicFloatFeaturesEXT;
10411         physicalDeviceShaderAtomicFloat2FeaturesEXT.pNext = pNext;
10412         pNext = &physicalDeviceShaderAtomicFloat2FeaturesEXT;
10413         physicalDeviceVertexAttributeDivisorFeatures.pNext = pNext;
10414         pNext = &physicalDeviceVertexAttributeDivisorFeatures;
10415         physicalDeviceASTCDecodeFeaturesEXT.pNext = pNext;
10416         pNext = &physicalDeviceASTCDecodeFeaturesEXT;
10417         physicalDeviceTransformFeedbackFeaturesEXT.pNext = pNext;
10418         pNext = &physicalDeviceTransformFeedbackFeaturesEXT;
10419         physicalDeviceRepresentativeFragmentTestFeaturesNV.pNext = pNext;
10420         pNext = &physicalDeviceRepresentativeFragmentTestFeaturesNV;
10421         physicalDeviceExclusiveScissorFeaturesNV.pNext = pNext;
10422         pNext = &physicalDeviceExclusiveScissorFeaturesNV;
10423         physicalDeviceCornerSampledImageFeaturesNV.pNext = pNext;
10424         pNext = &physicalDeviceCornerSampledImageFeaturesNV;
10425         physicalDeviceShaderImageFootprintFeaturesNV.pNext = pNext;
10426         pNext = &physicalDeviceShaderImageFootprintFeaturesNV;
10427         physicalDeviceDedicatedAllocationImageAliasingFeaturesNV.pNext = pNext;
10428         pNext = &physicalDeviceDedicatedAllocationImageAliasingFeaturesNV;
10429         physicalDeviceCopyMemoryIndirectFeaturesNV.pNext = pNext;
10430         pNext = &physicalDeviceCopyMemoryIndirectFeaturesNV;
10431         physicalDeviceMemoryDecompressionFeaturesNV.pNext = pNext;
10432         pNext = &physicalDeviceMemoryDecompressionFeaturesNV;
10433         physicalDeviceShadingRateImageFeaturesNV.pNext = pNext;
10434         pNext = &physicalDeviceShadingRateImageFeaturesNV;
10435         physicalDeviceInvocationMaskFeaturesHUAWEI.pNext = pNext;
10436         pNext = &physicalDeviceInvocationMaskFeaturesHUAWEI;
10437         physicalDeviceMeshShaderFeaturesNV.pNext = pNext;
10438         pNext = &physicalDeviceMeshShaderFeaturesNV;
10439         physicalDeviceMeshShaderFeaturesEXT.pNext = pNext;
10440         pNext = &physicalDeviceMeshShaderFeaturesEXT;
10441         physicalDeviceAccelerationStructureFeaturesKHR.pNext = pNext;
10442         pNext = &physicalDeviceAccelerationStructureFeaturesKHR;
10443         physicalDeviceRayTracingPipelineFeaturesKHR.pNext = pNext;
10444         pNext = &physicalDeviceRayTracingPipelineFeaturesKHR;
10445         physicalDeviceRayQueryFeaturesKHR.pNext = pNext;
10446         pNext = &physicalDeviceRayQueryFeaturesKHR;
10447         physicalDeviceRayTracingMaintenance1FeaturesKHR.pNext = pNext;
10448         pNext = &physicalDeviceRayTracingMaintenance1FeaturesKHR;
10449         physicalDeviceFragmentDensityMapFeaturesEXT.pNext = pNext;
10450         pNext = &physicalDeviceFragmentDensityMapFeaturesEXT;
10451         physicalDeviceFragmentDensityMap2FeaturesEXT.pNext = pNext;
10452         pNext = &physicalDeviceFragmentDensityMap2FeaturesEXT;
10453         physicalDeviceFragmentDensityMapOffsetFeaturesQCOM.pNext = pNext;
10454         pNext = &physicalDeviceFragmentDensityMapOffsetFeaturesQCOM;
10455         physicalDeviceScalarBlockLayoutFeatures.pNext = pNext;
10456         pNext = &physicalDeviceScalarBlockLayoutFeatures;
10457         physicalDeviceUniformBufferStandardLayoutFeatures.pNext = pNext;
10458         pNext = &physicalDeviceUniformBufferStandardLayoutFeatures;
10459         physicalDeviceDepthClipEnableFeaturesEXT.pNext = pNext;
10460         pNext = &physicalDeviceDepthClipEnableFeaturesEXT;
10461         physicalDeviceMemoryPriorityFeaturesEXT.pNext = pNext;
10462         pNext = &physicalDeviceMemoryPriorityFeaturesEXT;
10463         physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pNext = pNext;
10464         pNext = &physicalDevicePageableDeviceLocalMemoryFeaturesEXT;
10465         physicalDeviceBufferDeviceAddressFeatures.pNext = pNext;
10466         pNext = &physicalDeviceBufferDeviceAddressFeatures;
10467         physicalDeviceBufferDeviceAddressFeaturesEXT.pNext = pNext;
10468         pNext = &physicalDeviceBufferDeviceAddressFeaturesEXT;
10469         physicalDeviceImagelessFramebufferFeatures.pNext = pNext;
10470         pNext = &physicalDeviceImagelessFramebufferFeatures;
10471         physicalDeviceTextureCompressionASTCHDRFeatures.pNext = pNext;
10472         pNext = &physicalDeviceTextureCompressionASTCHDRFeatures;
10473         physicalDeviceCooperativeMatrixFeaturesNV.pNext = pNext;
10474         pNext = &physicalDeviceCooperativeMatrixFeaturesNV;
10475         physicalDeviceYcbcrImageArraysFeaturesEXT.pNext = pNext;
10476         pNext = &physicalDeviceYcbcrImageArraysFeaturesEXT;
10477         physicalDevicePresentBarrierFeaturesNV.pNext = pNext;
10478         pNext = &physicalDevicePresentBarrierFeaturesNV;
10479         physicalDevicePerformanceQueryFeaturesKHR.pNext = pNext;
10480         pNext = &physicalDevicePerformanceQueryFeaturesKHR;
10481         physicalDeviceCoverageReductionModeFeaturesNV.pNext = pNext;
10482         pNext = &physicalDeviceCoverageReductionModeFeaturesNV;
10483         physicalDeviceShaderIntegerFunctions2FeaturesINTEL.pNext = pNext;
10484         pNext = &physicalDeviceShaderIntegerFunctions2FeaturesINTEL;
10485         physicalDeviceShaderClockFeaturesKHR.pNext = pNext;
10486         pNext = &physicalDeviceShaderClockFeaturesKHR;
10487         physicalDeviceIndexTypeUint8Features.pNext = pNext;
10488         pNext = &physicalDeviceIndexTypeUint8Features;
10489         physicalDeviceShaderSMBuiltinsFeaturesNV.pNext = pNext;
10490         pNext = &physicalDeviceShaderSMBuiltinsFeaturesNV;
10491         physicalDeviceFragmentShaderInterlockFeaturesEXT.pNext = pNext;
10492         pNext = &physicalDeviceFragmentShaderInterlockFeaturesEXT;
10493         physicalDeviceSeparateDepthStencilLayoutsFeatures.pNext = pNext;
10494         pNext = &physicalDeviceSeparateDepthStencilLayoutsFeatures;
10495         physicalDevicePrimitiveTopologyListRestartFeaturesEXT.pNext = pNext;
10496         pNext = &physicalDevicePrimitiveTopologyListRestartFeaturesEXT;
10497         physicalDevicePipelineExecutablePropertiesFeaturesKHR.pNext = pNext;
10498         pNext = &physicalDevicePipelineExecutablePropertiesFeaturesKHR;
10499         physicalDeviceShaderDemoteToHelperInvocationFeatures.pNext = pNext;
10500         pNext = &physicalDeviceShaderDemoteToHelperInvocationFeatures;
10501         physicalDeviceTexelBufferAlignmentFeaturesEXT.pNext = pNext;
10502         pNext = &physicalDeviceTexelBufferAlignmentFeaturesEXT;
10503         physicalDeviceSubgroupSizeControlFeatures.pNext = pNext;
10504         pNext = &physicalDeviceSubgroupSizeControlFeatures;
10505         physicalDeviceLineRasterizationFeatures.pNext = pNext;
10506         pNext = &physicalDeviceLineRasterizationFeatures;
10507         physicalDevicePipelineCreationCacheControlFeatures.pNext = pNext;
10508         pNext = &physicalDevicePipelineCreationCacheControlFeatures;
10509         physicalDeviceVulkan11Features.pNext = pNext;
10510         pNext = &physicalDeviceVulkan11Features;
10511         physicalDeviceVulkan12Features.pNext = pNext;
10512         pNext = &physicalDeviceVulkan12Features;
10513         physicalDeviceVulkan13Features.pNext = pNext;
10514         pNext = &physicalDeviceVulkan13Features;
10515         physicalDeviceVulkan14Features.pNext = pNext;
10516         pNext = &physicalDeviceVulkan14Features;
10517         physicalDeviceCoherentMemoryFeaturesAMD.pNext = pNext;
10518         pNext = &physicalDeviceCoherentMemoryFeaturesAMD;
10519         physicalDeviceCustomBorderColorFeaturesEXT.pNext = pNext;
10520         pNext = &physicalDeviceCustomBorderColorFeaturesEXT;
10521         physicalDeviceBorderColorSwizzleFeaturesEXT.pNext = pNext;
10522         pNext = &physicalDeviceBorderColorSwizzleFeaturesEXT;
10523         physicalDeviceExtendedDynamicStateFeaturesEXT.pNext = pNext;
10524         pNext = &physicalDeviceExtendedDynamicStateFeaturesEXT;
10525         physicalDeviceExtendedDynamicState2FeaturesEXT.pNext = pNext;
10526         pNext = &physicalDeviceExtendedDynamicState2FeaturesEXT;
10527         physicalDeviceExtendedDynamicState3FeaturesEXT.pNext = pNext;
10528         pNext = &physicalDeviceExtendedDynamicState3FeaturesEXT;
10529         physicalDeviceDiagnosticsConfigFeaturesNV.pNext = pNext;
10530         pNext = &physicalDeviceDiagnosticsConfigFeaturesNV;
10531         physicalDeviceZeroInitializeWorkgroupMemoryFeatures.pNext = pNext;
10532         pNext = &physicalDeviceZeroInitializeWorkgroupMemoryFeatures;
10533         physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.pNext = pNext;
10534         pNext = &physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR;
10535         physicalDeviceRobustness2FeaturesEXT.pNext = pNext;
10536         pNext = &physicalDeviceRobustness2FeaturesEXT;
10537         physicalDeviceImageRobustnessFeatures.pNext = pNext;
10538         pNext = &physicalDeviceImageRobustnessFeatures;
10539         physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.pNext = pNext;
10540         pNext = &physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR;
10541 #ifdef VK_ENABLE_BETA_EXTENSIONS
10542         physicalDevicePortabilitySubsetFeaturesKHR.pNext = pNext;
10543         pNext = &physicalDevicePortabilitySubsetFeaturesKHR;
10544 #endif
10545         physicalDevice4444FormatsFeaturesEXT.pNext = pNext;
10546         pNext = &physicalDevice4444FormatsFeaturesEXT;
10547         physicalDeviceSubpassShadingFeaturesHUAWEI.pNext = pNext;
10548         pNext = &physicalDeviceSubpassShadingFeaturesHUAWEI;
10549         physicalDeviceClusterCullingShaderFeaturesHUAWEI.pNext = pNext;
10550         pNext = &physicalDeviceClusterCullingShaderFeaturesHUAWEI;
10551         physicalDeviceShaderImageAtomicInt64FeaturesEXT.pNext = pNext;
10552         pNext = &physicalDeviceShaderImageAtomicInt64FeaturesEXT;
10553         physicalDeviceFragmentShadingRateFeaturesKHR.pNext = pNext;
10554         pNext = &physicalDeviceFragmentShadingRateFeaturesKHR;
10555         physicalDeviceShaderTerminateInvocationFeatures.pNext = pNext;
10556         pNext = &physicalDeviceShaderTerminateInvocationFeatures;
10557         physicalDeviceFragmentShadingRateEnumsFeaturesNV.pNext = pNext;
10558         pNext = &physicalDeviceFragmentShadingRateEnumsFeaturesNV;
10559         physicalDeviceImage2DViewOf3DFeaturesEXT.pNext = pNext;
10560         pNext = &physicalDeviceImage2DViewOf3DFeaturesEXT;
10561         physicalDeviceImageSlicedViewOf3DFeaturesEXT.pNext = pNext;
10562         pNext = &physicalDeviceImageSlicedViewOf3DFeaturesEXT;
10563         physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.pNext = pNext;
10564         pNext = &physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT;
10565         physicalDeviceLegacyVertexAttributesFeaturesEXT.pNext = pNext;
10566         pNext = &physicalDeviceLegacyVertexAttributesFeaturesEXT;
10567         physicalDeviceMutableDescriptorTypeFeaturesEXT.pNext = pNext;
10568         pNext = &physicalDeviceMutableDescriptorTypeFeaturesEXT;
10569         physicalDeviceDepthClipControlFeaturesEXT.pNext = pNext;
10570         pNext = &physicalDeviceDepthClipControlFeaturesEXT;
10571         physicalDeviceVertexInputDynamicStateFeaturesEXT.pNext = pNext;
10572         pNext = &physicalDeviceVertexInputDynamicStateFeaturesEXT;
10573         physicalDeviceExternalMemoryRDMAFeaturesNV.pNext = pNext;
10574         pNext = &physicalDeviceExternalMemoryRDMAFeaturesNV;
10575         physicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR.pNext = pNext;
10576         pNext = &physicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR;
10577         physicalDeviceColorWriteEnableFeaturesEXT.pNext = pNext;
10578         pNext = &physicalDeviceColorWriteEnableFeaturesEXT;
10579         physicalDeviceSynchronization2Features.pNext = pNext;
10580         pNext = &physicalDeviceSynchronization2Features;
10581         physicalDeviceHostImageCopyFeatures.pNext = pNext;
10582         pNext = &physicalDeviceHostImageCopyFeatures;
10583         physicalDevicePrimitivesGeneratedQueryFeaturesEXT.pNext = pNext;
10584         pNext = &physicalDevicePrimitivesGeneratedQueryFeaturesEXT;
10585         physicalDeviceLegacyDitheringFeaturesEXT.pNext = pNext;
10586         pNext = &physicalDeviceLegacyDitheringFeaturesEXT;
10587         physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.pNext = pNext;
10588         pNext = &physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT;
10589         physicalDevicePipelineProtectedAccessFeatures.pNext = pNext;
10590         pNext = &physicalDevicePipelineProtectedAccessFeatures;
10591         physicalDeviceVideoMaintenance1FeaturesKHR.pNext = pNext;
10592         pNext = &physicalDeviceVideoMaintenance1FeaturesKHR;
10593         physicalDeviceInheritedViewportScissorFeaturesNV.pNext = pNext;
10594         pNext = &physicalDeviceInheritedViewportScissorFeaturesNV;
10595         physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.pNext = pNext;
10596         pNext = &physicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
10597         physicalDeviceProvokingVertexFeaturesEXT.pNext = pNext;
10598         pNext = &physicalDeviceProvokingVertexFeaturesEXT;
10599         physicalDeviceDescriptorBufferFeaturesEXT.pNext = pNext;
10600         pNext = &physicalDeviceDescriptorBufferFeaturesEXT;
10601         physicalDeviceShaderIntegerDotProductFeatures.pNext = pNext;
10602         pNext = &physicalDeviceShaderIntegerDotProductFeatures;
10603         physicalDeviceFragmentShaderBarycentricFeaturesKHR.pNext = pNext;
10604         pNext = &physicalDeviceFragmentShaderBarycentricFeaturesKHR;
10605         physicalDeviceRayTracingMotionBlurFeaturesNV.pNext = pNext;
10606         pNext = &physicalDeviceRayTracingMotionBlurFeaturesNV;
10607         physicalDeviceRayTracingValidationFeaturesNV.pNext = pNext;
10608         pNext = &physicalDeviceRayTracingValidationFeaturesNV;
10609         physicalDeviceRGBA10X6FormatsFeaturesEXT.pNext = pNext;
10610         pNext = &physicalDeviceRGBA10X6FormatsFeaturesEXT;
10611         physicalDeviceDynamicRenderingFeatures.pNext = pNext;
10612         pNext = &physicalDeviceDynamicRenderingFeatures;
10613         physicalDeviceImageViewMinLodFeaturesEXT.pNext = pNext;
10614         pNext = &physicalDeviceImageViewMinLodFeaturesEXT;
10615         physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT.pNext = pNext;
10616         pNext = &physicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT;
10617         physicalDeviceLinearColorAttachmentFeaturesNV.pNext = pNext;
10618         pNext = &physicalDeviceLinearColorAttachmentFeaturesNV;
10619         physicalDeviceGraphicsPipelineLibraryFeaturesEXT.pNext = pNext;
10620         pNext = &physicalDeviceGraphicsPipelineLibraryFeaturesEXT;
10621         physicalDevicePipelineBinaryFeaturesKHR.pNext = pNext;
10622         pNext = &physicalDevicePipelineBinaryFeaturesKHR;
10623         physicalDeviceDescriptorSetHostMappingFeaturesVALVE.pNext = pNext;
10624         pNext = &physicalDeviceDescriptorSetHostMappingFeaturesVALVE;
10625         physicalDeviceNestedCommandBufferFeaturesEXT.pNext = pNext;
10626         pNext = &physicalDeviceNestedCommandBufferFeaturesEXT;
10627         physicalDeviceShaderModuleIdentifierFeaturesEXT.pNext = pNext;
10628         pNext = &physicalDeviceShaderModuleIdentifierFeaturesEXT;
10629         physicalDeviceImageCompressionControlFeaturesEXT.pNext = pNext;
10630         pNext = &physicalDeviceImageCompressionControlFeaturesEXT;
10631         physicalDeviceImageCompressionControlSwapchainFeaturesEXT.pNext = pNext;
10632         pNext = &physicalDeviceImageCompressionControlSwapchainFeaturesEXT;
10633         physicalDeviceSubpassMergeFeedbackFeaturesEXT.pNext = pNext;
10634         pNext = &physicalDeviceSubpassMergeFeedbackFeaturesEXT;
10635         physicalDeviceOpacityMicromapFeaturesEXT.pNext = pNext;
10636         pNext = &physicalDeviceOpacityMicromapFeaturesEXT;
10637 #ifdef VK_ENABLE_BETA_EXTENSIONS
10638         physicalDeviceDisplacementMicromapFeaturesNV.pNext = pNext;
10639         pNext = &physicalDeviceDisplacementMicromapFeaturesNV;
10640 #endif
10641         physicalDevicePipelinePropertiesFeaturesEXT.pNext = pNext;
10642         pNext = &physicalDevicePipelinePropertiesFeaturesEXT;
10643         physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.pNext = pNext;
10644         pNext = &physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD;
10645         physicalDeviceNonSeamlessCubeMapFeaturesEXT.pNext = pNext;
10646         pNext = &physicalDeviceNonSeamlessCubeMapFeaturesEXT;
10647         physicalDevicePipelineRobustnessFeatures.pNext = pNext;
10648         pNext = &physicalDevicePipelineRobustnessFeatures;
10649         physicalDeviceImageProcessingFeaturesQCOM.pNext = pNext;
10650         pNext = &physicalDeviceImageProcessingFeaturesQCOM;
10651         physicalDeviceTilePropertiesFeaturesQCOM.pNext = pNext;
10652         pNext = &physicalDeviceTilePropertiesFeaturesQCOM;
10653         physicalDeviceAmigoProfilingFeaturesSEC.pNext = pNext;
10654         pNext = &physicalDeviceAmigoProfilingFeaturesSEC;
10655         physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.pNext = pNext;
10656         pNext = &physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT;
10657         physicalDeviceDepthClampZeroOneFeaturesEXT.pNext = pNext;
10658         pNext = &physicalDeviceDepthClampZeroOneFeaturesEXT;
10659         physicalDeviceAddressBindingReportFeaturesEXT.pNext = pNext;
10660         pNext = &physicalDeviceAddressBindingReportFeaturesEXT;
10661         physicalDeviceOpticalFlowFeaturesNV.pNext = pNext;
10662         pNext = &physicalDeviceOpticalFlowFeaturesNV;
10663         physicalDeviceFaultFeaturesEXT.pNext = pNext;
10664         pNext = &physicalDeviceFaultFeaturesEXT;
10665         physicalDevicePipelineLibraryGroupHandlesFeaturesEXT.pNext = pNext;
10666         pNext = &physicalDevicePipelineLibraryGroupHandlesFeaturesEXT;
10667         physicalDeviceShaderCoreBuiltinsFeaturesARM.pNext = pNext;
10668         pNext = &physicalDeviceShaderCoreBuiltinsFeaturesARM;
10669         physicalDeviceFrameBoundaryFeaturesEXT.pNext = pNext;
10670         pNext = &physicalDeviceFrameBoundaryFeaturesEXT;
10671         physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.pNext = pNext;
10672         pNext = &physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT;
10673         physicalDeviceSwapchainMaintenance1FeaturesEXT.pNext = pNext;
10674         pNext = &physicalDeviceSwapchainMaintenance1FeaturesEXT;
10675         physicalDeviceDepthBiasControlFeaturesEXT.pNext = pNext;
10676         pNext = &physicalDeviceDepthBiasControlFeaturesEXT;
10677         physicalDeviceRayTracingInvocationReorderFeaturesNV.pNext = pNext;
10678         pNext = &physicalDeviceRayTracingInvocationReorderFeaturesNV;
10679         physicalDeviceExtendedSparseAddressSpaceFeaturesNV.pNext = pNext;
10680         pNext = &physicalDeviceExtendedSparseAddressSpaceFeaturesNV;
10681         physicalDeviceMultiviewPerViewViewportsFeaturesQCOM.pNext = pNext;
10682         pNext = &physicalDeviceMultiviewPerViewViewportsFeaturesQCOM;
10683         physicalDeviceRayTracingPositionFetchFeaturesKHR.pNext = pNext;
10684         pNext = &physicalDeviceRayTracingPositionFetchFeaturesKHR;
10685         physicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM.pNext = pNext;
10686         pNext = &physicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM;
10687         physicalDeviceShaderObjectFeaturesEXT.pNext = pNext;
10688         pNext = &physicalDeviceShaderObjectFeaturesEXT;
10689         physicalDeviceShaderTileImageFeaturesEXT.pNext = pNext;
10690         pNext = &physicalDeviceShaderTileImageFeaturesEXT;
10691 #ifdef VK_USE_PLATFORM_SCREEN_QNX
10692         physicalDeviceExternalMemoryScreenBufferFeaturesQNX.pNext = pNext;
10693         pNext = &physicalDeviceExternalMemoryScreenBufferFeaturesQNX;
10694 #endif
10695         physicalDeviceCooperativeMatrixFeaturesKHR.pNext = pNext;
10696         pNext = &physicalDeviceCooperativeMatrixFeaturesKHR;
10697 #ifdef VK_ENABLE_BETA_EXTENSIONS
10698         physicalDeviceShaderEnqueueFeaturesAMDX.pNext = pNext;
10699         pNext = &physicalDeviceShaderEnqueueFeaturesAMDX;
10700 #endif
10701         physicalDeviceAntiLagFeaturesAMD.pNext = pNext;
10702         pNext = &physicalDeviceAntiLagFeaturesAMD;
10703         physicalDeviceCubicClampFeaturesQCOM.pNext = pNext;
10704         pNext = &physicalDeviceCubicClampFeaturesQCOM;
10705         physicalDeviceYcbcrDegammaFeaturesQCOM.pNext = pNext;
10706         pNext = &physicalDeviceYcbcrDegammaFeaturesQCOM;
10707         physicalDeviceCubicWeightsFeaturesQCOM.pNext = pNext;
10708         pNext = &physicalDeviceCubicWeightsFeaturesQCOM;
10709         physicalDeviceImageProcessing2FeaturesQCOM.pNext = pNext;
10710         pNext = &physicalDeviceImageProcessing2FeaturesQCOM;
10711         physicalDeviceDescriptorPoolOverallocationFeaturesNV.pNext = pNext;
10712         pNext = &physicalDeviceDescriptorPoolOverallocationFeaturesNV;
10713         physicalDevicePerStageDescriptorSetFeaturesNV.pNext = pNext;
10714         pNext = &physicalDevicePerStageDescriptorSetFeaturesNV;
10715 #ifdef VK_USE_PLATFORM_ANDROID_KHR
10716         physicalDeviceExternalFormatResolveFeaturesANDROID.pNext = pNext;
10717         pNext = &physicalDeviceExternalFormatResolveFeaturesANDROID;
10718 #endif
10719         physicalDeviceCudaKernelLaunchFeaturesNV.pNext = pNext;
10720         pNext = &physicalDeviceCudaKernelLaunchFeaturesNV;
10721         physicalDeviceSchedulingControlsFeaturesARM.pNext = pNext;
10722         pNext = &physicalDeviceSchedulingControlsFeaturesARM;
10723         physicalDeviceRelaxedLineRasterizationFeaturesIMG.pNext = pNext;
10724         pNext = &physicalDeviceRelaxedLineRasterizationFeaturesIMG;
10725         physicalDeviceRenderPassStripedFeaturesARM.pNext = pNext;
10726         pNext = &physicalDeviceRenderPassStripedFeaturesARM;
10727         physicalDeviceShaderMaximalReconvergenceFeaturesKHR.pNext = pNext;
10728         pNext = &physicalDeviceShaderMaximalReconvergenceFeaturesKHR;
10729         physicalDeviceShaderSubgroupRotateFeatures.pNext = pNext;
10730         pNext = &physicalDeviceShaderSubgroupRotateFeatures;
10731         physicalDeviceShaderExpectAssumeFeatures.pNext = pNext;
10732         pNext = &physicalDeviceShaderExpectAssumeFeatures;
10733         physicalDeviceShaderFloatControls2Features.pNext = pNext;
10734         pNext = &physicalDeviceShaderFloatControls2Features;
10735         physicalDeviceDynamicRenderingLocalReadFeatures.pNext = pNext;
10736         pNext = &physicalDeviceDynamicRenderingLocalReadFeatures;
10737         physicalDeviceShaderQuadControlFeaturesKHR.pNext = pNext;
10738         pNext = &physicalDeviceShaderQuadControlFeaturesKHR;
10739         physicalDeviceShaderAtomicFloat16VectorFeaturesNV.pNext = pNext;
10740         pNext = &physicalDeviceShaderAtomicFloat16VectorFeaturesNV;
10741         physicalDeviceMapMemoryPlacedFeaturesEXT.pNext = pNext;
10742         pNext = &physicalDeviceMapMemoryPlacedFeaturesEXT;
10743         physicalDeviceRawAccessChainsFeaturesNV.pNext = pNext;
10744         pNext = &physicalDeviceRawAccessChainsFeaturesNV;
10745         physicalDeviceCommandBufferInheritanceFeaturesNV.pNext = pNext;
10746         pNext = &physicalDeviceCommandBufferInheritanceFeaturesNV;
10747         physicalDeviceImageAlignmentControlFeaturesMESA.pNext = pNext;
10748         pNext = &physicalDeviceImageAlignmentControlFeaturesMESA;
10749         physicalDeviceShaderReplicatedCompositesFeaturesEXT.pNext = pNext;
10750         pNext = &physicalDeviceShaderReplicatedCompositesFeaturesEXT;
10751         physicalDeviceFeatures2KHR.pNext = pNext;
10752 
10753     }
10754 
10755 
10756     VkPhysicalDeviceFeatures2KHR requiredFeaturesChain{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR, nullptr};
10757     VkBaseOutStructure* current = nullptr;
10758 
ApplyRobustnessdetail::FeaturesChain10759     void ApplyRobustness(const VpDeviceCreateInfo* pCreateInfo) {
10760 #ifdef VK_VERSION_1_1
10761         VkPhysicalDeviceFeatures2KHR* pFeatures2 = static_cast<VkPhysicalDeviceFeatures2KHR*>(
10762             vpGetStructure(&this->requiredFeaturesChain, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR));
10763         if (pFeatures2 != nullptr && (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT)) {
10764             pFeatures2->features.robustBufferAccess = VK_FALSE;
10765         }
10766 #endif
10767 
10768 #ifdef VK_EXT_robustness2
10769         VkPhysicalDeviceRobustness2FeaturesEXT* pRobustness2FeaturesEXT = static_cast<VkPhysicalDeviceRobustness2FeaturesEXT*>(
10770             vpGetStructure(&this->requiredFeaturesChain, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT));
10771         if (pRobustness2FeaturesEXT != nullptr) {
10772             if (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT) {
10773                 pRobustness2FeaturesEXT->robustBufferAccess2 = VK_FALSE;
10774             }
10775             if (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT) {
10776                 pRobustness2FeaturesEXT->robustImageAccess2 = VK_FALSE;
10777             }
10778         }
10779 #endif
10780 #ifdef VK_EXT_image_robustness
10781         VkPhysicalDeviceImageRobustnessFeaturesEXT* pImageRobustnessFeaturesEXT =
10782             static_cast<VkPhysicalDeviceImageRobustnessFeaturesEXT*>(vpGetStructure(
10783                 &this->requiredFeaturesChain, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT));
10784         if (pImageRobustnessFeaturesEXT != nullptr && (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT)) {
10785             pImageRobustnessFeaturesEXT->robustImageAccess = VK_FALSE;
10786         }
10787 #endif
10788 #ifdef VK_VERSION_1_3
10789         VkPhysicalDeviceVulkan13Features* pVulkan13Features = static_cast<VkPhysicalDeviceVulkan13Features*>(
10790             vpGetStructure(&this->requiredFeaturesChain, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES));
10791         if (pVulkan13Features != nullptr && (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_IMAGE_ACCESS_BIT)) {
10792             pVulkan13Features->robustImageAccess = VK_FALSE;
10793         }
10794 #endif
10795     }
10796 
ApplyFeaturesdetail::FeaturesChain10797     void ApplyFeatures(const VpDeviceCreateInfo* pCreateInfo) {
10798         const std::size_t offset = sizeof(VkBaseOutStructure);
10799         const VkBaseOutStructure* q = reinterpret_cast<const VkBaseOutStructure*>(pCreateInfo->pCreateInfo->pNext);
10800         while (q) {
10801             const std::size_t count = this->structureSize[q->sType];
10802             for (std::size_t index = 0; index < count; ++index) {
10803                 const VkBaseOutStructure* pInputStruct = reinterpret_cast<const VkBaseOutStructure*>(q);
10804                 VkBaseOutStructure* pOutputStruct = reinterpret_cast<VkBaseOutStructure*>(detail::vpGetStructure(&this->requiredFeaturesChain, q->sType));
10805                 const uint8_t* pInputData = reinterpret_cast<const uint8_t*>(pInputStruct) + offset;
10806                 uint8_t* pOutputData = reinterpret_cast<uint8_t*>(pOutputStruct) + offset;
10807                 const VkBool32* input = reinterpret_cast<const VkBool32*>(pInputData);
10808                 VkBool32* output = reinterpret_cast<VkBool32*>(pOutputData);
10809 
10810                 output[index] = (output[index] == VK_TRUE || input[index] == VK_TRUE) ? VK_TRUE : VK_FALSE;
10811             }
10812             q = q->pNext;
10813         }
10814 
10815         this->ApplyRobustness(pCreateInfo);
10816     }
10817 
PushBackdetail::FeaturesChain10818     void PushBack(VkBaseOutStructure* found) {
10819         VkBaseOutStructure* last = reinterpret_cast<VkBaseOutStructure*>(&requiredFeaturesChain);
10820         while (last->pNext != nullptr) {
10821             last = last->pNext;
10822         }
10823         last->pNext = found;
10824     }
10825 
Builddetail::FeaturesChain10826     void Build(const std::vector<VkStructureType>& requiredList) {
10827         for (std::size_t i = 0, n = requiredList.size(); i < n; ++i) {
10828             const VkStructureType sType = requiredList[i];
10829             if (sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR) {
10830                 continue;
10831             }
10832 
10833             VkBaseOutStructure* found = vpExtractStructure(&physicalDeviceFeatures2KHR, sType);
10834             if (found == nullptr) {
10835                 continue;
10836             }
10837 
10838             PushBack(found);
10839         }
10840     }
10841 }; // struct FeaturesChain
10842 
vpGetProfileDesc(const char profileName[VP_MAX_PROFILE_NAME_SIZE])10843 VPAPI_ATTR const VpProfileDesc* vpGetProfileDesc(const char profileName[VP_MAX_PROFILE_NAME_SIZE]) {
10844     for (uint32_t profileIndex = 0; profileIndex < profileCount; ++profileIndex) {
10845         if (strncmp(profiles[profileIndex].props.profileName, profileName, VP_MAX_PROFILE_NAME_SIZE) == 0) {
10846             return &profiles[profileIndex];
10847         }
10848     }
10849     return nullptr;
10850 }
10851 
GatherProfiles(const VpProfileProperties & profile,const char * pBlockName=nullptr)10852 VPAPI_ATTR std::vector<VpProfileProperties> GatherProfiles(const VpProfileProperties& profile, const char* pBlockName = nullptr) {
10853     std::vector<VpProfileProperties> gatheredProfiles;
10854 
10855     if (pBlockName == nullptr) {
10856         const detail::VpProfileDesc* profileDesc = detail::vpGetProfileDesc(profile.profileName);
10857         if (profileDesc != nullptr) {
10858             for (uint32_t profileIndex = 0; profileIndex < profileDesc->requiredProfileCount; ++profileIndex) {
10859                 gatheredProfiles.push_back(profileDesc->pRequiredProfiles[profileIndex]);
10860             }
10861         }
10862     }
10863 
10864     gatheredProfiles.push_back(profile);
10865 
10866     return gatheredProfiles;
10867 }
10868 
vpCheckVersion(uint32_t actual,uint32_t expected)10869 VPAPI_ATTR bool vpCheckVersion(uint32_t actual, uint32_t expected) {
10870     uint32_t actualMajor = VK_API_VERSION_MAJOR(actual);
10871     uint32_t actualMinor = VK_API_VERSION_MINOR(actual);
10872     uint32_t expectedMajor = VK_API_VERSION_MAJOR(expected);
10873     uint32_t expectedMinor = VK_API_VERSION_MINOR(expected);
10874     return actualMajor > expectedMajor || (actualMajor == expectedMajor && actualMinor >= expectedMinor);
10875 }
10876 
HasExtension(const std::vector<VkExtensionProperties> & list,const VkExtensionProperties & element)10877 VPAPI_ATTR bool HasExtension(const std::vector<VkExtensionProperties>& list, const VkExtensionProperties& element) {
10878     for (std::size_t i = 0, n = list.size(); i < n; ++i) {
10879         if (strcmp(list[i].extensionName, element.extensionName) == 0) {
10880             return true;
10881         }
10882     }
10883 
10884     return false;
10885 }
10886 
CheckExtension(const VkExtensionProperties * supportedProperties,size_t supportedSize,const char * requestedExtension)10887 VPAPI_ATTR bool CheckExtension(const VkExtensionProperties* supportedProperties, size_t supportedSize, const char *requestedExtension) {
10888     bool found = false;
10889     for (size_t i = 0, n = supportedSize; i < n; ++i) {
10890         if (strcmp(supportedProperties[i].extensionName, requestedExtension) == 0) {
10891             found = true;
10892             break;
10893             // Drivers don't actually update their spec version, so we cannot rely on this
10894             // if (supportedProperties[i].specVersion >= expectedVersion) found = true;
10895         }
10896     }
10897     return found;
10898 }
10899 
CheckExtension(const std::vector<const char * > & extensions,const char * extension)10900 VPAPI_ATTR bool CheckExtension(const std::vector<const char*>& extensions, const char* extension) {
10901     for (const char* c : extensions) {
10902         if (strcmp(c, extension) == 0) {
10903             return true;
10904         }
10905     }
10906     return false;
10907 }
10908 
GetExtensions(uint32_t extensionCount,const VkExtensionProperties * pExtensions,std::vector<const char * > & extensions)10909 VPAPI_ATTR void GetExtensions(uint32_t extensionCount, const VkExtensionProperties *pExtensions, std::vector<const char *> &extensions) {
10910     for (uint32_t ext_index = 0; ext_index < extensionCount; ++ext_index) {
10911         if (CheckExtension(extensions, pExtensions[ext_index].extensionName)) {
10912             continue;
10913         }
10914         extensions.push_back(pExtensions[ext_index].extensionName);
10915     }
10916 }
10917 
GatherBlocks(uint32_t enabledFullProfileCount,const VpProfileProperties * pEnabledFullProfiles,uint32_t enabledProfileBlockCount,const VpBlockProperties * pEnabledProfileBlocks)10918 VPAPI_ATTR std::vector<VpBlockProperties> GatherBlocks(
10919     uint32_t enabledFullProfileCount, const VpProfileProperties* pEnabledFullProfiles,
10920     uint32_t enabledProfileBlockCount, const VpBlockProperties* pEnabledProfileBlocks) {
10921     std::vector<VpBlockProperties> results;
10922 
10923     for (std::size_t profile_index = 0; profile_index < enabledFullProfileCount; ++profile_index) {
10924         const std::vector<VpProfileProperties>& gathered_profiles = GatherProfiles(pEnabledFullProfiles[profile_index]);
10925 
10926         for (std::size_t gathered_index = 0; gathered_index < gathered_profiles.size(); ++gathered_index) {
10927             VpBlockProperties block{gathered_profiles[gathered_index], 0, ""};
10928             results.push_back(block);
10929         }
10930     }
10931 
10932     for (std::size_t block_index = 0; block_index < enabledProfileBlockCount; ++block_index) {
10933         results.push_back(pEnabledProfileBlocks[block_index]);
10934     }
10935 
10936     return results;
10937 }
10938 
vpGetInstanceProfileSupportSingleProfile(uint32_t api_version,const std::vector<VkExtensionProperties> & supported_extensions,const VpProfileProperties * pProfile,VkBool32 * pSupported,std::vector<VpBlockProperties> & supportedBlocks,std::vector<VpBlockProperties> & unsupportedBlocks)10939 VPAPI_ATTR VkResult vpGetInstanceProfileSupportSingleProfile(
10940     uint32_t                                    api_version,
10941     const std::vector<VkExtensionProperties>&   supported_extensions,
10942     const VpProfileProperties*                  pProfile,
10943     VkBool32*                                   pSupported,
10944     std::vector<VpBlockProperties>&             supportedBlocks,
10945     std::vector<VpBlockProperties>&             unsupportedBlocks) {
10946     assert(pProfile != nullptr);
10947 
10948     const detail::VpProfileDesc* pProfileDesc = vpGetProfileDesc(pProfile->profileName);
10949     if (pProfileDesc == nullptr) {
10950         *pSupported = VK_FALSE;
10951         return VK_ERROR_UNKNOWN;
10952     }
10953 
10954     VpBlockProperties block{*pProfile, api_version};
10955 
10956     if (pProfileDesc->props.specVersion < pProfile->specVersion) {
10957         *pSupported = VK_FALSE;
10958         unsupportedBlocks.push_back(block);
10959     }
10960 
10961     // Required API version is built in root profile, not need to check dependent profile API versions
10962     if (api_version != 0) {
10963         if (!vpCheckVersion(api_version, pProfileDesc->minApiVersion)) {
10964 
10965             *pSupported = VK_FALSE;
10966             unsupportedBlocks.push_back(block);
10967         }
10968     }
10969 
10970     for (uint32_t capability_index = 0; capability_index < pProfileDesc->requiredCapabilityCount; ++capability_index) {
10971         const VpCapabilitiesDesc& capabilities_desc = pProfileDesc->pRequiredCapabilities[capability_index];
10972 
10973         VkBool32 supported_capabilities = VK_FALSE;
10974         for (uint32_t variant_index = 0; variant_index < capabilities_desc.variantCount; ++variant_index) {
10975             const VpVariantDesc& variant_desc = capabilities_desc.pVariants[variant_index];
10976 
10977             VkBool32 supported_variant = VK_TRUE;
10978             for (uint32_t i = 0; i < variant_desc.instanceExtensionCount; ++i) {
10979                 if (!detail::CheckExtension(supported_extensions.data(), supported_extensions.size(),
10980                                               variant_desc.pInstanceExtensions[i].extensionName)) {
10981                     supported_variant = VK_FALSE;
10982                     memcpy(block.blockName, variant_desc.blockName, VP_MAX_PROFILE_NAME_SIZE * sizeof(char));
10983                     unsupportedBlocks.push_back(block);
10984                 }
10985             }
10986 
10987             if (supported_variant == VK_TRUE) {
10988                 supported_capabilities = VK_TRUE;
10989                 memcpy(block.blockName, variant_desc.blockName, VP_MAX_PROFILE_NAME_SIZE * sizeof(char));
10990                 supportedBlocks.push_back(block);
10991             }
10992         }
10993 
10994         if (supported_capabilities == VK_FALSE) {
10995             *pSupported = VK_FALSE;
10996             return VK_SUCCESS;
10997         }
10998     }
10999 
11000     return VK_SUCCESS;
11001 }
11002 
11003 enum structure_type {
11004     STRUCTURE_FEATURE = 0,
11005     STRUCTURE_PROPERTY,
11006     STRUCTURE_QUEUE_FAMILY,
11007     STRUCTURE_FORMAT
11008 };
11009 
vpGetProfileStructureTypes(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,structure_type type,uint32_t * pStructureTypeCount,VkStructureType * pStructureTypes)11010 VPAPI_ATTR VkResult vpGetProfileStructureTypes(
11011 #ifdef VP_USE_OBJECT
11012     VpCapabilities                              capabilities,
11013 #endif//VP_USE_OBJECT
11014     const VpProfileProperties*                  pProfile,
11015     const char*                                 pBlockName,
11016     structure_type                              type,
11017     uint32_t*                                   pStructureTypeCount,
11018     VkStructureType*                            pStructureTypes) {
11019 #ifdef VP_USE_OBJECT
11020     (void)capabilities;
11021 #endif//VP_USE_OBJECT
11022 
11023     VkResult result = pBlockName == nullptr ? VK_SUCCESS : VK_INCOMPLETE;
11024 
11025     std::vector<VkStructureType> results;
11026 
11027     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile);
11028 
11029     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
11030         const detail::VpProfileDesc* profile_desc = detail::vpGetProfileDesc(gathered_profiles[profile_index].profileName);
11031         if (profile_desc == nullptr) return VK_ERROR_UNKNOWN;
11032 
11033         for (uint32_t capability_index = 0; capability_index < profile_desc->requiredCapabilityCount; ++capability_index) {
11034             const detail::VpCapabilitiesDesc& cap_desc = profile_desc->pRequiredCapabilities[capability_index];
11035 
11036             for (uint32_t variant_index = 0; variant_index < cap_desc.variantCount; ++variant_index) {
11037                 const detail::VpVariantDesc& variant = cap_desc.pVariants[variant_index];
11038                 if (pBlockName != nullptr) {
11039                     if (strcmp(variant.blockName, pBlockName) != 0) {
11040                         continue;
11041                     }
11042                     result = VK_SUCCESS;
11043                 }
11044 
11045                 uint32_t count = 0;
11046                 const VkStructureType* data = nullptr;
11047 
11048                 switch (type) {
11049                     default:
11050                     case STRUCTURE_FEATURE:
11051                         count = variant.featureStructTypeCount;
11052                         data = variant.pFeatureStructTypes;
11053                         break;
11054                     case STRUCTURE_PROPERTY:
11055                         count = variant.propertyStructTypeCount;
11056                         data = variant.pPropertyStructTypes;
11057                         break;
11058                     case STRUCTURE_QUEUE_FAMILY:
11059                         count = variant.queueFamilyStructTypeCount;
11060                         data = variant.pQueueFamilyStructTypes;
11061                         break;
11062                     case STRUCTURE_FORMAT:
11063                         count = variant.formatStructTypeCount;
11064                         data = variant.pFormatStructTypes;
11065                         break;
11066                 }
11067 
11068                 for (uint32_t type_index = 0; type_index < count; ++type_index) {
11069                     const VkStructureType dataType = data[type_index];
11070                     if (std::find(results.begin(), results.end(), dataType) == std::end(results)) {
11071                         results.push_back(dataType);
11072                     }
11073                 }
11074             }
11075         }
11076     }
11077 
11078     const uint32_t count = static_cast<uint32_t>(results.size());
11079     std::sort(results.begin(), results.end());
11080 
11081     if (pStructureTypes == nullptr) {
11082         *pStructureTypeCount = count;
11083     } else {
11084         if (*pStructureTypeCount < count) {
11085             result = VK_INCOMPLETE;
11086         } else {
11087             *pStructureTypeCount = count;
11088         }
11089 
11090         if (*pStructureTypeCount > 0) {
11091             memcpy(pStructureTypes, &results[0], *pStructureTypeCount * sizeof(VkStructureType));
11092         }
11093     }
11094 
11095     return result;
11096 }
11097 
11098 enum ExtensionType {
11099     EXTENSION_INSTANCE,
11100     EXTENSION_DEVICE,
11101 };
11102 
vpGetProfileExtensionProperties(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,ExtensionType type,uint32_t * pPropertyCount,VkExtensionProperties * pProperties)11103 VPAPI_ATTR VkResult vpGetProfileExtensionProperties(
11104 #ifdef VP_USE_OBJECT
11105     VpCapabilities                              capabilities,
11106 #endif//VP_USE_OBJECT
11107     const VpProfileProperties*                  pProfile,
11108     const char*                                 pBlockName,
11109     ExtensionType                               type,
11110     uint32_t*                                   pPropertyCount,
11111     VkExtensionProperties*                      pProperties) {
11112 #ifdef VP_USE_OBJECT
11113     (void)capabilities;
11114 #endif//VP_USE_OBJECT
11115 
11116     VkResult result = pBlockName == nullptr ? VK_SUCCESS : VK_INCOMPLETE;
11117 
11118     std::vector<VkExtensionProperties> results;
11119 
11120     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile, pBlockName);
11121 
11122     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
11123         const detail::VpProfileDesc* profile_desc = detail::vpGetProfileDesc(gathered_profiles[profile_index].profileName);
11124         if (profile_desc == nullptr) {
11125             return VK_ERROR_UNKNOWN;
11126         }
11127 
11128         for (uint32_t capability_index = 0; capability_index < profile_desc->requiredCapabilityCount; ++capability_index) {
11129             const detail::VpCapabilitiesDesc& cap_desc = profile_desc->pRequiredCapabilities[capability_index];
11130 
11131             for (uint32_t variant_index = 0; variant_index < cap_desc.variantCount; ++variant_index) {
11132                 const detail::VpVariantDesc& variant = cap_desc.pVariants[variant_index];
11133                 if (pBlockName != nullptr) {
11134                     if (strcmp(variant.blockName, pBlockName) != 0) {
11135                         continue;
11136                     }
11137                     result = VK_SUCCESS;
11138                 }
11139 
11140                 switch (type) {
11141                     default:
11142                     case EXTENSION_INSTANCE:
11143                         for (uint32_t ext_index = 0; ext_index < variant.instanceExtensionCount; ++ext_index) {
11144                             if (detail::HasExtension(results, variant.pInstanceExtensions[ext_index])) {
11145                                 continue;
11146                             }
11147                             results.push_back(variant.pInstanceExtensions[ext_index]);
11148                         }
11149                         break;
11150                     case EXTENSION_DEVICE:
11151                         for (uint32_t ext_index = 0; ext_index < variant.deviceExtensionCount; ++ext_index) {
11152                             if (detail::HasExtension(results, variant.pDeviceExtensions[ext_index])) {
11153                                 continue;
11154                             }
11155                             results.push_back(variant.pDeviceExtensions[ext_index]);
11156                         }
11157                         break;
11158                 }
11159             }
11160         }
11161     }
11162 
11163     const uint32_t count = static_cast<uint32_t>(results.size());
11164 
11165     if (pProperties == nullptr) {
11166         *pPropertyCount = count;
11167     } else {
11168         if (*pPropertyCount < count) {
11169             result = VK_INCOMPLETE;
11170         } else {
11171             *pPropertyCount = count;
11172         }
11173         if (*pPropertyCount > 0) {
11174             memcpy(pProperties, &results[0], *pPropertyCount * sizeof(VkExtensionProperties));
11175         }
11176     }
11177 
11178     return result;
11179 }
11180 
vpGetProfileVideoProfileDesc(const VpProfileProperties * pProfile,const char * pBlockName,uint32_t videoProfileIndex,const detail::VpVideoProfileDesc ** ppVideoProfileDesc)11181 VPAPI_ATTR VkResult vpGetProfileVideoProfileDesc(
11182     const VpProfileProperties*                  pProfile,
11183     const char*                                 pBlockName,
11184     uint32_t                                    videoProfileIndex,
11185     const detail::VpVideoProfileDesc**          ppVideoProfileDesc) {
11186     VkResult result = pBlockName == nullptr ? VK_SUCCESS : VK_INCOMPLETE;
11187 
11188     uint32_t curr_base_video_profile_index = 0;
11189 
11190     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile);
11191 
11192     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
11193         const detail::VpProfileDesc* profile_desc = detail::vpGetProfileDesc(gathered_profiles[profile_index].profileName);
11194         if (profile_desc == nullptr) return VK_ERROR_UNKNOWN;
11195 
11196         for (uint32_t capability_index = 0; capability_index < profile_desc->requiredCapabilityCount; ++capability_index) {
11197             const detail::VpCapabilitiesDesc& cap_desc = profile_desc->pRequiredCapabilities[capability_index];
11198 
11199             for (uint32_t variant_index = 0; variant_index < cap_desc.variantCount; ++variant_index) {
11200                 const detail::VpVariantDesc& variant = cap_desc.pVariants[variant_index];
11201                 if (pBlockName != nullptr) {
11202                     if (strcmp(variant.blockName, pBlockName) != 0) {
11203                         continue;
11204                     }
11205                     result = VK_SUCCESS;
11206                 }
11207 
11208                 if (videoProfileIndex < curr_base_video_profile_index + variant.videoProfileCount) {
11209                     *ppVideoProfileDesc = &variant.pVideoProfiles[videoProfileIndex - curr_base_video_profile_index];
11210                     return result;
11211                 } else {
11212                     curr_base_video_profile_index += variant.videoProfileCount;
11213                 }
11214             }
11215         }
11216     }
11217 
11218     *ppVideoProfileDesc = nullptr;
11219     return VK_ERROR_UNKNOWN;
11220 }
11221 
11222 } // namespace detail
11223 
11224 struct VpCapabilities_T : public VpVulkanFunctions {
11225     bool singleton = false;
11226     uint32_t apiVersion = VK_API_VERSION_1_0;
11227 
GetVpCapabilities_T11228     static VpCapabilities_T& Get() {
11229         static VpCapabilities_T instance;
11230         VpCapabilitiesCreateInfo createInfo{};
11231         createInfo.flags = VP_PROFILE_CREATE_STATIC_BIT;
11232         instance.init(&createInfo);
11233         instance.singleton = true;
11234         return instance;
11235     }
11236 
VpCapabilities_TVpCapabilities_T11237     VpCapabilities_T() {
11238         this->GetInstanceProcAddr = nullptr;
11239         this->GetDeviceProcAddr = nullptr;
11240         this->EnumerateInstanceVersion = nullptr;
11241         this->EnumerateInstanceExtensionProperties = nullptr;
11242         this->EnumerateDeviceExtensionProperties = nullptr;
11243         this->GetPhysicalDeviceFeatures2 = nullptr;
11244         this->GetPhysicalDeviceProperties2 = nullptr;
11245         this->GetPhysicalDeviceFormatProperties2 = nullptr;
11246         this->GetPhysicalDeviceQueueFamilyProperties2 = nullptr;
11247         this->CreateInstance = nullptr;
11248         this->CreateDevice = nullptr;
11249     }
11250 
initVpCapabilities_T11251     VkResult init(const VpCapabilitiesCreateInfo* pCreateInfo) {
11252         assert(pCreateInfo != nullptr);
11253 
11254         return ImportVulkanFunctions(pCreateInfo);
11255     }
11256 
ImportVulkanFunctionsVpCapabilities_T11257     VkResult ImportVulkanFunctions(const VpCapabilitiesCreateInfo* pCreateInfo) {
11258         if (pCreateInfo->flags & VP_PROFILE_CREATE_STATIC_BIT) {
11259             ImportVulkanFunctions_Static();
11260         }
11261 
11262         if (pCreateInfo->pVulkanFunctions != nullptr) {
11263             ImportVulkanFunctions_Custom((VpVulkanFunctions*)pCreateInfo->pVulkanFunctions);
11264         }
11265 /*
11266         if (pCreateInfo->flags & VP_PROFILE_CREATE_DYNAMIC_BIT) {
11267             ImportVulkanFunctions_Dynamic();
11268         }
11269 */
11270         return ValidateVulkanFunctions();
11271     }
11272 
ImportVulkanFunctions_StaticVpCapabilities_T11273     void ImportVulkanFunctions_Static() {
11274         // Vulkan 1.1
11275         this->GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)vkGetInstanceProcAddr;
11276         this->GetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)vkGetDeviceProcAddr;
11277 
11278         this->EnumerateInstanceVersion = (PFN_vkEnumerateInstanceVersion)vkEnumerateInstanceVersion;
11279         this->EnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)vkEnumerateInstanceExtensionProperties;
11280         this->EnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)vkEnumerateDeviceExtensionProperties;
11281 
11282         this->GetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2)vkGetPhysicalDeviceFeatures2;
11283         this->GetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2)vkGetPhysicalDeviceProperties2;
11284         this->GetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2)vkGetPhysicalDeviceFormatProperties2;
11285         this->GetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)vkGetPhysicalDeviceQueueFamilyProperties2;
11286 
11287         this->CreateInstance = (PFN_vkCreateInstance)vkCreateInstance;
11288         this->CreateDevice = (PFN_vkCreateDevice)vkCreateDevice;
11289     }
11290 
ImportVulkanFunctions_CustomVpCapabilities_T11291     void ImportVulkanFunctions_Custom(VpVulkanFunctions* pFunctions) {
11292     #define VP_COPY_IF_NOT_NULL(funcName)         if(pFunctions->funcName != nullptr) this->funcName = pFunctions->funcName;
11293 
11294         VP_COPY_IF_NOT_NULL(GetInstanceProcAddr);
11295         VP_COPY_IF_NOT_NULL(GetDeviceProcAddr);
11296 
11297         VP_COPY_IF_NOT_NULL(EnumerateInstanceVersion);
11298         VP_COPY_IF_NOT_NULL(EnumerateInstanceExtensionProperties);
11299         VP_COPY_IF_NOT_NULL(EnumerateDeviceExtensionProperties);
11300 
11301         VP_COPY_IF_NOT_NULL(GetPhysicalDeviceFeatures2);
11302         VP_COPY_IF_NOT_NULL(GetPhysicalDeviceProperties2);
11303         VP_COPY_IF_NOT_NULL(GetPhysicalDeviceFormatProperties2);
11304         VP_COPY_IF_NOT_NULL(GetPhysicalDeviceQueueFamilyProperties2);
11305 
11306         VP_COPY_IF_NOT_NULL(CreateInstance);
11307         VP_COPY_IF_NOT_NULL(CreateDevice);
11308     #undef VP_COPY_IF_NOT_NULL
11309     }
11310 /*
11311     VkResult ImportVulkanFunctions_Dynamic() {
11312         // To use VP_PROFILE_CREATE_DYNAMIC_BIT you have to pass VpVulkanFunctions::vkGetInstanceProcAddr and vkGetDeviceProcAddr as VpCapabilitiesCreateInfo::pVulkanFunctions. Other members can be null.
11313         if (this->GetInstanceProcAddr == nullptr || this->GetDeviceProcAddr == nullptr) {
11314             return VK_ERROR_INITIALIZATION_FAILED;
11315         }
11316 
11317     #define VP_FETCH_INSTANCE_FUNC(memberName, functionNameString)         if(this->memberName == nullptr)            this->memberName = (PFN_vk##memberName)this->GetInstanceProcAddr(m_hInstance, functionNameString);
11318     #define VP_FETCH_DEVICE_FUNC(memberName, functionNameString)         if(this->memberName == nullptr)             this->memberName = (PFN_vk##memberName)this->GetDeviceProcAddr(m_hDevice, functionNameString);
11319 
11320         VP_FETCH_INSTANCE_FUNC(GetInstanceProcAddr, "vkGetInstanceProcAddr");
11321         VP_FETCH_DEVICE_FUNC(GetDeviceProcAddr, "vkGetDeviceProcAddr");
11322 
11323         VP_FETCH_INSTANCE_FUNC(EnumerateInstanceVersion, "vkEnumerateInstanceVersion");
11324         VP_FETCH_INSTANCE_FUNC(EnumerateInstanceExtensionProperties, "vkEnumerateInstanceExtensionProperties");
11325         VP_FETCH_DEVICE_FUNC(EnumerateDeviceExtensionProperties, "vkEnumerateDeviceExtensionProperties");
11326 
11327         VP_FETCH_DEVICE_FUNC(GetPhysicalDeviceFeatures2, "vkGetPhysicalDeviceFeatures2");
11328         VP_FETCH_DEVICE_FUNC(GetPhysicalDeviceProperties2, "vkGetPhysicalDeviceProperties2");
11329         VP_FETCH_DEVICE_FUNC(GetPhysicalDeviceFormatProperties2, "vkGetPhysicalDeviceFormatProperties2");
11330         VP_FETCH_DEVICE_FUNC(GetPhysicalDeviceQueueFamilyProperties2, "vkGetPhysicalDeviceQueueFamilyProperties2");
11331 
11332         VP_FETCH_INSTANCE_FUNC(CreateInstance, "vkCreateInstance");
11333         VP_FETCH_DEVICE_FUNC(CreateDevice, "vkCreateDevice");
11334     #undef VP_FETCH_DEVICE_FUNC
11335     #undef VP_FETCH_INSTANCE_FUNC
11336     }
11337 */
ValidateVulkanFunctionsVpCapabilities_T11338     VkResult ValidateVulkanFunctions() {
11339         if (this->GetInstanceProcAddr == nullptr) {
11340             return VK_ERROR_INITIALIZATION_FAILED;
11341         }
11342 
11343         if (this->GetDeviceProcAddr == nullptr) {
11344             return VK_ERROR_INITIALIZATION_FAILED;
11345         }
11346 
11347         if (this->EnumerateInstanceVersion == nullptr && apiVersion >= VK_API_VERSION_1_1) {
11348             return VK_ERROR_INITIALIZATION_FAILED;
11349         }
11350 
11351         if (this->EnumerateInstanceExtensionProperties == nullptr) {
11352             return VK_ERROR_INITIALIZATION_FAILED;
11353         }
11354 
11355         if (this->EnumerateDeviceExtensionProperties == nullptr) {
11356             return VK_ERROR_INITIALIZATION_FAILED;
11357         }
11358 
11359         if (this->GetPhysicalDeviceFeatures2 == nullptr) {
11360             return apiVersion >= VK_API_VERSION_1_1 ? VK_ERROR_INITIALIZATION_FAILED : VK_ERROR_EXTENSION_NOT_PRESENT;
11361         }
11362 
11363         if (this->GetPhysicalDeviceProperties2 == nullptr) {
11364             return apiVersion >= VK_API_VERSION_1_1 ? VK_ERROR_INITIALIZATION_FAILED : VK_ERROR_EXTENSION_NOT_PRESENT;
11365         }
11366 
11367         if (this->GetPhysicalDeviceFormatProperties2 == nullptr) {
11368             return apiVersion >= VK_API_VERSION_1_1 ? VK_ERROR_INITIALIZATION_FAILED : VK_ERROR_EXTENSION_NOT_PRESENT;
11369         }
11370 
11371         if (this->GetPhysicalDeviceQueueFamilyProperties2 == nullptr) {
11372             return apiVersion >= VK_API_VERSION_1_1 ? VK_ERROR_INITIALIZATION_FAILED : VK_ERROR_EXTENSION_NOT_PRESENT;
11373         }
11374 
11375         if (this->CreateInstance == nullptr) {
11376             return VK_ERROR_INITIALIZATION_FAILED;
11377         }
11378 
11379         if (this->CreateDevice == nullptr) {
11380             return VK_ERROR_INITIALIZATION_FAILED;
11381         }
11382 
11383         return VK_SUCCESS;
11384     }
11385 };
11386 
vpCreateCapabilities(const VpCapabilitiesCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VpCapabilities * pCapabilities)11387 VPAPI_ATTR VkResult vpCreateCapabilities(
11388     const VpCapabilitiesCreateInfo*             pCreateInfo,
11389     const VkAllocationCallbacks*                pAllocator,
11390     VpCapabilities*                             pCapabilities) {
11391     (void)pAllocator;
11392 
11393     VpCapabilities_T* capabilities = new VpCapabilities_T();
11394     VkResult result = capabilities->init(pCreateInfo);
11395     *pCapabilities = capabilities;
11396 
11397     return result;
11398 }
11399 
11400 /// Destroys allocator object.
vpDestroyCapabilities(VpCapabilities capabilities,const VkAllocationCallbacks * pAllocator)11401 VPAPI_ATTR void vpDestroyCapabilities(
11402     VpCapabilities                              capabilities,
11403     const VkAllocationCallbacks*                pAllocator) {
11404     (void)pAllocator;
11405 
11406     delete capabilities;
11407 }
11408 
vpGetProfiles(VpCapabilities capabilities,uint32_t * pPropertyCount,VpProfileProperties * pProperties)11409 VPAPI_ATTR VkResult vpGetProfiles(
11410 #ifdef VP_USE_OBJECT
11411     VpCapabilities                              capabilities,
11412 #endif//VP_USE_OBJECT
11413     uint32_t*                                   pPropertyCount,
11414     VpProfileProperties*                        pProperties) {
11415 #ifdef VP_USE_OBJECT
11416     (void)capabilities;
11417 #endif//VP_USE_OBJECT
11418 
11419     VkResult result = VK_SUCCESS;
11420 
11421     if (pProperties == nullptr) {
11422         *pPropertyCount = detail::profileCount;
11423     } else {
11424         if (*pPropertyCount < detail::profileCount) {
11425             result = VK_INCOMPLETE;
11426         } else {
11427             *pPropertyCount = detail::profileCount;
11428         }
11429         for (uint32_t property_index = 0; property_index < *pPropertyCount; ++property_index) {
11430             pProperties[property_index] = detail::profiles[property_index].props;
11431         }
11432     }
11433     return result;
11434 }
11435 
vpGetProfileRequiredProfiles(VpCapabilities capabilities,const VpProfileProperties * pProfile,uint32_t * pPropertyCount,VpProfileProperties * pProperties)11436 VPAPI_ATTR VkResult vpGetProfileRequiredProfiles(
11437 #ifdef VP_USE_OBJECT
11438     VpCapabilities                              capabilities,
11439 #endif//VP_USE_OBJECT
11440     const VpProfileProperties*                  pProfile,
11441     uint32_t*                                   pPropertyCount,
11442     VpProfileProperties*                        pProperties) {
11443 #ifdef VP_USE_OBJECT
11444     (void)capabilities;
11445 #endif//VP_USE_OBJECT
11446 
11447     VkResult result = VK_SUCCESS;
11448 
11449     const detail::VpProfileDesc* desc = detail::vpGetProfileDesc(pProfile->profileName);
11450     if (desc == nullptr) {
11451         return VK_ERROR_UNKNOWN;
11452     }
11453 
11454     if (pProperties == nullptr) {
11455         *pPropertyCount = desc->requiredProfileCount;
11456     } else {
11457         if (*pPropertyCount < desc->requiredProfileCount) {
11458             result = VK_INCOMPLETE;
11459         } else {
11460             *pPropertyCount = desc->requiredProfileCount;
11461         }
11462         for (uint32_t property_index = 0; property_index < *pPropertyCount; ++property_index) {
11463             pProperties[property_index] = desc->pRequiredProfiles[property_index];
11464         }
11465     }
11466     return result;
11467 }
11468 
vpGetProfileAPIVersion(VpCapabilities capabilities,const VpProfileProperties * pProfile)11469 VPAPI_ATTR uint32_t vpGetProfileAPIVersion(
11470 #ifdef VP_USE_OBJECT
11471     VpCapabilities                              capabilities,
11472 #endif//VP_USE_OBJECT
11473     const VpProfileProperties*                  pProfile) {
11474 #ifdef VP_USE_OBJECT
11475     (void)capabilities;
11476 #endif//VP_USE_OBJECT
11477 
11478     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile, nullptr);
11479 
11480     uint32_t major = 0;
11481     uint32_t minor = 0;
11482     uint32_t patch = 0;
11483 
11484     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
11485         const detail::VpProfileDesc* desc = detail::vpGetProfileDesc(gathered_profiles[profile_index].profileName);
11486         if (desc == nullptr) {
11487             return 0;
11488         }
11489 
11490         major = std::max<uint32_t>(major, VK_API_VERSION_MAJOR(desc->minApiVersion));
11491         minor = std::max<uint32_t>(minor, VK_API_VERSION_MINOR(desc->minApiVersion));
11492         patch = std::max<uint32_t>(patch, VK_API_VERSION_PATCH(desc->minApiVersion));
11493     }
11494 
11495     return VK_MAKE_API_VERSION(0, major, minor, patch);
11496 }
11497 
vpGetProfileFallbacks(VpCapabilities capabilities,const VpProfileProperties * pProfile,uint32_t * pPropertyCount,VpProfileProperties * pProperties)11498 VPAPI_ATTR VkResult vpGetProfileFallbacks(
11499 #ifdef VP_USE_OBJECT
11500     VpCapabilities                              capabilities,
11501 #endif//VP_USE_OBJECT
11502     const VpProfileProperties*                  pProfile,
11503     uint32_t*                                   pPropertyCount,
11504     VpProfileProperties*                        pProperties) {
11505 #ifdef VP_USE_OBJECT
11506     (void)capabilities;
11507 #endif//VP_USE_OBJECT
11508 
11509     VkResult result = VK_SUCCESS;
11510 
11511     const detail::VpProfileDesc* desc = detail::vpGetProfileDesc(pProfile->profileName);
11512     if (desc == nullptr) {
11513         return VK_ERROR_UNKNOWN;
11514     }
11515 
11516     if (pProperties == nullptr) {
11517         *pPropertyCount = desc->fallbackCount;
11518     } else {
11519         if (*pPropertyCount < desc->fallbackCount) {
11520             result = VK_INCOMPLETE;
11521         } else {
11522             *pPropertyCount = desc->fallbackCount;
11523         }
11524         for (uint32_t i = 0; i < *pPropertyCount; ++i) {
11525             pProperties[i] = desc->pFallbacks[i];
11526         }
11527     }
11528     return result;
11529 }
11530 
vpHasMultipleVariantsProfile(VpCapabilities capabilities,const VpProfileProperties * pProfile,VkBool32 * pHasMultipleVariants)11531 VPAPI_ATTR VkResult vpHasMultipleVariantsProfile(
11532 #ifdef VP_USE_OBJECT
11533     VpCapabilities                              capabilities,
11534 #endif//VP_USE_OBJECT
11535     const VpProfileProperties*                  pProfile,
11536     VkBool32*                                   pHasMultipleVariants) {
11537 #ifdef VP_USE_OBJECT
11538     (void)capabilities;
11539 #endif//VP_USE_OBJECT
11540 
11541     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile, nullptr);
11542 
11543     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
11544         const detail::VpProfileDesc* desc = detail::vpGetProfileDesc(gathered_profiles[profile_index].profileName);
11545         if (desc == nullptr) {
11546             return VK_ERROR_UNKNOWN;
11547         }
11548 
11549         for (uint32_t caps_index = 0, caps_count = desc->requiredCapabilityCount; caps_index < caps_count; ++caps_index) {
11550             if (desc->pRequiredCapabilities[caps_index].variantCount > 1) {
11551                 *pHasMultipleVariants = VK_TRUE;
11552                 return VK_SUCCESS;
11553             }
11554         }
11555     }
11556 
11557     *pHasMultipleVariants = VK_FALSE;
11558     return VK_SUCCESS;
11559 }
11560 
vpGetInstanceProfileVariantsSupport(VpCapabilities capabilities,const char * pLayerName,const VpProfileProperties * pProfile,VkBool32 * pSupported,uint32_t * pPropertyCount,VpBlockProperties * pProperties)11561 VPAPI_ATTR VkResult vpGetInstanceProfileVariantsSupport(
11562 #ifdef VP_USE_OBJECT
11563     VpCapabilities                      capabilities,
11564 #endif//VP_USE_OBJECT
11565     const char*                         pLayerName,
11566     const VpProfileProperties*          pProfile,
11567     VkBool32*                           pSupported,
11568     uint32_t*                           pPropertyCount,
11569     VpBlockProperties*                  pProperties) {
11570 #ifdef VP_USE_OBJECT
11571     const VpCapabilities_T& vp = capabilities == nullptr ? VpCapabilities_T::Get() : *capabilities;
11572 #else
11573     const VpCapabilities_T& vp = VpCapabilities_T::Get();
11574 #endif//VP_USE_OBJECT
11575 
11576     VkResult result = VK_SUCCESS;
11577 
11578     uint32_t api_version = VK_API_VERSION_1_0;
11579     PFN_vkEnumerateInstanceVersion pfnEnumerateInstanceVersion = vp.singleton ?
11580         (PFN_vkEnumerateInstanceVersion)vkGetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumerateInstanceVersion") : vp.EnumerateInstanceVersion;
11581     if (pfnEnumerateInstanceVersion != nullptr) {
11582         result = pfnEnumerateInstanceVersion(&api_version);
11583         if (result != VK_SUCCESS) {
11584             *pSupported = VK_FALSE;
11585             return result;
11586         } /* else {
11587         } */
11588     }
11589 
11590     uint32_t supported_instance_extension_count = 0;
11591     result = vp.EnumerateInstanceExtensionProperties(pLayerName, &supported_instance_extension_count, nullptr);
11592     if (result != VK_SUCCESS) {
11593         *pSupported = VK_FALSE;
11594         return result;
11595     }
11596     std::vector<VkExtensionProperties> supported_instance_extensions;
11597     if (supported_instance_extension_count > 0) {
11598         supported_instance_extensions.resize(supported_instance_extension_count);
11599     }
11600     result = vp.EnumerateInstanceExtensionProperties(pLayerName, &supported_instance_extension_count, supported_instance_extensions.data());
11601     if (result != VK_SUCCESS) {
11602         *pSupported = VK_FALSE;
11603         return result;
11604     }
11605 
11606     VkBool32 supported = VK_TRUE;
11607 
11608     // We require VK_KHR_get_physical_device_properties2 if we are on Vulkan 1.0
11609     if (api_version < VK_API_VERSION_1_1) {
11610         bool foundGPDP2 = false;
11611         for (size_t ext_index = 0, ext_count = supported_instance_extensions.size(); ext_index < ext_count; ++ext_index) {
11612             if (strcmp(supported_instance_extensions[ext_index].extensionName, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME) == 0) {
11613                 foundGPDP2 = true;
11614                 break;
11615             }
11616         }
11617         if (!foundGPDP2) {
11618             supported = VK_FALSE;
11619         }
11620     }
11621 
11622     const detail::VpProfileDesc* pProfileDesc = detail::vpGetProfileDesc(pProfile->profileName);
11623     if (pProfileDesc == nullptr) return VK_ERROR_UNKNOWN;
11624 
11625     std::vector<VpBlockProperties> supported_blocks;
11626     std::vector<VpBlockProperties> unsupported_blocks;
11627 
11628     result = detail::vpGetInstanceProfileSupportSingleProfile(api_version, supported_instance_extensions, pProfile, &supported, supported_blocks, unsupported_blocks);
11629     if (result != VK_SUCCESS) {
11630         *pSupported = supported;
11631         return result;
11632     }
11633 
11634     for (std::size_t required_profile_index = 0; required_profile_index < pProfileDesc->requiredProfileCount; ++required_profile_index) {
11635         result = detail::vpGetInstanceProfileSupportSingleProfile(0, supported_instance_extensions, &pProfileDesc->pRequiredProfiles[required_profile_index], &supported, supported_blocks, unsupported_blocks);
11636         if (result != VK_SUCCESS) {
11637             *pSupported = supported;
11638             return result;
11639         }
11640     }
11641 
11642     const std::vector<VpBlockProperties>& blocks = supported ? supported_blocks : unsupported_blocks;
11643 
11644     if (pProperties == nullptr) {
11645         *pPropertyCount = static_cast<uint32_t>(blocks.size());
11646     } else {
11647         if (*pPropertyCount < static_cast<uint32_t>(blocks.size())) {
11648             result = VK_INCOMPLETE;
11649         } else {
11650             *pPropertyCount = static_cast<uint32_t>(blocks.size());
11651         }
11652         for (uint32_t block_index = 0, block_count = static_cast<uint32_t>(blocks.size()); block_index < block_count; ++block_index) {
11653             pProperties[block_index] = blocks[block_index];
11654         }
11655     }
11656 
11657     *pSupported = supported;
11658     return result;
11659 }
11660 
vpGetInstanceProfileSupport(VpCapabilities capabilities,const char * pLayerName,const VpProfileProperties * pProfile,VkBool32 * pSupported)11661 VPAPI_ATTR VkResult vpGetInstanceProfileSupport(
11662 #ifdef VP_USE_OBJECT
11663     VpCapabilities                              capabilities,
11664 #endif//VP_USE_OBJECT
11665     const char*                                 pLayerName,
11666     const VpProfileProperties*                  pProfile,
11667     VkBool32*                                   pSupported) {
11668     uint32_t count = 0;
11669 
11670     return vpGetInstanceProfileVariantsSupport(
11671 #ifdef VP_USE_OBJECT
11672         capabilities,
11673 #endif//VP_USE_OBJECT
11674         pLayerName, pProfile, pSupported, &count, nullptr);
11675 }
11676 
vpCreateInstance(VpCapabilities capabilities,const VpInstanceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkInstance * pInstance)11677 VPAPI_ATTR VkResult vpCreateInstance(
11678 #ifdef VP_USE_OBJECT
11679     VpCapabilities                              capabilities,
11680 #endif//VP_USE_OBJECT
11681     const VpInstanceCreateInfo*                 pCreateInfo,
11682     const VkAllocationCallbacks*                pAllocator,
11683     VkInstance*                                 pInstance) {
11684 #ifdef VP_USE_OBJECT
11685     const VpCapabilities_T& vp = capabilities == nullptr ? VpCapabilities_T::Get() : *capabilities;
11686 #else
11687     const VpCapabilities_T& vp = VpCapabilities_T::Get();
11688 #endif//VP_USE_OBJECT
11689 
11690     if (pCreateInfo == nullptr || pInstance == nullptr) {
11691         return vp.CreateInstance(pCreateInfo == nullptr ? nullptr : pCreateInfo->pCreateInfo, pAllocator, pInstance);
11692     }
11693 
11694     const std::vector<VpBlockProperties>& blocks = detail::GatherBlocks(
11695         pCreateInfo->enabledFullProfileCount, pCreateInfo->pEnabledFullProfiles,
11696         pCreateInfo->enabledProfileBlockCount, pCreateInfo->pEnabledProfileBlocks);
11697 
11698     std::vector<const char*> extensions;
11699     for (std::uint32_t ext_index = 0, ext_count = pCreateInfo->pCreateInfo->enabledExtensionCount; ext_index < ext_count; ++ext_index) {
11700         extensions.push_back(pCreateInfo->pCreateInfo->ppEnabledExtensionNames[ext_index]);
11701     }
11702 
11703     for (std::size_t block_index = 0, block_count = blocks.size(); block_index < block_count; ++block_index) {
11704         const detail::VpProfileDesc* profile_desc = detail::vpGetProfileDesc(blocks[block_index].profiles.profileName);
11705         if (profile_desc == nullptr) {
11706             return VK_ERROR_UNKNOWN;
11707         }
11708 
11709         for (std::size_t caps_index = 0, caps_count = profile_desc->requiredCapabilityCount; caps_index < caps_count; ++caps_index) {
11710             const detail::VpCapabilitiesDesc* caps_desc = &profile_desc->pRequiredCapabilities[caps_index];
11711 
11712             for (std::size_t variant_index = 0, variant_count = caps_desc->variantCount; variant_index < variant_count; ++variant_index) {
11713                 const detail::VpVariantDesc* variant = &caps_desc->pVariants[variant_index];
11714 
11715                 if (strcmp(blocks[block_index].blockName, "") != 0) {
11716                     if (strcmp(variant->blockName, blocks[block_index].blockName) != 0) {
11717                         continue;
11718                     }
11719                 }
11720 
11721                 detail::GetExtensions(variant->instanceExtensionCount, variant->pInstanceExtensions, extensions);
11722             }
11723         }
11724     }
11725 
11726     VkApplicationInfo appInfo{VK_STRUCTURE_TYPE_APPLICATION_INFO};
11727     if (pCreateInfo->pCreateInfo->pApplicationInfo != nullptr) {
11728         appInfo = *pCreateInfo->pCreateInfo->pApplicationInfo;
11729     } else if (!blocks.empty()) {
11730         appInfo.apiVersion = vpGetProfileAPIVersion(
11731 #ifdef VP_USE_OBJECT
11732             capabilities,
11733 #endif//VP_USE_OBJECT
11734             &blocks[0].profiles);
11735     }
11736 
11737     VkInstanceCreateInfo createInfo = *pCreateInfo->pCreateInfo;
11738     createInfo.pApplicationInfo = &appInfo;
11739 
11740     // Need to include VK_KHR_get_physical_device_properties2 if we are on Vulkan 1.0
11741     if (createInfo.pApplicationInfo->apiVersion < VK_API_VERSION_1_1) {
11742         bool foundGPDP2 = false;
11743         for (size_t ext_index = 0, ext_count = extensions.size(); ext_index < ext_count; ++ext_index) {
11744             if (strcmp(extensions[ext_index], VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME) == 0) {
11745                 foundGPDP2 = true;
11746                 break;
11747             }
11748         }
11749         if (!foundGPDP2) {
11750             extensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
11751         }
11752     }
11753 
11754 #ifdef __APPLE__
11755     bool has_portability_ext = false;
11756     for (std::size_t ext_index = 0, ext_count = extensions.size(); ext_index < ext_count; ++ext_index) {
11757         if (strcmp(extensions[ext_index], VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME) == 0) {
11758             has_portability_ext = true;
11759             break;
11760         }
11761     }
11762 
11763     if (!has_portability_ext) {
11764         extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
11765     }
11766 
11767     createInfo.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
11768 #endif
11769 
11770     if (!extensions.empty()) {
11771         createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
11772         createInfo.ppEnabledExtensionNames = extensions.data();
11773     }
11774 
11775     return vp.CreateInstance(&createInfo, pAllocator, pInstance);
11776 }
11777 
vpGetPhysicalDeviceProfileVariantsSupport(VpCapabilities capabilities,VkInstance instance,VkPhysicalDevice physicalDevice,const VpProfileProperties * pProfile,VkBool32 * pSupported,uint32_t * pPropertyCount,VpBlockProperties * pProperties)11778 VPAPI_ATTR VkResult vpGetPhysicalDeviceProfileVariantsSupport(
11779 #ifdef VP_USE_OBJECT
11780     VpCapabilities                              capabilities,
11781 #endif//VP_USE_OBJECT
11782     VkInstance instance,
11783     VkPhysicalDevice physicalDevice,
11784     const VpProfileProperties *pProfile,
11785     VkBool32 *pSupported,
11786     uint32_t *pPropertyCount,
11787     VpBlockProperties* pProperties) {
11788 #ifdef VP_USE_OBJECT
11789     const VpCapabilities_T& vp = capabilities == nullptr ? VpCapabilities_T::Get() : *capabilities;
11790 #else
11791     const VpCapabilities_T& vp = VpCapabilities_T::Get();
11792 #endif//VP_USE_OBJECT
11793 
11794     VkResult result = VK_SUCCESS;
11795 
11796     uint32_t supported_device_extension_count = 0;
11797     result = vp.EnumerateDeviceExtensionProperties(physicalDevice, nullptr, &supported_device_extension_count, nullptr);
11798     if (result != VK_SUCCESS) {
11799         return result;
11800     }
11801     std::vector<VkExtensionProperties> supported_device_extensions;
11802     if (supported_device_extension_count > 0) {
11803         supported_device_extensions.resize(supported_device_extension_count);
11804     }
11805     result = vp.EnumerateDeviceExtensionProperties(physicalDevice, nullptr, &supported_device_extension_count, supported_device_extensions.data());
11806     if (result != VK_SUCCESS) {
11807         return result;
11808     }
11809 
11810     // Workaround old loader bug where count could be smaller on the second call to vkEnumerateDeviceExtensionProperties
11811     if (supported_device_extension_count > 0) {
11812         supported_device_extensions.resize(supported_device_extension_count);
11813     }
11814 
11815     {
11816         const detail::VpProfileDesc* pProfileDesc = detail::vpGetProfileDesc(pProfile->profileName);
11817         if (pProfileDesc == nullptr) {
11818             return VK_ERROR_UNKNOWN;
11819         }
11820     }
11821 
11822     struct GPDP2EntryPoints {
11823         PFN_vkGetPhysicalDeviceFeatures2KHR                 pfnGetPhysicalDeviceFeatures2;
11824         PFN_vkGetPhysicalDeviceProperties2KHR               pfnGetPhysicalDeviceProperties2;
11825         PFN_vkGetPhysicalDeviceFormatProperties2KHR         pfnGetPhysicalDeviceFormatProperties2;
11826         PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR    pfnGetPhysicalDeviceQueueFamilyProperties2;
11827     };
11828 
11829 #ifdef VK_KHR_video_queue
11830     struct VideoInfo {
11831         PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR         pfnGetPhysicalDeviceVideoCapabilitiesKHR;
11832         PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR     pfnGetPhysicalDeviceVideoFormatPropertiesKHR;
11833         const detail::VpVideoProfileDesc*                   pProfileDesc;
11834         VkVideoProfileInfoKHR                               profileInfo;
11835         VkPhysicalDeviceVideoFormatInfoKHR                  formatInfo;
11836         bool                                                supportedProfile;
11837         uint32_t                                            matchingProfiles;
11838     };
11839 #endif  // VK_KHR_video_queue
11840 
11841     std::vector<VpBlockProperties> supported_blocks;
11842     std::vector<VpBlockProperties> unsupported_blocks;
11843 
11844     struct UserData {
11845         VkPhysicalDevice physicalDevice;
11846         std::vector<VpBlockProperties>& supported_blocks;
11847         std::vector<VpBlockProperties>& unsupported_blocks;
11848         const detail::VpVariantDesc* variant;
11849         GPDP2EntryPoints gpdp2;
11850 #ifdef VK_KHR_video_queue
11851         VideoInfo video;
11852 #endif  // VK_KHR_video_queue
11853         uint32_t index;
11854         detail::PFN_vpStructChainerCb pfnCb;
11855         bool supported;
11856     } userData{physicalDevice, supported_blocks, unsupported_blocks};
11857 
11858     if (!vp.singleton) {
11859         userData.gpdp2.pfnGetPhysicalDeviceFeatures2 = vp.GetPhysicalDeviceFeatures2;
11860         userData.gpdp2.pfnGetPhysicalDeviceProperties2 = vp.GetPhysicalDeviceProperties2;
11861         userData.gpdp2.pfnGetPhysicalDeviceFormatProperties2 = vp.GetPhysicalDeviceFormatProperties2;
11862         userData.gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2 = vp.GetPhysicalDeviceQueueFamilyProperties2;
11863     }
11864 
11865     // Attempt to load core versions of the GPDP2 entry points
11866     if (userData.gpdp2.pfnGetPhysicalDeviceFeatures2 == nullptr) {
11867         userData.gpdp2.pfnGetPhysicalDeviceFeatures2 =
11868             (PFN_vkGetPhysicalDeviceFeatures2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures2");
11869         userData.gpdp2.pfnGetPhysicalDeviceProperties2 =
11870             (PFN_vkGetPhysicalDeviceProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2");
11871         userData.gpdp2.pfnGetPhysicalDeviceFormatProperties2 =
11872             (PFN_vkGetPhysicalDeviceFormatProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFormatProperties2");
11873         userData.gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2 =
11874             (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceQueueFamilyProperties2");
11875     }
11876 
11877     // If not successful, try to load KHR variant
11878     if (userData.gpdp2.pfnGetPhysicalDeviceFeatures2 == nullptr) {
11879         userData.gpdp2.pfnGetPhysicalDeviceFeatures2 =
11880             (PFN_vkGetPhysicalDeviceFeatures2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures2KHR");
11881         userData.gpdp2.pfnGetPhysicalDeviceProperties2 =
11882             (PFN_vkGetPhysicalDeviceProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2KHR");
11883         userData.gpdp2.pfnGetPhysicalDeviceFormatProperties2 =
11884             (PFN_vkGetPhysicalDeviceFormatProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFormatProperties2KHR");
11885         userData.gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2 =
11886             (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR");
11887     }
11888 
11889     if (userData.gpdp2.pfnGetPhysicalDeviceFeatures2 == nullptr ||
11890         userData.gpdp2.pfnGetPhysicalDeviceProperties2 == nullptr ||
11891         userData.gpdp2.pfnGetPhysicalDeviceFormatProperties2 == nullptr ||
11892         userData.gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2 == nullptr) {
11893         return VK_ERROR_EXTENSION_NOT_PRESENT;
11894     }
11895 
11896 #ifdef VK_KHR_video_queue
11897     PFN_vkGetInstanceProcAddr gipa = vp.singleton ? vkGetInstanceProcAddr : vp.GetInstanceProcAddr;
11898     userData.video.pfnGetPhysicalDeviceVideoCapabilitiesKHR =
11899         (PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)gipa(instance, "vkGetPhysicalDeviceVideoCapabilitiesKHR");
11900     userData.video.pfnGetPhysicalDeviceVideoFormatPropertiesKHR =
11901         (PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)gipa(instance, "vkGetPhysicalDeviceVideoFormatPropertiesKHR");
11902 #endif  // VK_KHR_video_queue
11903 
11904     bool supported = true;
11905 
11906     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile);
11907 
11908     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
11909         const char* profile_name = gathered_profiles[profile_index].profileName;
11910 
11911         const detail::VpProfileDesc* profile_desc = detail::vpGetProfileDesc(profile_name);
11912         if (profile_desc == nullptr) {
11913             return VK_ERROR_UNKNOWN;
11914         }
11915 
11916         bool supported_profile = true;
11917 
11918         if (profile_desc->props.specVersion < gathered_profiles[profile_index].specVersion) {
11919             supported_profile = false;
11920         }
11921 
11922         VpBlockProperties block{gathered_profiles[profile_index], profile_desc->minApiVersion};
11923 
11924         {
11925             VkPhysicalDeviceProperties2KHR properties2{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR };
11926             userData.gpdp2.pfnGetPhysicalDeviceProperties2(physicalDevice, &properties2);
11927             if (!detail::vpCheckVersion(properties2.properties.apiVersion, profile_desc->minApiVersion)) {
11928                 supported_profile = false;
11929             }
11930         }
11931 
11932         for (uint32_t required_capability_index = 0; required_capability_index < profile_desc->requiredCapabilityCount; ++required_capability_index) {
11933             const detail::VpCapabilitiesDesc* required_capabilities = &profile_desc->pRequiredCapabilities[required_capability_index];
11934 
11935             bool supported_block = false;
11936 
11937             for (uint32_t variant_index = 0; variant_index < required_capabilities->variantCount; ++variant_index) {
11938                 const detail::VpVariantDesc& variant_desc = required_capabilities->pVariants[variant_index];
11939 
11940                 bool supported_variant = true;
11941 
11942                 for (uint32_t ext_index = 0; ext_index < variant_desc.deviceExtensionCount; ++ext_index) {
11943                     const char *requested_extension = variant_desc.pDeviceExtensions[ext_index].extensionName;
11944                     if (!detail::CheckExtension(supported_device_extensions.data(), supported_device_extensions.size(), requested_extension)) {
11945                         supported_variant = false;
11946                     }
11947                 }
11948 
11949                 userData.variant = &variant_desc;
11950 
11951                 VkPhysicalDeviceFeatures2KHR features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR };
11952                 userData.variant->chainers.pfnFeature(
11953                     static_cast<VkBaseOutStructure*>(static_cast<void*>(&features)), &userData,
11954                     [](VkBaseOutStructure* p, void* pUser) {
11955                         UserData* pUserData = static_cast<UserData*>(pUser);
11956                         pUserData->gpdp2.pfnGetPhysicalDeviceFeatures2(
11957                             pUserData->physicalDevice,
11958                             static_cast<VkPhysicalDeviceFeatures2KHR*>(static_cast<void*>(p)));
11959 
11960                         pUserData->supported = true;
11961                         while (p != nullptr) {
11962                             if (!pUserData->variant->feature.pfnComparator(p)) {
11963                                 pUserData->supported = false;
11964                             }
11965                             p = p->pNext;
11966                         }
11967                     }
11968                 );
11969                 if (!userData.supported) {
11970                     supported_variant = false;
11971                 }
11972 
11973                 VkPhysicalDeviceProperties2KHR device_properties2{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR };
11974                 userData.variant->chainers.pfnProperty(
11975                     static_cast<VkBaseOutStructure*>(static_cast<void*>(&device_properties2)), &userData,
11976                     [](VkBaseOutStructure* p, void* pUser) {
11977                         UserData* pUserData = static_cast<UserData*>(pUser);
11978                         pUserData->gpdp2.pfnGetPhysicalDeviceProperties2(
11979                             pUserData->physicalDevice,
11980                             static_cast<VkPhysicalDeviceProperties2KHR*>(static_cast<void*>(p)));
11981 
11982                         pUserData->supported = true;
11983                         while (p != nullptr) {
11984                             if (!pUserData->variant->property.pfnComparator(p)) {
11985                                 pUserData->supported = false;
11986                             }
11987                             p = p->pNext;
11988                         }
11989                     }
11990                 );
11991                 if (!userData.supported) {
11992                     supported_variant = false;
11993                 }
11994 
11995                 if (userData.variant->queueFamilyCount > 0) {
11996                     uint32_t queue_family_count = 0;
11997                     userData.gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queue_family_count, nullptr);
11998                     std::vector<VkQueueFamilyProperties2KHR> queueFamilyProps(queue_family_count, { VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR });
11999                     userData.variant->chainers.pfnQueueFamily(
12000                         queue_family_count, static_cast<VkBaseOutStructure*>(static_cast<void*>(queueFamilyProps.data())), &userData,
12001                         [](uint32_t queue_family_count, VkBaseOutStructure* pBaseArray, void* pUser) {
12002                             UserData* pUserData = static_cast<UserData*>(pUser);
12003                             VkQueueFamilyProperties2KHR* pArray = static_cast<VkQueueFamilyProperties2KHR*>(static_cast<void*>(pBaseArray));
12004                             pUserData->gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2(pUserData->physicalDevice, &queue_family_count, pArray);
12005                             pUserData->supported = true;
12006                             for (uint32_t profile_qf_idx = 0; profile_qf_idx < pUserData->variant->queueFamilyCount; ++profile_qf_idx) {
12007                                 bool found_matching = false;
12008                                 for (uint32_t queue_family_index = 0; queue_family_index < queue_family_count; ++queue_family_index) {
12009                                     bool this_matches = true;
12010                                     VkBaseOutStructure* p = static_cast<VkBaseOutStructure*>(static_cast<void*>(&pArray[queue_family_index]));
12011                                     while (p != nullptr) {
12012                                         if (!pUserData->variant->pQueueFamilies[profile_qf_idx].pfnComparator(p)) {
12013                                             this_matches = false;
12014                                         }
12015                                         p = p->pNext;
12016                                     }
12017                                     if (this_matches) {
12018                                         found_matching = true;
12019                                         break;
12020                                     }
12021                                 }
12022                                 if (!found_matching) {
12023                                     pUserData->supported = false;
12024                                     break;
12025                                 }
12026                             }
12027                         }
12028                     );
12029                     if (!userData.supported) {
12030                         supported_variant = false;
12031                     }
12032                 }
12033 
12034                 for (uint32_t format_index = 0; format_index < userData.variant->formatCount && supported_variant; ++format_index) {
12035                     userData.index = format_index;
12036                     VkFormatProperties2KHR format_properties2{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR };
12037                     userData.variant->chainers.pfnFormat(
12038                         static_cast<VkBaseOutStructure*>(static_cast<void*>(&format_properties2)), &userData,
12039                         [](VkBaseOutStructure* p, void* pUser) {
12040                             UserData* pUserData = static_cast<UserData*>(pUser);
12041                             pUserData->gpdp2.pfnGetPhysicalDeviceFormatProperties2(
12042                                 pUserData->physicalDevice,
12043                                 pUserData->variant->pFormats[pUserData->index].format,
12044                                 static_cast<VkFormatProperties2KHR*>(static_cast<void*>(p)));
12045                             pUserData->supported = true;
12046                             while (p != nullptr) {
12047                                 if (!pUserData->variant->pFormats[pUserData->index].pfnComparator(p)) {
12048                                     pUserData->supported = false;
12049                                 }
12050                                 p = p->pNext;
12051                             }
12052                         }
12053                     );
12054                     if (!userData.supported) {
12055                         supported_variant = false;
12056                     }
12057                 }
12058 
12059 #ifdef VK_KHR_video_queue
12060                 if (userData.variant->videoProfileCount > 0) {
12061                     VkVideoProfileListInfoKHR profile_list{ VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR };
12062                     profile_list.profileCount = 1;
12063                     profile_list.pProfiles = &userData.video.profileInfo;
12064                     userData.video.formatInfo.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR;
12065                     userData.video.formatInfo.pNext = &profile_list;
12066 
12067                     if (userData.video.pfnGetPhysicalDeviceVideoCapabilitiesKHR != nullptr &&
12068                         userData.video.pfnGetPhysicalDeviceVideoFormatPropertiesKHR != nullptr) {
12069                         for (uint32_t video_profile_index = 0; video_profile_index < userData.variant->videoProfileCount; ++video_profile_index) {
12070                             userData.video.profileInfo = VkVideoProfileInfoKHR{ VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR };
12071                             userData.video.pProfileDesc = &userData.variant->pVideoProfiles[video_profile_index];
12072                             userData.supported = true;
12073                             userData.video.matchingProfiles = 0;
12074 
12075                             detail::vpForEachMatchingVideoProfiles(&userData.video.profileInfo, &userData,
12076                                 [](VkBaseOutStructure* p, void* pUser) {
12077                                     UserData* pUserData = static_cast<UserData*>(pUser);
12078                                     while (p != nullptr) {
12079                                         if (!pUserData->video.pProfileDesc->info.pfnComparator(p)) {
12080                                             return;
12081                                         }
12082                                         p = p->pNext;
12083                                     }
12084 
12085                                     pUserData->video.supportedProfile = true;
12086 
12087                                     VkVideoCapabilitiesKHR capabilities{ VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR };
12088                                     pUserData->video.pProfileDesc->chainers.pfnCapability(
12089                                         static_cast<VkBaseOutStructure*>(static_cast<void*>(&capabilities)), pUserData,
12090                                         [](VkBaseOutStructure* p, void* pUser) {
12091                                             UserData* pUserData = static_cast<UserData*>(pUser);
12092                                             VkResult result = pUserData->video.pfnGetPhysicalDeviceVideoCapabilitiesKHR(
12093                                                 pUserData->physicalDevice,
12094                                                 &pUserData->video.profileInfo,
12095                                                 static_cast<VkVideoCapabilitiesKHR*>(static_cast<void*>(p)));
12096                                             if (result != VK_SUCCESS) {
12097                                                 pUserData->video.supportedProfile = false;
12098                                                 return;
12099                                             }
12100                                             while (p != nullptr) {
12101                                                 if (!pUserData->video.pProfileDesc->capability.pfnComparator(p)) {
12102                                                     pUserData->supported = false;
12103                                                 }
12104                                                 p = p->pNext;
12105                                             }
12106                                         }
12107                                     );
12108 
12109                                     if (pUserData->video.supportedProfile) {
12110                                         pUserData->video.matchingProfiles++;
12111                                     } else {
12112                                         return;
12113                                     }
12114 
12115                                     std::vector<VkVideoFormatPropertiesKHR> format_props;
12116                                     for (uint32_t format_index = 0; format_index < pUserData->video.pProfileDesc->formatCount; ++format_index) {
12117                                         pUserData->index = format_index;
12118                                         {
12119                                             VkVideoFormatPropertiesKHR tmp_props{ VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR };
12120                                             pUserData->video.pProfileDesc->pFormats[format_index].pfnFiller(static_cast<VkBaseOutStructure*>(static_cast<void*>(&tmp_props)));
12121                                             pUserData->video.formatInfo.imageUsage = tmp_props.imageUsageFlags;
12122                                         }
12123 
12124                                         uint32_t format_count = 0;
12125                                         pUserData->video.pfnGetPhysicalDeviceVideoFormatPropertiesKHR(pUserData->physicalDevice, &pUserData->video.formatInfo, &format_count, nullptr);
12126                                         format_props.resize(format_count, { VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR });
12127                                         pUserData->video.pProfileDesc->chainers.pfnFormat(
12128                                             format_count, static_cast<VkBaseOutStructure*>(static_cast<void*>(format_props.data())), pUserData,
12129                                             [](uint32_t format_count, VkBaseOutStructure* pBaseArray, void* pUser) {
12130                                                 UserData* pUserData = static_cast<UserData*>(pUser);
12131                                                 VkVideoFormatPropertiesKHR* pArray = static_cast<VkVideoFormatPropertiesKHR*>(static_cast<void*>(pBaseArray));
12132                                                 pUserData->video.pfnGetPhysicalDeviceVideoFormatPropertiesKHR(pUserData->physicalDevice, &pUserData->video.formatInfo, &format_count, pArray);
12133                                                 bool found_matching = false;
12134                                                 for (uint32_t i = 0; i < format_count; ++i) {
12135                                                     bool this_matches = true;
12136                                                     VkBaseOutStructure* p = static_cast<VkBaseOutStructure*>(static_cast<void*>(&pArray[i]));
12137                                                     while (p != nullptr) {
12138                                                         if (!pUserData->video.pProfileDesc->pFormats[pUserData->index].pfnComparator(p)) {
12139                                                             this_matches = false;
12140                                                         }
12141                                                         p = p->pNext;
12142                                                     }
12143                                                     if (this_matches) {
12144                                                         found_matching = true;
12145                                                         break;
12146                                                     }
12147                                                 }
12148                                                 if (!found_matching) {
12149                                                     pUserData->supported = false;
12150                                                 }
12151                                             }
12152                                         );
12153                                     }
12154                                 }
12155                             );
12156                             if (!userData.supported || userData.video.matchingProfiles == 0) {
12157                                 supported_variant = false;
12158                             }
12159                         }
12160                     } else {
12161                         supported_variant = false;
12162                     }
12163                 }
12164 #endif  // VK_KHR_video_queue
12165 
12166                 memcpy(block.blockName, variant_desc.blockName, VP_MAX_PROFILE_NAME_SIZE * sizeof(char));
12167                 if (supported_variant) {
12168                     supported_blocks.push_back(block);
12169                     supported_block = true;
12170                     break;
12171                 } else {
12172                     unsupported_blocks.push_back(block);
12173                 }
12174             }
12175 
12176             if (!supported_block) {
12177                 supported_profile = false;
12178             }
12179         }
12180 
12181         if (!supported_profile) {
12182             supported = false;
12183         }
12184     }
12185 
12186     const std::vector<VpBlockProperties>& blocks = supported ? supported_blocks : unsupported_blocks;
12187 
12188     if (pProperties == nullptr) {
12189         *pPropertyCount = static_cast<uint32_t>(blocks.size());
12190     } else {
12191         if (*pPropertyCount < static_cast<uint32_t>(blocks.size())) {
12192             result = VK_INCOMPLETE;
12193         } else {
12194             *pPropertyCount = static_cast<uint32_t>(blocks.size());
12195         }
12196         for (uint32_t i = 0, n = static_cast<uint32_t>(blocks.size()); i < n; ++i) {
12197             pProperties[i] = blocks[i];
12198         }
12199     }
12200 
12201     *pSupported = supported ? VK_TRUE : VK_FALSE;
12202     return VK_SUCCESS;
12203 }
12204 
vpGetPhysicalDeviceProfileSupport(VpCapabilities capabilities,VkInstance instance,VkPhysicalDevice physicalDevice,const VpProfileProperties * pProfile,VkBool32 * pSupported)12205 VPAPI_ATTR VkResult vpGetPhysicalDeviceProfileSupport(
12206 #ifdef VP_USE_OBJECT
12207     VpCapabilities                              capabilities,
12208 #endif//VP_USE_OBJECT
12209     VkInstance                                  instance,
12210     VkPhysicalDevice                            physicalDevice,
12211     const VpProfileProperties*                  pProfile,
12212     VkBool32 *pSupported) {
12213     uint32_t count = 0;
12214 
12215     return vpGetPhysicalDeviceProfileVariantsSupport(
12216 #ifdef VP_USE_OBJECT
12217         capabilities,
12218 #endif//VP_USE_OBJECT
12219         instance, physicalDevice, pProfile, pSupported, &count, nullptr);
12220 }
12221 
vpCreateDevice(VpCapabilities capabilities,VkPhysicalDevice physicalDevice,const VpDeviceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDevice * pDevice)12222 VPAPI_ATTR VkResult vpCreateDevice(
12223 #ifdef VP_USE_OBJECT
12224     VpCapabilities                              capabilities,
12225 #endif//VP_USE_OBJECT
12226     VkPhysicalDevice                            physicalDevice,
12227     const VpDeviceCreateInfo*                   pCreateInfo,
12228     const VkAllocationCallbacks*                pAllocator,
12229     VkDevice*                                   pDevice) {
12230 #ifdef VP_USE_OBJECT
12231     const VpCapabilities_T& vp = capabilities == nullptr ? VpCapabilities_T::Get() : *capabilities;
12232 #else
12233     const VpCapabilities_T& vp = VpCapabilities_T::Get();
12234 #endif//VP_USE_OBJECT
12235 
12236     if (physicalDevice == VK_NULL_HANDLE || pCreateInfo == nullptr || pDevice == nullptr) {
12237         return vp.CreateDevice(physicalDevice, pCreateInfo == nullptr ? nullptr : pCreateInfo->pCreateInfo, pAllocator, pDevice);
12238     }
12239 
12240     const std::vector<VpBlockProperties>& blocks = detail::GatherBlocks(
12241         pCreateInfo->enabledFullProfileCount, pCreateInfo->pEnabledFullProfiles,
12242         pCreateInfo->enabledProfileBlockCount, pCreateInfo->pEnabledProfileBlocks);
12243 
12244     std::unique_ptr<detail::FeaturesChain> chain = std::make_unique<detail::FeaturesChain>();
12245     std::vector<VkStructureType> structureTypes;
12246 
12247     std::vector<const char*> extensions;
12248     for (std::uint32_t ext_index = 0, ext_count = pCreateInfo->pCreateInfo->enabledExtensionCount; ext_index < ext_count; ++ext_index) {
12249         extensions.push_back(pCreateInfo->pCreateInfo->ppEnabledExtensionNames[ext_index]);
12250     }
12251 
12252     for (std::size_t block_index = 0, block_count = blocks.size(); block_index < block_count; ++block_index) {
12253         const detail::VpProfileDesc* pProfileDesc = detail::vpGetProfileDesc(blocks[block_index].profiles.profileName);
12254         if (pProfileDesc == nullptr) return VK_ERROR_UNKNOWN;
12255 
12256         for (std::size_t caps_index = 0, caps_count = pProfileDesc->requiredCapabilityCount; caps_index < caps_count; ++caps_index) {
12257             const detail::VpCapabilitiesDesc* pCapsDesc = &pProfileDesc->pRequiredCapabilities[caps_index];
12258 
12259             for (std::size_t variant_index = 0, variant_count = pCapsDesc->variantCount; variant_index < variant_count; ++variant_index) {
12260                 const detail::VpVariantDesc* variant = &pCapsDesc->pVariants[variant_index];
12261 
12262                 if (strcmp(blocks[block_index].blockName, "") != 0) {
12263                     if (strcmp(variant->blockName, blocks[block_index].blockName) != 0) {
12264                         continue;
12265                     }
12266                 }
12267 
12268                 for (uint32_t type_index = 0; type_index < variant->featureStructTypeCount; ++type_index) {
12269                     const VkStructureType type = variant->pFeatureStructTypes[type_index];
12270                     if (std::find(structureTypes.begin(), structureTypes.end(), type) == std::end(structureTypes)) {
12271                         structureTypes.push_back(type);
12272                     }
12273                 }
12274 
12275                 detail::GetExtensions(variant->deviceExtensionCount, variant->pDeviceExtensions, extensions);
12276             }
12277         }
12278     }
12279 
12280     VkBaseOutStructure* pNext = static_cast<VkBaseOutStructure*>(const_cast<void*>(pCreateInfo->pCreateInfo->pNext));
12281     detail::GatherStructureTypes(structureTypes, pNext);
12282 
12283     chain->Build(structureTypes);
12284 
12285     VkPhysicalDeviceFeatures2KHR* pFeatures = &chain->requiredFeaturesChain;
12286     if (pCreateInfo->pCreateInfo->pEnabledFeatures) {
12287         pFeatures->features = *pCreateInfo->pCreateInfo->pEnabledFeatures;
12288     }
12289 
12290     for (std::size_t block_index = 0, block_count = blocks.size(); block_index < block_count; ++block_index) {
12291         const detail::VpProfileDesc* pProfileDesc = detail::vpGetProfileDesc(blocks[block_index].profiles.profileName);
12292         if (pProfileDesc == nullptr) {
12293             return VK_ERROR_UNKNOWN;
12294         }
12295 
12296         for (std::size_t caps_index = 0, caps_count = pProfileDesc->requiredCapabilityCount; caps_index < caps_count; ++caps_index) {
12297             const detail::VpCapabilitiesDesc* pCapsDesc = &pProfileDesc->pRequiredCapabilities[caps_index];
12298 
12299             for (std::size_t variant_index = 0, variant_count = pCapsDesc->variantCount; variant_index < variant_count; ++variant_index) {
12300                 const detail::VpVariantDesc* variant = &pCapsDesc->pVariants[variant_index];
12301 
12302                 VkBaseOutStructure* base_ptr = reinterpret_cast<VkBaseOutStructure*>(pFeatures);
12303                 if (variant->feature.pfnFiller != nullptr) {
12304                     while (base_ptr != nullptr) {
12305                         variant->feature.pfnFiller(base_ptr);
12306                         base_ptr = base_ptr->pNext;
12307                     }
12308                 }
12309             }
12310         }
12311     }
12312 
12313     chain->ApplyFeatures(pCreateInfo);
12314 
12315     if (pCreateInfo->flags & VP_DEVICE_CREATE_DISABLE_ROBUST_BUFFER_ACCESS_BIT) {
12316         pFeatures->features.robustBufferAccess = VK_FALSE;
12317     }
12318 
12319     VkDeviceCreateInfo createInfo{VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO};
12320     createInfo.pNext = &chain->requiredFeaturesChain;
12321     createInfo.queueCreateInfoCount = pCreateInfo->pCreateInfo->queueCreateInfoCount;
12322     createInfo.pQueueCreateInfos = pCreateInfo->pCreateInfo->pQueueCreateInfos;
12323     createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
12324     createInfo.ppEnabledExtensionNames = extensions.data();
12325 
12326     return vp.CreateDevice(physicalDevice, &createInfo, pAllocator, pDevice);
12327 }
12328 
vpGetProfileInstanceExtensionProperties(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t * pPropertyCount,VkExtensionProperties * pProperties)12329 VPAPI_ATTR VkResult vpGetProfileInstanceExtensionProperties(
12330 #ifdef VP_USE_OBJECT
12331     VpCapabilities                              capabilities,
12332 #endif//VP_USE_OBJECT
12333     const VpProfileProperties*                  pProfile,
12334     const char*                                 pBlockName,
12335     uint32_t*                                   pPropertyCount,
12336     VkExtensionProperties*                      pProperties) {
12337     return detail::vpGetProfileExtensionProperties(
12338 #ifdef VP_USE_OBJECT
12339         capabilities,
12340 #endif//VP_USE_OBJECT
12341         pProfile, pBlockName, detail::EXTENSION_INSTANCE, pPropertyCount, pProperties);
12342 }
12343 
vpGetProfileDeviceExtensionProperties(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t * pPropertyCount,VkExtensionProperties * pProperties)12344 VPAPI_ATTR VkResult vpGetProfileDeviceExtensionProperties(
12345 #ifdef VP_USE_OBJECT
12346     VpCapabilities                              capabilities,
12347 #endif//VP_USE_OBJECT
12348     const VpProfileProperties*                  pProfile,
12349     const char*                                 pBlockName,
12350     uint32_t*                                   pPropertyCount,
12351     VkExtensionProperties*                      pProperties) {
12352     return detail::vpGetProfileExtensionProperties(
12353 #ifdef VP_USE_OBJECT
12354         capabilities,
12355 #endif//VP_USE_OBJECT
12356         pProfile, pBlockName, detail::EXTENSION_DEVICE, pPropertyCount, pProperties);
12357 }
12358 
vpGetProfileFeatures(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,void * pNext)12359 VPAPI_ATTR VkResult vpGetProfileFeatures(
12360 #ifdef VP_USE_OBJECT
12361     VpCapabilities                              capabilities,
12362 #endif//VP_USE_OBJECT
12363     const VpProfileProperties*                  pProfile,
12364     const char*                                 pBlockName,
12365     void*                                       pNext) {
12366 #ifdef VP_USE_OBJECT
12367     (void)capabilities;
12368 #endif//VP_USE_OBJECT
12369 
12370     VkResult result = pBlockName == nullptr ? VK_SUCCESS : VK_INCOMPLETE;
12371 
12372     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile);
12373 
12374     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
12375         const detail::VpProfileDesc* profile_desc = detail::vpGetProfileDesc(gathered_profiles[profile_index].profileName);
12376         if (profile_desc == nullptr) return VK_ERROR_UNKNOWN;
12377 
12378         for (uint32_t capability_index = 0; capability_index < profile_desc->requiredCapabilityCount; ++capability_index) {
12379             const detail::VpCapabilitiesDesc& cap_desc = profile_desc->pRequiredCapabilities[capability_index];
12380 
12381             for (uint32_t variant_index = 0; variant_index < cap_desc.variantCount; ++variant_index) {
12382                 const detail::VpVariantDesc& variant = cap_desc.pVariants[variant_index];
12383                 if (pBlockName != nullptr) {
12384                     if (strcmp(variant.blockName, pBlockName) != 0) {
12385                         continue;
12386                     }
12387                     result = VK_SUCCESS;
12388                 }
12389 
12390                 if (variant.feature.pfnFiller == nullptr) continue;
12391 
12392                 VkBaseOutStructure* p = static_cast<VkBaseOutStructure*>(pNext);
12393                 while (p != nullptr) {
12394                     variant.feature.pfnFiller(p);
12395                     p = p->pNext;
12396                 }
12397             }
12398         }
12399     }
12400 
12401     return result;
12402 }
12403 
vpGetProfileProperties(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,void * pNext)12404 VPAPI_ATTR VkResult vpGetProfileProperties(
12405 #ifdef VP_USE_OBJECT
12406     VpCapabilities                              capabilities,
12407 #endif//VP_USE_OBJECT
12408     const VpProfileProperties*                  pProfile,
12409     const char*                                 pBlockName,
12410     void*                                       pNext) {
12411     VkResult result = pBlockName == nullptr ? VK_SUCCESS : VK_INCOMPLETE;
12412 
12413     VkBool32 multiple_variants = VK_FALSE;
12414     if (vpHasMultipleVariantsProfile(
12415 #ifdef VP_USE_OBJECT
12416         capabilities,
12417 #endif//VP_USE_OBJECT
12418         pProfile,
12419         &multiple_variants) == VK_ERROR_UNKNOWN) {
12420         return VK_ERROR_UNKNOWN;
12421     }
12422     if (multiple_variants == VK_TRUE && pBlockName == nullptr) {
12423         return VK_ERROR_UNKNOWN;
12424     }
12425 
12426     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile);
12427 
12428     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
12429         const detail::VpProfileDesc* profile_desc = detail::vpGetProfileDesc(gathered_profiles[profile_index].profileName);
12430         if (profile_desc == nullptr) return VK_ERROR_UNKNOWN;
12431 
12432         for (uint32_t capability_index = 0; capability_index < profile_desc->requiredCapabilityCount; ++capability_index) {
12433             const detail::VpCapabilitiesDesc& cap_desc = profile_desc->pRequiredCapabilities[capability_index];
12434 
12435             for (uint32_t variant_index = 0; variant_index < cap_desc.variantCount; ++variant_index) {
12436                 const detail::VpVariantDesc& variant = cap_desc.pVariants[variant_index];
12437                 if (pBlockName != nullptr) {
12438                     if (strcmp(variant.blockName, pBlockName) != 0) {
12439                         continue;
12440                     }
12441                     result = VK_SUCCESS;
12442                 }
12443 
12444                 if (variant.property.pfnFiller == nullptr) continue;
12445 
12446                 VkBaseOutStructure* p = static_cast<VkBaseOutStructure*>(pNext);
12447                 while (p != nullptr) {
12448                     variant.property.pfnFiller(p);
12449                     p = p->pNext;
12450                 }
12451             }
12452         }
12453     }
12454 
12455     return result;
12456 }
12457 
vpGetProfileQueueFamilyProperties(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t * pPropertyCount,VkQueueFamilyProperties2KHR * pProperties)12458 VPAPI_ATTR VkResult vpGetProfileQueueFamilyProperties(
12459 #ifdef VP_USE_OBJECT
12460     VpCapabilities                              capabilities,
12461 #endif//VP_USE_OBJECT
12462     const VpProfileProperties*                  pProfile,
12463     const char*                                 pBlockName,
12464     uint32_t*                                   pPropertyCount,
12465     VkQueueFamilyProperties2KHR*                pProperties) {
12466 #ifdef VP_USE_OBJECT
12467     (void)capabilities;
12468 #endif//VP_USE_OBJECT
12469 
12470     if (pPropertyCount == nullptr) return VK_ERROR_UNKNOWN;
12471 
12472     VkResult result = pBlockName == nullptr ? VK_SUCCESS : VK_INCOMPLETE;
12473 
12474     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile);
12475 
12476     uint32_t total_queue_family_count = 0;
12477 
12478     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
12479         const detail::VpProfileDesc* profile_desc = detail::vpGetProfileDesc(gathered_profiles[profile_index].profileName);
12480         if (profile_desc == nullptr) return VK_ERROR_UNKNOWN;
12481 
12482         for (uint32_t capability_index = 0; capability_index < profile_desc->requiredCapabilityCount; ++capability_index) {
12483             const detail::VpCapabilitiesDesc& cap_desc = profile_desc->pRequiredCapabilities[capability_index];
12484 
12485             for (uint32_t variant_index = 0; variant_index < cap_desc.variantCount; ++variant_index) {
12486                 const detail::VpVariantDesc& variant = cap_desc.pVariants[variant_index];
12487                 if (pBlockName != nullptr) {
12488                     if (strcmp(variant.blockName, pBlockName) != 0) {
12489                         continue;
12490                     }
12491                     result = VK_SUCCESS;
12492                 }
12493 
12494                 if (pProperties != nullptr) {
12495                     for (uint32_t i = 0; i < variant.queueFamilyCount; ++i) {
12496                         if (total_queue_family_count < *pPropertyCount) {
12497                             if (variant.pQueueFamilies[i].pfnFiller == nullptr) continue;
12498 
12499                             VkBaseOutStructure* p = reinterpret_cast<VkBaseOutStructure*>(pProperties);
12500                             while (p != nullptr) {
12501                                 variant.pQueueFamilies[i].pfnFiller(p);
12502                                 p = p->pNext;
12503                             }
12504 
12505                             total_queue_family_count++;
12506                             pProperties++;
12507                         } else {
12508                             result = VK_INCOMPLETE;
12509                             break;
12510                         }
12511                     }
12512                 } else {
12513                     total_queue_family_count += variant.queueFamilyCount;
12514                 }
12515             }
12516         }
12517     }
12518 
12519     *pPropertyCount = total_queue_family_count;
12520     return result;
12521 }
12522 
vpGetProfileFormats(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t * pFormatCount,VkFormat * pFormats)12523 VPAPI_ATTR VkResult vpGetProfileFormats(
12524 #ifdef VP_USE_OBJECT
12525     VpCapabilities                              capabilities,
12526 #endif//VP_USE_OBJECT
12527     const VpProfileProperties*                  pProfile,
12528     const char*                                 pBlockName,
12529     uint32_t*                                   pFormatCount,
12530     VkFormat*                                   pFormats) {
12531 #ifdef VP_USE_OBJECT
12532     (void)capabilities;
12533 #endif//VP_USE_OBJECT
12534 
12535     VkResult result = pBlockName == nullptr ? VK_SUCCESS : VK_INCOMPLETE;
12536 
12537     std::vector<VkFormat> results;
12538 
12539     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile);
12540 
12541     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
12542         const detail::VpProfileDesc* profile_desc = detail::vpGetProfileDesc(gathered_profiles[profile_index].profileName);
12543         if (profile_desc == nullptr) return VK_ERROR_UNKNOWN;
12544 
12545         for (uint32_t capability_index = 0; capability_index < profile_desc->requiredCapabilityCount; ++capability_index) {
12546             const detail::VpCapabilitiesDesc& cap_desc = profile_desc->pRequiredCapabilities[capability_index];
12547 
12548             for (uint32_t variant_index = 0; variant_index < cap_desc.variantCount; ++variant_index) {
12549                 const detail::VpVariantDesc& variant = cap_desc.pVariants[variant_index];
12550                 if (pBlockName != nullptr) {
12551                     if (strcmp(variant.blockName, pBlockName) != 0) {
12552                         continue;
12553                     }
12554                     result = VK_SUCCESS;
12555                 }
12556 
12557                 for (uint32_t format_index = 0; format_index < variant.formatCount; ++format_index) {
12558                     if (std::find(results.begin(), results.end(), variant.pFormats[format_index].format) == std::end(results)) {
12559                         results.push_back(variant.pFormats[format_index].format);
12560                     }
12561                 }
12562             }
12563         }
12564     }
12565 
12566     const uint32_t count = static_cast<uint32_t>(results.size());
12567 
12568     if (pFormats == nullptr) {
12569         *pFormatCount = count;
12570     } else {
12571         if (*pFormatCount < count) {
12572             result = VK_INCOMPLETE;
12573         } else {
12574             *pFormatCount = count;
12575         }
12576 
12577         if (*pFormatCount > 0) {
12578             memcpy(pFormats, &results[0], *pFormatCount * sizeof(VkFormat));
12579         }
12580     }
12581     return result;
12582 }
12583 
vpGetProfileFormatProperties(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,VkFormat format,void * pNext)12584 VPAPI_ATTR VkResult vpGetProfileFormatProperties(
12585 #ifdef VP_USE_OBJECT
12586     VpCapabilities                              capabilities,
12587 #endif//VP_USE_OBJECT
12588     const VpProfileProperties*                  pProfile,
12589     const char*                                 pBlockName,
12590     VkFormat                                    format,
12591     void*                                       pNext) {
12592 #ifdef VP_USE_OBJECT
12593     (void)capabilities;
12594 #endif//VP_USE_OBJECT
12595 
12596     VkResult result = pBlockName == nullptr ? VK_SUCCESS : VK_INCOMPLETE;
12597 
12598     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile);
12599 
12600     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
12601         const char* profile_name = gathered_profiles[profile_index].profileName;
12602 
12603         const detail::VpProfileDesc* pProfileDesc = detail::vpGetProfileDesc(profile_name);
12604         if (pProfileDesc == nullptr) return VK_ERROR_UNKNOWN;
12605 
12606         for (uint32_t required_capability_index = 0; required_capability_index < pProfileDesc->requiredCapabilityCount;
12607                 ++required_capability_index) {
12608             const detail::VpCapabilitiesDesc& required_capabilities = pProfileDesc->pRequiredCapabilities[required_capability_index];
12609 
12610             for (uint32_t required_variant_index = 0; required_variant_index < required_capabilities.variantCount; ++required_variant_index) {
12611                 const detail::VpVariantDesc& variant = required_capabilities.pVariants[required_variant_index];
12612                 if (pBlockName != nullptr) {
12613                     if (strcmp(variant.blockName, pBlockName) != 0) {
12614                         continue;
12615                     }
12616                     result = VK_SUCCESS;
12617                 }
12618 
12619                 for (uint32_t format_index = 0; format_index < variant.formatCount; ++format_index) {
12620                     if (variant.pFormats[format_index].format != format) {
12621                         continue;
12622                     }
12623 
12624                     VkBaseOutStructure* base_ptr = static_cast<VkBaseOutStructure*>(static_cast<void*>(pNext));
12625                     while (base_ptr != nullptr) {
12626                         variant.pFormats[format_index].pfnFiller(base_ptr);
12627                         base_ptr = base_ptr->pNext;
12628                     }
12629 #if defined(VK_VERSION_1_3) || defined(VK_KHR_format_feature_flags2)
12630                     VkFormatProperties2KHR* fp2 = static_cast<VkFormatProperties2KHR*>(
12631                         detail::vpGetStructure(pNext, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR));
12632                     VkFormatProperties3KHR* fp3 = static_cast<VkFormatProperties3KHR*>(
12633                         detail::vpGetStructure(pNext, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR));
12634                     if (fp3 != nullptr) {
12635                         VkFormatProperties2KHR fp{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR };
12636                         variant.pFormats[format_index].pfnFiller(static_cast<VkBaseOutStructure*>(static_cast<void*>(&fp)));
12637                         fp3->linearTilingFeatures |= static_cast<VkFormatFeatureFlags2KHR>(fp3->linearTilingFeatures | fp.formatProperties.linearTilingFeatures);
12638                         fp3->optimalTilingFeatures |= static_cast<VkFormatFeatureFlags2KHR>(fp3->optimalTilingFeatures | fp.formatProperties.optimalTilingFeatures);
12639                         fp3->bufferFeatures |= static_cast<VkFormatFeatureFlags2KHR>(fp3->bufferFeatures | fp.formatProperties.bufferFeatures);
12640                     }
12641                     if (fp2 != nullptr) {
12642                         VkFormatProperties3KHR fp{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR };
12643                         variant.pFormats[format_index].pfnFiller(static_cast<VkBaseOutStructure*>(static_cast<void*>(&fp)));
12644                         fp2->formatProperties.linearTilingFeatures |= static_cast<VkFormatFeatureFlags>(fp2->formatProperties.linearTilingFeatures | fp.linearTilingFeatures);
12645                         fp2->formatProperties.optimalTilingFeatures |= static_cast<VkFormatFeatureFlags>(fp2->formatProperties.optimalTilingFeatures | fp.optimalTilingFeatures);
12646                         fp2->formatProperties.bufferFeatures |= static_cast<VkFormatFeatureFlags>(fp2->formatProperties.bufferFeatures | fp.bufferFeatures);
12647                     }
12648 #endif
12649                 }
12650             }
12651         }
12652     }
12653 
12654     return result;
12655 }
12656 
vpGetProfileFeatureStructureTypes(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t * pStructureTypeCount,VkStructureType * pStructureTypes)12657 VPAPI_ATTR VkResult vpGetProfileFeatureStructureTypes(
12658 #ifdef VP_USE_OBJECT
12659     VpCapabilities                              capabilities,
12660 #endif//VP_USE_OBJECT
12661     const VpProfileProperties*                  pProfile,
12662     const char*                                 pBlockName,
12663     uint32_t*                                   pStructureTypeCount,
12664     VkStructureType*                            pStructureTypes) {
12665     return detail::vpGetProfileStructureTypes(
12666 #ifdef VP_USE_OBJECT
12667         capabilities,
12668 #endif//VP_USE_OBJECT
12669         pProfile, pBlockName, detail::STRUCTURE_FEATURE, pStructureTypeCount, pStructureTypes);
12670 }
12671 
vpGetProfilePropertyStructureTypes(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t * pStructureTypeCount,VkStructureType * pStructureTypes)12672 VPAPI_ATTR VkResult vpGetProfilePropertyStructureTypes(
12673 #ifdef VP_USE_OBJECT
12674     VpCapabilities                              capabilities,
12675 #endif//VP_USE_OBJECT
12676     const VpProfileProperties*                  pProfile,
12677     const char*                                 pBlockName,
12678     uint32_t*                                   pStructureTypeCount,
12679     VkStructureType*                            pStructureTypes) {
12680     return detail::vpGetProfileStructureTypes(
12681 #ifdef VP_USE_OBJECT
12682         capabilities,
12683 #endif//VP_USE_OBJECT
12684         pProfile, pBlockName, detail::STRUCTURE_PROPERTY, pStructureTypeCount, pStructureTypes);
12685 }
12686 
vpGetProfileQueueFamilyStructureTypes(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t * pStructureTypeCount,VkStructureType * pStructureTypes)12687 VPAPI_ATTR VkResult vpGetProfileQueueFamilyStructureTypes(
12688 #ifdef VP_USE_OBJECT
12689     VpCapabilities                              capabilities,
12690 #endif//VP_USE_OBJECT
12691     const VpProfileProperties*                  pProfile,
12692     const char*                                 pBlockName,
12693     uint32_t*                                   pStructureTypeCount,
12694     VkStructureType*                            pStructureTypes) {
12695     return detail::vpGetProfileStructureTypes(
12696 #ifdef VP_USE_OBJECT
12697         capabilities,
12698 #endif//VP_USE_OBJECT
12699         pProfile, pBlockName, detail::STRUCTURE_QUEUE_FAMILY, pStructureTypeCount, pStructureTypes);
12700 }
12701 
vpGetProfileFormatStructureTypes(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t * pStructureTypeCount,VkStructureType * pStructureTypes)12702 VPAPI_ATTR VkResult vpGetProfileFormatStructureTypes(
12703 #ifdef VP_USE_OBJECT
12704     VpCapabilities                              capabilities,
12705 #endif//VP_USE_OBJECT
12706     const VpProfileProperties*                  pProfile,
12707     const char*                                 pBlockName,
12708     uint32_t*                                   pStructureTypeCount,
12709     VkStructureType*                            pStructureTypes) {
12710     return detail::vpGetProfileStructureTypes(
12711 #ifdef VP_USE_OBJECT
12712         capabilities,
12713 #endif//VP_USE_OBJECT
12714         pProfile, pBlockName, detail::STRUCTURE_FORMAT, pStructureTypeCount, pStructureTypes);
12715 }
12716 
12717 #ifdef VK_KHR_video_queue
12718 // Query the list of video profiles specified by the profile
vpGetProfileVideoProfiles(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t * pVideoProfileCount,VpVideoProfileProperties * pVideoProfiles)12719 VPAPI_ATTR VkResult vpGetProfileVideoProfiles(
12720 #ifdef VP_USE_OBJECT
12721     VpCapabilities                              capabilities,
12722 #endif//VP_USE_OBJECT
12723     const VpProfileProperties*                  pProfile,
12724     const char*                                 pBlockName,
12725     uint32_t*                                   pVideoProfileCount,
12726     VpVideoProfileProperties*                   pVideoProfiles) {
12727 #ifdef VP_USE_OBJECT
12728     (void)capabilities;
12729 #endif//VP_USE_OBJECT
12730     if (pVideoProfileCount == nullptr) return VK_ERROR_UNKNOWN;
12731 
12732     VkResult result = pBlockName == nullptr ? VK_SUCCESS : VK_INCOMPLETE;
12733 
12734     uint32_t total_video_profile_count = 0;
12735 
12736     const std::vector<VpProfileProperties>& gathered_profiles = detail::GatherProfiles(*pProfile);
12737 
12738     for (std::size_t profile_index = 0, profile_count = gathered_profiles.size(); profile_index < profile_count; ++profile_index) {
12739         const detail::VpProfileDesc* profile_desc = detail::vpGetProfileDesc(gathered_profiles[profile_index].profileName);
12740         if (profile_desc == nullptr) return VK_ERROR_UNKNOWN;
12741 
12742         for (uint32_t capability_index = 0; capability_index < profile_desc->requiredCapabilityCount; ++capability_index) {
12743             const detail::VpCapabilitiesDesc& cap_desc = profile_desc->pRequiredCapabilities[capability_index];
12744 
12745             for (uint32_t variant_index = 0; variant_index < cap_desc.variantCount; ++variant_index) {
12746                 const detail::VpVariantDesc& variant = cap_desc.pVariants[variant_index];
12747                 if (pBlockName != nullptr) {
12748                     if (strcmp(variant.blockName, pBlockName) != 0) {
12749                         continue;
12750                     }
12751                     result = VK_SUCCESS;
12752                 }
12753 
12754                 if (pVideoProfiles != nullptr) {
12755                     for (uint32_t i = 0; i < variant.videoProfileCount; ++i) {
12756                         if (total_video_profile_count < *pVideoProfileCount) {
12757                             *pVideoProfiles = variant.pVideoProfiles[i].properties;
12758                             total_video_profile_count++;
12759                             pVideoProfiles++;
12760                         } else {
12761                             result = VK_INCOMPLETE;
12762                             break;
12763                         }
12764                     }
12765                 } else {
12766                     total_video_profile_count += variant.videoProfileCount;
12767                 }
12768             }
12769         }
12770     }
12771 
12772     *pVideoProfileCount = total_video_profile_count;
12773     return result;
12774 }
12775 
vpGetProfileVideoProfileInfo(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t videoProfileIndex,VkVideoProfileInfoKHR * pVideoProfileInfo)12776 VPAPI_ATTR VkResult vpGetProfileVideoProfileInfo(
12777 #ifdef VP_USE_OBJECT
12778     VpCapabilities                              capabilities,
12779 #endif//VP_USE_OBJECT
12780     const VpProfileProperties*                  pProfile,
12781     const char*                                 pBlockName,
12782     uint32_t                                    videoProfileIndex,
12783     VkVideoProfileInfoKHR*                      pVideoProfileInfo) {
12784 #ifdef VP_USE_OBJECT
12785     (void)capabilities;
12786 #endif//VP_USE_OBJECT
12787 
12788     const detail::VpVideoProfileDesc* pVideoProfileDesc = nullptr;
12789     VkResult result = detail::vpGetProfileVideoProfileDesc(pProfile, pBlockName, videoProfileIndex, &pVideoProfileDesc);
12790 
12791     if (pVideoProfileDesc != nullptr) {
12792         VkBaseOutStructure* p = reinterpret_cast<VkBaseOutStructure*>(pVideoProfileInfo);
12793         while (p != nullptr) {
12794             pVideoProfileDesc->info.pfnFiller(p);
12795             p = p->pNext;
12796         }
12797     }
12798 
12799     return result;
12800 }
12801 
vpGetProfileVideoCapabilities(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t videoProfileIndex,void * pNext)12802 VPAPI_ATTR VkResult vpGetProfileVideoCapabilities(
12803 #ifdef VP_USE_OBJECT
12804     VpCapabilities                              capabilities,
12805 #endif//VP_USE_OBJECT
12806     const VpProfileProperties*                  pProfile,
12807     const char*                                 pBlockName,
12808     uint32_t                                    videoProfileIndex,
12809     void*                                       pNext) {
12810 #ifdef VP_USE_OBJECT
12811     (void)capabilities;
12812 #endif//VP_USE_OBJECT
12813 
12814     const detail::VpVideoProfileDesc* pVideoProfileDesc = nullptr;
12815     VkResult result = detail::vpGetProfileVideoProfileDesc(pProfile, pBlockName, videoProfileIndex, &pVideoProfileDesc);
12816 
12817     if (pVideoProfileDesc != nullptr) {
12818         VkBaseOutStructure* p = reinterpret_cast<VkBaseOutStructure*>(pNext);
12819         while (p != nullptr) {
12820             pVideoProfileDesc->capability.pfnFiller(p);
12821             p = p->pNext;
12822         }
12823     }
12824 
12825     return result;
12826 }
12827 
vpGetProfileVideoFormatProperties(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t videoProfileIndex,uint32_t * pPropertyCount,VkVideoFormatPropertiesKHR * pProperties)12828 VPAPI_ATTR VkResult vpGetProfileVideoFormatProperties(
12829 #ifdef VP_USE_OBJECT
12830     VpCapabilities                              capabilities,
12831 #endif//VP_USE_OBJECT
12832     const VpProfileProperties*                  pProfile,
12833     const char*                                 pBlockName,
12834     uint32_t                                    videoProfileIndex,
12835     uint32_t*                                   pPropertyCount,
12836     VkVideoFormatPropertiesKHR*                 pProperties) {
12837 #ifdef VP_USE_OBJECT
12838     (void)capabilities;
12839 #endif//VP_USE_OBJECT
12840 
12841     const detail::VpVideoProfileDesc* pVideoProfileDesc = nullptr;
12842     VkResult result = detail::vpGetProfileVideoProfileDesc(pProfile, pBlockName, videoProfileIndex, &pVideoProfileDesc);
12843 
12844     uint32_t property_count = 0;
12845     if (pVideoProfileDesc != nullptr) {
12846         if (pProperties != nullptr) {
12847             for (; property_count < pVideoProfileDesc->formatCount; ++property_count) {
12848                 if (property_count < *pPropertyCount) {
12849                     VkBaseOutStructure* p = reinterpret_cast<VkBaseOutStructure*>(&pProperties[property_count]);
12850                     while (p != nullptr) {
12851                         pVideoProfileDesc->pFormats[property_count].pfnFiller(p);
12852                         p = p->pNext;
12853                     }
12854                 } else {
12855                     result = VK_INCOMPLETE;
12856                     break;
12857                 }
12858             }
12859         } else {
12860             property_count = pVideoProfileDesc->formatCount;
12861         }
12862     }
12863 
12864     *pPropertyCount = property_count;
12865     return result;
12866 }
12867 
vpGetProfileVideoProfileInfoStructureTypes(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t videoProfileIndex,uint32_t * pStructureTypeCount,VkStructureType * pStructureTypes)12868 VPAPI_ATTR VkResult vpGetProfileVideoProfileInfoStructureTypes(
12869 #ifdef VP_USE_OBJECT
12870     VpCapabilities                              capabilities,
12871 #endif//VP_USE_OBJECT
12872     const VpProfileProperties*                  pProfile,
12873     const char*                                 pBlockName,
12874     uint32_t                                    videoProfileIndex,
12875     uint32_t*                                   pStructureTypeCount,
12876     VkStructureType*                            pStructureTypes) {
12877 #ifdef VP_USE_OBJECT
12878     (void)capabilities;
12879 #endif//VP_USE_OBJECT
12880 
12881     const detail::VpVideoProfileDesc* pVideoProfileDesc = nullptr;
12882     VkResult result = detail::vpGetProfileVideoProfileDesc(pProfile, pBlockName, videoProfileIndex, &pVideoProfileDesc);
12883 
12884     if (pVideoProfileDesc != nullptr) {
12885         if (pStructureTypes != nullptr) {
12886             if (*pStructureTypeCount < pVideoProfileDesc->infoStructTypeCount) {
12887                 result = VK_INCOMPLETE;
12888             } else {
12889                 *pStructureTypeCount = pVideoProfileDesc->infoStructTypeCount;
12890             }
12891             if (*pStructureTypeCount > 0) {
12892                 memcpy(pStructureTypes, pVideoProfileDesc->pInfoStructTypes, *pStructureTypeCount * sizeof(VkStructureType));
12893             }
12894         } else {
12895             *pStructureTypeCount = pVideoProfileDesc->infoStructTypeCount;
12896         }
12897     }
12898 
12899     return result;
12900 }
12901 
vpGetProfileVideoCapabilityStructureTypes(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t videoProfileIndex,uint32_t * pStructureTypeCount,VkStructureType * pStructureTypes)12902 VPAPI_ATTR VkResult vpGetProfileVideoCapabilityStructureTypes(
12903 #ifdef VP_USE_OBJECT
12904     VpCapabilities                              capabilities,
12905 #endif//VP_USE_OBJECT
12906     const VpProfileProperties*                  pProfile,
12907     const char*                                 pBlockName,
12908     uint32_t                                    videoProfileIndex,
12909     uint32_t*                                   pStructureTypeCount,
12910     VkStructureType*                            pStructureTypes) {
12911 #ifdef VP_USE_OBJECT
12912     (void)capabilities;
12913 #endif//VP_USE_OBJECT
12914 
12915     const detail::VpVideoProfileDesc* pVideoProfileDesc = nullptr;
12916     VkResult result = detail::vpGetProfileVideoProfileDesc(pProfile, pBlockName, videoProfileIndex, &pVideoProfileDesc);
12917 
12918     if (pVideoProfileDesc != nullptr) {
12919         if (pStructureTypes != nullptr) {
12920             if (*pStructureTypeCount < pVideoProfileDesc->capabilityStructTypeCount) {
12921                 result = VK_INCOMPLETE;
12922             } else {
12923                 *pStructureTypeCount = pVideoProfileDesc->capabilityStructTypeCount;
12924             }
12925             if (*pStructureTypeCount > 0) {
12926                 memcpy(pStructureTypes, pVideoProfileDesc->pCapabilityStructTypes, *pStructureTypeCount * sizeof(VkStructureType));
12927             }
12928         } else {
12929             *pStructureTypeCount = pVideoProfileDesc->capabilityStructTypeCount;
12930         }
12931     }
12932 
12933     return result;
12934 }
12935 
vpGetProfileVideoFormatStructureTypes(VpCapabilities capabilities,const VpProfileProperties * pProfile,const char * pBlockName,uint32_t videoProfileIndex,uint32_t * pStructureTypeCount,VkStructureType * pStructureTypes)12936 VPAPI_ATTR VkResult vpGetProfileVideoFormatStructureTypes(
12937 #ifdef VP_USE_OBJECT
12938     VpCapabilities                              capabilities,
12939 #endif//VP_USE_OBJECT
12940     const VpProfileProperties*                  pProfile,
12941     const char*                                 pBlockName,
12942     uint32_t                                    videoProfileIndex,
12943     uint32_t*                                   pStructureTypeCount,
12944     VkStructureType*                            pStructureTypes) {
12945 #ifdef VP_USE_OBJECT
12946     (void)capabilities;
12947 #endif//VP_USE_OBJECT
12948 
12949     const detail::VpVideoProfileDesc* pVideoProfileDesc = nullptr;
12950     VkResult result = detail::vpGetProfileVideoProfileDesc(pProfile, pBlockName, videoProfileIndex, &pVideoProfileDesc);
12951 
12952     if (pVideoProfileDesc != nullptr) {
12953         if (pStructureTypes != nullptr) {
12954             if (*pStructureTypeCount < pVideoProfileDesc->formatStructTypeCount) {
12955                 result = VK_INCOMPLETE;
12956             } else {
12957                 *pStructureTypeCount = pVideoProfileDesc->formatStructTypeCount;
12958             }
12959             if (*pStructureTypeCount > 0) {
12960                 memcpy(pStructureTypes, pVideoProfileDesc->pFormatStructTypes, *pStructureTypeCount * sizeof(VkStructureType));
12961             }
12962         } else {
12963             *pStructureTypeCount = pVideoProfileDesc->formatStructTypeCount;
12964         }
12965     }
12966 
12967     return result;
12968 }
12969 #endif  // VK_KHR_video_queue
12970