• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* WARNING: This is auto-generated file. Do not modify, since changes will
2 * be lost! Modify the generating script instead.
3 * This file was generated by /scripts/gen_framework.py
4 */
5
6using namespace tcu;
7using ExtPropVect = std::vector<vk::VkExtensionProperties>;
8using IsSupportedFun = bool (*)(const tcu::UVec2&, const ExtPropVect&, const ExtPropVect&);
9using DependencyCheckVect = std::vector<std::pair<const char*, IsSupportedFun> >;
10
11bool isCompatibile(deUint32 major, deUint32 minor, const tcu::UVec2& testedApiVersion)
12{
13	// return true when tested api version is greater
14	// or equal to version represented by two uints
15	if (major == testedApiVersion.x())
16		return minor <= testedApiVersion.y();
17	return major < testedApiVersion.x();
18}
19
20bool isSupported(const ExtPropVect& extensions, const char* ext)
21{
22	return isExtensionStructSupported(extensions, vk::RequiredExtension(ext));
23}
24
25bool check_VK_KHR_display(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
26{
27	DE_UNREF(v);
28	DE_UNREF(vDEP);
29
30	if (!isSupported(vIEP, "VK_KHR_display"))
31		return true;
32
33	// depends attribute in xml: VK_KHR_surface
34	return isSupported(vIEP, "VK_KHR_surface");
35}
36
37bool check_VK_EXT_direct_mode_display(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
38{
39	DE_UNREF(v);
40	DE_UNREF(vDEP);
41
42	if (!isSupported(vIEP, "VK_EXT_direct_mode_display"))
43		return true;
44
45	// depends attribute in xml: VK_KHR_display
46	return isSupported(vIEP, "VK_KHR_display");
47}
48
49bool check_VK_EXT_display_surface_counter(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
50{
51	DE_UNREF(v);
52	DE_UNREF(vDEP);
53
54	if (!isSupported(vIEP, "VK_EXT_display_surface_counter"))
55		return true;
56
57	// depends attribute in xml: VK_KHR_display
58	return isSupported(vIEP, "VK_KHR_display");
59}
60
61bool check_VK_EXT_swapchain_colorspace(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
62{
63	DE_UNREF(v);
64	DE_UNREF(vDEP);
65
66	if (!isSupported(vIEP, "VK_EXT_swapchain_colorspace"))
67		return true;
68
69	// depends attribute in xml: VK_KHR_surface
70	return isSupported(vIEP, "VK_KHR_surface");
71}
72
73bool check_VK_KHR_get_surface_capabilities2(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
74{
75	DE_UNREF(v);
76	DE_UNREF(vDEP);
77
78	if (!isSupported(vIEP, "VK_KHR_get_surface_capabilities2"))
79		return true;
80
81	// depends attribute in xml: VK_KHR_surface
82	return isSupported(vIEP, "VK_KHR_surface");
83}
84
85bool check_VK_KHR_get_display_properties2(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
86{
87	DE_UNREF(v);
88	DE_UNREF(vDEP);
89
90	if (!isSupported(vIEP, "VK_KHR_get_display_properties2"))
91		return true;
92
93	// depends attribute in xml: VK_KHR_display
94	return isSupported(vIEP, "VK_KHR_display");
95}
96
97bool check_VK_EXT_headless_surface(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
98{
99	DE_UNREF(v);
100	DE_UNREF(vDEP);
101
102	if (!isSupported(vIEP, "VK_EXT_headless_surface"))
103		return true;
104
105	// depends attribute in xml: VK_KHR_surface
106	return isSupported(vIEP, "VK_KHR_surface");
107}
108
109static const DependencyCheckVect instanceExtensionDependencies
110{
111	std::make_pair("VK_KHR_display",						&check_VK_KHR_display),
112	std::make_pair("VK_EXT_direct_mode_display",			&check_VK_EXT_direct_mode_display),
113	std::make_pair("VK_EXT_display_surface_counter",		&check_VK_EXT_display_surface_counter),
114	std::make_pair("VK_EXT_swapchain_colorspace",			&check_VK_EXT_swapchain_colorspace),
115	std::make_pair("VK_KHR_get_surface_capabilities2",	&check_VK_KHR_get_surface_capabilities2),
116	std::make_pair("VK_KHR_get_display_properties2",		&check_VK_KHR_get_display_properties2),
117	std::make_pair("VK_EXT_headless_surface",				&check_VK_EXT_headless_surface),
118};
119
120bool check_VK_KHR_swapchain(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
121{
122	DE_UNREF(v);
123	DE_UNREF(vIEP);
124
125	if (!isSupported(vDEP, "VK_KHR_swapchain"))
126		return true;
127
128	// depends attribute in xml: VK_KHR_surface
129	return isSupported(vIEP, "VK_KHR_surface");
130}
131
132bool check_VK_KHR_display_swapchain(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
133{
134	DE_UNREF(v);
135	DE_UNREF(vIEP);
136
137	if (!isSupported(vDEP, "VK_KHR_display_swapchain"))
138		return true;
139
140	// depends attribute in xml: VK_KHR_swapchain+VK_KHR_display
141	return isSupported(vDEP, "VK_KHR_swapchain") && isSupported(vIEP, "VK_KHR_display");
142}
143
144bool check_VK_EXT_texture_compression_astc_hdr(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
145{
146	if (isCompatibile(1, 3, v))
147		return true;
148
149	DE_UNREF(vIEP);
150
151	if (!isSupported(vDEP, "VK_EXT_texture_compression_astc_hdr"))
152		return true;
153
154	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
155	return true;
156}
157
158bool check_VK_EXT_astc_decode_mode(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
159{
160	DE_UNREF(v);
161	DE_UNREF(vIEP);
162
163	if (!isSupported(vDEP, "VK_EXT_astc_decode_mode"))
164		return true;
165
166	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
167	return true;
168}
169
170bool check_VK_KHR_external_memory_fd(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
171{
172	DE_UNREF(v);
173	DE_UNREF(vIEP);
174
175	if (!isSupported(vDEP, "VK_KHR_external_memory_fd"))
176		return true;
177
178	// depends attribute in xml: VK_KHR_external_memory,VK_VERSION_1_1
179	return true;
180}
181
182bool check_VK_KHR_external_semaphore_fd(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
183{
184	DE_UNREF(v);
185	DE_UNREF(vIEP);
186
187	if (!isSupported(vDEP, "VK_KHR_external_semaphore_fd"))
188		return true;
189
190	// depends attribute in xml: VK_KHR_external_semaphore,VK_VERSION_1_1
191	return true;
192}
193
194bool check_VK_KHR_incremental_present(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
195{
196	DE_UNREF(v);
197	DE_UNREF(vIEP);
198
199	if (!isSupported(vDEP, "VK_KHR_incremental_present"))
200		return true;
201
202	// depends attribute in xml: VK_KHR_swapchain
203	return isSupported(vDEP, "VK_KHR_swapchain");
204}
205
206bool check_VK_EXT_display_control(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
207{
208	DE_UNREF(v);
209	DE_UNREF(vIEP);
210
211	if (!isSupported(vDEP, "VK_EXT_display_control"))
212		return true;
213
214	// depends attribute in xml: VK_EXT_display_surface_counter+VK_KHR_swapchain
215	return isSupported(vIEP, "VK_EXT_display_surface_counter") && isSupported(vDEP, "VK_KHR_swapchain");
216}
217
218bool check_VK_EXT_discard_rectangles(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
219{
220	DE_UNREF(v);
221	DE_UNREF(vIEP);
222
223	if (!isSupported(vDEP, "VK_EXT_discard_rectangles"))
224		return true;
225
226	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
227	return true;
228}
229
230bool check_VK_EXT_conservative_rasterization(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
231{
232	DE_UNREF(v);
233	DE_UNREF(vIEP);
234
235	if (!isSupported(vDEP, "VK_EXT_conservative_rasterization"))
236		return true;
237
238	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
239	return true;
240}
241
242bool check_VK_EXT_depth_clip_enable(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
243{
244	DE_UNREF(v);
245	DE_UNREF(vIEP);
246
247	if (!isSupported(vDEP, "VK_EXT_depth_clip_enable"))
248		return true;
249
250	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
251	return true;
252}
253
254bool check_VK_EXT_hdr_metadata(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
255{
256	DE_UNREF(v);
257	DE_UNREF(vIEP);
258
259	if (!isSupported(vDEP, "VK_EXT_hdr_metadata"))
260		return true;
261
262	// depends attribute in xml: VK_KHR_swapchain
263	return isSupported(vDEP, "VK_KHR_swapchain");
264}
265
266bool check_VK_KHR_shared_presentable_image(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
267{
268	DE_UNREF(v);
269	DE_UNREF(vIEP);
270
271	if (!isSupported(vDEP, "VK_KHR_shared_presentable_image"))
272		return true;
273
274	// depends attribute in xml: VK_KHR_swapchain+VK_KHR_get_surface_capabilities2+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)
275	return isSupported(vDEP, "VK_KHR_swapchain") && isSupported(vIEP, "VK_KHR_get_surface_capabilities2") && (true);
276}
277
278bool check_VK_KHR_external_fence_fd(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
279{
280	DE_UNREF(v);
281	DE_UNREF(vIEP);
282
283	if (!isSupported(vDEP, "VK_KHR_external_fence_fd"))
284		return true;
285
286	// depends attribute in xml: VK_KHR_external_fence,VK_VERSION_1_1
287	return true;
288}
289
290bool check_VK_KHR_performance_query(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
291{
292	DE_UNREF(v);
293	DE_UNREF(vIEP);
294
295	if (!isSupported(vDEP, "VK_KHR_performance_query"))
296		return true;
297
298	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
299	return true;
300}
301
302bool check_VK_EXT_external_memory_dma_buf(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
303{
304	DE_UNREF(v);
305	DE_UNREF(vIEP);
306
307	if (!isSupported(vDEP, "VK_EXT_external_memory_dma_buf"))
308		return true;
309
310	// depends attribute in xml: VK_KHR_external_memory_fd
311	return isSupported(vDEP, "VK_KHR_external_memory_fd");
312}
313
314bool check_VK_EXT_queue_family_foreign(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
315{
316	DE_UNREF(v);
317	DE_UNREF(vIEP);
318
319	if (!isSupported(vDEP, "VK_EXT_queue_family_foreign"))
320		return true;
321
322	// depends attribute in xml: VK_KHR_external_memory,VK_VERSION_1_1
323	return true;
324}
325
326bool check_VK_EXT_sample_locations(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
327{
328	DE_UNREF(v);
329	DE_UNREF(vIEP);
330
331	if (!isSupported(vDEP, "VK_EXT_sample_locations"))
332		return true;
333
334	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
335	return true;
336}
337
338bool check_VK_EXT_blend_operation_advanced(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
339{
340	DE_UNREF(v);
341	DE_UNREF(vIEP);
342
343	if (!isSupported(vDEP, "VK_EXT_blend_operation_advanced"))
344		return true;
345
346	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
347	return true;
348}
349
350bool check_VK_EXT_image_drm_format_modifier(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
351{
352	DE_UNREF(v);
353	DE_UNREF(vIEP);
354
355	if (!isSupported(vDEP, "VK_EXT_image_drm_format_modifier"))
356		return true;
357
358	// depends attribute in xml: ((VK_KHR_bind_memory2+VK_KHR_get_physical_device_properties2+VK_KHR_sampler_ycbcr_conversion),VK_VERSION_1_1)+(VK_KHR_image_format_list,VK_VERSION_1_2)
359	return ((true && true && true)) && (true);
360}
361
362bool check_VK_EXT_external_memory_host(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
363{
364	DE_UNREF(v);
365	DE_UNREF(vIEP);
366
367	if (!isSupported(vDEP, "VK_EXT_external_memory_host"))
368		return true;
369
370	// depends attribute in xml: VK_KHR_external_memory,VK_VERSION_1_1
371	return true;
372}
373
374bool check_VK_KHR_shader_clock(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
375{
376	DE_UNREF(v);
377	DE_UNREF(vIEP);
378
379	if (!isSupported(vDEP, "VK_KHR_shader_clock"))
380		return true;
381
382	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
383	return true;
384}
385
386bool check_VK_EXT_calibrated_timestamps(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
387{
388	DE_UNREF(v);
389	DE_UNREF(vIEP);
390
391	if (!isSupported(vDEP, "VK_EXT_calibrated_timestamps"))
392		return true;
393
394	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
395	return true;
396}
397
398bool check_VK_EXT_vertex_attribute_divisor(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
399{
400	DE_UNREF(v);
401	DE_UNREF(vIEP);
402
403	if (!isSupported(vDEP, "VK_EXT_vertex_attribute_divisor"))
404		return true;
405
406	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
407	return true;
408}
409
410bool check_VK_KHR_swapchain_mutable_format(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
411{
412	DE_UNREF(v);
413	DE_UNREF(vIEP);
414
415	if (!isSupported(vDEP, "VK_KHR_swapchain_mutable_format"))
416		return true;
417
418	// depends attribute in xml: VK_KHR_swapchain+(VK_KHR_maintenance2,VK_VERSION_1_1)+(VK_KHR_image_format_list,VK_VERSION_1_2)
419	return isSupported(vDEP, "VK_KHR_swapchain") && (true) && (true);
420}
421
422bool check_VK_EXT_pci_bus_info(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
423{
424	DE_UNREF(v);
425	DE_UNREF(vIEP);
426
427	if (!isSupported(vDEP, "VK_EXT_pci_bus_info"))
428		return true;
429
430	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
431	return true;
432}
433
434bool check_VK_KHR_shader_terminate_invocation(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
435{
436	if (isCompatibile(1, 3, v))
437		return true;
438
439	DE_UNREF(vIEP);
440
441	if (!isSupported(vDEP, "VK_KHR_shader_terminate_invocation"))
442		return true;
443
444	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
445	return true;
446}
447
448bool check_VK_EXT_subgroup_size_control(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
449{
450	if (isCompatibile(1, 3, v))
451		return true;
452
453	DE_UNREF(vIEP);
454
455	if (!isSupported(vDEP, "VK_EXT_subgroup_size_control"))
456		return true;
457
458	// depends attribute in xml: VK_VERSION_1_1
459	return isCompatibile(1, 1, v);
460}
461
462bool check_VK_KHR_fragment_shading_rate(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
463{
464	DE_UNREF(v);
465	DE_UNREF(vIEP);
466
467	if (!isSupported(vDEP, "VK_KHR_fragment_shading_rate"))
468		return true;
469
470	// depends attribute in xml: (VK_KHR_create_renderpass2,VK_VERSION_1_2)+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)
471	return (true) && (true);
472}
473
474bool check_VK_EXT_shader_image_atomic_int64(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
475{
476	DE_UNREF(v);
477	DE_UNREF(vIEP);
478
479	if (!isSupported(vDEP, "VK_EXT_shader_image_atomic_int64"))
480		return true;
481
482	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
483	return true;
484}
485
486bool check_VK_EXT_memory_budget(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
487{
488	DE_UNREF(v);
489	DE_UNREF(vIEP);
490
491	if (!isSupported(vDEP, "VK_EXT_memory_budget"))
492		return true;
493
494	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
495	return true;
496}
497
498bool check_VK_EXT_fragment_shader_interlock(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
499{
500	DE_UNREF(v);
501	DE_UNREF(vIEP);
502
503	if (!isSupported(vDEP, "VK_EXT_fragment_shader_interlock"))
504		return true;
505
506	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
507	return true;
508}
509
510bool check_VK_EXT_ycbcr_image_arrays(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
511{
512	DE_UNREF(v);
513	DE_UNREF(vIEP);
514
515	if (!isSupported(vDEP, "VK_EXT_ycbcr_image_arrays"))
516		return true;
517
518	// depends attribute in xml: VK_KHR_sampler_ycbcr_conversion,VK_VERSION_1_1
519	return true;
520}
521
522bool check_VK_EXT_line_rasterization(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
523{
524	DE_UNREF(v);
525	DE_UNREF(vIEP);
526
527	if (!isSupported(vDEP, "VK_EXT_line_rasterization"))
528		return true;
529
530	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
531	return true;
532}
533
534bool check_VK_EXT_shader_atomic_float(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
535{
536	DE_UNREF(v);
537	DE_UNREF(vIEP);
538
539	if (!isSupported(vDEP, "VK_EXT_shader_atomic_float"))
540		return true;
541
542	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
543	return true;
544}
545
546bool check_VK_EXT_index_type_uint8(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
547{
548	DE_UNREF(v);
549	DE_UNREF(vIEP);
550
551	if (!isSupported(vDEP, "VK_EXT_index_type_uint8"))
552		return true;
553
554	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
555	return true;
556}
557
558bool check_VK_EXT_extended_dynamic_state(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
559{
560	if (isCompatibile(1, 3, v))
561		return true;
562
563	DE_UNREF(vIEP);
564
565	if (!isSupported(vDEP, "VK_EXT_extended_dynamic_state"))
566		return true;
567
568	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
569	return true;
570}
571
572bool check_VK_EXT_shader_demote_to_helper_invocation(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
573{
574	if (isCompatibile(1, 3, v))
575		return true;
576
577	DE_UNREF(vIEP);
578
579	if (!isSupported(vDEP, "VK_EXT_shader_demote_to_helper_invocation"))
580		return true;
581
582	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
583	return true;
584}
585
586bool check_VK_EXT_texel_buffer_alignment(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
587{
588	if (isCompatibile(1, 3, v))
589		return true;
590
591	DE_UNREF(vIEP);
592
593	if (!isSupported(vDEP, "VK_EXT_texel_buffer_alignment"))
594		return true;
595
596	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
597	return true;
598}
599
600bool check_VK_EXT_robustness2(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
601{
602	DE_UNREF(v);
603	DE_UNREF(vIEP);
604
605	if (!isSupported(vDEP, "VK_EXT_robustness2"))
606		return true;
607
608	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
609	return true;
610}
611
612bool check_VK_EXT_custom_border_color(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
613{
614	DE_UNREF(v);
615	DE_UNREF(vIEP);
616
617	if (!isSupported(vDEP, "VK_EXT_custom_border_color"))
618		return true;
619
620	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
621	return true;
622}
623
624bool check_VK_KHR_synchronization2(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
625{
626	if (isCompatibile(1, 3, v))
627		return true;
628
629	DE_UNREF(vIEP);
630
631	if (!isSupported(vDEP, "VK_KHR_synchronization2"))
632		return true;
633
634	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
635	return true;
636}
637
638bool check_VK_EXT_ycbcr_2plane_444_formats(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
639{
640	if (isCompatibile(1, 3, v))
641		return true;
642
643	DE_UNREF(vIEP);
644
645	if (!isSupported(vDEP, "VK_EXT_ycbcr_2plane_444_formats"))
646		return true;
647
648	// depends attribute in xml: VK_KHR_sampler_ycbcr_conversion,VK_VERSION_1_1
649	return true;
650}
651
652bool check_VK_EXT_image_robustness(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
653{
654	if (isCompatibile(1, 3, v))
655		return true;
656
657	DE_UNREF(vIEP);
658
659	if (!isSupported(vDEP, "VK_EXT_image_robustness"))
660		return true;
661
662	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
663	return true;
664}
665
666bool check_VK_KHR_copy_commands2(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
667{
668	if (isCompatibile(1, 3, v))
669		return true;
670
671	DE_UNREF(vIEP);
672
673	if (!isSupported(vDEP, "VK_KHR_copy_commands2"))
674		return true;
675
676	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
677	return true;
678}
679
680bool check_VK_EXT_4444_formats(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
681{
682	if (isCompatibile(1, 3, v))
683		return true;
684
685	DE_UNREF(vIEP);
686
687	if (!isSupported(vDEP, "VK_EXT_4444_formats"))
688		return true;
689
690	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
691	return true;
692}
693
694bool check_VK_EXT_vertex_input_dynamic_state(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
695{
696	DE_UNREF(v);
697	DE_UNREF(vIEP);
698
699	if (!isSupported(vDEP, "VK_EXT_vertex_input_dynamic_state"))
700		return true;
701
702	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
703	return true;
704}
705
706bool check_VK_NV_external_sci_sync(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
707{
708	DE_UNREF(v);
709	DE_UNREF(vIEP);
710
711	if (!isSupported(vDEP, "VK_NV_external_sci_sync"))
712		return true;
713
714	// depends attribute in xml: VK_VERSION_1_1
715	return isCompatibile(1, 1, v);
716}
717
718bool check_VK_NV_external_memory_sci_buf(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
719{
720	DE_UNREF(v);
721	DE_UNREF(vIEP);
722
723	if (!isSupported(vDEP, "VK_NV_external_memory_sci_buf"))
724		return true;
725
726	// depends attribute in xml: VK_VERSION_1_1
727	return isCompatibile(1, 1, v);
728}
729
730bool check_VK_EXT_extended_dynamic_state2(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
731{
732	if (isCompatibile(1, 3, v))
733		return true;
734
735	DE_UNREF(vIEP);
736
737	if (!isSupported(vDEP, "VK_EXT_extended_dynamic_state2"))
738		return true;
739
740	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
741	return true;
742}
743
744bool check_VK_EXT_color_write_enable(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
745{
746	DE_UNREF(v);
747	DE_UNREF(vIEP);
748
749	if (!isSupported(vDEP, "VK_EXT_color_write_enable"))
750		return true;
751
752	// depends attribute in xml: VK_KHR_get_physical_device_properties2,VK_VERSION_1_1
753	return true;
754}
755
756bool check_VK_NV_external_sci_sync2(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
757{
758	DE_UNREF(v);
759	DE_UNREF(vIEP);
760
761	if (!isSupported(vDEP, "VK_NV_external_sci_sync2"))
762		return true;
763
764	// depends attribute in xml: VK_VERSION_1_1
765	return isCompatibile(1, 1, v);
766}
767
768bool check_VK_QNX_external_memory_screen_buffer(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
769{
770	DE_UNREF(v);
771	DE_UNREF(vIEP);
772
773	if (!isSupported(vDEP, "VK_QNX_external_memory_screen_buffer"))
774		return true;
775
776	// depends attribute in xml: ((VK_KHR_sampler_ycbcr_conversion+VK_KHR_external_memory+VK_KHR_dedicated_allocation),VK_VERSION_1_1)+VK_EXT_queue_family_foreign
777	return ((true && true && true)) && isSupported(vDEP, "VK_EXT_queue_family_foreign");
778}
779
780bool check_VK_NV_device_diagnostic_checkpoints(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
781{
782	DE_UNREF(v);
783	DE_UNREF(vIEP);
784
785	if (!isSupported(vDEP, "VK_NV_device_diagnostic_checkpoints"))
786		return true;
787
788	// depends attribute in xml: VK_KHR_get_physical_device_properties2
789	return true;
790}
791
792bool check_VK_KHR_format_feature_flags2(const tcu::UVec2& v, const ExtPropVect& vIEP, const ExtPropVect& vDEP)
793{
794	if (isCompatibile(1, 3, v))
795		return true;
796
797	DE_UNREF(vIEP);
798
799	if (!isSupported(vDEP, "VK_KHR_format_feature_flags2"))
800		return true;
801
802	// depends attribute in xml: VK_KHR_get_physical_device_properties2
803	return true;
804}
805
806static const DependencyCheckVect deviceExtensionDependencies
807{
808	std::make_pair("VK_KHR_swapchain",								&check_VK_KHR_swapchain),
809	std::make_pair("VK_KHR_display_swapchain",						&check_VK_KHR_display_swapchain),
810	std::make_pair("VK_EXT_texture_compression_astc_hdr",			&check_VK_EXT_texture_compression_astc_hdr),
811	std::make_pair("VK_EXT_astc_decode_mode",						&check_VK_EXT_astc_decode_mode),
812	std::make_pair("VK_KHR_external_memory_fd",					&check_VK_KHR_external_memory_fd),
813	std::make_pair("VK_KHR_external_semaphore_fd",					&check_VK_KHR_external_semaphore_fd),
814	std::make_pair("VK_KHR_incremental_present",					&check_VK_KHR_incremental_present),
815	std::make_pair("VK_EXT_display_control",						&check_VK_EXT_display_control),
816	std::make_pair("VK_EXT_discard_rectangles",					&check_VK_EXT_discard_rectangles),
817	std::make_pair("VK_EXT_conservative_rasterization",			&check_VK_EXT_conservative_rasterization),
818	std::make_pair("VK_EXT_depth_clip_enable",						&check_VK_EXT_depth_clip_enable),
819	std::make_pair("VK_EXT_hdr_metadata",							&check_VK_EXT_hdr_metadata),
820	std::make_pair("VK_KHR_shared_presentable_image",				&check_VK_KHR_shared_presentable_image),
821	std::make_pair("VK_KHR_external_fence_fd",						&check_VK_KHR_external_fence_fd),
822	std::make_pair("VK_KHR_performance_query",						&check_VK_KHR_performance_query),
823	std::make_pair("VK_EXT_external_memory_dma_buf",				&check_VK_EXT_external_memory_dma_buf),
824	std::make_pair("VK_EXT_queue_family_foreign",					&check_VK_EXT_queue_family_foreign),
825	std::make_pair("VK_EXT_sample_locations",						&check_VK_EXT_sample_locations),
826	std::make_pair("VK_EXT_blend_operation_advanced",				&check_VK_EXT_blend_operation_advanced),
827	std::make_pair("VK_EXT_image_drm_format_modifier",				&check_VK_EXT_image_drm_format_modifier),
828	std::make_pair("VK_EXT_external_memory_host",					&check_VK_EXT_external_memory_host),
829	std::make_pair("VK_KHR_shader_clock",							&check_VK_KHR_shader_clock),
830	std::make_pair("VK_EXT_calibrated_timestamps",					&check_VK_EXT_calibrated_timestamps),
831	std::make_pair("VK_EXT_vertex_attribute_divisor",				&check_VK_EXT_vertex_attribute_divisor),
832	std::make_pair("VK_KHR_swapchain_mutable_format",				&check_VK_KHR_swapchain_mutable_format),
833	std::make_pair("VK_EXT_pci_bus_info",							&check_VK_EXT_pci_bus_info),
834	std::make_pair("VK_KHR_shader_terminate_invocation",			&check_VK_KHR_shader_terminate_invocation),
835	std::make_pair("VK_EXT_subgroup_size_control",					&check_VK_EXT_subgroup_size_control),
836	std::make_pair("VK_KHR_fragment_shading_rate",					&check_VK_KHR_fragment_shading_rate),
837	std::make_pair("VK_EXT_shader_image_atomic_int64",				&check_VK_EXT_shader_image_atomic_int64),
838	std::make_pair("VK_EXT_memory_budget",							&check_VK_EXT_memory_budget),
839	std::make_pair("VK_EXT_fragment_shader_interlock",				&check_VK_EXT_fragment_shader_interlock),
840	std::make_pair("VK_EXT_ycbcr_image_arrays",					&check_VK_EXT_ycbcr_image_arrays),
841	std::make_pair("VK_EXT_line_rasterization",					&check_VK_EXT_line_rasterization),
842	std::make_pair("VK_EXT_shader_atomic_float",					&check_VK_EXT_shader_atomic_float),
843	std::make_pair("VK_EXT_index_type_uint8",						&check_VK_EXT_index_type_uint8),
844	std::make_pair("VK_EXT_extended_dynamic_state",				&check_VK_EXT_extended_dynamic_state),
845	std::make_pair("VK_EXT_shader_demote_to_helper_invocation",	&check_VK_EXT_shader_demote_to_helper_invocation),
846	std::make_pair("VK_EXT_texel_buffer_alignment",				&check_VK_EXT_texel_buffer_alignment),
847	std::make_pair("VK_EXT_robustness2",							&check_VK_EXT_robustness2),
848	std::make_pair("VK_EXT_custom_border_color",					&check_VK_EXT_custom_border_color),
849	std::make_pair("VK_KHR_synchronization2",						&check_VK_KHR_synchronization2),
850	std::make_pair("VK_EXT_ycbcr_2plane_444_formats",				&check_VK_EXT_ycbcr_2plane_444_formats),
851	std::make_pair("VK_EXT_image_robustness",						&check_VK_EXT_image_robustness),
852	std::make_pair("VK_KHR_copy_commands2",						&check_VK_KHR_copy_commands2),
853	std::make_pair("VK_EXT_4444_formats",							&check_VK_EXT_4444_formats),
854	std::make_pair("VK_EXT_vertex_input_dynamic_state",			&check_VK_EXT_vertex_input_dynamic_state),
855	std::make_pair("VK_NV_external_sci_sync",						&check_VK_NV_external_sci_sync),
856	std::make_pair("VK_NV_external_memory_sci_buf",				&check_VK_NV_external_memory_sci_buf),
857	std::make_pair("VK_EXT_extended_dynamic_state2",				&check_VK_EXT_extended_dynamic_state2),
858	std::make_pair("VK_EXT_color_write_enable",					&check_VK_EXT_color_write_enable),
859	std::make_pair("VK_NV_external_sci_sync2",						&check_VK_NV_external_sci_sync2),
860	std::make_pair("VK_QNX_external_memory_screen_buffer",			&check_VK_QNX_external_memory_screen_buffer),
861	std::make_pair("VK_NV_device_diagnostic_checkpoints",			&check_VK_NV_device_diagnostic_checkpoints),
862	std::make_pair("VK_KHR_format_feature_flags2",					&check_VK_KHR_format_feature_flags2),
863};
864
865static const std::tuple<deUint32, deUint32, deUint32, deUint32>	releasedApiVersions[]	=
866{
867	std::make_tuple(541065216, 1, 1, 0),
868	std::make_tuple(541077504, 1, 1, 3),
869	std::make_tuple(541073408, 1, 1, 2),
870	std::make_tuple(541069312, 1, 1, 1),
871	std::make_tuple(541065216, 1, 1, 0),
872};
873static const std::tuple<deUint32, deUint32, const char*>	extensionRequiredCoreVersion[]	 =
874{
875	std::make_tuple(1, 0, "VK_KHR_surface"),
876	std::make_tuple(1, 0, "VK_KHR_swapchain"),
877	std::make_tuple(1, 0, "VK_KHR_display"),
878	std::make_tuple(1, 0, "VK_KHR_display_swapchain"),
879	std::make_tuple(1, 0, "VK_EXT_depth_range_unrestricted"),
880	std::make_tuple(1, 0, "VK_NV_private_vendor_info"),
881	std::make_tuple(1, 0, "VK_EXT_texture_compression_astc_hdr"),
882	std::make_tuple(1, 0, "VK_EXT_astc_decode_mode"),
883	std::make_tuple(1, 0, "VK_KHR_external_memory_fd"),
884	std::make_tuple(1, 0, "VK_KHR_external_semaphore_fd"),
885	std::make_tuple(1, 0, "VK_KHR_incremental_present"),
886	std::make_tuple(1, 0, "VK_EXT_direct_mode_display"),
887	std::make_tuple(1, 0, "VK_EXT_display_surface_counter"),
888	std::make_tuple(1, 0, "VK_EXT_display_control"),
889	std::make_tuple(1, 0, "VK_EXT_discard_rectangles"),
890	std::make_tuple(1, 0, "VK_EXT_conservative_rasterization"),
891	std::make_tuple(1, 0, "VK_EXT_depth_clip_enable"),
892	std::make_tuple(1, 0, "VK_EXT_swapchain_colorspace"),
893	std::make_tuple(1, 0, "VK_EXT_hdr_metadata"),
894	std::make_tuple(1, 0, "VK_KHR_shared_presentable_image"),
895	std::make_tuple(1, 0, "VK_KHR_external_fence_fd"),
896	std::make_tuple(1, 0, "VK_KHR_performance_query"),
897	std::make_tuple(1, 0, "VK_KHR_get_surface_capabilities2"),
898	std::make_tuple(1, 0, "VK_KHR_get_display_properties2"),
899	std::make_tuple(1, 0, "VK_EXT_external_memory_dma_buf"),
900	std::make_tuple(1, 0, "VK_EXT_queue_family_foreign"),
901	std::make_tuple(1, 0, "VK_EXT_debug_utils"),
902	std::make_tuple(1, 0, "VK_EXT_shader_stencil_export"),
903	std::make_tuple(1, 0, "VK_EXT_sample_locations"),
904	std::make_tuple(1, 0, "VK_EXT_blend_operation_advanced"),
905	std::make_tuple(1, 0, "VK_EXT_post_depth_coverage"),
906	std::make_tuple(1, 0, "VK_EXT_image_drm_format_modifier"),
907	std::make_tuple(1, 0, "VK_EXT_filter_cubic"),
908	std::make_tuple(1, 0, "VK_EXT_global_priority"),
909	std::make_tuple(1, 0, "VK_EXT_external_memory_host"),
910	std::make_tuple(1, 0, "VK_KHR_shader_clock"),
911	std::make_tuple(1, 0, "VK_EXT_calibrated_timestamps"),
912	std::make_tuple(1, 0, "VK_EXT_vertex_attribute_divisor"),
913	std::make_tuple(1, 0, "VK_KHR_swapchain_mutable_format"),
914	std::make_tuple(1, 0, "VK_EXT_pci_bus_info"),
915	std::make_tuple(1, 0, "VK_KHR_shader_terminate_invocation"),
916	std::make_tuple(1, 1, "VK_EXT_subgroup_size_control"),
917	std::make_tuple(1, 0, "VK_KHR_fragment_shading_rate"),
918	std::make_tuple(1, 0, "VK_EXT_shader_image_atomic_int64"),
919	std::make_tuple(1, 0, "VK_EXT_memory_budget"),
920	std::make_tuple(1, 0, "VK_EXT_validation_features"),
921	std::make_tuple(1, 0, "VK_EXT_fragment_shader_interlock"),
922	std::make_tuple(1, 0, "VK_EXT_ycbcr_image_arrays"),
923	std::make_tuple(1, 0, "VK_EXT_headless_surface"),
924	std::make_tuple(1, 0, "VK_EXT_line_rasterization"),
925	std::make_tuple(1, 0, "VK_EXT_shader_atomic_float"),
926	std::make_tuple(1, 0, "VK_EXT_index_type_uint8"),
927	std::make_tuple(1, 0, "VK_EXT_extended_dynamic_state"),
928	std::make_tuple(1, 0, "VK_EXT_shader_demote_to_helper_invocation"),
929	std::make_tuple(1, 0, "VK_EXT_texel_buffer_alignment"),
930	std::make_tuple(1, 0, "VK_EXT_robustness2"),
931	std::make_tuple(1, 0, "VK_EXT_custom_border_color"),
932	std::make_tuple(1, 0, "VK_KHR_object_refresh"),
933	std::make_tuple(1, 0, "VK_KHR_synchronization2"),
934	std::make_tuple(1, 0, "VK_EXT_ycbcr_2plane_444_formats"),
935	std::make_tuple(1, 0, "VK_EXT_image_robustness"),
936	std::make_tuple(1, 0, "VK_KHR_copy_commands2"),
937	std::make_tuple(1, 0, "VK_EXT_4444_formats"),
938	std::make_tuple(1, 0, "VK_EXT_vertex_input_dynamic_state"),
939	std::make_tuple(1, 1, "VK_NV_external_sci_sync"),
940	std::make_tuple(1, 1, "VK_NV_external_memory_sci_buf"),
941	std::make_tuple(1, 0, "VK_EXT_extended_dynamic_state2"),
942	std::make_tuple(1, 0, "VK_EXT_color_write_enable"),
943	std::make_tuple(1, 0, "VK_EXT_application_parameters"),
944	std::make_tuple(1, 1, "VK_NV_external_sci_sync2"),
945	std::make_tuple(1, 0, "VK_QNX_external_memory_screen_buffer"),
946	std::make_tuple(1, 0, "VK_NV_device_diagnostic_checkpoints"),
947	std::make_tuple(1, 0, "VK_KHR_format_feature_flags2"),
948};
949