xref: /aosp_15_r20/external/deqp/external/vulkancts/framework/vulkan/generated/vulkan/vkMandatoryFeatures.inl (revision 35238bce31c2a825756842865a792f8cf7f89930)
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
6bool canUseFeaturesStruct (const vector<VkExtensionProperties>& deviceExtensions, uint32_t usedApiVersion, const char* extension)
7{
8	return (isExtensionStructSupported(deviceExtensions, RequiredExtension(extension))
9			|| isCoreDeviceExtension(usedApiVersion, extension));
10}
11
12bool checkMandatoryFeatures(const vkt::Context& context)
13{
14	if (!context.isInstanceFunctionalitySupported("VK_KHR_get_physical_device_properties2"))
15		TCU_THROW(NotSupportedError, "Extension VK_KHR_get_physical_device_properties2 is not present");
16
17	VkPhysicalDevice					physicalDevice		= context.getPhysicalDevice();
18	const InstanceInterface&			vki					= context.getInstanceInterface();
19	const vector<VkExtensionProperties>	deviceExtensions	= enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
20	const uint32_t						usedApiVersion		= context.getUsedApiVersion();
21
22	tcu::TestLog& log = context.getTestContext().getLog();
23	vk::VkPhysicalDeviceFeatures2 coreFeatures;
24	deMemset(&coreFeatures, 0, sizeof(coreFeatures));
25	coreFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
26	void** nextPtr = &coreFeatures.pNext;
27
28	vk::VkPhysicalDevice16BitStorageFeatures physicalDevice16BitStorageFeatures;
29	deMemset(&physicalDevice16BitStorageFeatures, 0, sizeof(physicalDevice16BitStorageFeatures));
30
31	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_16bit_storage") )
32	{
33		physicalDevice16BitStorageFeatures.sType = getStructureType<VkPhysicalDevice16BitStorageFeatures>();
34		*nextPtr = &physicalDevice16BitStorageFeatures;
35		nextPtr  = &physicalDevice16BitStorageFeatures.pNext;
36	}
37
38	vk::VkPhysicalDevice4444FormatsFeaturesEXT physicalDevice4444FormatsFeaturesEXT;
39	deMemset(&physicalDevice4444FormatsFeaturesEXT, 0, sizeof(physicalDevice4444FormatsFeaturesEXT));
40
41	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_4444_formats") )
42	{
43		physicalDevice4444FormatsFeaturesEXT.sType = getStructureType<VkPhysicalDevice4444FormatsFeaturesEXT>();
44		*nextPtr = &physicalDevice4444FormatsFeaturesEXT;
45		nextPtr  = &physicalDevice4444FormatsFeaturesEXT.pNext;
46	}
47
48	vk::VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures;
49	deMemset(&physicalDevice8BitStorageFeatures, 0, sizeof(physicalDevice8BitStorageFeatures));
50
51	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_8bit_storage") )
52	{
53		physicalDevice8BitStorageFeatures.sType = getStructureType<VkPhysicalDevice8BitStorageFeatures>();
54		*nextPtr = &physicalDevice8BitStorageFeatures;
55		nextPtr  = &physicalDevice8BitStorageFeatures.pNext;
56	}
57
58	vk::VkPhysicalDeviceAccelerationStructureFeaturesKHR physicalDeviceAccelerationStructureFeaturesKHR;
59	deMemset(&physicalDeviceAccelerationStructureFeaturesKHR, 0, sizeof(physicalDeviceAccelerationStructureFeaturesKHR));
60
61	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_acceleration_structure") )
62	{
63		physicalDeviceAccelerationStructureFeaturesKHR.sType = getStructureType<VkPhysicalDeviceAccelerationStructureFeaturesKHR>();
64		*nextPtr = &physicalDeviceAccelerationStructureFeaturesKHR;
65		nextPtr  = &physicalDeviceAccelerationStructureFeaturesKHR.pNext;
66	}
67
68	vk::VkPhysicalDeviceAddressBindingReportFeaturesEXT physicalDeviceAddressBindingReportFeaturesEXT;
69	deMemset(&physicalDeviceAddressBindingReportFeaturesEXT, 0, sizeof(physicalDeviceAddressBindingReportFeaturesEXT));
70
71	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_device_address_binding_report") )
72	{
73		physicalDeviceAddressBindingReportFeaturesEXT.sType = getStructureType<VkPhysicalDeviceAddressBindingReportFeaturesEXT>();
74		*nextPtr = &physicalDeviceAddressBindingReportFeaturesEXT;
75		nextPtr  = &physicalDeviceAddressBindingReportFeaturesEXT.pNext;
76	}
77
78#if defined(CTS_USES_VULKAN)
79	vk::VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT;
80	deMemset(&physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT, 0, sizeof(physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT));
81
82	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_attachment_feedback_loop_dynamic_state") )
83	{
84		physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.sType = getStructureType<VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT>();
85		*nextPtr = &physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT;
86		nextPtr  = &physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.pNext;
87	}
88#endif // defined(CTS_USES_VULKAN)
89
90#if defined(CTS_USES_VULKAN)
91	vk::VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT;
92	deMemset(&physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT, 0, sizeof(physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT));
93
94	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_attachment_feedback_loop_layout") )
95	{
96		physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.sType = getStructureType<VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT>();
97		*nextPtr = &physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT;
98		nextPtr  = &physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.pNext;
99	}
100#endif // defined(CTS_USES_VULKAN)
101
102#if defined(CTS_USES_VULKAN)
103	vk::VkPhysicalDeviceBorderColorSwizzleFeaturesEXT physicalDeviceBorderColorSwizzleFeaturesEXT;
104	deMemset(&physicalDeviceBorderColorSwizzleFeaturesEXT, 0, sizeof(physicalDeviceBorderColorSwizzleFeaturesEXT));
105
106	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_border_color_swizzle") )
107	{
108		physicalDeviceBorderColorSwizzleFeaturesEXT.sType = getStructureType<VkPhysicalDeviceBorderColorSwizzleFeaturesEXT>();
109		*nextPtr = &physicalDeviceBorderColorSwizzleFeaturesEXT;
110		nextPtr  = &physicalDeviceBorderColorSwizzleFeaturesEXT.pNext;
111	}
112#endif // defined(CTS_USES_VULKAN)
113
114	vk::VkPhysicalDeviceBufferDeviceAddressFeatures physicalDeviceBufferDeviceAddressFeatures;
115	deMemset(&physicalDeviceBufferDeviceAddressFeatures, 0, sizeof(physicalDeviceBufferDeviceAddressFeatures));
116
117	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_buffer_device_address") )
118	{
119		physicalDeviceBufferDeviceAddressFeatures.sType = getStructureType<VkPhysicalDeviceBufferDeviceAddressFeatures>();
120		*nextPtr = &physicalDeviceBufferDeviceAddressFeatures;
121		nextPtr  = &physicalDeviceBufferDeviceAddressFeatures.pNext;
122	}
123
124	vk::VkPhysicalDeviceColorWriteEnableFeaturesEXT physicalDeviceColorWriteEnableFeaturesEXT;
125	deMemset(&physicalDeviceColorWriteEnableFeaturesEXT, 0, sizeof(physicalDeviceColorWriteEnableFeaturesEXT));
126
127	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_color_write_enable") )
128	{
129		physicalDeviceColorWriteEnableFeaturesEXT.sType = getStructureType<VkPhysicalDeviceColorWriteEnableFeaturesEXT>();
130		*nextPtr = &physicalDeviceColorWriteEnableFeaturesEXT;
131		nextPtr  = &physicalDeviceColorWriteEnableFeaturesEXT.pNext;
132	}
133
134	vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT physicalDeviceConditionalRenderingFeaturesEXT;
135	deMemset(&physicalDeviceConditionalRenderingFeaturesEXT, 0, sizeof(physicalDeviceConditionalRenderingFeaturesEXT));
136
137	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_conditional_rendering") )
138	{
139		physicalDeviceConditionalRenderingFeaturesEXT.sType = getStructureType<VkPhysicalDeviceConditionalRenderingFeaturesEXT>();
140		*nextPtr = &physicalDeviceConditionalRenderingFeaturesEXT;
141		nextPtr  = &physicalDeviceConditionalRenderingFeaturesEXT.pNext;
142	}
143
144#if defined(CTS_USES_VULKAN)
145	vk::VkPhysicalDeviceCoverageReductionModeFeaturesNV physicalDeviceCoverageReductionModeFeaturesNV;
146	deMemset(&physicalDeviceCoverageReductionModeFeaturesNV, 0, sizeof(physicalDeviceCoverageReductionModeFeaturesNV));
147
148	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_NV_coverage_reduction_mode") )
149	{
150		physicalDeviceCoverageReductionModeFeaturesNV.sType = getStructureType<VkPhysicalDeviceCoverageReductionModeFeaturesNV>();
151		*nextPtr = &physicalDeviceCoverageReductionModeFeaturesNV;
152		nextPtr  = &physicalDeviceCoverageReductionModeFeaturesNV.pNext;
153	}
154#endif // defined(CTS_USES_VULKAN)
155
156#if defined(CTS_USES_VULKAN)
157	vk::VkPhysicalDeviceDepthBiasControlFeaturesEXT physicalDeviceDepthBiasControlFeaturesEXT;
158	deMemset(&physicalDeviceDepthBiasControlFeaturesEXT, 0, sizeof(physicalDeviceDepthBiasControlFeaturesEXT));
159
160	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_depth_bias_control") )
161	{
162		physicalDeviceDepthBiasControlFeaturesEXT.sType = getStructureType<VkPhysicalDeviceDepthBiasControlFeaturesEXT>();
163		*nextPtr = &physicalDeviceDepthBiasControlFeaturesEXT;
164		nextPtr  = &physicalDeviceDepthBiasControlFeaturesEXT.pNext;
165	}
166#endif // defined(CTS_USES_VULKAN)
167
168	vk::VkPhysicalDeviceDepthClampZeroOneFeaturesEXT physicalDeviceDepthClampZeroOneFeaturesEXT;
169	deMemset(&physicalDeviceDepthClampZeroOneFeaturesEXT, 0, sizeof(physicalDeviceDepthClampZeroOneFeaturesEXT));
170
171	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_depth_clamp_zero_one") )
172	{
173		physicalDeviceDepthClampZeroOneFeaturesEXT.sType = getStructureType<VkPhysicalDeviceDepthClampZeroOneFeaturesEXT>();
174		*nextPtr = &physicalDeviceDepthClampZeroOneFeaturesEXT;
175		nextPtr  = &physicalDeviceDepthClampZeroOneFeaturesEXT.pNext;
176	}
177
178	vk::VkPhysicalDeviceDepthClipControlFeaturesEXT physicalDeviceDepthClipControlFeaturesEXT;
179	deMemset(&physicalDeviceDepthClipControlFeaturesEXT, 0, sizeof(physicalDeviceDepthClipControlFeaturesEXT));
180
181	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_depth_clip_control") )
182	{
183		physicalDeviceDepthClipControlFeaturesEXT.sType = getStructureType<VkPhysicalDeviceDepthClipControlFeaturesEXT>();
184		*nextPtr = &physicalDeviceDepthClipControlFeaturesEXT;
185		nextPtr  = &physicalDeviceDepthClipControlFeaturesEXT.pNext;
186	}
187
188	vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT physicalDeviceDepthClipEnableFeaturesEXT;
189	deMemset(&physicalDeviceDepthClipEnableFeaturesEXT, 0, sizeof(physicalDeviceDepthClipEnableFeaturesEXT));
190
191	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_depth_clip_enable") )
192	{
193		physicalDeviceDepthClipEnableFeaturesEXT.sType = getStructureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT>();
194		*nextPtr = &physicalDeviceDepthClipEnableFeaturesEXT;
195		nextPtr  = &physicalDeviceDepthClipEnableFeaturesEXT.pNext;
196	}
197
198	vk::VkPhysicalDeviceDescriptorBufferFeaturesEXT physicalDeviceDescriptorBufferFeaturesEXT;
199	deMemset(&physicalDeviceDescriptorBufferFeaturesEXT, 0, sizeof(physicalDeviceDescriptorBufferFeaturesEXT));
200
201	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_descriptor_buffer") )
202	{
203		physicalDeviceDescriptorBufferFeaturesEXT.sType = getStructureType<VkPhysicalDeviceDescriptorBufferFeaturesEXT>();
204		*nextPtr = &physicalDeviceDescriptorBufferFeaturesEXT;
205		nextPtr  = &physicalDeviceDescriptorBufferFeaturesEXT.pNext;
206	}
207
208	vk::VkPhysicalDeviceDescriptorIndexingFeatures physicalDeviceDescriptorIndexingFeatures;
209	deMemset(&physicalDeviceDescriptorIndexingFeatures, 0, sizeof(physicalDeviceDescriptorIndexingFeatures));
210
211	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_descriptor_indexing") )
212	{
213		physicalDeviceDescriptorIndexingFeatures.sType = getStructureType<VkPhysicalDeviceDescriptorIndexingFeatures>();
214		*nextPtr = &physicalDeviceDescriptorIndexingFeatures;
215		nextPtr  = &physicalDeviceDescriptorIndexingFeatures.pNext;
216	}
217
218	vk::VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR physicalDeviceDynamicRenderingLocalReadFeaturesKHR;
219	deMemset(&physicalDeviceDynamicRenderingLocalReadFeaturesKHR, 0, sizeof(physicalDeviceDynamicRenderingLocalReadFeaturesKHR));
220
221	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_dynamic_rendering_local_read") )
222	{
223		physicalDeviceDynamicRenderingLocalReadFeaturesKHR.sType = getStructureType<VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR>();
224		*nextPtr = &physicalDeviceDynamicRenderingLocalReadFeaturesKHR;
225		nextPtr  = &physicalDeviceDynamicRenderingLocalReadFeaturesKHR.pNext;
226	}
227
228	vk::VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT;
229	deMemset(&physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT, 0, sizeof(physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT));
230
231	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_dynamic_rendering_unused_attachments") )
232	{
233		physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.sType = getStructureType<VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT>();
234		*nextPtr = &physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT;
235		nextPtr  = &physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.pNext;
236	}
237
238	vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT physicalDeviceExtendedDynamicState2FeaturesEXT;
239	deMemset(&physicalDeviceExtendedDynamicState2FeaturesEXT, 0, sizeof(physicalDeviceExtendedDynamicState2FeaturesEXT));
240
241	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_extended_dynamic_state2") )
242	{
243		physicalDeviceExtendedDynamicState2FeaturesEXT.sType = getStructureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>();
244		*nextPtr = &physicalDeviceExtendedDynamicState2FeaturesEXT;
245		nextPtr  = &physicalDeviceExtendedDynamicState2FeaturesEXT.pNext;
246	}
247
248	vk::VkPhysicalDeviceExtendedDynamicState3FeaturesEXT physicalDeviceExtendedDynamicState3FeaturesEXT;
249	deMemset(&physicalDeviceExtendedDynamicState3FeaturesEXT, 0, sizeof(physicalDeviceExtendedDynamicState3FeaturesEXT));
250
251	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_extended_dynamic_state3") )
252	{
253		physicalDeviceExtendedDynamicState3FeaturesEXT.sType = getStructureType<VkPhysicalDeviceExtendedDynamicState3FeaturesEXT>();
254		*nextPtr = &physicalDeviceExtendedDynamicState3FeaturesEXT;
255		nextPtr  = &physicalDeviceExtendedDynamicState3FeaturesEXT.pNext;
256	}
257
258	vk::VkPhysicalDeviceExternalFormatResolveFeaturesANDROID physicalDeviceExternalFormatResolveFeaturesANDROID;
259	deMemset(&physicalDeviceExternalFormatResolveFeaturesANDROID, 0, sizeof(physicalDeviceExternalFormatResolveFeaturesANDROID));
260
261	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_ANDROID_external_format_resolve") )
262	{
263		physicalDeviceExternalFormatResolveFeaturesANDROID.sType = getStructureType<VkPhysicalDeviceExternalFormatResolveFeaturesANDROID>();
264		*nextPtr = &physicalDeviceExternalFormatResolveFeaturesANDROID;
265		nextPtr  = &physicalDeviceExternalFormatResolveFeaturesANDROID.pNext;
266	}
267
268	vk::VkPhysicalDeviceFaultFeaturesEXT physicalDeviceFaultFeaturesEXT;
269	deMemset(&physicalDeviceFaultFeaturesEXT, 0, sizeof(physicalDeviceFaultFeaturesEXT));
270
271	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_device_fault") )
272	{
273		physicalDeviceFaultFeaturesEXT.sType = getStructureType<VkPhysicalDeviceFaultFeaturesEXT>();
274		*nextPtr = &physicalDeviceFaultFeaturesEXT;
275		nextPtr  = &physicalDeviceFaultFeaturesEXT.pNext;
276	}
277
278	vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT physicalDeviceFragmentDensityMapFeaturesEXT;
279	deMemset(&physicalDeviceFragmentDensityMapFeaturesEXT, 0, sizeof(physicalDeviceFragmentDensityMapFeaturesEXT));
280
281	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_fragment_density_map") )
282	{
283		physicalDeviceFragmentDensityMapFeaturesEXT.sType = getStructureType<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>();
284		*nextPtr = &physicalDeviceFragmentDensityMapFeaturesEXT;
285		nextPtr  = &physicalDeviceFragmentDensityMapFeaturesEXT.pNext;
286	}
287
288	vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT physicalDeviceFragmentShaderInterlockFeaturesEXT;
289	deMemset(&physicalDeviceFragmentShaderInterlockFeaturesEXT, 0, sizeof(physicalDeviceFragmentShaderInterlockFeaturesEXT));
290
291	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_fragment_shader_interlock") )
292	{
293		physicalDeviceFragmentShaderInterlockFeaturesEXT.sType = getStructureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>();
294		*nextPtr = &physicalDeviceFragmentShaderInterlockFeaturesEXT;
295		nextPtr  = &physicalDeviceFragmentShaderInterlockFeaturesEXT.pNext;
296	}
297
298#if defined(CTS_USES_VULKAN)
299	vk::VkPhysicalDeviceFragmentShadingRateFeaturesKHR physicalDeviceFragmentShadingRateFeaturesKHR;
300	deMemset(&physicalDeviceFragmentShadingRateFeaturesKHR, 0, sizeof(physicalDeviceFragmentShadingRateFeaturesKHR));
301
302	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_fragment_shading_rate") )
303	{
304		physicalDeviceFragmentShadingRateFeaturesKHR.sType = getStructureType<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>();
305		*nextPtr = &physicalDeviceFragmentShadingRateFeaturesKHR;
306		nextPtr  = &physicalDeviceFragmentShadingRateFeaturesKHR.pNext;
307	}
308#endif // defined(CTS_USES_VULKAN)
309
310	vk::VkPhysicalDeviceFrameBoundaryFeaturesEXT physicalDeviceFrameBoundaryFeaturesEXT;
311	deMemset(&physicalDeviceFrameBoundaryFeaturesEXT, 0, sizeof(physicalDeviceFrameBoundaryFeaturesEXT));
312
313	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_frame_boundary") )
314	{
315		physicalDeviceFrameBoundaryFeaturesEXT.sType = getStructureType<VkPhysicalDeviceFrameBoundaryFeaturesEXT>();
316		*nextPtr = &physicalDeviceFrameBoundaryFeaturesEXT;
317		nextPtr  = &physicalDeviceFrameBoundaryFeaturesEXT.pNext;
318	}
319
320	vk::VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR physicalDeviceGlobalPriorityQueryFeaturesKHR;
321	deMemset(&physicalDeviceGlobalPriorityQueryFeaturesKHR, 0, sizeof(physicalDeviceGlobalPriorityQueryFeaturesKHR));
322
323	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_global_priority") || canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_global_priority_query") )
324	{
325		physicalDeviceGlobalPriorityQueryFeaturesKHR.sType = getStructureType<VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR>();
326		*nextPtr = &physicalDeviceGlobalPriorityQueryFeaturesKHR;
327		nextPtr  = &physicalDeviceGlobalPriorityQueryFeaturesKHR.pNext;
328	}
329
330	vk::VkPhysicalDeviceHostQueryResetFeatures physicalDeviceHostQueryResetFeatures;
331	deMemset(&physicalDeviceHostQueryResetFeatures, 0, sizeof(physicalDeviceHostQueryResetFeatures));
332
333	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_host_query_reset") )
334	{
335		physicalDeviceHostQueryResetFeatures.sType = getStructureType<VkPhysicalDeviceHostQueryResetFeatures>();
336		*nextPtr = &physicalDeviceHostQueryResetFeatures;
337		nextPtr  = &physicalDeviceHostQueryResetFeatures.pNext;
338	}
339
340#if defined(CTS_USES_VULKAN)
341	vk::VkPhysicalDeviceImage2DViewOf3DFeaturesEXT physicalDeviceImage2DViewOf3DFeaturesEXT;
342	deMemset(&physicalDeviceImage2DViewOf3DFeaturesEXT, 0, sizeof(physicalDeviceImage2DViewOf3DFeaturesEXT));
343
344	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_image_2d_view_of_3d") )
345	{
346		physicalDeviceImage2DViewOf3DFeaturesEXT.sType = getStructureType<VkPhysicalDeviceImage2DViewOf3DFeaturesEXT>();
347		*nextPtr = &physicalDeviceImage2DViewOf3DFeaturesEXT;
348		nextPtr  = &physicalDeviceImage2DViewOf3DFeaturesEXT.pNext;
349	}
350#endif // defined(CTS_USES_VULKAN)
351
352	vk::VkPhysicalDeviceImageCompressionControlFeaturesEXT physicalDeviceImageCompressionControlFeaturesEXT;
353	deMemset(&physicalDeviceImageCompressionControlFeaturesEXT, 0, sizeof(physicalDeviceImageCompressionControlFeaturesEXT));
354
355	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_image_compression_control") )
356	{
357		physicalDeviceImageCompressionControlFeaturesEXT.sType = getStructureType<VkPhysicalDeviceImageCompressionControlFeaturesEXT>();
358		*nextPtr = &physicalDeviceImageCompressionControlFeaturesEXT;
359		nextPtr  = &physicalDeviceImageCompressionControlFeaturesEXT.pNext;
360	}
361
362	vk::VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT physicalDeviceImageCompressionControlSwapchainFeaturesEXT;
363	deMemset(&physicalDeviceImageCompressionControlSwapchainFeaturesEXT, 0, sizeof(physicalDeviceImageCompressionControlSwapchainFeaturesEXT));
364
365	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_image_compression_control_swapchain") )
366	{
367		physicalDeviceImageCompressionControlSwapchainFeaturesEXT.sType = getStructureType<VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT>();
368		*nextPtr = &physicalDeviceImageCompressionControlSwapchainFeaturesEXT;
369		nextPtr  = &physicalDeviceImageCompressionControlSwapchainFeaturesEXT.pNext;
370	}
371
372#if defined(CTS_USES_VULKAN)
373	vk::VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT physicalDeviceImageSlicedViewOf3DFeaturesEXT;
374	deMemset(&physicalDeviceImageSlicedViewOf3DFeaturesEXT, 0, sizeof(physicalDeviceImageSlicedViewOf3DFeaturesEXT));
375
376	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_image_sliced_view_of_3d") )
377	{
378		physicalDeviceImageSlicedViewOf3DFeaturesEXT.sType = getStructureType<VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT>();
379		*nextPtr = &physicalDeviceImageSlicedViewOf3DFeaturesEXT;
380		nextPtr  = &physicalDeviceImageSlicedViewOf3DFeaturesEXT.pNext;
381	}
382#endif // defined(CTS_USES_VULKAN)
383
384	vk::VkPhysicalDeviceImagelessFramebufferFeatures physicalDeviceImagelessFramebufferFeatures;
385	deMemset(&physicalDeviceImagelessFramebufferFeatures, 0, sizeof(physicalDeviceImagelessFramebufferFeatures));
386
387	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_imageless_framebuffer") )
388	{
389		physicalDeviceImagelessFramebufferFeatures.sType = getStructureType<VkPhysicalDeviceImagelessFramebufferFeatures>();
390		*nextPtr = &physicalDeviceImagelessFramebufferFeatures;
391		nextPtr  = &physicalDeviceImagelessFramebufferFeatures.pNext;
392	}
393
394	vk::VkPhysicalDeviceIndexTypeUint8FeaturesKHR physicalDeviceIndexTypeUint8FeaturesKHR;
395	deMemset(&physicalDeviceIndexTypeUint8FeaturesKHR, 0, sizeof(physicalDeviceIndexTypeUint8FeaturesKHR));
396
397	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_index_type_uint8") || canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_index_type_uint8") )
398	{
399		physicalDeviceIndexTypeUint8FeaturesKHR.sType = getStructureType<VkPhysicalDeviceIndexTypeUint8FeaturesKHR>();
400		*nextPtr = &physicalDeviceIndexTypeUint8FeaturesKHR;
401		nextPtr  = &physicalDeviceIndexTypeUint8FeaturesKHR.pNext;
402	}
403
404	vk::VkPhysicalDeviceInlineUniformBlockFeaturesEXT physicalDeviceInlineUniformBlockFeaturesEXT;
405	deMemset(&physicalDeviceInlineUniformBlockFeaturesEXT, 0, sizeof(physicalDeviceInlineUniformBlockFeaturesEXT));
406
407	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_inline_uniform_block") )
408	{
409		physicalDeviceInlineUniformBlockFeaturesEXT.sType = getStructureType<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>();
410		*nextPtr = &physicalDeviceInlineUniformBlockFeaturesEXT;
411		nextPtr  = &physicalDeviceInlineUniformBlockFeaturesEXT.pNext;
412	}
413
414	vk::VkPhysicalDeviceLegacyDitheringFeaturesEXT physicalDeviceLegacyDitheringFeaturesEXT;
415	deMemset(&physicalDeviceLegacyDitheringFeaturesEXT, 0, sizeof(physicalDeviceLegacyDitheringFeaturesEXT));
416
417	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_legacy_dithering") )
418	{
419		physicalDeviceLegacyDitheringFeaturesEXT.sType = getStructureType<VkPhysicalDeviceLegacyDitheringFeaturesEXT>();
420		*nextPtr = &physicalDeviceLegacyDitheringFeaturesEXT;
421		nextPtr  = &physicalDeviceLegacyDitheringFeaturesEXT.pNext;
422	}
423
424	vk::VkPhysicalDeviceLineRasterizationFeaturesKHR physicalDeviceLineRasterizationFeaturesKHR;
425	deMemset(&physicalDeviceLineRasterizationFeaturesKHR, 0, sizeof(physicalDeviceLineRasterizationFeaturesKHR));
426
427	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_line_rasterization") || canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_line_rasterization") )
428	{
429		physicalDeviceLineRasterizationFeaturesKHR.sType = getStructureType<VkPhysicalDeviceLineRasterizationFeaturesKHR>();
430		*nextPtr = &physicalDeviceLineRasterizationFeaturesKHR;
431		nextPtr  = &physicalDeviceLineRasterizationFeaturesKHR.pNext;
432	}
433
434	vk::VkPhysicalDeviceMaintenance5FeaturesKHR physicalDeviceMaintenance5FeaturesKHR;
435	deMemset(&physicalDeviceMaintenance5FeaturesKHR, 0, sizeof(physicalDeviceMaintenance5FeaturesKHR));
436
437	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_maintenance5") )
438	{
439		physicalDeviceMaintenance5FeaturesKHR.sType = getStructureType<VkPhysicalDeviceMaintenance5FeaturesKHR>();
440		*nextPtr = &physicalDeviceMaintenance5FeaturesKHR;
441		nextPtr  = &physicalDeviceMaintenance5FeaturesKHR.pNext;
442	}
443
444	vk::VkPhysicalDeviceMaintenance6FeaturesKHR physicalDeviceMaintenance6FeaturesKHR;
445	deMemset(&physicalDeviceMaintenance6FeaturesKHR, 0, sizeof(physicalDeviceMaintenance6FeaturesKHR));
446
447	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_maintenance6") )
448	{
449		physicalDeviceMaintenance6FeaturesKHR.sType = getStructureType<VkPhysicalDeviceMaintenance6FeaturesKHR>();
450		*nextPtr = &physicalDeviceMaintenance6FeaturesKHR;
451		nextPtr  = &physicalDeviceMaintenance6FeaturesKHR.pNext;
452	}
453
454	vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT physicalDeviceMemoryPriorityFeaturesEXT;
455	deMemset(&physicalDeviceMemoryPriorityFeaturesEXT, 0, sizeof(physicalDeviceMemoryPriorityFeaturesEXT));
456
457	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_memory_priority") )
458	{
459		physicalDeviceMemoryPriorityFeaturesEXT.sType = getStructureType<VkPhysicalDeviceMemoryPriorityFeaturesEXT>();
460		*nextPtr = &physicalDeviceMemoryPriorityFeaturesEXT;
461		nextPtr  = &physicalDeviceMemoryPriorityFeaturesEXT.pNext;
462	}
463
464#if defined(CTS_USES_VULKAN)
465	vk::VkPhysicalDeviceMeshShaderFeaturesEXT physicalDeviceMeshShaderFeaturesEXT;
466	deMemset(&physicalDeviceMeshShaderFeaturesEXT, 0, sizeof(physicalDeviceMeshShaderFeaturesEXT));
467
468	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_mesh_shader") )
469	{
470		physicalDeviceMeshShaderFeaturesEXT.sType = getStructureType<VkPhysicalDeviceMeshShaderFeaturesEXT>();
471		*nextPtr = &physicalDeviceMeshShaderFeaturesEXT;
472		nextPtr  = &physicalDeviceMeshShaderFeaturesEXT.pNext;
473	}
474#endif // defined(CTS_USES_VULKAN)
475
476	vk::VkPhysicalDeviceMultiDrawFeaturesEXT physicalDeviceMultiDrawFeaturesEXT;
477	deMemset(&physicalDeviceMultiDrawFeaturesEXT, 0, sizeof(physicalDeviceMultiDrawFeaturesEXT));
478
479	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_multi_draw") )
480	{
481		physicalDeviceMultiDrawFeaturesEXT.sType = getStructureType<VkPhysicalDeviceMultiDrawFeaturesEXT>();
482		*nextPtr = &physicalDeviceMultiDrawFeaturesEXT;
483		nextPtr  = &physicalDeviceMultiDrawFeaturesEXT.pNext;
484	}
485
486	vk::VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT;
487	deMemset(&physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT, 0, sizeof(physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT));
488
489	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_multisampled_render_to_single_sampled") )
490	{
491		physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.sType = getStructureType<VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT>();
492		*nextPtr = &physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT;
493		nextPtr  = &physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.pNext;
494	}
495
496	vk::VkPhysicalDeviceMultiviewFeatures physicalDeviceMultiviewFeatures;
497	deMemset(&physicalDeviceMultiviewFeatures, 0, sizeof(physicalDeviceMultiviewFeatures));
498
499	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_multiview") )
500	{
501		physicalDeviceMultiviewFeatures.sType = getStructureType<VkPhysicalDeviceMultiviewFeatures>();
502		*nextPtr = &physicalDeviceMultiviewFeatures;
503		nextPtr  = &physicalDeviceMultiviewFeatures.pNext;
504	}
505
506	vk::VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT physicalDeviceMutableDescriptorTypeFeaturesEXT;
507	deMemset(&physicalDeviceMutableDescriptorTypeFeaturesEXT, 0, sizeof(physicalDeviceMutableDescriptorTypeFeaturesEXT));
508
509	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_VALVE_mutable_descriptor_type") || canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_mutable_descriptor_type") )
510	{
511		physicalDeviceMutableDescriptorTypeFeaturesEXT.sType = getStructureType<VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT>();
512		*nextPtr = &physicalDeviceMutableDescriptorTypeFeaturesEXT;
513		nextPtr  = &physicalDeviceMutableDescriptorTypeFeaturesEXT.pNext;
514	}
515
516	vk::VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE physicalDeviceMutableDescriptorTypeFeaturesVALVE;
517	deMemset(&physicalDeviceMutableDescriptorTypeFeaturesVALVE, 0, sizeof(physicalDeviceMutableDescriptorTypeFeaturesVALVE));
518
519	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_VALVE_mutable_descriptor_type") || canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_mutable_descriptor_type") )
520	{
521		physicalDeviceMutableDescriptorTypeFeaturesVALVE.sType = getStructureType<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE>();
522		*nextPtr = &physicalDeviceMutableDescriptorTypeFeaturesVALVE;
523		nextPtr  = &physicalDeviceMutableDescriptorTypeFeaturesVALVE.pNext;
524	}
525
526#if defined(CTS_USES_VULKAN)
527	vk::VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT physicalDeviceNonSeamlessCubeMapFeaturesEXT;
528	deMemset(&physicalDeviceNonSeamlessCubeMapFeaturesEXT, 0, sizeof(physicalDeviceNonSeamlessCubeMapFeaturesEXT));
529
530	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_non_seamless_cube_map") )
531	{
532		physicalDeviceNonSeamlessCubeMapFeaturesEXT.sType = getStructureType<VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT>();
533		*nextPtr = &physicalDeviceNonSeamlessCubeMapFeaturesEXT;
534		nextPtr  = &physicalDeviceNonSeamlessCubeMapFeaturesEXT.pNext;
535	}
536#endif // defined(CTS_USES_VULKAN)
537
538#if defined(CTS_USES_VULKAN)
539	vk::VkPhysicalDeviceOpacityMicromapFeaturesEXT physicalDeviceOpacityMicromapFeaturesEXT;
540	deMemset(&physicalDeviceOpacityMicromapFeaturesEXT, 0, sizeof(physicalDeviceOpacityMicromapFeaturesEXT));
541
542	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_opacity_micromap") )
543	{
544		physicalDeviceOpacityMicromapFeaturesEXT.sType = getStructureType<VkPhysicalDeviceOpacityMicromapFeaturesEXT>();
545		*nextPtr = &physicalDeviceOpacityMicromapFeaturesEXT;
546		nextPtr  = &physicalDeviceOpacityMicromapFeaturesEXT.pNext;
547	}
548#endif // defined(CTS_USES_VULKAN)
549
550#if defined(CTS_USES_VULKAN)
551	vk::VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT physicalDevicePageableDeviceLocalMemoryFeaturesEXT;
552	deMemset(&physicalDevicePageableDeviceLocalMemoryFeaturesEXT, 0, sizeof(physicalDevicePageableDeviceLocalMemoryFeaturesEXT));
553
554	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_pageable_device_local_memory") )
555	{
556		physicalDevicePageableDeviceLocalMemoryFeaturesEXT.sType = getStructureType<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>();
557		*nextPtr = &physicalDevicePageableDeviceLocalMemoryFeaturesEXT;
558		nextPtr  = &physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pNext;
559	}
560#endif // defined(CTS_USES_VULKAN)
561
562	vk::VkPhysicalDevicePerformanceQueryFeaturesKHR physicalDevicePerformanceQueryFeaturesKHR;
563	deMemset(&physicalDevicePerformanceQueryFeaturesKHR, 0, sizeof(physicalDevicePerformanceQueryFeaturesKHR));
564
565	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_performance_query") )
566	{
567		physicalDevicePerformanceQueryFeaturesKHR.sType = getStructureType<VkPhysicalDevicePerformanceQueryFeaturesKHR>();
568		*nextPtr = &physicalDevicePerformanceQueryFeaturesKHR;
569		nextPtr  = &physicalDevicePerformanceQueryFeaturesKHR.pNext;
570	}
571
572	vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR physicalDevicePipelineExecutablePropertiesFeaturesKHR;
573	deMemset(&physicalDevicePipelineExecutablePropertiesFeaturesKHR, 0, sizeof(physicalDevicePipelineExecutablePropertiesFeaturesKHR));
574
575	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_pipeline_executable_properties") )
576	{
577		physicalDevicePipelineExecutablePropertiesFeaturesKHR.sType = getStructureType<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>();
578		*nextPtr = &physicalDevicePipelineExecutablePropertiesFeaturesKHR;
579		nextPtr  = &physicalDevicePipelineExecutablePropertiesFeaturesKHR.pNext;
580	}
581
582	vk::VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT physicalDevicePipelineLibraryGroupHandlesFeaturesEXT;
583	deMemset(&physicalDevicePipelineLibraryGroupHandlesFeaturesEXT, 0, sizeof(physicalDevicePipelineLibraryGroupHandlesFeaturesEXT));
584
585	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_pipeline_library_group_handles") )
586	{
587		physicalDevicePipelineLibraryGroupHandlesFeaturesEXT.sType = getStructureType<VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT>();
588		*nextPtr = &physicalDevicePipelineLibraryGroupHandlesFeaturesEXT;
589		nextPtr  = &physicalDevicePipelineLibraryGroupHandlesFeaturesEXT.pNext;
590	}
591
592	vk::VkPhysicalDevicePipelineProtectedAccessFeaturesEXT physicalDevicePipelineProtectedAccessFeaturesEXT;
593	deMemset(&physicalDevicePipelineProtectedAccessFeaturesEXT, 0, sizeof(physicalDevicePipelineProtectedAccessFeaturesEXT));
594
595	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_pipeline_protected_access") )
596	{
597		physicalDevicePipelineProtectedAccessFeaturesEXT.sType = getStructureType<VkPhysicalDevicePipelineProtectedAccessFeaturesEXT>();
598		*nextPtr = &physicalDevicePipelineProtectedAccessFeaturesEXT;
599		nextPtr  = &physicalDevicePipelineProtectedAccessFeaturesEXT.pNext;
600	}
601
602#if defined(CTS_USES_VULKAN)
603	vk::VkPhysicalDevicePresentIdFeaturesKHR physicalDevicePresentIdFeaturesKHR;
604	deMemset(&physicalDevicePresentIdFeaturesKHR, 0, sizeof(physicalDevicePresentIdFeaturesKHR));
605
606	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_present_id") )
607	{
608		physicalDevicePresentIdFeaturesKHR.sType = getStructureType<VkPhysicalDevicePresentIdFeaturesKHR>();
609		*nextPtr = &physicalDevicePresentIdFeaturesKHR;
610		nextPtr  = &physicalDevicePresentIdFeaturesKHR.pNext;
611	}
612#endif // defined(CTS_USES_VULKAN)
613
614#if defined(CTS_USES_VULKAN)
615	vk::VkPhysicalDevicePresentWaitFeaturesKHR physicalDevicePresentWaitFeaturesKHR;
616	deMemset(&physicalDevicePresentWaitFeaturesKHR, 0, sizeof(physicalDevicePresentWaitFeaturesKHR));
617
618	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_present_wait") )
619	{
620		physicalDevicePresentWaitFeaturesKHR.sType = getStructureType<VkPhysicalDevicePresentWaitFeaturesKHR>();
621		*nextPtr = &physicalDevicePresentWaitFeaturesKHR;
622		nextPtr  = &physicalDevicePresentWaitFeaturesKHR.pNext;
623	}
624#endif // defined(CTS_USES_VULKAN)
625
626#if defined(CTS_USES_VULKAN)
627	vk::VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT physicalDevicePrimitiveTopologyListRestartFeaturesEXT;
628	deMemset(&physicalDevicePrimitiveTopologyListRestartFeaturesEXT, 0, sizeof(physicalDevicePrimitiveTopologyListRestartFeaturesEXT));
629
630	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_primitive_topology_list_restart") )
631	{
632		physicalDevicePrimitiveTopologyListRestartFeaturesEXT.sType = getStructureType<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>();
633		*nextPtr = &physicalDevicePrimitiveTopologyListRestartFeaturesEXT;
634		nextPtr  = &physicalDevicePrimitiveTopologyListRestartFeaturesEXT.pNext;
635	}
636#endif // defined(CTS_USES_VULKAN)
637
638#if defined(CTS_USES_VULKAN)
639	vk::VkPhysicalDeviceProvokingVertexFeaturesEXT physicalDeviceProvokingVertexFeaturesEXT;
640	deMemset(&physicalDeviceProvokingVertexFeaturesEXT, 0, sizeof(physicalDeviceProvokingVertexFeaturesEXT));
641
642	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_provoking_vertex") )
643	{
644		physicalDeviceProvokingVertexFeaturesEXT.sType = getStructureType<VkPhysicalDeviceProvokingVertexFeaturesEXT>();
645		*nextPtr = &physicalDeviceProvokingVertexFeaturesEXT;
646		nextPtr  = &physicalDeviceProvokingVertexFeaturesEXT.pNext;
647	}
648#endif // defined(CTS_USES_VULKAN)
649
650	vk::VkPhysicalDeviceRayQueryFeaturesKHR physicalDeviceRayQueryFeaturesKHR;
651	deMemset(&physicalDeviceRayQueryFeaturesKHR, 0, sizeof(physicalDeviceRayQueryFeaturesKHR));
652
653	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_ray_query") )
654	{
655		physicalDeviceRayQueryFeaturesKHR.sType = getStructureType<VkPhysicalDeviceRayQueryFeaturesKHR>();
656		*nextPtr = &physicalDeviceRayQueryFeaturesKHR;
657		nextPtr  = &physicalDeviceRayQueryFeaturesKHR.pNext;
658	}
659
660	vk::VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR physicalDeviceRayTracingMaintenance1FeaturesKHR;
661	deMemset(&physicalDeviceRayTracingMaintenance1FeaturesKHR, 0, sizeof(physicalDeviceRayTracingMaintenance1FeaturesKHR));
662
663	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_ray_tracing_maintenance1") )
664	{
665		physicalDeviceRayTracingMaintenance1FeaturesKHR.sType = getStructureType<VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR>();
666		*nextPtr = &physicalDeviceRayTracingMaintenance1FeaturesKHR;
667		nextPtr  = &physicalDeviceRayTracingMaintenance1FeaturesKHR.pNext;
668	}
669
670	vk::VkPhysicalDeviceRayTracingPipelineFeaturesKHR physicalDeviceRayTracingPipelineFeaturesKHR;
671	deMemset(&physicalDeviceRayTracingPipelineFeaturesKHR, 0, sizeof(physicalDeviceRayTracingPipelineFeaturesKHR));
672
673	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_ray_tracing_pipeline") )
674	{
675		physicalDeviceRayTracingPipelineFeaturesKHR.sType = getStructureType<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>();
676		*nextPtr = &physicalDeviceRayTracingPipelineFeaturesKHR;
677		nextPtr  = &physicalDeviceRayTracingPipelineFeaturesKHR.pNext;
678	}
679
680	vk::VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR physicalDeviceRayTracingPositionFetchFeaturesKHR;
681	deMemset(&physicalDeviceRayTracingPositionFetchFeaturesKHR, 0, sizeof(physicalDeviceRayTracingPositionFetchFeaturesKHR));
682
683	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_ray_tracing_position_fetch") )
684	{
685		physicalDeviceRayTracingPositionFetchFeaturesKHR.sType = getStructureType<VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR>();
686		*nextPtr = &physicalDeviceRayTracingPositionFetchFeaturesKHR;
687		nextPtr  = &physicalDeviceRayTracingPositionFetchFeaturesKHR.pNext;
688	}
689
690#if defined(CTS_USES_VULKAN)
691	vk::VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV physicalDeviceRepresentativeFragmentTestFeaturesNV;
692	deMemset(&physicalDeviceRepresentativeFragmentTestFeaturesNV, 0, sizeof(physicalDeviceRepresentativeFragmentTestFeaturesNV));
693
694	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_NV_representative_fragment_test") )
695	{
696		physicalDeviceRepresentativeFragmentTestFeaturesNV.sType = getStructureType<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>();
697		*nextPtr = &physicalDeviceRepresentativeFragmentTestFeaturesNV;
698		nextPtr  = &physicalDeviceRepresentativeFragmentTestFeaturesNV.pNext;
699	}
700#endif // defined(CTS_USES_VULKAN)
701
702	vk::VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR physicalDeviceSamplerYcbcrConversionFeaturesKHR;
703	deMemset(&physicalDeviceSamplerYcbcrConversionFeaturesKHR, 0, sizeof(physicalDeviceSamplerYcbcrConversionFeaturesKHR));
704
705	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_sampler_ycbcr_conversion") )
706	{
707		physicalDeviceSamplerYcbcrConversionFeaturesKHR.sType = getStructureType<VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR>();
708		*nextPtr = &physicalDeviceSamplerYcbcrConversionFeaturesKHR;
709		nextPtr  = &physicalDeviceSamplerYcbcrConversionFeaturesKHR.pNext;
710	}
711
712	vk::VkPhysicalDeviceScalarBlockLayoutFeatures physicalDeviceScalarBlockLayoutFeatures;
713	deMemset(&physicalDeviceScalarBlockLayoutFeatures, 0, sizeof(physicalDeviceScalarBlockLayoutFeatures));
714
715	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_scalar_block_layout") )
716	{
717		physicalDeviceScalarBlockLayoutFeatures.sType = getStructureType<VkPhysicalDeviceScalarBlockLayoutFeatures>();
718		*nextPtr = &physicalDeviceScalarBlockLayoutFeatures;
719		nextPtr  = &physicalDeviceScalarBlockLayoutFeatures.pNext;
720	}
721
722	vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures physicalDeviceSeparateDepthStencilLayoutsFeatures;
723	deMemset(&physicalDeviceSeparateDepthStencilLayoutsFeatures, 0, sizeof(physicalDeviceSeparateDepthStencilLayoutsFeatures));
724
725	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_separate_depth_stencil_layouts") )
726	{
727		physicalDeviceSeparateDepthStencilLayoutsFeatures.sType = getStructureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>();
728		*nextPtr = &physicalDeviceSeparateDepthStencilLayoutsFeatures;
729		nextPtr  = &physicalDeviceSeparateDepthStencilLayoutsFeatures.pNext;
730	}
731
732#if defined(CTS_USES_VULKAN)
733	vk::VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT physicalDeviceShaderAtomicFloat2FeaturesEXT;
734	deMemset(&physicalDeviceShaderAtomicFloat2FeaturesEXT, 0, sizeof(physicalDeviceShaderAtomicFloat2FeaturesEXT));
735
736	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_atomic_float2") )
737	{
738		physicalDeviceShaderAtomicFloat2FeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT>();
739		*nextPtr = &physicalDeviceShaderAtomicFloat2FeaturesEXT;
740		nextPtr  = &physicalDeviceShaderAtomicFloat2FeaturesEXT.pNext;
741	}
742#endif // defined(CTS_USES_VULKAN)
743
744	vk::VkPhysicalDeviceShaderAtomicFloatFeaturesEXT physicalDeviceShaderAtomicFloatFeaturesEXT;
745	deMemset(&physicalDeviceShaderAtomicFloatFeaturesEXT, 0, sizeof(physicalDeviceShaderAtomicFloatFeaturesEXT));
746
747	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_atomic_float") )
748	{
749		physicalDeviceShaderAtomicFloatFeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>();
750		*nextPtr = &physicalDeviceShaderAtomicFloatFeaturesEXT;
751		nextPtr  = &physicalDeviceShaderAtomicFloatFeaturesEXT.pNext;
752	}
753
754	vk::VkPhysicalDeviceShaderAtomicInt64Features physicalDeviceShaderAtomicInt64Features;
755	deMemset(&physicalDeviceShaderAtomicInt64Features, 0, sizeof(physicalDeviceShaderAtomicInt64Features));
756
757	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_atomic_int64") )
758	{
759		physicalDeviceShaderAtomicInt64Features.sType = getStructureType<VkPhysicalDeviceShaderAtomicInt64Features>();
760		*nextPtr = &physicalDeviceShaderAtomicInt64Features;
761		nextPtr  = &physicalDeviceShaderAtomicInt64Features.pNext;
762	}
763
764	vk::VkPhysicalDeviceShaderClockFeaturesKHR physicalDeviceShaderClockFeaturesKHR;
765	deMemset(&physicalDeviceShaderClockFeaturesKHR, 0, sizeof(physicalDeviceShaderClockFeaturesKHR));
766
767	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_clock") )
768	{
769		physicalDeviceShaderClockFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderClockFeaturesKHR>();
770		*nextPtr = &physicalDeviceShaderClockFeaturesKHR;
771		nextPtr  = &physicalDeviceShaderClockFeaturesKHR.pNext;
772	}
773
774	vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
775	deMemset(&physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT, 0, sizeof(physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT));
776
777	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_demote_to_helper_invocation") )
778	{
779		physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>();
780		*nextPtr = &physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
781		nextPtr  = &physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.pNext;
782	}
783
784	vk::VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD;
785	deMemset(&physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD, 0, sizeof(physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD));
786
787	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_AMD_shader_early_and_late_fragment_tests") )
788	{
789		physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.sType = getStructureType<VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD>();
790		*nextPtr = &physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD;
791		nextPtr  = &physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.pNext;
792	}
793
794#if defined(CTS_USES_VULKAN)
795	vk::VkPhysicalDeviceShaderExpectAssumeFeaturesKHR physicalDeviceShaderExpectAssumeFeaturesKHR;
796	deMemset(&physicalDeviceShaderExpectAssumeFeaturesKHR, 0, sizeof(physicalDeviceShaderExpectAssumeFeaturesKHR));
797
798	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_expect_assume") )
799	{
800		physicalDeviceShaderExpectAssumeFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderExpectAssumeFeaturesKHR>();
801		*nextPtr = &physicalDeviceShaderExpectAssumeFeaturesKHR;
802		nextPtr  = &physicalDeviceShaderExpectAssumeFeaturesKHR.pNext;
803	}
804#endif // defined(CTS_USES_VULKAN)
805
806	vk::VkPhysicalDeviceShaderFloat16Int8Features physicalDeviceShaderFloat16Int8Features;
807	deMemset(&physicalDeviceShaderFloat16Int8Features, 0, sizeof(physicalDeviceShaderFloat16Int8Features));
808
809	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_float16_int8") )
810	{
811		physicalDeviceShaderFloat16Int8Features.sType = getStructureType<VkPhysicalDeviceShaderFloat16Int8Features>();
812		*nextPtr = &physicalDeviceShaderFloat16Int8Features;
813		nextPtr  = &physicalDeviceShaderFloat16Int8Features.pNext;
814	}
815
816	vk::VkPhysicalDeviceShaderFloatControls2FeaturesKHR physicalDeviceShaderFloatControls2FeaturesKHR;
817	deMemset(&physicalDeviceShaderFloatControls2FeaturesKHR, 0, sizeof(physicalDeviceShaderFloatControls2FeaturesKHR));
818
819	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_float_controls2") )
820	{
821		physicalDeviceShaderFloatControls2FeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderFloatControls2FeaturesKHR>();
822		*nextPtr = &physicalDeviceShaderFloatControls2FeaturesKHR;
823		nextPtr  = &physicalDeviceShaderFloatControls2FeaturesKHR.pNext;
824	}
825
826	vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT physicalDeviceShaderImageAtomicInt64FeaturesEXT;
827	deMemset(&physicalDeviceShaderImageAtomicInt64FeaturesEXT, 0, sizeof(physicalDeviceShaderImageAtomicInt64FeaturesEXT));
828
829	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_image_atomic_int64") )
830	{
831		physicalDeviceShaderImageAtomicInt64FeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>();
832		*nextPtr = &physicalDeviceShaderImageAtomicInt64FeaturesEXT;
833		nextPtr  = &physicalDeviceShaderImageAtomicInt64FeaturesEXT.pNext;
834	}
835
836#if defined(CTS_USES_VULKAN)
837	vk::VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR physicalDeviceShaderIntegerDotProductFeaturesKHR;
838	deMemset(&physicalDeviceShaderIntegerDotProductFeaturesKHR, 0, sizeof(physicalDeviceShaderIntegerDotProductFeaturesKHR));
839
840	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_integer_dot_product") )
841	{
842		physicalDeviceShaderIntegerDotProductFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR>();
843		*nextPtr = &physicalDeviceShaderIntegerDotProductFeaturesKHR;
844		nextPtr  = &physicalDeviceShaderIntegerDotProductFeaturesKHR.pNext;
845	}
846#endif // defined(CTS_USES_VULKAN)
847
848	vk::VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR physicalDeviceShaderMaximalReconvergenceFeaturesKHR;
849	deMemset(&physicalDeviceShaderMaximalReconvergenceFeaturesKHR, 0, sizeof(physicalDeviceShaderMaximalReconvergenceFeaturesKHR));
850
851	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_maximal_reconvergence") )
852	{
853		physicalDeviceShaderMaximalReconvergenceFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR>();
854		*nextPtr = &physicalDeviceShaderMaximalReconvergenceFeaturesKHR;
855		nextPtr  = &physicalDeviceShaderMaximalReconvergenceFeaturesKHR.pNext;
856	}
857
858	vk::VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT physicalDeviceShaderModuleIdentifierFeaturesEXT;
859	deMemset(&physicalDeviceShaderModuleIdentifierFeaturesEXT, 0, sizeof(physicalDeviceShaderModuleIdentifierFeaturesEXT));
860
861	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_module_identifier") )
862	{
863		physicalDeviceShaderModuleIdentifierFeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT>();
864		*nextPtr = &physicalDeviceShaderModuleIdentifierFeaturesEXT;
865		nextPtr  = &physicalDeviceShaderModuleIdentifierFeaturesEXT.pNext;
866	}
867
868	vk::VkPhysicalDeviceShaderObjectFeaturesEXT physicalDeviceShaderObjectFeaturesEXT;
869	deMemset(&physicalDeviceShaderObjectFeaturesEXT, 0, sizeof(physicalDeviceShaderObjectFeaturesEXT));
870
871	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_object") )
872	{
873		physicalDeviceShaderObjectFeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderObjectFeaturesEXT>();
874		*nextPtr = &physicalDeviceShaderObjectFeaturesEXT;
875		nextPtr  = &physicalDeviceShaderObjectFeaturesEXT.pNext;
876	}
877
878	vk::VkPhysicalDeviceShaderQuadControlFeaturesKHR physicalDeviceShaderQuadControlFeaturesKHR;
879	deMemset(&physicalDeviceShaderQuadControlFeaturesKHR, 0, sizeof(physicalDeviceShaderQuadControlFeaturesKHR));
880
881	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_quad_control") )
882	{
883		physicalDeviceShaderQuadControlFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderQuadControlFeaturesKHR>();
884		*nextPtr = &physicalDeviceShaderQuadControlFeaturesKHR;
885		nextPtr  = &physicalDeviceShaderQuadControlFeaturesKHR.pNext;
886	}
887
888	vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures;
889	deMemset(&physicalDeviceShaderSubgroupExtendedTypesFeatures, 0, sizeof(physicalDeviceShaderSubgroupExtendedTypesFeatures));
890
891	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_subgroup_extended_types") )
892	{
893		physicalDeviceShaderSubgroupExtendedTypesFeatures.sType = getStructureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>();
894		*nextPtr = &physicalDeviceShaderSubgroupExtendedTypesFeatures;
895		nextPtr  = &physicalDeviceShaderSubgroupExtendedTypesFeatures.pNext;
896	}
897
898	vk::VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR physicalDeviceShaderSubgroupRotateFeaturesKHR;
899	deMemset(&physicalDeviceShaderSubgroupRotateFeaturesKHR, 0, sizeof(physicalDeviceShaderSubgroupRotateFeaturesKHR));
900
901	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_subgroup_rotate") )
902	{
903		physicalDeviceShaderSubgroupRotateFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR>();
904		*nextPtr = &physicalDeviceShaderSubgroupRotateFeaturesKHR;
905		nextPtr  = &physicalDeviceShaderSubgroupRotateFeaturesKHR.pNext;
906	}
907
908	vk::VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR;
909	deMemset(&physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR, 0, sizeof(physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR));
910
911	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_subgroup_uniform_control_flow") )
912	{
913		physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>();
914		*nextPtr = &physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR;
915		nextPtr  = &physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.pNext;
916	}
917
918	vk::VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR physicalDeviceShaderTerminateInvocationFeaturesKHR;
919	deMemset(&physicalDeviceShaderTerminateInvocationFeaturesKHR, 0, sizeof(physicalDeviceShaderTerminateInvocationFeaturesKHR));
920
921	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_terminate_invocation") )
922	{
923		physicalDeviceShaderTerminateInvocationFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>();
924		*nextPtr = &physicalDeviceShaderTerminateInvocationFeaturesKHR;
925		nextPtr  = &physicalDeviceShaderTerminateInvocationFeaturesKHR.pNext;
926	}
927
928#if defined(CTS_USES_VULKAN)
929	vk::VkPhysicalDeviceShadingRateImageFeaturesNV physicalDeviceShadingRateImageFeaturesNV;
930	deMemset(&physicalDeviceShadingRateImageFeaturesNV, 0, sizeof(physicalDeviceShadingRateImageFeaturesNV));
931
932	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_NV_shading_rate_image") )
933	{
934		physicalDeviceShadingRateImageFeaturesNV.sType = getStructureType<VkPhysicalDeviceShadingRateImageFeaturesNV>();
935		*nextPtr = &physicalDeviceShadingRateImageFeaturesNV;
936		nextPtr  = &physicalDeviceShadingRateImageFeaturesNV.pNext;
937	}
938#endif // defined(CTS_USES_VULKAN)
939
940	vk::VkPhysicalDeviceSubgroupSizeControlFeaturesEXT physicalDeviceSubgroupSizeControlFeaturesEXT;
941	deMemset(&physicalDeviceSubgroupSizeControlFeaturesEXT, 0, sizeof(physicalDeviceSubgroupSizeControlFeaturesEXT));
942
943	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_subgroup_size_control") )
944	{
945		physicalDeviceSubgroupSizeControlFeaturesEXT.sType = getStructureType<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>();
946		*nextPtr = &physicalDeviceSubgroupSizeControlFeaturesEXT;
947		nextPtr  = &physicalDeviceSubgroupSizeControlFeaturesEXT.pNext;
948	}
949
950	vk::VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT physicalDeviceSubpassMergeFeedbackFeaturesEXT;
951	deMemset(&physicalDeviceSubpassMergeFeedbackFeaturesEXT, 0, sizeof(physicalDeviceSubpassMergeFeedbackFeaturesEXT));
952
953	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_subpass_merge_feedback") )
954	{
955		physicalDeviceSubpassMergeFeedbackFeaturesEXT.sType = getStructureType<VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT>();
956		*nextPtr = &physicalDeviceSubpassMergeFeedbackFeaturesEXT;
957		nextPtr  = &physicalDeviceSubpassMergeFeedbackFeaturesEXT.pNext;
958	}
959
960	vk::VkPhysicalDeviceSynchronization2FeaturesKHR physicalDeviceSynchronization2FeaturesKHR;
961	deMemset(&physicalDeviceSynchronization2FeaturesKHR, 0, sizeof(physicalDeviceSynchronization2FeaturesKHR));
962
963	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_synchronization2") )
964	{
965		physicalDeviceSynchronization2FeaturesKHR.sType = getStructureType<VkPhysicalDeviceSynchronization2FeaturesKHR>();
966		*nextPtr = &physicalDeviceSynchronization2FeaturesKHR;
967		nextPtr  = &physicalDeviceSynchronization2FeaturesKHR.pNext;
968	}
969
970	vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT physicalDeviceTexelBufferAlignmentFeaturesEXT;
971	deMemset(&physicalDeviceTexelBufferAlignmentFeaturesEXT, 0, sizeof(physicalDeviceTexelBufferAlignmentFeaturesEXT));
972
973	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_texel_buffer_alignment") )
974	{
975		physicalDeviceTexelBufferAlignmentFeaturesEXT.sType = getStructureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>();
976		*nextPtr = &physicalDeviceTexelBufferAlignmentFeaturesEXT;
977		nextPtr  = &physicalDeviceTexelBufferAlignmentFeaturesEXT.pNext;
978	}
979
980	vk::VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT physicalDeviceTextureCompressionASTCHDRFeaturesEXT;
981	deMemset(&physicalDeviceTextureCompressionASTCHDRFeaturesEXT, 0, sizeof(physicalDeviceTextureCompressionASTCHDRFeaturesEXT));
982
983	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_texture_compression_astc_hdr") )
984	{
985		physicalDeviceTextureCompressionASTCHDRFeaturesEXT.sType = getStructureType<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>();
986		*nextPtr = &physicalDeviceTextureCompressionASTCHDRFeaturesEXT;
987		nextPtr  = &physicalDeviceTextureCompressionASTCHDRFeaturesEXT.pNext;
988	}
989
990#if defined(CTS_USES_VULKAN)
991	vk::VkPhysicalDeviceTimelineSemaphoreFeatures physicalDeviceTimelineSemaphoreFeatures;
992	deMemset(&physicalDeviceTimelineSemaphoreFeatures, 0, sizeof(physicalDeviceTimelineSemaphoreFeatures));
993
994	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_timeline_semaphore") )
995	{
996		physicalDeviceTimelineSemaphoreFeatures.sType = getStructureType<VkPhysicalDeviceTimelineSemaphoreFeatures>();
997		*nextPtr = &physicalDeviceTimelineSemaphoreFeatures;
998		nextPtr  = &physicalDeviceTimelineSemaphoreFeatures.pNext;
999	}
1000#endif // defined(CTS_USES_VULKAN)
1001
1002#if defined(CTS_USES_VULKAN)
1003	vk::VkPhysicalDeviceTransformFeedbackFeaturesEXT physicalDeviceTransformFeedbackFeaturesEXT;
1004	deMemset(&physicalDeviceTransformFeedbackFeaturesEXT, 0, sizeof(physicalDeviceTransformFeedbackFeaturesEXT));
1005
1006	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_transform_feedback") )
1007	{
1008		physicalDeviceTransformFeedbackFeaturesEXT.sType = getStructureType<VkPhysicalDeviceTransformFeedbackFeaturesEXT>();
1009		*nextPtr = &physicalDeviceTransformFeedbackFeaturesEXT;
1010		nextPtr  = &physicalDeviceTransformFeedbackFeaturesEXT.pNext;
1011	}
1012#endif // defined(CTS_USES_VULKAN)
1013
1014	vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures physicalDeviceUniformBufferStandardLayoutFeatures;
1015	deMemset(&physicalDeviceUniformBufferStandardLayoutFeatures, 0, sizeof(physicalDeviceUniformBufferStandardLayoutFeatures));
1016
1017	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_uniform_buffer_standard_layout") )
1018	{
1019		physicalDeviceUniformBufferStandardLayoutFeatures.sType = getStructureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>();
1020		*nextPtr = &physicalDeviceUniformBufferStandardLayoutFeatures;
1021		nextPtr  = &physicalDeviceUniformBufferStandardLayoutFeatures.pNext;
1022	}
1023
1024	vk::VkPhysicalDeviceVariablePointersFeatures physicalDeviceVariablePointersFeatures;
1025	deMemset(&physicalDeviceVariablePointersFeatures, 0, sizeof(physicalDeviceVariablePointersFeatures));
1026
1027	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_variable_pointers") )
1028	{
1029		physicalDeviceVariablePointersFeatures.sType = getStructureType<VkPhysicalDeviceVariablePointersFeatures>();
1030		*nextPtr = &physicalDeviceVariablePointersFeatures;
1031		nextPtr  = &physicalDeviceVariablePointersFeatures.pNext;
1032	}
1033
1034	vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR physicalDeviceVertexAttributeDivisorFeaturesKHR;
1035	deMemset(&physicalDeviceVertexAttributeDivisorFeaturesKHR, 0, sizeof(physicalDeviceVertexAttributeDivisorFeaturesKHR));
1036
1037	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_vertex_attribute_divisor") || canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_vertex_attribute_divisor") )
1038	{
1039		physicalDeviceVertexAttributeDivisorFeaturesKHR.sType = getStructureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR>();
1040		*nextPtr = &physicalDeviceVertexAttributeDivisorFeaturesKHR;
1041		nextPtr  = &physicalDeviceVertexAttributeDivisorFeaturesKHR.pNext;
1042	}
1043
1044	vk::VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT physicalDeviceVertexInputDynamicStateFeaturesEXT;
1045	deMemset(&physicalDeviceVertexInputDynamicStateFeaturesEXT, 0, sizeof(physicalDeviceVertexInputDynamicStateFeaturesEXT));
1046
1047	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_vertex_input_dynamic_state") )
1048	{
1049		physicalDeviceVertexInputDynamicStateFeaturesEXT.sType = getStructureType<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>();
1050		*nextPtr = &physicalDeviceVertexInputDynamicStateFeaturesEXT;
1051		nextPtr  = &physicalDeviceVertexInputDynamicStateFeaturesEXT.pNext;
1052	}
1053
1054#if defined(CTS_USES_VULKAN)
1055	vk::VkPhysicalDeviceVulkan11Features physicalDeviceVulkan11Features;
1056	deMemset(&physicalDeviceVulkan11Features, 0, sizeof(physicalDeviceVulkan11Features));
1057
1058	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
1059	{
1060		physicalDeviceVulkan11Features.sType = getStructureType<VkPhysicalDeviceVulkan11Features>();
1061		*nextPtr = &physicalDeviceVulkan11Features;
1062		nextPtr  = &physicalDeviceVulkan11Features.pNext;
1063	}
1064#endif // defined(CTS_USES_VULKAN)
1065
1066	vk::VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features;
1067	deMemset(&physicalDeviceVulkan12Features, 0, sizeof(physicalDeviceVulkan12Features));
1068
1069	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1070	{
1071		physicalDeviceVulkan12Features.sType = getStructureType<VkPhysicalDeviceVulkan12Features>();
1072		*nextPtr = &physicalDeviceVulkan12Features;
1073		nextPtr  = &physicalDeviceVulkan12Features.pNext;
1074	}
1075
1076#if defined(CTS_USES_VULKAN)
1077	vk::VkPhysicalDeviceVulkan13Features physicalDeviceVulkan13Features;
1078	deMemset(&physicalDeviceVulkan13Features, 0, sizeof(physicalDeviceVulkan13Features));
1079
1080	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1081	{
1082		physicalDeviceVulkan13Features.sType = getStructureType<VkPhysicalDeviceVulkan13Features>();
1083		*nextPtr = &physicalDeviceVulkan13Features;
1084		nextPtr  = &physicalDeviceVulkan13Features.pNext;
1085	}
1086#endif // defined(CTS_USES_VULKAN)
1087
1088	vk::VkPhysicalDeviceVulkanMemoryModelFeatures physicalDeviceVulkanMemoryModelFeatures;
1089	deMemset(&physicalDeviceVulkanMemoryModelFeatures, 0, sizeof(physicalDeviceVulkanMemoryModelFeatures));
1090
1091	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_vulkan_memory_model") )
1092	{
1093		physicalDeviceVulkanMemoryModelFeatures.sType = getStructureType<VkPhysicalDeviceVulkanMemoryModelFeatures>();
1094		*nextPtr = &physicalDeviceVulkanMemoryModelFeatures;
1095		nextPtr  = &physicalDeviceVulkanMemoryModelFeatures.pNext;
1096	}
1097
1098	vk::VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR;
1099	deMemset(&physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, 0, sizeof(physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR));
1100
1101	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_workgroup_memory_explicit_layout") )
1102	{
1103		physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.sType = getStructureType<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>();
1104		*nextPtr = &physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR;
1105		nextPtr  = &physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.pNext;
1106	}
1107
1108	vk::VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT physicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
1109	deMemset(&physicalDeviceYcbcr2Plane444FormatsFeaturesEXT, 0, sizeof(physicalDeviceYcbcr2Plane444FormatsFeaturesEXT));
1110
1111	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_ycbcr_2plane_444_formats") )
1112	{
1113		physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.sType = getStructureType<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>();
1114		*nextPtr = &physicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
1115		nextPtr  = &physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.pNext;
1116	}
1117
1118	vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT physicalDeviceYcbcrImageArraysFeaturesEXT;
1119	deMemset(&physicalDeviceYcbcrImageArraysFeaturesEXT, 0, sizeof(physicalDeviceYcbcrImageArraysFeaturesEXT));
1120
1121	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_ycbcr_image_arrays") )
1122	{
1123		physicalDeviceYcbcrImageArraysFeaturesEXT.sType = getStructureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>();
1124		*nextPtr = &physicalDeviceYcbcrImageArraysFeaturesEXT;
1125		nextPtr  = &physicalDeviceYcbcrImageArraysFeaturesEXT.pNext;
1126	}
1127
1128	vk::VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR physicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR;
1129	deMemset(&physicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR, 0, sizeof(physicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR));
1130
1131	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_zero_initialize_workgroup_memory") )
1132	{
1133		physicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR.sType = getStructureType<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR>();
1134		*nextPtr = &physicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR;
1135		nextPtr  = &physicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR.pNext;
1136	}
1137
1138	context.getInstanceInterface().getPhysicalDeviceFeatures2(context.getPhysicalDevice(), &coreFeatures);
1139	bool result = true;
1140
1141	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_AMD_shader_early_and_late_fragment_tests")) )
1142	{
1143		if ( physicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.shaderEarlyAndLateFragmentTests == VK_FALSE )
1144		{
1145			log << tcu::TestLog::Message << "Mandatory feature shaderEarlyAndLateFragmentTests not supported" << tcu::TestLog::EndMessage;
1146			result = false;
1147		}
1148	}
1149
1150	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_ANDROID_external_format_resolve")) )
1151	{
1152		if ( physicalDeviceExternalFormatResolveFeaturesANDROID.externalFormatResolve == VK_FALSE )
1153		{
1154			log << tcu::TestLog::Message << "Mandatory feature externalFormatResolve not supported" << tcu::TestLog::EndMessage;
1155			result = false;
1156		}
1157	}
1158
1159	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_4444_formats")) )
1160	{
1161		if ( physicalDevice4444FormatsFeaturesEXT.formatA4R4G4B4 == VK_FALSE )
1162		{
1163			log << tcu::TestLog::Message << "Mandatory feature formatA4R4G4B4 not supported" << tcu::TestLog::EndMessage;
1164			result = false;
1165		}
1166	}
1167
1168#if defined(CTS_USES_VULKAN)
1169	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_attachment_feedback_loop_dynamic_state")) )
1170	{
1171		if ( physicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.attachmentFeedbackLoopDynamicState == VK_FALSE )
1172		{
1173			log << tcu::TestLog::Message << "Mandatory feature attachmentFeedbackLoopDynamicState not supported" << tcu::TestLog::EndMessage;
1174			result = false;
1175		}
1176	}
1177#endif // defined(CTS_USES_VULKAN)
1178
1179#if defined(CTS_USES_VULKAN)
1180	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_attachment_feedback_loop_layout")) )
1181	{
1182		if ( physicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.attachmentFeedbackLoopLayout == VK_FALSE )
1183		{
1184			log << tcu::TestLog::Message << "Mandatory feature attachmentFeedbackLoopLayout not supported" << tcu::TestLog::EndMessage;
1185			result = false;
1186		}
1187	}
1188#endif // defined(CTS_USES_VULKAN)
1189
1190#if defined(CTS_USES_VULKAN)
1191	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_border_color_swizzle")) )
1192	{
1193		if ( physicalDeviceBorderColorSwizzleFeaturesEXT.borderColorSwizzle == VK_FALSE )
1194		{
1195			log << tcu::TestLog::Message << "Mandatory feature borderColorSwizzle not supported" << tcu::TestLog::EndMessage;
1196			result = false;
1197		}
1198	}
1199#endif // defined(CTS_USES_VULKAN)
1200
1201	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_color_write_enable")) )
1202	{
1203		if ( physicalDeviceColorWriteEnableFeaturesEXT.colorWriteEnable == VK_FALSE )
1204		{
1205			log << tcu::TestLog::Message << "Mandatory feature colorWriteEnable not supported" << tcu::TestLog::EndMessage;
1206			result = false;
1207		}
1208	}
1209
1210	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_conditional_rendering")) )
1211	{
1212		if ( physicalDeviceConditionalRenderingFeaturesEXT.conditionalRendering == VK_FALSE )
1213		{
1214			log << tcu::TestLog::Message << "Mandatory feature conditionalRendering not supported" << tcu::TestLog::EndMessage;
1215			result = false;
1216		}
1217	}
1218
1219#if defined(CTS_USES_VULKAN)
1220	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_depth_bias_control")) )
1221	{
1222		if ( physicalDeviceDepthBiasControlFeaturesEXT.depthBiasControl == VK_FALSE )
1223		{
1224			log << tcu::TestLog::Message << "Mandatory feature depthBiasControl not supported" << tcu::TestLog::EndMessage;
1225			result = false;
1226		}
1227	}
1228#endif // defined(CTS_USES_VULKAN)
1229
1230	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_depth_clamp_zero_one")) )
1231	{
1232		if ( physicalDeviceDepthClampZeroOneFeaturesEXT.depthClampZeroOne == VK_FALSE )
1233		{
1234			log << tcu::TestLog::Message << "Mandatory feature depthClampZeroOne not supported" << tcu::TestLog::EndMessage;
1235			result = false;
1236		}
1237	}
1238
1239	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_depth_clip_control")) )
1240	{
1241		if ( physicalDeviceDepthClipControlFeaturesEXT.depthClipControl == VK_FALSE )
1242		{
1243			log << tcu::TestLog::Message << "Mandatory feature depthClipControl not supported" << tcu::TestLog::EndMessage;
1244			result = false;
1245		}
1246	}
1247
1248	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_depth_clip_enable")) )
1249	{
1250		if ( physicalDeviceDepthClipEnableFeaturesEXT.depthClipEnable == VK_FALSE )
1251		{
1252			log << tcu::TestLog::Message << "Mandatory feature depthClipEnable not supported" << tcu::TestLog::EndMessage;
1253			result = false;
1254		}
1255	}
1256
1257	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_buffer")) )
1258	{
1259		if ( physicalDeviceDescriptorBufferFeaturesEXT.descriptorBuffer == VK_FALSE )
1260		{
1261			log << tcu::TestLog::Message << "Mandatory feature descriptorBuffer not supported" << tcu::TestLog::EndMessage;
1262			result = false;
1263		}
1264	}
1265
1266	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1267	{
1268		if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
1269		{
1270			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1271			result = false;
1272		}
1273	}
1274
1275	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1276	{
1277		if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
1278		{
1279			log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1280			result = false;
1281		}
1282	}
1283
1284	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1285	{
1286		if ( physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
1287		{
1288			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1289			result = false;
1290		}
1291	}
1292
1293	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1294	{
1295		if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
1296		{
1297			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1298			result = false;
1299		}
1300	}
1301
1302	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1303	{
1304		if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
1305		{
1306			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1307			result = false;
1308		}
1309	}
1310
1311	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1312	{
1313		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
1314		{
1315			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1316			result = false;
1317		}
1318	}
1319
1320	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1321	{
1322		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
1323		{
1324			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1325			result = false;
1326		}
1327	}
1328
1329	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1330	{
1331		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
1332		{
1333			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1334			result = false;
1335		}
1336	}
1337
1338	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1339	{
1340		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
1341		{
1342			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1343			result = false;
1344		}
1345	}
1346
1347	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1348	{
1349		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
1350		{
1351			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1352			result = false;
1353		}
1354	}
1355
1356	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1357	{
1358		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
1359		{
1360			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
1361			result = false;
1362		}
1363	}
1364
1365	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1366	{
1367		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound == VK_FALSE )
1368		{
1369			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
1370			result = false;
1371		}
1372	}
1373
1374	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1375	{
1376		if ( physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray == VK_FALSE )
1377		{
1378			log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
1379			result = false;
1380		}
1381	}
1382
1383	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1384	{
1385		if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
1386		{
1387			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1388			result = false;
1389		}
1390	}
1391
1392	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1393	{
1394		if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
1395		{
1396			log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1397			result = false;
1398		}
1399	}
1400
1401	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1402	{
1403		if ( physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
1404		{
1405			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1406			result = false;
1407		}
1408	}
1409
1410	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1411	{
1412		if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
1413		{
1414			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1415			result = false;
1416		}
1417	}
1418
1419	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1420	{
1421		if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
1422		{
1423			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1424			result = false;
1425		}
1426	}
1427
1428	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1429	{
1430		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
1431		{
1432			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1433			result = false;
1434		}
1435	}
1436
1437	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1438	{
1439		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
1440		{
1441			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1442			result = false;
1443		}
1444	}
1445
1446	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1447	{
1448		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
1449		{
1450			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1451			result = false;
1452		}
1453	}
1454
1455	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1456	{
1457		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
1458		{
1459			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1460			result = false;
1461		}
1462	}
1463
1464	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1465	{
1466		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
1467		{
1468			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1469			result = false;
1470		}
1471	}
1472
1473	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1474	{
1475		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
1476		{
1477			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
1478			result = false;
1479		}
1480	}
1481
1482	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1483	{
1484		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound == VK_FALSE )
1485		{
1486			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
1487			result = false;
1488		}
1489	}
1490
1491	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1492	{
1493		if ( physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray == VK_FALSE )
1494		{
1495			log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
1496			result = false;
1497		}
1498	}
1499
1500	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1501	{
1502		if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE )
1503		{
1504			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1505			result = false;
1506		}
1507	}
1508
1509	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1510	{
1511		if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE )
1512		{
1513			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1514			result = false;
1515		}
1516	}
1517
1518	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1519	{
1520		if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE )
1521		{
1522			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1523			result = false;
1524		}
1525	}
1526
1527	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1528	{
1529		if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE )
1530		{
1531			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1532			result = false;
1533		}
1534	}
1535
1536	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_device_address_binding_report")) )
1537	{
1538		if ( physicalDeviceAddressBindingReportFeaturesEXT.reportAddressBinding == VK_FALSE )
1539		{
1540			log << tcu::TestLog::Message << "Mandatory feature reportAddressBinding not supported" << tcu::TestLog::EndMessage;
1541			result = false;
1542		}
1543	}
1544
1545	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_device_fault")) )
1546	{
1547		if ( physicalDeviceFaultFeaturesEXT.deviceFault == VK_FALSE )
1548		{
1549			log << tcu::TestLog::Message << "Mandatory feature deviceFault not supported" << tcu::TestLog::EndMessage;
1550			result = false;
1551		}
1552	}
1553
1554	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_dynamic_rendering_unused_attachments")) )
1555	{
1556		if ( physicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.dynamicRenderingUnusedAttachments == VK_FALSE )
1557		{
1558			log << tcu::TestLog::Message << "Mandatory feature dynamicRenderingUnusedAttachments not supported" << tcu::TestLog::EndMessage;
1559			result = false;
1560		}
1561	}
1562
1563	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_extended_dynamic_state2")) )
1564	{
1565		if ( physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2 == VK_FALSE )
1566		{
1567			log << tcu::TestLog::Message << "Mandatory feature extendedDynamicState2 not supported" << tcu::TestLog::EndMessage;
1568			result = false;
1569		}
1570	}
1571
1572#if defined(CTS_USES_VULKAN)
1573	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageReductionMode )
1574	{
1575		if ( physicalDeviceCoverageReductionModeFeaturesNV.coverageReductionMode == VK_FALSE )
1576		{
1577			log << tcu::TestLog::Message << "Mandatory feature coverageReductionMode not supported" << tcu::TestLog::EndMessage;
1578			result = false;
1579		}
1580	}
1581#endif // defined(CTS_USES_VULKAN)
1582
1583#if defined(CTS_USES_VULKAN)
1584	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3DepthClipNegativeOneToOne )
1585	{
1586		if ( physicalDeviceDepthClipControlFeaturesEXT.depthClipControl == VK_FALSE )
1587		{
1588			log << tcu::TestLog::Message << "Mandatory feature depthClipControl not supported" << tcu::TestLog::EndMessage;
1589			result = false;
1590		}
1591	}
1592#endif // defined(CTS_USES_VULKAN)
1593
1594#if defined(CTS_USES_VULKAN)
1595	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3TessellationDomainOrigin )
1596	{
1597		if ( coreFeatures.features.tessellationShader == VK_FALSE )
1598		{
1599			log << tcu::TestLog::Message << "Mandatory feature tessellationShader not supported" << tcu::TestLog::EndMessage;
1600			result = false;
1601		}
1602	}
1603#endif // defined(CTS_USES_VULKAN)
1604
1605#if defined(CTS_USES_VULKAN)
1606	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3DepthClampEnable )
1607	{
1608		if ( coreFeatures.features.depthClamp == VK_FALSE )
1609		{
1610			log << tcu::TestLog::Message << "Mandatory feature depthClamp not supported" << tcu::TestLog::EndMessage;
1611			result = false;
1612		}
1613	}
1614#endif // defined(CTS_USES_VULKAN)
1615
1616#if defined(CTS_USES_VULKAN)
1617	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3PolygonMode )
1618	{
1619		if ( coreFeatures.features.fillModeNonSolid == VK_FALSE )
1620		{
1621			log << tcu::TestLog::Message << "Mandatory feature fillModeNonSolid not supported" << tcu::TestLog::EndMessage;
1622			result = false;
1623		}
1624	}
1625#endif // defined(CTS_USES_VULKAN)
1626
1627#if defined(CTS_USES_VULKAN)
1628	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3AlphaToOneEnable )
1629	{
1630		if ( coreFeatures.features.alphaToOne == VK_FALSE )
1631		{
1632			log << tcu::TestLog::Message << "Mandatory feature alphaToOne not supported" << tcu::TestLog::EndMessage;
1633			result = false;
1634		}
1635	}
1636#endif // defined(CTS_USES_VULKAN)
1637
1638#if defined(CTS_USES_VULKAN)
1639	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LogicOpEnable )
1640	{
1641		if ( coreFeatures.features.logicOp == VK_FALSE )
1642		{
1643			log << tcu::TestLog::Message << "Mandatory feature logicOp not supported" << tcu::TestLog::EndMessage;
1644			result = false;
1645		}
1646	}
1647#endif // defined(CTS_USES_VULKAN)
1648
1649#if defined(CTS_USES_VULKAN)
1650	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ProvokingVertexMode )
1651	{
1652		if ( physicalDeviceProvokingVertexFeaturesEXT.provokingVertexLast == VK_FALSE )
1653		{
1654			log << tcu::TestLog::Message << "Mandatory feature provokingVertexLast not supported" << tcu::TestLog::EndMessage;
1655			result = false;
1656		}
1657	}
1658#endif // defined(CTS_USES_VULKAN)
1659
1660#if defined(CTS_USES_VULKAN)
1661	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3RepresentativeFragmentTestEnable )
1662	{
1663		if ( physicalDeviceRepresentativeFragmentTestFeaturesNV.representativeFragmentTest == VK_FALSE )
1664		{
1665			log << tcu::TestLog::Message << "Mandatory feature representativeFragmentTest not supported" << tcu::TestLog::EndMessage;
1666			result = false;
1667		}
1668	}
1669#endif // defined(CTS_USES_VULKAN)
1670
1671#if defined(CTS_USES_VULKAN)
1672	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ShadingRateImageEnable )
1673	{
1674		if ( physicalDeviceShadingRateImageFeaturesNV.shadingRateImage == VK_FALSE )
1675		{
1676			log << tcu::TestLog::Message << "Mandatory feature shadingRateImage not supported" << tcu::TestLog::EndMessage;
1677			result = false;
1678		}
1679	}
1680#endif // defined(CTS_USES_VULKAN)
1681
1682#if defined(CTS_USES_VULKAN)
1683	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3RasterizationStream )
1684	{
1685		if ( physicalDeviceTransformFeedbackFeaturesEXT.geometryStreams == VK_FALSE )
1686		{
1687			log << tcu::TestLog::Message << "Mandatory feature geometryStreams not supported" << tcu::TestLog::EndMessage;
1688			result = false;
1689		}
1690	}
1691#endif // defined(CTS_USES_VULKAN)
1692
1693	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_fragment_density_map")) )
1694	{
1695		if ( physicalDeviceFragmentDensityMapFeaturesEXT.fragmentDensityMap == VK_FALSE )
1696		{
1697			log << tcu::TestLog::Message << "Mandatory feature fragmentDensityMap not supported" << tcu::TestLog::EndMessage;
1698			result = false;
1699		}
1700	}
1701
1702	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_fragment_shader_interlock")) )
1703	{
1704		if ( ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderSampleInterlock == VK_FALSE ) && ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderPixelInterlock == VK_FALSE ) && ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderShadingRateInterlock == VK_FALSE ) )
1705		{
1706			log << tcu::TestLog::Message << "Mandatory feature fragmentShaderSampleInterlock or fragmentShaderPixelInterlock or fragmentShaderShadingRateInterlock not supported" << tcu::TestLog::EndMessage;
1707			result = false;
1708		}
1709	}
1710
1711	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_frame_boundary")) )
1712	{
1713		if ( physicalDeviceFrameBoundaryFeaturesEXT.frameBoundary == VK_FALSE )
1714		{
1715			log << tcu::TestLog::Message << "Mandatory feature frameBoundary not supported" << tcu::TestLog::EndMessage;
1716			result = false;
1717		}
1718	}
1719
1720	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_host_query_reset")) )
1721	{
1722		if ( physicalDeviceHostQueryResetFeatures.hostQueryReset == VK_FALSE )
1723		{
1724			log << tcu::TestLog::Message << "Mandatory feature hostQueryReset not supported" << tcu::TestLog::EndMessage;
1725			result = false;
1726		}
1727	}
1728
1729#if defined(CTS_USES_VULKAN)
1730	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_image_2d_view_of_3d")) )
1731	{
1732		if ( physicalDeviceImage2DViewOf3DFeaturesEXT.image2DViewOf3D == VK_FALSE )
1733		{
1734			log << tcu::TestLog::Message << "Mandatory feature image2DViewOf3D not supported" << tcu::TestLog::EndMessage;
1735			result = false;
1736		}
1737	}
1738#endif // defined(CTS_USES_VULKAN)
1739
1740	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_image_compression_control")) )
1741	{
1742		if ( physicalDeviceImageCompressionControlFeaturesEXT.imageCompressionControl == VK_FALSE )
1743		{
1744			log << tcu::TestLog::Message << "Mandatory feature imageCompressionControl not supported" << tcu::TestLog::EndMessage;
1745			result = false;
1746		}
1747	}
1748
1749	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_image_compression_control")) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_image_compression_control_swapchain")) )
1750	{
1751		if ( physicalDeviceImageCompressionControlSwapchainFeaturesEXT.imageCompressionControlSwapchain == VK_FALSE )
1752		{
1753			log << tcu::TestLog::Message << "Mandatory feature imageCompressionControlSwapchain not supported" << tcu::TestLog::EndMessage;
1754			result = false;
1755		}
1756	}
1757
1758#if defined(CTS_USES_VULKAN)
1759	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_image_sliced_view_of_3d")) )
1760	{
1761		if ( physicalDeviceImageSlicedViewOf3DFeaturesEXT.imageSlicedViewOf3D == VK_FALSE )
1762		{
1763			log << tcu::TestLog::Message << "Mandatory feature imageSlicedViewOf3D not supported" << tcu::TestLog::EndMessage;
1764			result = false;
1765		}
1766	}
1767#endif // defined(CTS_USES_VULKAN)
1768
1769	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_inline_uniform_block")) )
1770	{
1771		if ( physicalDeviceInlineUniformBlockFeaturesEXT.inlineUniformBlock == VK_FALSE )
1772		{
1773			log << tcu::TestLog::Message << "Mandatory feature inlineUniformBlock not supported" << tcu::TestLog::EndMessage;
1774			result = false;
1775		}
1776	}
1777
1778	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_inline_uniform_block")) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
1779	{
1780		if ( physicalDeviceInlineUniformBlockFeaturesEXT.descriptorBindingInlineUniformBlockUpdateAfterBind == VK_FALSE )
1781		{
1782			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingInlineUniformBlockUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1783			result = false;
1784		}
1785	}
1786
1787	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_legacy_dithering")) )
1788	{
1789		if ( physicalDeviceLegacyDitheringFeaturesEXT.legacyDithering == VK_FALSE )
1790		{
1791			log << tcu::TestLog::Message << "Mandatory feature legacyDithering not supported" << tcu::TestLog::EndMessage;
1792			result = false;
1793		}
1794	}
1795
1796	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_memory_priority")) )
1797	{
1798		if ( physicalDeviceMemoryPriorityFeaturesEXT.memoryPriority == VK_FALSE )
1799		{
1800			log << tcu::TestLog::Message << "Mandatory feature memoryPriority not supported" << tcu::TestLog::EndMessage;
1801			result = false;
1802		}
1803	}
1804
1805#if defined(CTS_USES_VULKAN)
1806	if ( physicalDeviceMeshShaderFeaturesEXT.primitiveFragmentShadingRateMeshShader )
1807	{
1808		if ( physicalDeviceFragmentShadingRateFeaturesKHR.primitiveFragmentShadingRate == VK_FALSE )
1809		{
1810			log << tcu::TestLog::Message << "Mandatory feature primitiveFragmentShadingRate not supported" << tcu::TestLog::EndMessage;
1811			result = false;
1812		}
1813	}
1814#endif // defined(CTS_USES_VULKAN)
1815
1816#if defined(CTS_USES_VULKAN)
1817	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_mesh_shader")) )
1818	{
1819		if ( physicalDeviceMeshShaderFeaturesEXT.meshShader == VK_FALSE )
1820		{
1821			log << tcu::TestLog::Message << "Mandatory feature meshShader not supported" << tcu::TestLog::EndMessage;
1822			result = false;
1823		}
1824	}
1825#endif // defined(CTS_USES_VULKAN)
1826
1827#if defined(CTS_USES_VULKAN)
1828	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_mesh_shader")) )
1829	{
1830		if ( physicalDeviceMeshShaderFeaturesEXT.taskShader == VK_FALSE )
1831		{
1832			log << tcu::TestLog::Message << "Mandatory feature taskShader not supported" << tcu::TestLog::EndMessage;
1833			result = false;
1834		}
1835	}
1836#endif // defined(CTS_USES_VULKAN)
1837
1838	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_multi_draw")) )
1839	{
1840		if ( physicalDeviceMultiDrawFeaturesEXT.multiDraw == VK_FALSE )
1841		{
1842			log << tcu::TestLog::Message << "Mandatory feature multiDraw not supported" << tcu::TestLog::EndMessage;
1843			result = false;
1844		}
1845	}
1846
1847	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_multisampled_render_to_single_sampled")) )
1848	{
1849		if ( physicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.multisampledRenderToSingleSampled == VK_FALSE )
1850		{
1851			log << tcu::TestLog::Message << "Mandatory feature multisampledRenderToSingleSampled not supported" << tcu::TestLog::EndMessage;
1852			result = false;
1853		}
1854	}
1855
1856	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_mutable_descriptor_type")) )
1857	{
1858		if ( physicalDeviceMutableDescriptorTypeFeaturesEXT.mutableDescriptorType == VK_FALSE )
1859		{
1860			log << tcu::TestLog::Message << "Mandatory feature mutableDescriptorType not supported" << tcu::TestLog::EndMessage;
1861			result = false;
1862		}
1863	}
1864
1865#if defined(CTS_USES_VULKAN)
1866	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_non_seamless_cube_map")) )
1867	{
1868		if ( physicalDeviceNonSeamlessCubeMapFeaturesEXT.nonSeamlessCubeMap == VK_FALSE )
1869		{
1870			log << tcu::TestLog::Message << "Mandatory feature nonSeamlessCubeMap not supported" << tcu::TestLog::EndMessage;
1871			result = false;
1872		}
1873	}
1874#endif // defined(CTS_USES_VULKAN)
1875
1876#if defined(CTS_USES_VULKAN)
1877	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_opacity_micromap")) )
1878	{
1879		if ( physicalDeviceOpacityMicromapFeaturesEXT.micromap == VK_FALSE )
1880		{
1881			log << tcu::TestLog::Message << "Mandatory feature micromap not supported" << tcu::TestLog::EndMessage;
1882			result = false;
1883		}
1884	}
1885#endif // defined(CTS_USES_VULKAN)
1886
1887#if defined(CTS_USES_VULKAN)
1888	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_pageable_device_local_memory")) )
1889	{
1890		if ( physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pageableDeviceLocalMemory == VK_FALSE )
1891		{
1892			log << tcu::TestLog::Message << "Mandatory feature pageableDeviceLocalMemory not supported" << tcu::TestLog::EndMessage;
1893			result = false;
1894		}
1895	}
1896#endif // defined(CTS_USES_VULKAN)
1897
1898	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_pipeline_library_group_handles")) )
1899	{
1900		if ( physicalDevicePipelineLibraryGroupHandlesFeaturesEXT.pipelineLibraryGroupHandles == VK_FALSE )
1901		{
1902			log << tcu::TestLog::Message << "Mandatory feature pipelineLibraryGroupHandles not supported" << tcu::TestLog::EndMessage;
1903			result = false;
1904		}
1905	}
1906
1907	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_pipeline_protected_access")) )
1908	{
1909		if ( physicalDevicePipelineProtectedAccessFeaturesEXT.pipelineProtectedAccess == VK_FALSE )
1910		{
1911			log << tcu::TestLog::Message << "Mandatory feature pipelineProtectedAccess not supported" << tcu::TestLog::EndMessage;
1912			result = false;
1913		}
1914	}
1915
1916#if defined(CTS_USES_VULKAN)
1917	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_primitive_topology_list_restart")) )
1918	{
1919		if ( physicalDevicePrimitiveTopologyListRestartFeaturesEXT.primitiveTopologyListRestart == VK_FALSE )
1920		{
1921			log << tcu::TestLog::Message << "Mandatory feature primitiveTopologyListRestart not supported" << tcu::TestLog::EndMessage;
1922			result = false;
1923		}
1924	}
1925#endif // defined(CTS_USES_VULKAN)
1926
1927	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_scalar_block_layout")) )
1928	{
1929		if ( physicalDeviceScalarBlockLayoutFeatures.scalarBlockLayout == VK_FALSE )
1930		{
1931			log << tcu::TestLog::Message << "Mandatory feature scalarBlockLayout not supported" << tcu::TestLog::EndMessage;
1932			result = false;
1933		}
1934	}
1935
1936	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_atomic_float")) && physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32Atomics )
1937	{
1938		if ( physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32Atomics == VK_FALSE )
1939		{
1940			log << tcu::TestLog::Message << "Mandatory feature shaderImageFloat32Atomics not supported" << tcu::TestLog::EndMessage;
1941			result = false;
1942		}
1943	}
1944
1945	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_atomic_float")) && physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32AtomicAdd )
1946	{
1947		if ( physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32AtomicAdd == VK_FALSE )
1948		{
1949			log << tcu::TestLog::Message << "Mandatory feature shaderImageFloat32AtomicAdd not supported" << tcu::TestLog::EndMessage;
1950			result = false;
1951		}
1952	}
1953
1954#if defined(CTS_USES_VULKAN)
1955	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_atomic_float2")) && physicalDeviceShaderAtomicFloat2FeaturesEXT.sparseImageFloat32AtomicMinMax )
1956	{
1957		if ( physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderImageFloat32AtomicMinMax == VK_FALSE )
1958		{
1959			log << tcu::TestLog::Message << "Mandatory feature shaderImageFloat32AtomicMinMax not supported" << tcu::TestLog::EndMessage;
1960			result = false;
1961		}
1962	}
1963#endif // defined(CTS_USES_VULKAN)
1964
1965	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_demote_to_helper_invocation")) )
1966	{
1967		if ( physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.shaderDemoteToHelperInvocation == VK_FALSE )
1968		{
1969			log << tcu::TestLog::Message << "Mandatory feature shaderDemoteToHelperInvocation not supported" << tcu::TestLog::EndMessage;
1970			result = false;
1971		}
1972	}
1973
1974	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) )
1975	{
1976		if ( coreFeatures.features.shaderInt64 == VK_FALSE )
1977		{
1978			log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage;
1979			result = false;
1980		}
1981	}
1982
1983	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) )
1984	{
1985		if ( physicalDeviceShaderImageAtomicInt64FeaturesEXT.shaderImageInt64Atomics == VK_FALSE )
1986		{
1987			log << tcu::TestLog::Message << "Mandatory feature shaderImageInt64Atomics not supported" << tcu::TestLog::EndMessage;
1988			result = false;
1989		}
1990	}
1991
1992	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) && physicalDeviceShaderImageAtomicInt64FeaturesEXT.sparseImageInt64Atomics )
1993	{
1994		if ( physicalDeviceShaderImageAtomicInt64FeaturesEXT.shaderImageInt64Atomics == VK_FALSE )
1995		{
1996			log << tcu::TestLog::Message << "Mandatory feature shaderImageInt64Atomics not supported" << tcu::TestLog::EndMessage;
1997			result = false;
1998		}
1999	}
2000
2001	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_module_identifier")) )
2002	{
2003		if ( physicalDeviceShaderModuleIdentifierFeaturesEXT.shaderModuleIdentifier == VK_FALSE )
2004		{
2005			log << tcu::TestLog::Message << "Mandatory feature shaderModuleIdentifier not supported" << tcu::TestLog::EndMessage;
2006			result = false;
2007		}
2008	}
2009
2010	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_object")) )
2011	{
2012		if ( physicalDeviceShaderObjectFeaturesEXT.shaderObject == VK_FALSE )
2013		{
2014			log << tcu::TestLog::Message << "Mandatory feature shaderObject not supported" << tcu::TestLog::EndMessage;
2015			result = false;
2016		}
2017	}
2018
2019	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_subgroup_size_control")) )
2020	{
2021		if ( physicalDeviceSubgroupSizeControlFeaturesEXT.subgroupSizeControl == VK_FALSE )
2022		{
2023			log << tcu::TestLog::Message << "Mandatory feature subgroupSizeControl not supported" << tcu::TestLog::EndMessage;
2024			result = false;
2025		}
2026	}
2027
2028	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_subgroup_size_control")) )
2029	{
2030		if ( physicalDeviceSubgroupSizeControlFeaturesEXT.computeFullSubgroups == VK_FALSE )
2031		{
2032			log << tcu::TestLog::Message << "Mandatory feature computeFullSubgroups not supported" << tcu::TestLog::EndMessage;
2033			result = false;
2034		}
2035	}
2036
2037	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_subpass_merge_feedback")) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_create_renderpass2")) )
2038	{
2039		if ( physicalDeviceSubpassMergeFeedbackFeaturesEXT.subpassMergeFeedback == VK_FALSE )
2040		{
2041			log << tcu::TestLog::Message << "Mandatory feature subpassMergeFeedback not supported" << tcu::TestLog::EndMessage;
2042			result = false;
2043		}
2044	}
2045
2046	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_texel_buffer_alignment")) )
2047	{
2048		if ( physicalDeviceTexelBufferAlignmentFeaturesEXT.texelBufferAlignment == VK_FALSE )
2049		{
2050			log << tcu::TestLog::Message << "Mandatory feature texelBufferAlignment not supported" << tcu::TestLog::EndMessage;
2051			result = false;
2052		}
2053	}
2054
2055	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_texture_compression_astc_hdr")) )
2056	{
2057		if ( physicalDeviceTextureCompressionASTCHDRFeaturesEXT.textureCompressionASTC_HDR == VK_FALSE )
2058		{
2059			log << tcu::TestLog::Message << "Mandatory feature textureCompressionASTC_HDR not supported" << tcu::TestLog::EndMessage;
2060			result = false;
2061		}
2062	}
2063
2064	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_transform_feedback")) )
2065	{
2066#if defined(CTS_USES_VULKAN)
2067		if ( physicalDeviceTransformFeedbackFeaturesEXT.transformFeedback == VK_FALSE )
2068		{
2069			log << tcu::TestLog::Message << "Mandatory feature transformFeedback not supported" << tcu::TestLog::EndMessage;
2070			result = false;
2071		}
2072#endif // defined(CTS_USES_VULKAN)
2073	}
2074
2075	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_vertex_input_dynamic_state")) )
2076	{
2077		if ( physicalDeviceVertexInputDynamicStateFeaturesEXT.vertexInputDynamicState == VK_FALSE )
2078		{
2079			log << tcu::TestLog::Message << "Mandatory feature vertexInputDynamicState not supported" << tcu::TestLog::EndMessage;
2080			result = false;
2081		}
2082	}
2083
2084	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_ycbcr_2plane_444_formats")) )
2085	{
2086		if ( physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.ycbcr2plane444Formats == VK_FALSE )
2087		{
2088			log << tcu::TestLog::Message << "Mandatory feature ycbcr2plane444Formats not supported" << tcu::TestLog::EndMessage;
2089			result = false;
2090		}
2091	}
2092
2093	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_ycbcr_image_arrays")) )
2094	{
2095		if ( physicalDeviceYcbcrImageArraysFeaturesEXT.ycbcrImageArrays == VK_FALSE )
2096		{
2097			log << tcu::TestLog::Message << "Mandatory feature ycbcrImageArrays not supported" << tcu::TestLog::EndMessage;
2098			result = false;
2099		}
2100	}
2101
2102	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_16bit_storage")) )
2103	{
2104		if ( physicalDevice16BitStorageFeatures.storageBuffer16BitAccess == VK_FALSE )
2105		{
2106			log << tcu::TestLog::Message << "Mandatory feature storageBuffer16BitAccess not supported" << tcu::TestLog::EndMessage;
2107			result = false;
2108		}
2109	}
2110
2111	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_8bit_storage")) )
2112	{
2113		if ( physicalDevice8BitStorageFeatures.storageBuffer8BitAccess == VK_FALSE )
2114		{
2115			log << tcu::TestLog::Message << "Mandatory feature storageBuffer8BitAccess not supported" << tcu::TestLog::EndMessage;
2116			result = false;
2117		}
2118	}
2119
2120	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2121	{
2122		if ( physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure == VK_FALSE )
2123		{
2124			log << tcu::TestLog::Message << "Mandatory feature accelerationStructure not supported" << tcu::TestLog::EndMessage;
2125			result = false;
2126		}
2127	}
2128
2129	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2130	{
2131		if ( physicalDeviceAccelerationStructureFeaturesKHR.descriptorBindingAccelerationStructureUpdateAfterBind == VK_FALSE )
2132		{
2133			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingAccelerationStructureUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2134			result = false;
2135		}
2136	}
2137
2138	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_buffer_device_address")) )
2139	{
2140		if ( physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress == VK_FALSE )
2141		{
2142			log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
2143			result = false;
2144		}
2145	}
2146
2147	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2148	{
2149		if ( physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress == VK_FALSE )
2150		{
2151			log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
2152			result = false;
2153		}
2154	}
2155
2156	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_dynamic_rendering_local_read")) )
2157	{
2158		if ( physicalDeviceDynamicRenderingLocalReadFeaturesKHR.dynamicRenderingLocalRead == VK_FALSE )
2159		{
2160			log << tcu::TestLog::Message << "Mandatory feature dynamicRenderingLocalRead not supported" << tcu::TestLog::EndMessage;
2161			result = false;
2162		}
2163	}
2164
2165	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_global_priority_query")) )
2166	{
2167		if ( physicalDeviceGlobalPriorityQueryFeaturesKHR.globalPriorityQuery == VK_FALSE )
2168		{
2169			log << tcu::TestLog::Message << "Mandatory feature globalPriorityQuery not supported" << tcu::TestLog::EndMessage;
2170			result = false;
2171		}
2172	}
2173
2174	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_global_priority")) )
2175	{
2176		if ( physicalDeviceGlobalPriorityQueryFeaturesKHR.globalPriorityQuery == VK_FALSE )
2177		{
2178			log << tcu::TestLog::Message << "Mandatory feature globalPriorityQuery not supported" << tcu::TestLog::EndMessage;
2179			result = false;
2180		}
2181	}
2182
2183	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_imageless_framebuffer")) )
2184	{
2185		if ( physicalDeviceImagelessFramebufferFeatures.imagelessFramebuffer == VK_FALSE )
2186		{
2187			log << tcu::TestLog::Message << "Mandatory feature imagelessFramebuffer not supported" << tcu::TestLog::EndMessage;
2188			result = false;
2189		}
2190	}
2191
2192	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_index_type_uint8")) )
2193	{
2194		if ( physicalDeviceIndexTypeUint8FeaturesKHR.indexTypeUint8 == VK_FALSE )
2195		{
2196			log << tcu::TestLog::Message << "Mandatory feature indexTypeUint8 not supported" << tcu::TestLog::EndMessage;
2197			result = false;
2198		}
2199	}
2200
2201	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_index_type_uint8")) )
2202	{
2203		if ( physicalDeviceIndexTypeUint8FeaturesKHR.indexTypeUint8 == VK_FALSE )
2204		{
2205			log << tcu::TestLog::Message << "Mandatory feature indexTypeUint8 not supported" << tcu::TestLog::EndMessage;
2206			result = false;
2207		}
2208	}
2209
2210	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) )
2211	{
2212		if ( ( physicalDeviceLineRasterizationFeaturesKHR.rectangularLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesKHR.bresenhamLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesKHR.smoothLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesKHR.stippledRectangularLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesKHR.stippledBresenhamLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesKHR.stippledSmoothLines == VK_FALSE ) )
2213		{
2214			log << tcu::TestLog::Message << "Mandatory feature rectangularLines or bresenhamLines or smoothLines or stippledRectangularLines or stippledBresenhamLines or stippledSmoothLines not supported" << tcu::TestLog::EndMessage;
2215			result = false;
2216		}
2217	}
2218
2219	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_line_rasterization")) )
2220	{
2221		if ( ( physicalDeviceLineRasterizationFeaturesKHR.rectangularLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesKHR.bresenhamLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesKHR.smoothLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesKHR.stippledRectangularLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesKHR.stippledBresenhamLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesKHR.stippledSmoothLines == VK_FALSE ) )
2222		{
2223			log << tcu::TestLog::Message << "Mandatory feature rectangularLines or bresenhamLines or smoothLines or stippledRectangularLines or stippledBresenhamLines or stippledSmoothLines not supported" << tcu::TestLog::EndMessage;
2224			result = false;
2225		}
2226	}
2227
2228	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_maintenance5")) )
2229	{
2230		if ( physicalDeviceMaintenance5FeaturesKHR.maintenance5 == VK_FALSE )
2231		{
2232			log << tcu::TestLog::Message << "Mandatory feature maintenance5 not supported" << tcu::TestLog::EndMessage;
2233			result = false;
2234		}
2235	}
2236
2237	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_maintenance6")) )
2238	{
2239		if ( physicalDeviceMaintenance6FeaturesKHR.maintenance6 == VK_FALSE )
2240		{
2241			log << tcu::TestLog::Message << "Mandatory feature maintenance6 not supported" << tcu::TestLog::EndMessage;
2242			result = false;
2243		}
2244	}
2245
2246	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_multiview")) )
2247	{
2248		if ( physicalDeviceMultiviewFeatures.multiview == VK_FALSE )
2249		{
2250			log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage;
2251			result = false;
2252		}
2253	}
2254
2255	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_performance_query")) )
2256	{
2257		if ( physicalDevicePerformanceQueryFeaturesKHR.performanceCounterQueryPools == VK_FALSE )
2258		{
2259			log << tcu::TestLog::Message << "Mandatory feature performanceCounterQueryPools not supported" << tcu::TestLog::EndMessage;
2260			result = false;
2261		}
2262	}
2263
2264	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_pipeline_executable_properties")) )
2265	{
2266		if ( physicalDevicePipelineExecutablePropertiesFeaturesKHR.pipelineExecutableInfo == VK_FALSE )
2267		{
2268			log << tcu::TestLog::Message << "Mandatory feature pipelineExecutableInfo not supported" << tcu::TestLog::EndMessage;
2269			result = false;
2270		}
2271	}
2272
2273#if defined(CTS_USES_VULKAN)
2274	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_present_id")) )
2275	{
2276		if ( physicalDevicePresentIdFeaturesKHR.presentId == VK_FALSE )
2277		{
2278			log << tcu::TestLog::Message << "Mandatory feature presentId not supported" << tcu::TestLog::EndMessage;
2279			result = false;
2280		}
2281	}
2282#endif // defined(CTS_USES_VULKAN)
2283
2284#if defined(CTS_USES_VULKAN)
2285	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_present_wait")) )
2286	{
2287		if ( physicalDevicePresentWaitFeaturesKHR.presentWait == VK_FALSE )
2288		{
2289			log << tcu::TestLog::Message << "Mandatory feature presentWait not supported" << tcu::TestLog::EndMessage;
2290			result = false;
2291		}
2292	}
2293#endif // defined(CTS_USES_VULKAN)
2294
2295	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_query")) )
2296	{
2297		if ( physicalDeviceRayQueryFeaturesKHR.rayQuery == VK_FALSE )
2298		{
2299			log << tcu::TestLog::Message << "Mandatory feature rayQuery not supported" << tcu::TestLog::EndMessage;
2300			result = false;
2301		}
2302	}
2303
2304	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_maintenance1")) )
2305	{
2306		if ( physicalDeviceRayTracingMaintenance1FeaturesKHR.rayTracingMaintenance1 == VK_FALSE )
2307		{
2308			log << tcu::TestLog::Message << "Mandatory feature rayTracingMaintenance1 not supported" << tcu::TestLog::EndMessage;
2309			result = false;
2310		}
2311	}
2312
2313	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_pipeline")) )
2314	{
2315		if ( physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline == VK_FALSE )
2316		{
2317			log << tcu::TestLog::Message << "Mandatory feature rayTracingPipeline not supported" << tcu::TestLog::EndMessage;
2318			result = false;
2319		}
2320	}
2321
2322	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_pipeline")) )
2323	{
2324		if ( physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineTraceRaysIndirect == VK_FALSE )
2325		{
2326			log << tcu::TestLog::Message << "Mandatory feature rayTracingPipelineTraceRaysIndirect not supported" << tcu::TestLog::EndMessage;
2327			result = false;
2328		}
2329	}
2330
2331	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_pipeline")) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_query")) )
2332	{
2333		if ( physicalDeviceRayTracingPipelineFeaturesKHR.rayTraversalPrimitiveCulling == VK_FALSE )
2334		{
2335			log << tcu::TestLog::Message << "Mandatory feature rayTraversalPrimitiveCulling not supported" << tcu::TestLog::EndMessage;
2336			result = false;
2337		}
2338	}
2339
2340	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_ray_tracing_position_fetch")) )
2341	{
2342		if ( physicalDeviceRayTracingPositionFetchFeaturesKHR.rayTracingPositionFetch == VK_FALSE )
2343		{
2344			log << tcu::TestLog::Message << "Mandatory feature rayTracingPositionFetch not supported" << tcu::TestLog::EndMessage;
2345			result = false;
2346		}
2347	}
2348
2349	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_ycbcr_conversion")) )
2350	{
2351		if ( physicalDeviceSamplerYcbcrConversionFeaturesKHR.samplerYcbcrConversion == VK_FALSE )
2352		{
2353			log << tcu::TestLog::Message << "Mandatory feature samplerYcbcrConversion not supported" << tcu::TestLog::EndMessage;
2354			result = false;
2355		}
2356	}
2357
2358	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_separate_depth_stencil_layouts")) )
2359	{
2360		if ( physicalDeviceSeparateDepthStencilLayoutsFeatures.separateDepthStencilLayouts == VK_FALSE )
2361		{
2362			log << tcu::TestLog::Message << "Mandatory feature separateDepthStencilLayouts not supported" << tcu::TestLog::EndMessage;
2363			result = false;
2364		}
2365	}
2366
2367	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_atomic_int64")) )
2368	{
2369		if ( physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics == VK_FALSE )
2370		{
2371			log << tcu::TestLog::Message << "Mandatory feature shaderBufferInt64Atomics not supported" << tcu::TestLog::EndMessage;
2372			result = false;
2373		}
2374	}
2375
2376	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_clock")) )
2377	{
2378		if ( physicalDeviceShaderClockFeaturesKHR.shaderSubgroupClock == VK_FALSE )
2379		{
2380			log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupClock not supported" << tcu::TestLog::EndMessage;
2381			result = false;
2382		}
2383	}
2384
2385#if defined(CTS_USES_VULKAN)
2386	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_expect_assume")) )
2387	{
2388		if ( physicalDeviceShaderExpectAssumeFeaturesKHR.shaderExpectAssume == VK_FALSE )
2389		{
2390			log << tcu::TestLog::Message << "Mandatory feature shaderExpectAssume not supported" << tcu::TestLog::EndMessage;
2391			result = false;
2392		}
2393	}
2394#endif // defined(CTS_USES_VULKAN)
2395
2396	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_float16_int8")) )
2397	{
2398		if ( ( physicalDeviceShaderFloat16Int8Features.shaderFloat16 == VK_FALSE ) && ( physicalDeviceShaderFloat16Int8Features.shaderInt8 == VK_FALSE ) )
2399		{
2400			log << tcu::TestLog::Message << "Mandatory feature shaderFloat16 or shaderInt8 not supported" << tcu::TestLog::EndMessage;
2401			result = false;
2402		}
2403	}
2404
2405	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_float_controls2")) )
2406	{
2407		if ( physicalDeviceShaderFloatControls2FeaturesKHR.shaderFloatControls2 == VK_FALSE )
2408		{
2409			log << tcu::TestLog::Message << "Mandatory feature shaderFloatControls2 not supported" << tcu::TestLog::EndMessage;
2410			result = false;
2411		}
2412	}
2413
2414#if defined(CTS_USES_VULKAN)
2415	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_integer_dot_product")) )
2416	{
2417		if ( physicalDeviceShaderIntegerDotProductFeaturesKHR.shaderIntegerDotProduct == VK_FALSE )
2418		{
2419			log << tcu::TestLog::Message << "Mandatory feature shaderIntegerDotProduct not supported" << tcu::TestLog::EndMessage;
2420			result = false;
2421		}
2422	}
2423#endif // defined(CTS_USES_VULKAN)
2424
2425	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_maximal_reconvergence")) )
2426	{
2427		if ( physicalDeviceShaderMaximalReconvergenceFeaturesKHR.shaderMaximalReconvergence == VK_FALSE )
2428		{
2429			log << tcu::TestLog::Message << "Mandatory feature shaderMaximalReconvergence not supported" << tcu::TestLog::EndMessage;
2430			result = false;
2431		}
2432	}
2433
2434	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_quad_control")) )
2435	{
2436		if ( physicalDeviceShaderQuadControlFeaturesKHR.shaderQuadControl == VK_FALSE )
2437		{
2438			log << tcu::TestLog::Message << "Mandatory feature shaderQuadControl not supported" << tcu::TestLog::EndMessage;
2439			result = false;
2440		}
2441	}
2442
2443	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_subgroup_extended_types")) )
2444	{
2445		if ( physicalDeviceShaderSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes == VK_FALSE )
2446		{
2447			log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupExtendedTypes not supported" << tcu::TestLog::EndMessage;
2448			result = false;
2449		}
2450	}
2451
2452	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_subgroup_rotate")) )
2453	{
2454		if ( physicalDeviceShaderSubgroupRotateFeaturesKHR.shaderSubgroupRotate == VK_FALSE )
2455		{
2456			log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupRotate not supported" << tcu::TestLog::EndMessage;
2457			result = false;
2458		}
2459	}
2460
2461	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_subgroup_uniform_control_flow")) )
2462	{
2463		if ( physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.shaderSubgroupUniformControlFlow == VK_FALSE )
2464		{
2465			log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupUniformControlFlow not supported" << tcu::TestLog::EndMessage;
2466			result = false;
2467		}
2468	}
2469
2470	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_terminate_invocation")) )
2471	{
2472		if ( physicalDeviceShaderTerminateInvocationFeaturesKHR.shaderTerminateInvocation == VK_FALSE )
2473		{
2474			log << tcu::TestLog::Message << "Mandatory feature shaderTerminateInvocation not supported" << tcu::TestLog::EndMessage;
2475			result = false;
2476		}
2477	}
2478
2479	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_synchronization2")) )
2480	{
2481		if ( physicalDeviceSynchronization2FeaturesKHR.synchronization2 == VK_FALSE )
2482		{
2483			log << tcu::TestLog::Message << "Mandatory feature synchronization2 not supported" << tcu::TestLog::EndMessage;
2484			result = false;
2485		}
2486	}
2487
2488#if defined(CTS_USES_VULKAN)
2489	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_timeline_semaphore")) )
2490	{
2491		if ( physicalDeviceTimelineSemaphoreFeatures.timelineSemaphore == VK_FALSE )
2492		{
2493			log << tcu::TestLog::Message << "Mandatory feature timelineSemaphore not supported" << tcu::TestLog::EndMessage;
2494			result = false;
2495		}
2496	}
2497#endif // defined(CTS_USES_VULKAN)
2498
2499	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_uniform_buffer_standard_layout")) )
2500	{
2501		if ( physicalDeviceUniformBufferStandardLayoutFeatures.uniformBufferStandardLayout == VK_FALSE )
2502		{
2503			log << tcu::TestLog::Message << "Mandatory feature uniformBufferStandardLayout not supported" << tcu::TestLog::EndMessage;
2504			result = false;
2505		}
2506	}
2507
2508	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_variable_pointers")) )
2509	{
2510		if ( physicalDeviceVariablePointersFeatures.variablePointersStorageBuffer == VK_FALSE )
2511		{
2512			log << tcu::TestLog::Message << "Mandatory feature variablePointersStorageBuffer not supported" << tcu::TestLog::EndMessage;
2513			result = false;
2514		}
2515	}
2516
2517	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_vertex_attribute_divisor")) )
2518	{
2519		if ( physicalDeviceVertexAttributeDivisorFeaturesKHR.vertexAttributeInstanceRateDivisor == VK_FALSE )
2520		{
2521			log << tcu::TestLog::Message << "Mandatory feature vertexAttributeInstanceRateDivisor not supported" << tcu::TestLog::EndMessage;
2522			result = false;
2523		}
2524	}
2525
2526	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_vertex_attribute_divisor")) )
2527	{
2528		if ( physicalDeviceVertexAttributeDivisorFeaturesKHR.vertexAttributeInstanceRateDivisor == VK_FALSE )
2529		{
2530			log << tcu::TestLog::Message << "Mandatory feature vertexAttributeInstanceRateDivisor not supported" << tcu::TestLog::EndMessage;
2531			result = false;
2532		}
2533	}
2534
2535	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_vulkan_memory_model")) )
2536	{
2537		if ( physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModel == VK_FALSE )
2538		{
2539			log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModel not supported" << tcu::TestLog::EndMessage;
2540			result = false;
2541		}
2542	}
2543
2544	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_workgroup_memory_explicit_layout")) )
2545	{
2546		if ( ( physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout == VK_FALSE ) && ( physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayoutScalarBlockLayout == VK_FALSE ) && ( physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout8BitAccess == VK_FALSE ) && ( physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout16BitAccess == VK_FALSE ) )
2547		{
2548			log << tcu::TestLog::Message << "Mandatory feature workgroupMemoryExplicitLayout or workgroupMemoryExplicitLayoutScalarBlockLayout or workgroupMemoryExplicitLayout8BitAccess or workgroupMemoryExplicitLayout16BitAccess not supported" << tcu::TestLog::EndMessage;
2549			result = false;
2550		}
2551	}
2552
2553	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_zero_initialize_workgroup_memory")) )
2554	{
2555		if ( physicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR.shaderZeroInitializeWorkgroupMemory == VK_FALSE )
2556		{
2557			log << tcu::TestLog::Message << "Mandatory feature shaderZeroInitializeWorkgroupMemory not supported" << tcu::TestLog::EndMessage;
2558			result = false;
2559		}
2560	}
2561
2562	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_VALVE_mutable_descriptor_type")) )
2563	{
2564		if ( physicalDeviceMutableDescriptorTypeFeaturesVALVE.mutableDescriptorType == VK_FALSE )
2565		{
2566			log << tcu::TestLog::Message << "Mandatory feature mutableDescriptorType not supported" << tcu::TestLog::EndMessage;
2567			result = false;
2568		}
2569	}
2570
2571	{
2572		if ( coreFeatures.features.robustBufferAccess == VK_FALSE )
2573		{
2574			log << tcu::TestLog::Message << "Mandatory feature robustBufferAccess not supported" << tcu::TestLog::EndMessage;
2575			result = false;
2576		}
2577	}
2578
2579	if ( physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics )
2580	{
2581		if ( coreFeatures.features.shaderInt64 == VK_FALSE )
2582		{
2583			log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage;
2584			result = false;
2585		}
2586	}
2587
2588	if ( physicalDeviceVulkan12Features.shaderBufferInt64Atomics )
2589	{
2590		if ( coreFeatures.features.shaderInt64 == VK_FALSE )
2591		{
2592			log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage;
2593			result = false;
2594		}
2595	}
2596
2597	if ( physicalDeviceShaderAtomicInt64Features.shaderSharedInt64Atomics )
2598	{
2599		if ( coreFeatures.features.shaderInt64 == VK_FALSE )
2600		{
2601			log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage;
2602			result = false;
2603		}
2604	}
2605
2606	if ( physicalDeviceVulkan12Features.shaderSharedInt64Atomics )
2607	{
2608		if ( coreFeatures.features.shaderInt64 == VK_FALSE )
2609		{
2610			log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage;
2611			result = false;
2612		}
2613	}
2614
2615#if defined(CTS_USES_VULKAN)
2616	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) )
2617	{
2618		if ( physicalDeviceMultiviewFeatures.multiview == VK_FALSE )
2619		{
2620			log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage;
2621			result = false;
2622		}
2623	}
2624#endif // defined(CTS_USES_VULKAN)
2625
2626	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2627	{
2628		if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE )
2629		{
2630			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
2631			result = false;
2632		}
2633	}
2634
2635	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2636	{
2637		if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE )
2638		{
2639			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
2640			result = false;
2641		}
2642	}
2643
2644#if defined(CTS_USES_VULKAN)
2645	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
2646	{
2647		if ( physicalDeviceVulkan11Features.multiview == VK_FALSE )
2648		{
2649			log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage;
2650			result = false;
2651		}
2652	}
2653#endif // defined(CTS_USES_VULKAN)
2654
2655	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
2656	{
2657		if ( physicalDeviceVulkan12Features.subgroupBroadcastDynamicId == VK_FALSE )
2658		{
2659			log << tcu::TestLog::Message << "Mandatory feature subgroupBroadcastDynamicId not supported" << tcu::TestLog::EndMessage;
2660			result = false;
2661		}
2662	}
2663
2664	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
2665	{
2666		if ( physicalDeviceVulkan12Features.shaderSubgroupExtendedTypes == VK_FALSE )
2667		{
2668			log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupExtendedTypes not supported" << tcu::TestLog::EndMessage;
2669			result = false;
2670		}
2671	}
2672
2673	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
2674	{
2675		if ( physicalDeviceVulkan12Features.imagelessFramebuffer == VK_FALSE )
2676		{
2677			log << tcu::TestLog::Message << "Mandatory feature imagelessFramebuffer not supported" << tcu::TestLog::EndMessage;
2678			result = false;
2679		}
2680	}
2681
2682	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
2683	{
2684		if ( physicalDeviceVulkan12Features.uniformBufferStandardLayout == VK_FALSE )
2685		{
2686			log << tcu::TestLog::Message << "Mandatory feature uniformBufferStandardLayout not supported" << tcu::TestLog::EndMessage;
2687			result = false;
2688		}
2689	}
2690
2691	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
2692	{
2693		if ( physicalDeviceVulkan12Features.separateDepthStencilLayouts == VK_FALSE )
2694		{
2695			log << tcu::TestLog::Message << "Mandatory feature separateDepthStencilLayouts not supported" << tcu::TestLog::EndMessage;
2696			result = false;
2697		}
2698	}
2699
2700	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
2701	{
2702		if ( physicalDeviceVulkan12Features.hostQueryReset == VK_FALSE )
2703		{
2704			log << tcu::TestLog::Message << "Mandatory feature hostQueryReset not supported" << tcu::TestLog::EndMessage;
2705			result = false;
2706		}
2707	}
2708
2709#if defined(CTS_USES_VULKAN)
2710	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
2711	{
2712		if ( physicalDeviceVulkan12Features.timelineSemaphore == VK_FALSE )
2713		{
2714			log << tcu::TestLog::Message << "Mandatory feature timelineSemaphore not supported" << tcu::TestLog::EndMessage;
2715			result = false;
2716		}
2717	}
2718#endif // defined(CTS_USES_VULKAN)
2719
2720	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2721	{
2722		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
2723		{
2724			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
2725			result = false;
2726		}
2727	}
2728
2729	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2730	{
2731		if ( physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
2732		{
2733			log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
2734			result = false;
2735		}
2736	}
2737
2738	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2739	{
2740		if ( physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
2741		{
2742			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
2743			result = false;
2744		}
2745	}
2746
2747	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2748	{
2749		if ( physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
2750		{
2751			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
2752			result = false;
2753		}
2754	}
2755
2756	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2757	{
2758		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
2759		{
2760			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
2761			result = false;
2762		}
2763	}
2764
2765	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2766	{
2767		if ( physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
2768		{
2769			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2770			result = false;
2771		}
2772	}
2773
2774	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2775	{
2776		if ( physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
2777		{
2778			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2779			result = false;
2780		}
2781	}
2782
2783	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2784	{
2785		if ( physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
2786		{
2787			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2788			result = false;
2789		}
2790	}
2791
2792	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2793	{
2794		if ( physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
2795		{
2796			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2797			result = false;
2798		}
2799	}
2800
2801	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2802	{
2803		if ( physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
2804		{
2805			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2806			result = false;
2807		}
2808	}
2809
2810	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2811	{
2812		if ( physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
2813		{
2814			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
2815			result = false;
2816		}
2817	}
2818
2819	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2820	{
2821		if ( physicalDeviceVulkan12Features.descriptorBindingPartiallyBound == VK_FALSE )
2822		{
2823			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
2824			result = false;
2825		}
2826	}
2827
2828	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
2829	{
2830		if ( physicalDeviceVulkan12Features.runtimeDescriptorArray == VK_FALSE )
2831		{
2832			log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
2833			result = false;
2834		}
2835	}
2836
2837	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics )
2838	{
2839		if ( physicalDeviceVulkan12Features.shaderBufferInt64Atomics == VK_FALSE )
2840		{
2841			log << tcu::TestLog::Message << "Mandatory feature shaderBufferInt64Atomics not supported" << tcu::TestLog::EndMessage;
2842			result = false;
2843		}
2844	}
2845
2846	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_draw_indirect_count")) )
2847	{
2848		if ( physicalDeviceVulkan12Features.drawIndirectCount == VK_FALSE )
2849		{
2850			log << tcu::TestLog::Message << "Mandatory feature drawIndirectCount not supported" << tcu::TestLog::EndMessage;
2851			result = false;
2852		}
2853	}
2854
2855	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_mirror_clamp_to_edge")) )
2856	{
2857		if ( physicalDeviceVulkan12Features.samplerMirrorClampToEdge == VK_FALSE )
2858		{
2859			log << tcu::TestLog::Message << "Mandatory feature samplerMirrorClampToEdge not supported" << tcu::TestLog::EndMessage;
2860			result = false;
2861		}
2862	}
2863
2864	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_sampler_filter_minmax")) )
2865	{
2866		if ( physicalDeviceVulkan12Features.samplerFilterMinmax == VK_FALSE )
2867		{
2868			log << tcu::TestLog::Message << "Mandatory feature samplerFilterMinmax not supported" << tcu::TestLog::EndMessage;
2869			result = false;
2870		}
2871	}
2872
2873	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_viewport_index_layer")) )
2874	{
2875		if ( physicalDeviceVulkan12Features.shaderOutputViewportIndex == VK_FALSE )
2876		{
2877			log << tcu::TestLog::Message << "Mandatory feature shaderOutputViewportIndex not supported" << tcu::TestLog::EndMessage;
2878			result = false;
2879		}
2880	}
2881
2882	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_viewport_index_layer")) )
2883	{
2884		if ( physicalDeviceVulkan12Features.shaderOutputLayer == VK_FALSE )
2885		{
2886			log << tcu::TestLog::Message << "Mandatory feature shaderOutputLayer not supported" << tcu::TestLog::EndMessage;
2887			result = false;
2888		}
2889	}
2890
2891	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2892	{
2893		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
2894		{
2895			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
2896			result = false;
2897		}
2898	}
2899
2900	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2901	{
2902		if ( physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
2903		{
2904			log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
2905			result = false;
2906		}
2907	}
2908
2909	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2910	{
2911		if ( physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
2912		{
2913			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
2914			result = false;
2915		}
2916	}
2917
2918	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2919	{
2920		if ( physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
2921		{
2922			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
2923			result = false;
2924		}
2925	}
2926
2927	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2928	{
2929		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
2930		{
2931			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
2932			result = false;
2933		}
2934	}
2935
2936	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2937	{
2938		if ( physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
2939		{
2940			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2941			result = false;
2942		}
2943	}
2944
2945	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2946	{
2947		if ( physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
2948		{
2949			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2950			result = false;
2951		}
2952	}
2953
2954	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2955	{
2956		if ( physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
2957		{
2958			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2959			result = false;
2960		}
2961	}
2962
2963	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2964	{
2965		if ( physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
2966		{
2967			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2968			result = false;
2969		}
2970	}
2971
2972	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2973	{
2974		if ( physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
2975		{
2976			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
2977			result = false;
2978		}
2979	}
2980
2981	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2982	{
2983		if ( physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
2984		{
2985			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
2986			result = false;
2987		}
2988	}
2989
2990	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
2991	{
2992		if ( physicalDeviceVulkan12Features.descriptorBindingPartiallyBound == VK_FALSE )
2993		{
2994			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
2995			result = false;
2996		}
2997	}
2998
2999	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
3000	{
3001		if ( physicalDeviceVulkan12Features.runtimeDescriptorArray == VK_FALSE )
3002		{
3003			log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
3004			result = false;
3005		}
3006	}
3007
3008	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
3009	{
3010		if ( physicalDeviceVulkan12Features.bufferDeviceAddress == VK_FALSE )
3011		{
3012			log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
3013			result = false;
3014		}
3015	}
3016
3017#if defined(CTS_USES_VULKAN)
3018	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3019	{
3020		if ( physicalDeviceVulkan12Features.bufferDeviceAddress == VK_FALSE )
3021		{
3022			log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
3023			result = false;
3024		}
3025	}
3026#endif // defined(CTS_USES_VULKAN)
3027
3028#if defined(CTS_USES_VULKANSC)
3029	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3030	{
3031		if ( physicalDeviceVulkan12Features.vulkanMemoryModel == VK_FALSE )
3032		{
3033			log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModel not supported" << tcu::TestLog::EndMessage;
3034			result = false;
3035		}
3036	}
3037#endif // defined(CTS_USES_VULKANSC)
3038
3039#if defined(CTS_USES_VULKAN)
3040	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3041	{
3042		if ( physicalDeviceVulkan12Features.vulkanMemoryModelDeviceScope == VK_FALSE )
3043		{
3044			log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModelDeviceScope not supported" << tcu::TestLog::EndMessage;
3045			result = false;
3046		}
3047	}
3048#endif // defined(CTS_USES_VULKAN)
3049
3050#if defined(CTS_USES_VULKAN)
3051	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3052	{
3053		if ( physicalDeviceVulkan13Features.robustImageAccess == VK_FALSE )
3054		{
3055			log << tcu::TestLog::Message << "Mandatory feature robustImageAccess not supported" << tcu::TestLog::EndMessage;
3056			result = false;
3057		}
3058	}
3059#endif // defined(CTS_USES_VULKAN)
3060
3061#if defined(CTS_USES_VULKAN)
3062	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3063	{
3064		if ( physicalDeviceVulkan13Features.inlineUniformBlock == VK_FALSE )
3065		{
3066			log << tcu::TestLog::Message << "Mandatory feature inlineUniformBlock not supported" << tcu::TestLog::EndMessage;
3067			result = false;
3068		}
3069	}
3070#endif // defined(CTS_USES_VULKAN)
3071
3072#if defined(CTS_USES_VULKAN)
3073	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
3074	{
3075		if ( physicalDeviceVulkan13Features.descriptorBindingInlineUniformBlockUpdateAfterBind == VK_FALSE )
3076		{
3077			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingInlineUniformBlockUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
3078			result = false;
3079		}
3080	}
3081#endif // defined(CTS_USES_VULKAN)
3082
3083#if defined(CTS_USES_VULKAN)
3084	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3085	{
3086		if ( physicalDeviceVulkan13Features.pipelineCreationCacheControl == VK_FALSE )
3087		{
3088			log << tcu::TestLog::Message << "Mandatory feature pipelineCreationCacheControl not supported" << tcu::TestLog::EndMessage;
3089			result = false;
3090		}
3091	}
3092#endif // defined(CTS_USES_VULKAN)
3093
3094#if defined(CTS_USES_VULKAN)
3095	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3096	{
3097		if ( physicalDeviceVulkan13Features.privateData == VK_FALSE )
3098		{
3099			log << tcu::TestLog::Message << "Mandatory feature privateData not supported" << tcu::TestLog::EndMessage;
3100			result = false;
3101		}
3102	}
3103#endif // defined(CTS_USES_VULKAN)
3104
3105#if defined(CTS_USES_VULKAN)
3106	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3107	{
3108		if ( physicalDeviceVulkan13Features.shaderDemoteToHelperInvocation == VK_FALSE )
3109		{
3110			log << tcu::TestLog::Message << "Mandatory feature shaderDemoteToHelperInvocation not supported" << tcu::TestLog::EndMessage;
3111			result = false;
3112		}
3113	}
3114#endif // defined(CTS_USES_VULKAN)
3115
3116#if defined(CTS_USES_VULKAN)
3117	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3118	{
3119		if ( physicalDeviceVulkan13Features.shaderTerminateInvocation == VK_FALSE )
3120		{
3121			log << tcu::TestLog::Message << "Mandatory feature shaderTerminateInvocation not supported" << tcu::TestLog::EndMessage;
3122			result = false;
3123		}
3124	}
3125#endif // defined(CTS_USES_VULKAN)
3126
3127#if defined(CTS_USES_VULKAN)
3128	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3129	{
3130		if ( physicalDeviceVulkan13Features.subgroupSizeControl == VK_FALSE )
3131		{
3132			log << tcu::TestLog::Message << "Mandatory feature subgroupSizeControl not supported" << tcu::TestLog::EndMessage;
3133			result = false;
3134		}
3135	}
3136#endif // defined(CTS_USES_VULKAN)
3137
3138#if defined(CTS_USES_VULKAN)
3139	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3140	{
3141		if ( physicalDeviceVulkan13Features.computeFullSubgroups == VK_FALSE )
3142		{
3143			log << tcu::TestLog::Message << "Mandatory feature computeFullSubgroups not supported" << tcu::TestLog::EndMessage;
3144			result = false;
3145		}
3146	}
3147#endif // defined(CTS_USES_VULKAN)
3148
3149#if defined(CTS_USES_VULKAN)
3150	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3151	{
3152		if ( physicalDeviceVulkan13Features.synchronization2 == VK_FALSE )
3153		{
3154			log << tcu::TestLog::Message << "Mandatory feature synchronization2 not supported" << tcu::TestLog::EndMessage;
3155			result = false;
3156		}
3157	}
3158#endif // defined(CTS_USES_VULKAN)
3159
3160#if defined(CTS_USES_VULKAN)
3161	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3162	{
3163		if ( physicalDeviceVulkan13Features.shaderZeroInitializeWorkgroupMemory == VK_FALSE )
3164		{
3165			log << tcu::TestLog::Message << "Mandatory feature shaderZeroInitializeWorkgroupMemory not supported" << tcu::TestLog::EndMessage;
3166			result = false;
3167		}
3168	}
3169#endif // defined(CTS_USES_VULKAN)
3170
3171#if defined(CTS_USES_VULKAN)
3172	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3173	{
3174		if ( physicalDeviceVulkan13Features.dynamicRendering == VK_FALSE )
3175		{
3176			log << tcu::TestLog::Message << "Mandatory feature dynamicRendering not supported" << tcu::TestLog::EndMessage;
3177			result = false;
3178		}
3179	}
3180#endif // defined(CTS_USES_VULKAN)
3181
3182#if defined(CTS_USES_VULKAN)
3183	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3184	{
3185		if ( physicalDeviceVulkan13Features.shaderIntegerDotProduct == VK_FALSE )
3186		{
3187			log << tcu::TestLog::Message << "Mandatory feature shaderIntegerDotProduct not supported" << tcu::TestLog::EndMessage;
3188			result = false;
3189		}
3190	}
3191#endif // defined(CTS_USES_VULKAN)
3192
3193#if defined(CTS_USES_VULKAN)
3194	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
3195	{
3196		if ( physicalDeviceVulkan13Features.maintenance4 == VK_FALSE )
3197		{
3198			log << tcu::TestLog::Message << "Mandatory feature maintenance4 not supported" << tcu::TestLog::EndMessage;
3199			result = false;
3200		}
3201	}
3202#endif // defined(CTS_USES_VULKAN)
3203
3204#if defined(CTS_USES_VULKAN)
3205	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ConservativeRasterizationMode )
3206	{
3207		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_conservative_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_conservative_rasterization")))
3208		{
3209			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_conservative_rasterization not supported" << tcu::TestLog::EndMessage;
3210			result = false;
3211		}
3212	}
3213#endif // defined(CTS_USES_VULKAN)
3214
3215#if defined(CTS_USES_VULKAN)
3216	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ExtraPrimitiveOverestimationSize )
3217	{
3218		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_conservative_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_conservative_rasterization")))
3219		{
3220			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_conservative_rasterization not supported" << tcu::TestLog::EndMessage;
3221			result = false;
3222		}
3223	}
3224#endif // defined(CTS_USES_VULKAN)
3225
3226#if defined(CTS_USES_VULKAN)
3227	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3SampleLocationsEnable )
3228	{
3229		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_sample_locations")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_sample_locations")))
3230		{
3231			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_sample_locations not supported" << tcu::TestLog::EndMessage;
3232			result = false;
3233		}
3234	}
3235#endif // defined(CTS_USES_VULKAN)
3236
3237#if defined(CTS_USES_VULKAN)
3238	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ColorBlendAdvanced )
3239	{
3240		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_blend_operation_advanced")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_blend_operation_advanced")))
3241		{
3242			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_blend_operation_advanced not supported" << tcu::TestLog::EndMessage;
3243			result = false;
3244		}
3245	}
3246#endif // defined(CTS_USES_VULKAN)
3247
3248#if defined(CTS_USES_VULKAN)
3249	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LineRasterizationMode )
3250	{
3251		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_line_rasterization")))
3252		{
3253			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_line_rasterization not supported" << tcu::TestLog::EndMessage;
3254			result = false;
3255		}
3256	}
3257#endif // defined(CTS_USES_VULKAN)
3258
3259#if defined(CTS_USES_VULKAN)
3260	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LineStippleEnable )
3261	{
3262		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_line_rasterization")))
3263		{
3264			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_line_rasterization not supported" << tcu::TestLog::EndMessage;
3265			result = false;
3266		}
3267	}
3268#endif // defined(CTS_USES_VULKAN)
3269
3270#if defined(CTS_USES_VULKAN)
3271	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ViewportWScalingEnable )
3272	{
3273		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_clip_space_w_scaling")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_clip_space_w_scaling")))
3274		{
3275			log << tcu::TestLog::Message << "Mandatory extension VK_NV_clip_space_w_scaling not supported" << tcu::TestLog::EndMessage;
3276			result = false;
3277		}
3278	}
3279#endif // defined(CTS_USES_VULKAN)
3280
3281#if defined(CTS_USES_VULKAN)
3282	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ViewportSwizzle )
3283	{
3284		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_viewport_swizzle")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_viewport_swizzle")))
3285		{
3286			log << tcu::TestLog::Message << "Mandatory extension VK_NV_viewport_swizzle not supported" << tcu::TestLog::EndMessage;
3287			result = false;
3288		}
3289	}
3290#endif // defined(CTS_USES_VULKAN)
3291
3292#if defined(CTS_USES_VULKAN)
3293	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageToColorEnable )
3294	{
3295		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_fragment_coverage_to_color")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_fragment_coverage_to_color")))
3296		{
3297			log << tcu::TestLog::Message << "Mandatory extension VK_NV_fragment_coverage_to_color not supported" << tcu::TestLog::EndMessage;
3298			result = false;
3299		}
3300	}
3301#endif // defined(CTS_USES_VULKAN)
3302
3303#if defined(CTS_USES_VULKAN)
3304	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageToColorLocation )
3305	{
3306		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_fragment_coverage_to_color")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_fragment_coverage_to_color")))
3307		{
3308			log << tcu::TestLog::Message << "Mandatory extension VK_NV_fragment_coverage_to_color not supported" << tcu::TestLog::EndMessage;
3309			result = false;
3310		}
3311	}
3312#endif // defined(CTS_USES_VULKAN)
3313
3314#if defined(CTS_USES_VULKAN)
3315	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationMode )
3316	{
3317		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_framebuffer_mixed_samples")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_framebuffer_mixed_samples")))
3318		{
3319			log << tcu::TestLog::Message << "Mandatory extension VK_NV_framebuffer_mixed_samples not supported" << tcu::TestLog::EndMessage;
3320			result = false;
3321		}
3322	}
3323#endif // defined(CTS_USES_VULKAN)
3324
3325#if defined(CTS_USES_VULKAN)
3326	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationTableEnable )
3327	{
3328		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_framebuffer_mixed_samples")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_framebuffer_mixed_samples")))
3329		{
3330			log << tcu::TestLog::Message << "Mandatory extension VK_NV_framebuffer_mixed_samples not supported" << tcu::TestLog::EndMessage;
3331			result = false;
3332		}
3333	}
3334#endif // defined(CTS_USES_VULKAN)
3335
3336#if defined(CTS_USES_VULKAN)
3337	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationTable )
3338	{
3339		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_framebuffer_mixed_samples")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_framebuffer_mixed_samples")))
3340		{
3341			log << tcu::TestLog::Message << "Mandatory extension VK_NV_framebuffer_mixed_samples not supported" << tcu::TestLog::EndMessage;
3342			result = false;
3343		}
3344	}
3345#endif // defined(CTS_USES_VULKAN)
3346
3347	return result;
3348}
3349
3350