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