• 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	{
32		physicalDevice16BitStorageFeatures.sType = getStructureType<VkPhysicalDevice16BitStorageFeatures>();
33		*nextPtr = &physicalDevice16BitStorageFeatures;
34		nextPtr  = &physicalDevice16BitStorageFeatures.pNext;
35	}
36
37	vk::VkPhysicalDevice4444FormatsFeaturesEXT physicalDevice4444FormatsFeaturesEXT;
38	deMemset(&physicalDevice4444FormatsFeaturesEXT, 0, sizeof(physicalDevice4444FormatsFeaturesEXT));
39
40	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_4444_formats") )
41	{
42		physicalDevice4444FormatsFeaturesEXT.sType = getStructureType<VkPhysicalDevice4444FormatsFeaturesEXT>();
43		*nextPtr = &physicalDevice4444FormatsFeaturesEXT;
44		nextPtr  = &physicalDevice4444FormatsFeaturesEXT.pNext;
45	}
46
47	vk::VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures;
48	deMemset(&physicalDevice8BitStorageFeatures, 0, sizeof(physicalDevice8BitStorageFeatures));
49
50	{
51		physicalDevice8BitStorageFeatures.sType = getStructureType<VkPhysicalDevice8BitStorageFeatures>();
52		*nextPtr = &physicalDevice8BitStorageFeatures;
53		nextPtr  = &physicalDevice8BitStorageFeatures.pNext;
54	}
55
56	vk::VkPhysicalDeviceBufferDeviceAddressFeatures physicalDeviceBufferDeviceAddressFeatures;
57	deMemset(&physicalDeviceBufferDeviceAddressFeatures, 0, sizeof(physicalDeviceBufferDeviceAddressFeatures));
58
59	{
60		physicalDeviceBufferDeviceAddressFeatures.sType = getStructureType<VkPhysicalDeviceBufferDeviceAddressFeatures>();
61		*nextPtr = &physicalDeviceBufferDeviceAddressFeatures;
62		nextPtr  = &physicalDeviceBufferDeviceAddressFeatures.pNext;
63	}
64
65	vk::VkPhysicalDeviceColorWriteEnableFeaturesEXT physicalDeviceColorWriteEnableFeaturesEXT;
66	deMemset(&physicalDeviceColorWriteEnableFeaturesEXT, 0, sizeof(physicalDeviceColorWriteEnableFeaturesEXT));
67
68	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_color_write_enable") )
69	{
70		physicalDeviceColorWriteEnableFeaturesEXT.sType = getStructureType<VkPhysicalDeviceColorWriteEnableFeaturesEXT>();
71		*nextPtr = &physicalDeviceColorWriteEnableFeaturesEXT;
72		nextPtr  = &physicalDeviceColorWriteEnableFeaturesEXT.pNext;
73	}
74
75	vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT physicalDeviceDepthClipEnableFeaturesEXT;
76	deMemset(&physicalDeviceDepthClipEnableFeaturesEXT, 0, sizeof(physicalDeviceDepthClipEnableFeaturesEXT));
77
78	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_depth_clip_enable") )
79	{
80		physicalDeviceDepthClipEnableFeaturesEXT.sType = getStructureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT>();
81		*nextPtr = &physicalDeviceDepthClipEnableFeaturesEXT;
82		nextPtr  = &physicalDeviceDepthClipEnableFeaturesEXT.pNext;
83	}
84
85	vk::VkPhysicalDeviceDescriptorIndexingFeatures physicalDeviceDescriptorIndexingFeatures;
86	deMemset(&physicalDeviceDescriptorIndexingFeatures, 0, sizeof(physicalDeviceDescriptorIndexingFeatures));
87
88	{
89		physicalDeviceDescriptorIndexingFeatures.sType = getStructureType<VkPhysicalDeviceDescriptorIndexingFeatures>();
90		*nextPtr = &physicalDeviceDescriptorIndexingFeatures;
91		nextPtr  = &physicalDeviceDescriptorIndexingFeatures.pNext;
92	}
93
94	vk::VkPhysicalDeviceExtendedDynamicState2FeaturesEXT physicalDeviceExtendedDynamicState2FeaturesEXT;
95	deMemset(&physicalDeviceExtendedDynamicState2FeaturesEXT, 0, sizeof(physicalDeviceExtendedDynamicState2FeaturesEXT));
96
97	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_extended_dynamic_state2") )
98	{
99		physicalDeviceExtendedDynamicState2FeaturesEXT.sType = getStructureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>();
100		*nextPtr = &physicalDeviceExtendedDynamicState2FeaturesEXT;
101		nextPtr  = &physicalDeviceExtendedDynamicState2FeaturesEXT.pNext;
102	}
103
104	vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT physicalDeviceFragmentShaderInterlockFeaturesEXT;
105	deMemset(&physicalDeviceFragmentShaderInterlockFeaturesEXT, 0, sizeof(physicalDeviceFragmentShaderInterlockFeaturesEXT));
106
107	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_fragment_shader_interlock") )
108	{
109		physicalDeviceFragmentShaderInterlockFeaturesEXT.sType = getStructureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>();
110		*nextPtr = &physicalDeviceFragmentShaderInterlockFeaturesEXT;
111		nextPtr  = &physicalDeviceFragmentShaderInterlockFeaturesEXT.pNext;
112	}
113
114#if defined(CTS_USES_VULKAN)
115	vk::VkPhysicalDeviceFragmentShadingRateFeaturesKHR physicalDeviceFragmentShadingRateFeaturesKHR;
116	deMemset(&physicalDeviceFragmentShadingRateFeaturesKHR, 0, sizeof(physicalDeviceFragmentShadingRateFeaturesKHR));
117
118	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_fragment_shading_rate") )
119	{
120		physicalDeviceFragmentShadingRateFeaturesKHR.sType = getStructureType<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>();
121		*nextPtr = &physicalDeviceFragmentShadingRateFeaturesKHR;
122		nextPtr  = &physicalDeviceFragmentShadingRateFeaturesKHR.pNext;
123	}
124#endif // defined(CTS_USES_VULKAN)
125
126	vk::VkPhysicalDeviceHostQueryResetFeatures physicalDeviceHostQueryResetFeatures;
127	deMemset(&physicalDeviceHostQueryResetFeatures, 0, sizeof(physicalDeviceHostQueryResetFeatures));
128
129	{
130		physicalDeviceHostQueryResetFeatures.sType = getStructureType<VkPhysicalDeviceHostQueryResetFeatures>();
131		*nextPtr = &physicalDeviceHostQueryResetFeatures;
132		nextPtr  = &physicalDeviceHostQueryResetFeatures.pNext;
133	}
134
135	vk::VkPhysicalDeviceImagelessFramebufferFeatures physicalDeviceImagelessFramebufferFeatures;
136	deMemset(&physicalDeviceImagelessFramebufferFeatures, 0, sizeof(physicalDeviceImagelessFramebufferFeatures));
137
138	{
139		physicalDeviceImagelessFramebufferFeatures.sType = getStructureType<VkPhysicalDeviceImagelessFramebufferFeatures>();
140		*nextPtr = &physicalDeviceImagelessFramebufferFeatures;
141		nextPtr  = &physicalDeviceImagelessFramebufferFeatures.pNext;
142	}
143
144	vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT physicalDeviceIndexTypeUint8FeaturesEXT;
145	deMemset(&physicalDeviceIndexTypeUint8FeaturesEXT, 0, sizeof(physicalDeviceIndexTypeUint8FeaturesEXT));
146
147	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_index_type_uint8") )
148	{
149		physicalDeviceIndexTypeUint8FeaturesEXT.sType = getStructureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>();
150		*nextPtr = &physicalDeviceIndexTypeUint8FeaturesEXT;
151		nextPtr  = &physicalDeviceIndexTypeUint8FeaturesEXT.pNext;
152	}
153
154	vk::VkPhysicalDeviceLineRasterizationFeaturesEXT physicalDeviceLineRasterizationFeaturesEXT;
155	deMemset(&physicalDeviceLineRasterizationFeaturesEXT, 0, sizeof(physicalDeviceLineRasterizationFeaturesEXT));
156
157	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_line_rasterization") )
158	{
159		physicalDeviceLineRasterizationFeaturesEXT.sType = getStructureType<VkPhysicalDeviceLineRasterizationFeaturesEXT>();
160		*nextPtr = &physicalDeviceLineRasterizationFeaturesEXT;
161		nextPtr  = &physicalDeviceLineRasterizationFeaturesEXT.pNext;
162	}
163
164	vk::VkPhysicalDeviceMultiviewFeatures physicalDeviceMultiviewFeatures;
165	deMemset(&physicalDeviceMultiviewFeatures, 0, sizeof(physicalDeviceMultiviewFeatures));
166
167	{
168		physicalDeviceMultiviewFeatures.sType = getStructureType<VkPhysicalDeviceMultiviewFeatures>();
169		*nextPtr = &physicalDeviceMultiviewFeatures;
170		nextPtr  = &physicalDeviceMultiviewFeatures.pNext;
171	}
172
173	vk::VkPhysicalDevicePerformanceQueryFeaturesKHR physicalDevicePerformanceQueryFeaturesKHR;
174	deMemset(&physicalDevicePerformanceQueryFeaturesKHR, 0, sizeof(physicalDevicePerformanceQueryFeaturesKHR));
175
176	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_performance_query") )
177	{
178		physicalDevicePerformanceQueryFeaturesKHR.sType = getStructureType<VkPhysicalDevicePerformanceQueryFeaturesKHR>();
179		*nextPtr = &physicalDevicePerformanceQueryFeaturesKHR;
180		nextPtr  = &physicalDevicePerformanceQueryFeaturesKHR.pNext;
181	}
182
183	vk::VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR physicalDeviceSamplerYcbcrConversionFeaturesKHR;
184	deMemset(&physicalDeviceSamplerYcbcrConversionFeaturesKHR, 0, sizeof(physicalDeviceSamplerYcbcrConversionFeaturesKHR));
185
186	{
187		physicalDeviceSamplerYcbcrConversionFeaturesKHR.sType = getStructureType<VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR>();
188		*nextPtr = &physicalDeviceSamplerYcbcrConversionFeaturesKHR;
189		nextPtr  = &physicalDeviceSamplerYcbcrConversionFeaturesKHR.pNext;
190	}
191
192	vk::VkPhysicalDeviceScalarBlockLayoutFeatures physicalDeviceScalarBlockLayoutFeatures;
193	deMemset(&physicalDeviceScalarBlockLayoutFeatures, 0, sizeof(physicalDeviceScalarBlockLayoutFeatures));
194
195	{
196		physicalDeviceScalarBlockLayoutFeatures.sType = getStructureType<VkPhysicalDeviceScalarBlockLayoutFeatures>();
197		*nextPtr = &physicalDeviceScalarBlockLayoutFeatures;
198		nextPtr  = &physicalDeviceScalarBlockLayoutFeatures.pNext;
199	}
200
201	vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures physicalDeviceSeparateDepthStencilLayoutsFeatures;
202	deMemset(&physicalDeviceSeparateDepthStencilLayoutsFeatures, 0, sizeof(physicalDeviceSeparateDepthStencilLayoutsFeatures));
203
204	{
205		physicalDeviceSeparateDepthStencilLayoutsFeatures.sType = getStructureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>();
206		*nextPtr = &physicalDeviceSeparateDepthStencilLayoutsFeatures;
207		nextPtr  = &physicalDeviceSeparateDepthStencilLayoutsFeatures.pNext;
208	}
209
210	vk::VkPhysicalDeviceShaderAtomicFloatFeaturesEXT physicalDeviceShaderAtomicFloatFeaturesEXT;
211	deMemset(&physicalDeviceShaderAtomicFloatFeaturesEXT, 0, sizeof(physicalDeviceShaderAtomicFloatFeaturesEXT));
212
213	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_atomic_float") )
214	{
215		physicalDeviceShaderAtomicFloatFeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>();
216		*nextPtr = &physicalDeviceShaderAtomicFloatFeaturesEXT;
217		nextPtr  = &physicalDeviceShaderAtomicFloatFeaturesEXT.pNext;
218	}
219
220	vk::VkPhysicalDeviceShaderAtomicInt64Features physicalDeviceShaderAtomicInt64Features;
221	deMemset(&physicalDeviceShaderAtomicInt64Features, 0, sizeof(physicalDeviceShaderAtomicInt64Features));
222
223	{
224		physicalDeviceShaderAtomicInt64Features.sType = getStructureType<VkPhysicalDeviceShaderAtomicInt64Features>();
225		*nextPtr = &physicalDeviceShaderAtomicInt64Features;
226		nextPtr  = &physicalDeviceShaderAtomicInt64Features.pNext;
227	}
228
229	vk::VkPhysicalDeviceShaderClockFeaturesKHR physicalDeviceShaderClockFeaturesKHR;
230	deMemset(&physicalDeviceShaderClockFeaturesKHR, 0, sizeof(physicalDeviceShaderClockFeaturesKHR));
231
232	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_clock") )
233	{
234		physicalDeviceShaderClockFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderClockFeaturesKHR>();
235		*nextPtr = &physicalDeviceShaderClockFeaturesKHR;
236		nextPtr  = &physicalDeviceShaderClockFeaturesKHR.pNext;
237	}
238
239	vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
240	deMemset(&physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT, 0, sizeof(physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT));
241
242	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_demote_to_helper_invocation") )
243	{
244		physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>();
245		*nextPtr = &physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
246		nextPtr  = &physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.pNext;
247	}
248
249	vk::VkPhysicalDeviceShaderFloat16Int8Features physicalDeviceShaderFloat16Int8Features;
250	deMemset(&physicalDeviceShaderFloat16Int8Features, 0, sizeof(physicalDeviceShaderFloat16Int8Features));
251
252	{
253		physicalDeviceShaderFloat16Int8Features.sType = getStructureType<VkPhysicalDeviceShaderFloat16Int8Features>();
254		*nextPtr = &physicalDeviceShaderFloat16Int8Features;
255		nextPtr  = &physicalDeviceShaderFloat16Int8Features.pNext;
256	}
257
258	vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT physicalDeviceShaderImageAtomicInt64FeaturesEXT;
259	deMemset(&physicalDeviceShaderImageAtomicInt64FeaturesEXT, 0, sizeof(physicalDeviceShaderImageAtomicInt64FeaturesEXT));
260
261	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_shader_image_atomic_int64") )
262	{
263		physicalDeviceShaderImageAtomicInt64FeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>();
264		*nextPtr = &physicalDeviceShaderImageAtomicInt64FeaturesEXT;
265		nextPtr  = &physicalDeviceShaderImageAtomicInt64FeaturesEXT.pNext;
266	}
267
268	vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures;
269	deMemset(&physicalDeviceShaderSubgroupExtendedTypesFeatures, 0, sizeof(physicalDeviceShaderSubgroupExtendedTypesFeatures));
270
271	{
272		physicalDeviceShaderSubgroupExtendedTypesFeatures.sType = getStructureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>();
273		*nextPtr = &physicalDeviceShaderSubgroupExtendedTypesFeatures;
274		nextPtr  = &physicalDeviceShaderSubgroupExtendedTypesFeatures.pNext;
275	}
276
277	vk::VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR physicalDeviceShaderTerminateInvocationFeaturesKHR;
278	deMemset(&physicalDeviceShaderTerminateInvocationFeaturesKHR, 0, sizeof(physicalDeviceShaderTerminateInvocationFeaturesKHR));
279
280	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_shader_terminate_invocation") )
281	{
282		physicalDeviceShaderTerminateInvocationFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>();
283		*nextPtr = &physicalDeviceShaderTerminateInvocationFeaturesKHR;
284		nextPtr  = &physicalDeviceShaderTerminateInvocationFeaturesKHR.pNext;
285	}
286
287	vk::VkPhysicalDeviceSubgroupSizeControlFeaturesEXT physicalDeviceSubgroupSizeControlFeaturesEXT;
288	deMemset(&physicalDeviceSubgroupSizeControlFeaturesEXT, 0, sizeof(physicalDeviceSubgroupSizeControlFeaturesEXT));
289
290	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_subgroup_size_control") )
291	{
292		physicalDeviceSubgroupSizeControlFeaturesEXT.sType = getStructureType<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>();
293		*nextPtr = &physicalDeviceSubgroupSizeControlFeaturesEXT;
294		nextPtr  = &physicalDeviceSubgroupSizeControlFeaturesEXT.pNext;
295	}
296
297	vk::VkPhysicalDeviceSynchronization2FeaturesKHR physicalDeviceSynchronization2FeaturesKHR;
298	deMemset(&physicalDeviceSynchronization2FeaturesKHR, 0, sizeof(physicalDeviceSynchronization2FeaturesKHR));
299
300	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_KHR_synchronization2") )
301	{
302		physicalDeviceSynchronization2FeaturesKHR.sType = getStructureType<VkPhysicalDeviceSynchronization2FeaturesKHR>();
303		*nextPtr = &physicalDeviceSynchronization2FeaturesKHR;
304		nextPtr  = &physicalDeviceSynchronization2FeaturesKHR.pNext;
305	}
306
307	vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT physicalDeviceTexelBufferAlignmentFeaturesEXT;
308	deMemset(&physicalDeviceTexelBufferAlignmentFeaturesEXT, 0, sizeof(physicalDeviceTexelBufferAlignmentFeaturesEXT));
309
310	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_texel_buffer_alignment") )
311	{
312		physicalDeviceTexelBufferAlignmentFeaturesEXT.sType = getStructureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>();
313		*nextPtr = &physicalDeviceTexelBufferAlignmentFeaturesEXT;
314		nextPtr  = &physicalDeviceTexelBufferAlignmentFeaturesEXT.pNext;
315	}
316
317	vk::VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT physicalDeviceTextureCompressionASTCHDRFeaturesEXT;
318	deMemset(&physicalDeviceTextureCompressionASTCHDRFeaturesEXT, 0, sizeof(physicalDeviceTextureCompressionASTCHDRFeaturesEXT));
319
320	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_texture_compression_astc_hdr") )
321	{
322		physicalDeviceTextureCompressionASTCHDRFeaturesEXT.sType = getStructureType<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>();
323		*nextPtr = &physicalDeviceTextureCompressionASTCHDRFeaturesEXT;
324		nextPtr  = &physicalDeviceTextureCompressionASTCHDRFeaturesEXT.pNext;
325	}
326
327#if defined(CTS_USES_VULKAN)
328	vk::VkPhysicalDeviceTimelineSemaphoreFeatures physicalDeviceTimelineSemaphoreFeatures;
329	deMemset(&physicalDeviceTimelineSemaphoreFeatures, 0, sizeof(physicalDeviceTimelineSemaphoreFeatures));
330
331	{
332		physicalDeviceTimelineSemaphoreFeatures.sType = getStructureType<VkPhysicalDeviceTimelineSemaphoreFeatures>();
333		*nextPtr = &physicalDeviceTimelineSemaphoreFeatures;
334		nextPtr  = &physicalDeviceTimelineSemaphoreFeatures.pNext;
335	}
336#endif // defined(CTS_USES_VULKAN)
337
338	vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures physicalDeviceUniformBufferStandardLayoutFeatures;
339	deMemset(&physicalDeviceUniformBufferStandardLayoutFeatures, 0, sizeof(physicalDeviceUniformBufferStandardLayoutFeatures));
340
341	{
342		physicalDeviceUniformBufferStandardLayoutFeatures.sType = getStructureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>();
343		*nextPtr = &physicalDeviceUniformBufferStandardLayoutFeatures;
344		nextPtr  = &physicalDeviceUniformBufferStandardLayoutFeatures.pNext;
345	}
346
347	vk::VkPhysicalDeviceVariablePointersFeatures physicalDeviceVariablePointersFeatures;
348	deMemset(&physicalDeviceVariablePointersFeatures, 0, sizeof(physicalDeviceVariablePointersFeatures));
349
350	{
351		physicalDeviceVariablePointersFeatures.sType = getStructureType<VkPhysicalDeviceVariablePointersFeatures>();
352		*nextPtr = &physicalDeviceVariablePointersFeatures;
353		nextPtr  = &physicalDeviceVariablePointersFeatures.pNext;
354	}
355
356	vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT physicalDeviceVertexAttributeDivisorFeaturesEXT;
357	deMemset(&physicalDeviceVertexAttributeDivisorFeaturesEXT, 0, sizeof(physicalDeviceVertexAttributeDivisorFeaturesEXT));
358
359	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_vertex_attribute_divisor") )
360	{
361		physicalDeviceVertexAttributeDivisorFeaturesEXT.sType = getStructureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>();
362		*nextPtr = &physicalDeviceVertexAttributeDivisorFeaturesEXT;
363		nextPtr  = &physicalDeviceVertexAttributeDivisorFeaturesEXT.pNext;
364	}
365
366	vk::VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT physicalDeviceVertexInputDynamicStateFeaturesEXT;
367	deMemset(&physicalDeviceVertexInputDynamicStateFeaturesEXT, 0, sizeof(physicalDeviceVertexInputDynamicStateFeaturesEXT));
368
369	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_vertex_input_dynamic_state") )
370	{
371		physicalDeviceVertexInputDynamicStateFeaturesEXT.sType = getStructureType<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>();
372		*nextPtr = &physicalDeviceVertexInputDynamicStateFeaturesEXT;
373		nextPtr  = &physicalDeviceVertexInputDynamicStateFeaturesEXT.pNext;
374	}
375
376#if defined(CTS_USES_VULKAN)
377	vk::VkPhysicalDeviceVulkan11Features physicalDeviceVulkan11Features;
378	deMemset(&physicalDeviceVulkan11Features, 0, sizeof(physicalDeviceVulkan11Features));
379
380	{
381		physicalDeviceVulkan11Features.sType = getStructureType<VkPhysicalDeviceVulkan11Features>();
382		*nextPtr = &physicalDeviceVulkan11Features;
383		nextPtr  = &physicalDeviceVulkan11Features.pNext;
384	}
385#endif // defined(CTS_USES_VULKAN)
386
387	vk::VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features;
388	deMemset(&physicalDeviceVulkan12Features, 0, sizeof(physicalDeviceVulkan12Features));
389
390	{
391		physicalDeviceVulkan12Features.sType = getStructureType<VkPhysicalDeviceVulkan12Features>();
392		*nextPtr = &physicalDeviceVulkan12Features;
393		nextPtr  = &physicalDeviceVulkan12Features.pNext;
394	}
395
396#if defined(CTS_USES_VULKAN)
397	vk::VkPhysicalDeviceVulkan13Features physicalDeviceVulkan13Features;
398	deMemset(&physicalDeviceVulkan13Features, 0, sizeof(physicalDeviceVulkan13Features));
399
400	{
401		physicalDeviceVulkan13Features.sType = getStructureType<VkPhysicalDeviceVulkan13Features>();
402		*nextPtr = &physicalDeviceVulkan13Features;
403		nextPtr  = &physicalDeviceVulkan13Features.pNext;
404	}
405#endif // defined(CTS_USES_VULKAN)
406
407	vk::VkPhysicalDeviceVulkanMemoryModelFeatures physicalDeviceVulkanMemoryModelFeatures;
408	deMemset(&physicalDeviceVulkanMemoryModelFeatures, 0, sizeof(physicalDeviceVulkanMemoryModelFeatures));
409
410	{
411		physicalDeviceVulkanMemoryModelFeatures.sType = getStructureType<VkPhysicalDeviceVulkanMemoryModelFeatures>();
412		*nextPtr = &physicalDeviceVulkanMemoryModelFeatures;
413		nextPtr  = &physicalDeviceVulkanMemoryModelFeatures.pNext;
414	}
415
416	vk::VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT physicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
417	deMemset(&physicalDeviceYcbcr2Plane444FormatsFeaturesEXT, 0, sizeof(physicalDeviceYcbcr2Plane444FormatsFeaturesEXT));
418
419	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_ycbcr_2plane_444_formats") )
420	{
421		physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.sType = getStructureType<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>();
422		*nextPtr = &physicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
423		nextPtr  = &physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.pNext;
424	}
425
426	vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT physicalDeviceYcbcrImageArraysFeaturesEXT;
427	deMemset(&physicalDeviceYcbcrImageArraysFeaturesEXT, 0, sizeof(physicalDeviceYcbcrImageArraysFeaturesEXT));
428
429	if ( canUseFeaturesStruct(deviceExtensions, usedApiVersion, "VK_EXT_ycbcr_image_arrays") )
430	{
431		physicalDeviceYcbcrImageArraysFeaturesEXT.sType = getStructureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>();
432		*nextPtr = &physicalDeviceYcbcrImageArraysFeaturesEXT;
433		nextPtr  = &physicalDeviceYcbcrImageArraysFeaturesEXT.pNext;
434	}
435
436	context.getInstanceInterface().getPhysicalDeviceFeatures2(context.getPhysicalDevice(), &coreFeatures);
437	bool result = true;
438
439	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_4444_formats")) )
440	{
441		if ( physicalDevice4444FormatsFeaturesEXT.formatA4R4G4B4 == VK_FALSE )
442		{
443			log << tcu::TestLog::Message << "Mandatory feature formatA4R4G4B4 not supported" << tcu::TestLog::EndMessage;
444			result = false;
445		}
446	}
447
448	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_color_write_enable")) )
449	{
450		if ( physicalDeviceColorWriteEnableFeaturesEXT.colorWriteEnable == VK_FALSE )
451		{
452			log << tcu::TestLog::Message << "Mandatory feature colorWriteEnable not supported" << tcu::TestLog::EndMessage;
453			result = false;
454		}
455	}
456
457	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_depth_clip_enable")) )
458	{
459		if ( physicalDeviceDepthClipEnableFeaturesEXT.depthClipEnable == VK_FALSE )
460		{
461			log << tcu::TestLog::Message << "Mandatory feature depthClipEnable not supported" << tcu::TestLog::EndMessage;
462			result = false;
463		}
464	}
465
466	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
467	{
468		if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
469		{
470			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
471			result = false;
472		}
473	}
474
475	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
476	{
477		if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
478		{
479			log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
480			result = false;
481		}
482	}
483
484	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
485	{
486		if ( physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
487		{
488			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
489			result = false;
490		}
491	}
492
493	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
494	{
495		if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
496		{
497			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
498			result = false;
499		}
500	}
501
502	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
503	{
504		if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
505		{
506			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
507			result = false;
508		}
509	}
510
511	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
512	{
513		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
514		{
515			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
516			result = false;
517		}
518	}
519
520	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
521	{
522		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
523		{
524			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
525			result = false;
526		}
527	}
528
529	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
530	{
531		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
532		{
533			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
534			result = false;
535		}
536	}
537
538	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
539	{
540		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
541		{
542			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
543			result = false;
544		}
545	}
546
547	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
548	{
549		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
550		{
551			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
552			result = false;
553		}
554	}
555
556	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
557	{
558		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
559		{
560			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
561			result = false;
562		}
563	}
564
565	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
566	{
567		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound == VK_FALSE )
568		{
569			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
570			result = false;
571		}
572	}
573
574	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
575	{
576		if ( physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray == VK_FALSE )
577		{
578			log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
579			result = false;
580		}
581	}
582
583	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
584	{
585		if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
586		{
587			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
588			result = false;
589		}
590	}
591
592	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
593	{
594		if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
595		{
596			log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
597			result = false;
598		}
599	}
600
601	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
602	{
603		if ( physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
604		{
605			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
606			result = false;
607		}
608	}
609
610	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
611	{
612		if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
613		{
614			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
615			result = false;
616		}
617	}
618
619	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
620	{
621		if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
622		{
623			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
624			result = false;
625		}
626	}
627
628	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
629	{
630		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
631		{
632			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
633			result = false;
634		}
635	}
636
637	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
638	{
639		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
640		{
641			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
642			result = false;
643		}
644	}
645
646	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
647	{
648		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
649		{
650			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
651			result = false;
652		}
653	}
654
655	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
656	{
657		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
658		{
659			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
660			result = false;
661		}
662	}
663
664	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
665	{
666		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
667		{
668			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
669			result = false;
670		}
671	}
672
673	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
674	{
675		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
676		{
677			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
678			result = false;
679		}
680	}
681
682	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
683	{
684		if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound == VK_FALSE )
685		{
686			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
687			result = false;
688		}
689	}
690
691	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
692	{
693		if ( physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray == VK_FALSE )
694		{
695			log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
696			result = false;
697		}
698	}
699
700	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
701	{
702		if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE )
703		{
704			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
705			result = false;
706		}
707	}
708
709	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
710	{
711		if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE )
712		{
713			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
714			result = false;
715		}
716	}
717
718	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
719	{
720		if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE )
721		{
722			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
723			result = false;
724		}
725	}
726
727	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
728	{
729		if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE )
730		{
731			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
732			result = false;
733		}
734	}
735
736	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_extended_dynamic_state2")) )
737	{
738		if ( physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2 == VK_FALSE )
739		{
740			log << tcu::TestLog::Message << "Mandatory feature extendedDynamicState2 not supported" << tcu::TestLog::EndMessage;
741			result = false;
742		}
743	}
744
745#if defined(CTS_USES_VULKAN)
746	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3TessellationDomainOrigin )
747	{
748		if ( coreFeatures.features.tessellationShader == VK_FALSE )
749		{
750			log << tcu::TestLog::Message << "Mandatory feature tessellationShader not supported" << tcu::TestLog::EndMessage;
751			result = false;
752		}
753	}
754#endif // defined(CTS_USES_VULKAN)
755
756#if defined(CTS_USES_VULKAN)
757	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3DepthClampEnable )
758	{
759		if ( coreFeatures.features.depthClamp == VK_FALSE )
760		{
761			log << tcu::TestLog::Message << "Mandatory feature depthClamp not supported" << tcu::TestLog::EndMessage;
762			result = false;
763		}
764	}
765#endif // defined(CTS_USES_VULKAN)
766
767#if defined(CTS_USES_VULKAN)
768	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3PolygonMode )
769	{
770		if ( coreFeatures.features.fillModeNonSolid == VK_FALSE )
771		{
772			log << tcu::TestLog::Message << "Mandatory feature fillModeNonSolid not supported" << tcu::TestLog::EndMessage;
773			result = false;
774		}
775	}
776#endif // defined(CTS_USES_VULKAN)
777
778#if defined(CTS_USES_VULKAN)
779	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3AlphaToOneEnable )
780	{
781		if ( coreFeatures.features.alphaToOne == VK_FALSE )
782		{
783			log << tcu::TestLog::Message << "Mandatory feature alphaToOne not supported" << tcu::TestLog::EndMessage;
784			result = false;
785		}
786	}
787#endif // defined(CTS_USES_VULKAN)
788
789#if defined(CTS_USES_VULKAN)
790	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LogicOpEnable )
791	{
792		if ( coreFeatures.features.logicOp == VK_FALSE )
793		{
794			log << tcu::TestLog::Message << "Mandatory feature logicOp not supported" << tcu::TestLog::EndMessage;
795			result = false;
796		}
797	}
798#endif // defined(CTS_USES_VULKAN)
799
800	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_fragment_shader_interlock")) )
801	{
802		if ( ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderSampleInterlock == VK_FALSE ) && ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderPixelInterlock == VK_FALSE ) && ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderShadingRateInterlock == VK_FALSE ) )
803		{
804			log << tcu::TestLog::Message << "Mandatory feature fragmentShaderSampleInterlock or fragmentShaderPixelInterlock or fragmentShaderShadingRateInterlock not supported" << tcu::TestLog::EndMessage;
805			result = false;
806		}
807	}
808
809	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_host_query_reset")) )
810	{
811		if ( physicalDeviceHostQueryResetFeatures.hostQueryReset == VK_FALSE )
812		{
813			log << tcu::TestLog::Message << "Mandatory feature hostQueryReset not supported" << tcu::TestLog::EndMessage;
814			result = false;
815		}
816	}
817
818	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_index_type_uint8")) )
819	{
820		if ( physicalDeviceIndexTypeUint8FeaturesEXT.indexTypeUint8 == VK_FALSE )
821		{
822			log << tcu::TestLog::Message << "Mandatory feature indexTypeUint8 not supported" << tcu::TestLog::EndMessage;
823			result = false;
824		}
825	}
826
827	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) )
828	{
829		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 ) )
830		{
831			log << tcu::TestLog::Message << "Mandatory feature rectangularLines or bresenhamLines or smoothLines or stippledRectangularLines or stippledBresenhamLines or stippledSmoothLines not supported" << tcu::TestLog::EndMessage;
832			result = false;
833		}
834	}
835
836#if defined(CTS_USES_VULKAN)
837	if ( physicalDeviceMeshShaderFeaturesEXT.primitiveFragmentShadingRateMeshShader )
838	{
839		if ( physicalDeviceFragmentShadingRateFeaturesKHR.primitiveFragmentShadingRate == VK_FALSE )
840		{
841			log << tcu::TestLog::Message << "Mandatory feature primitiveFragmentShadingRate not supported" << tcu::TestLog::EndMessage;
842			result = false;
843		}
844	}
845#endif // defined(CTS_USES_VULKAN)
846
847	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_scalar_block_layout")) )
848	{
849		if ( physicalDeviceScalarBlockLayoutFeatures.scalarBlockLayout == VK_FALSE )
850		{
851			log << tcu::TestLog::Message << "Mandatory feature scalarBlockLayout not supported" << tcu::TestLog::EndMessage;
852			result = false;
853		}
854	}
855
856	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_atomic_float")) && physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32Atomics )
857	{
858		if ( physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32Atomics == VK_FALSE )
859		{
860			log << tcu::TestLog::Message << "Mandatory feature shaderImageFloat32Atomics not supported" << tcu::TestLog::EndMessage;
861			result = false;
862		}
863	}
864
865	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_atomic_float")) && physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32AtomicAdd )
866	{
867		if ( physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32AtomicAdd == VK_FALSE )
868		{
869			log << tcu::TestLog::Message << "Mandatory feature shaderImageFloat32AtomicAdd not supported" << tcu::TestLog::EndMessage;
870			result = false;
871		}
872	}
873
874	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_demote_to_helper_invocation")) )
875	{
876		if ( physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.shaderDemoteToHelperInvocation == VK_FALSE )
877		{
878			log << tcu::TestLog::Message << "Mandatory feature shaderDemoteToHelperInvocation not supported" << tcu::TestLog::EndMessage;
879			result = false;
880		}
881	}
882
883	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) )
884	{
885		if ( coreFeatures.features.shaderInt64 == VK_FALSE )
886		{
887			log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage;
888			result = false;
889		}
890	}
891
892	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) )
893	{
894		if ( physicalDeviceShaderImageAtomicInt64FeaturesEXT.shaderImageInt64Atomics == VK_FALSE )
895		{
896			log << tcu::TestLog::Message << "Mandatory feature shaderImageInt64Atomics not supported" << tcu::TestLog::EndMessage;
897			result = false;
898		}
899	}
900
901	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) && physicalDeviceShaderImageAtomicInt64FeaturesEXT.sparseImageInt64Atomics )
902	{
903		if ( physicalDeviceShaderImageAtomicInt64FeaturesEXT.shaderImageInt64Atomics == VK_FALSE )
904		{
905			log << tcu::TestLog::Message << "Mandatory feature shaderImageInt64Atomics not supported" << tcu::TestLog::EndMessage;
906			result = false;
907		}
908	}
909
910	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_subgroup_size_control")) )
911	{
912		if ( physicalDeviceSubgroupSizeControlFeaturesEXT.subgroupSizeControl == VK_FALSE )
913		{
914			log << tcu::TestLog::Message << "Mandatory feature subgroupSizeControl not supported" << tcu::TestLog::EndMessage;
915			result = false;
916		}
917	}
918
919	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_subgroup_size_control")) )
920	{
921		if ( physicalDeviceSubgroupSizeControlFeaturesEXT.computeFullSubgroups == VK_FALSE )
922		{
923			log << tcu::TestLog::Message << "Mandatory feature computeFullSubgroups not supported" << tcu::TestLog::EndMessage;
924			result = false;
925		}
926	}
927
928	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_texel_buffer_alignment")) )
929	{
930		if ( physicalDeviceTexelBufferAlignmentFeaturesEXT.texelBufferAlignment == VK_FALSE )
931		{
932			log << tcu::TestLog::Message << "Mandatory feature texelBufferAlignment not supported" << tcu::TestLog::EndMessage;
933			result = false;
934		}
935	}
936
937	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_texture_compression_astc_hdr")) )
938	{
939		if ( physicalDeviceTextureCompressionASTCHDRFeaturesEXT.textureCompressionASTC_HDR == VK_FALSE )
940		{
941			log << tcu::TestLog::Message << "Mandatory feature textureCompressionASTC_HDR not supported" << tcu::TestLog::EndMessage;
942			result = false;
943		}
944	}
945
946	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_vertex_attribute_divisor")) )
947	{
948		if ( physicalDeviceVertexAttributeDivisorFeaturesEXT.vertexAttributeInstanceRateDivisor == VK_FALSE )
949		{
950			log << tcu::TestLog::Message << "Mandatory feature vertexAttributeInstanceRateDivisor not supported" << tcu::TestLog::EndMessage;
951			result = false;
952		}
953	}
954
955	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_vertex_input_dynamic_state")) )
956	{
957		if ( physicalDeviceVertexInputDynamicStateFeaturesEXT.vertexInputDynamicState == VK_FALSE )
958		{
959			log << tcu::TestLog::Message << "Mandatory feature vertexInputDynamicState not supported" << tcu::TestLog::EndMessage;
960			result = false;
961		}
962	}
963
964	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_ycbcr_2plane_444_formats")) )
965	{
966		if ( physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.ycbcr2plane444Formats == VK_FALSE )
967		{
968			log << tcu::TestLog::Message << "Mandatory feature ycbcr2plane444Formats not supported" << tcu::TestLog::EndMessage;
969			result = false;
970		}
971	}
972
973	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_ycbcr_image_arrays")) )
974	{
975		if ( physicalDeviceYcbcrImageArraysFeaturesEXT.ycbcrImageArrays == VK_FALSE )
976		{
977			log << tcu::TestLog::Message << "Mandatory feature ycbcrImageArrays not supported" << tcu::TestLog::EndMessage;
978			result = false;
979		}
980	}
981
982	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_16bit_storage")) )
983	{
984		if ( physicalDevice16BitStorageFeatures.storageBuffer16BitAccess == VK_FALSE )
985		{
986			log << tcu::TestLog::Message << "Mandatory feature storageBuffer16BitAccess not supported" << tcu::TestLog::EndMessage;
987			result = false;
988		}
989	}
990
991	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_8bit_storage")) )
992	{
993		if ( physicalDevice8BitStorageFeatures.storageBuffer8BitAccess == VK_FALSE )
994		{
995			log << tcu::TestLog::Message << "Mandatory feature storageBuffer8BitAccess not supported" << tcu::TestLog::EndMessage;
996			result = false;
997		}
998	}
999
1000	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_buffer_device_address")) )
1001	{
1002		if ( physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress == VK_FALSE )
1003		{
1004			log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
1005			result = false;
1006		}
1007	}
1008
1009	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1010	{
1011		if ( physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress == VK_FALSE )
1012		{
1013			log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
1014			result = false;
1015		}
1016	}
1017
1018	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_imageless_framebuffer")) )
1019	{
1020		if ( physicalDeviceImagelessFramebufferFeatures.imagelessFramebuffer == VK_FALSE )
1021		{
1022			log << tcu::TestLog::Message << "Mandatory feature imagelessFramebuffer not supported" << tcu::TestLog::EndMessage;
1023			result = false;
1024		}
1025	}
1026
1027	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_multiview")) )
1028	{
1029		if ( physicalDeviceMultiviewFeatures.multiview == VK_FALSE )
1030		{
1031			log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage;
1032			result = false;
1033		}
1034	}
1035
1036	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_performance_query")) )
1037	{
1038		if ( physicalDevicePerformanceQueryFeaturesKHR.performanceCounterQueryPools == VK_FALSE )
1039		{
1040			log << tcu::TestLog::Message << "Mandatory feature performanceCounterQueryPools not supported" << tcu::TestLog::EndMessage;
1041			result = false;
1042		}
1043	}
1044
1045	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_ycbcr_conversion")) )
1046	{
1047		if ( physicalDeviceSamplerYcbcrConversionFeaturesKHR.samplerYcbcrConversion == VK_FALSE )
1048		{
1049			log << tcu::TestLog::Message << "Mandatory feature samplerYcbcrConversion not supported" << tcu::TestLog::EndMessage;
1050			result = false;
1051		}
1052	}
1053
1054	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_separate_depth_stencil_layouts")) )
1055	{
1056		if ( physicalDeviceSeparateDepthStencilLayoutsFeatures.separateDepthStencilLayouts == VK_FALSE )
1057		{
1058			log << tcu::TestLog::Message << "Mandatory feature separateDepthStencilLayouts not supported" << tcu::TestLog::EndMessage;
1059			result = false;
1060		}
1061	}
1062
1063	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_atomic_int64")) )
1064	{
1065		if ( physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics == VK_FALSE )
1066		{
1067			log << tcu::TestLog::Message << "Mandatory feature shaderBufferInt64Atomics not supported" << tcu::TestLog::EndMessage;
1068			result = false;
1069		}
1070	}
1071
1072	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_clock")) )
1073	{
1074		if ( physicalDeviceShaderClockFeaturesKHR.shaderSubgroupClock == VK_FALSE )
1075		{
1076			log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupClock not supported" << tcu::TestLog::EndMessage;
1077			result = false;
1078		}
1079	}
1080
1081	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_float16_int8")) )
1082	{
1083		if ( ( physicalDeviceShaderFloat16Int8Features.shaderFloat16 == VK_FALSE ) && ( physicalDeviceShaderFloat16Int8Features.shaderInt8 == VK_FALSE ) )
1084		{
1085			log << tcu::TestLog::Message << "Mandatory feature shaderFloat16 or shaderInt8 not supported" << tcu::TestLog::EndMessage;
1086			result = false;
1087		}
1088	}
1089
1090	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_subgroup_extended_types")) )
1091	{
1092		if ( physicalDeviceShaderSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes == VK_FALSE )
1093		{
1094			log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupExtendedTypes not supported" << tcu::TestLog::EndMessage;
1095			result = false;
1096		}
1097	}
1098
1099	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_terminate_invocation")) )
1100	{
1101		if ( physicalDeviceShaderTerminateInvocationFeaturesKHR.shaderTerminateInvocation == VK_FALSE )
1102		{
1103			log << tcu::TestLog::Message << "Mandatory feature shaderTerminateInvocation not supported" << tcu::TestLog::EndMessage;
1104			result = false;
1105		}
1106	}
1107
1108	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_synchronization2")) )
1109	{
1110		if ( physicalDeviceSynchronization2FeaturesKHR.synchronization2 == VK_FALSE )
1111		{
1112			log << tcu::TestLog::Message << "Mandatory feature synchronization2 not supported" << tcu::TestLog::EndMessage;
1113			result = false;
1114		}
1115	}
1116
1117#if defined(CTS_USES_VULKAN)
1118	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_timeline_semaphore")) )
1119	{
1120		if ( physicalDeviceTimelineSemaphoreFeatures.timelineSemaphore == VK_FALSE )
1121		{
1122			log << tcu::TestLog::Message << "Mandatory feature timelineSemaphore not supported" << tcu::TestLog::EndMessage;
1123			result = false;
1124		}
1125	}
1126#endif // defined(CTS_USES_VULKAN)
1127
1128	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_uniform_buffer_standard_layout")) )
1129	{
1130		if ( physicalDeviceUniformBufferStandardLayoutFeatures.uniformBufferStandardLayout == VK_FALSE )
1131		{
1132			log << tcu::TestLog::Message << "Mandatory feature uniformBufferStandardLayout not supported" << tcu::TestLog::EndMessage;
1133			result = false;
1134		}
1135	}
1136
1137	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_variable_pointers")) )
1138	{
1139		if ( physicalDeviceVariablePointersFeatures.variablePointersStorageBuffer == VK_FALSE )
1140		{
1141			log << tcu::TestLog::Message << "Mandatory feature variablePointersStorageBuffer not supported" << tcu::TestLog::EndMessage;
1142			result = false;
1143		}
1144	}
1145
1146	if ( isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_vulkan_memory_model")) )
1147	{
1148		if ( physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModel == VK_FALSE )
1149		{
1150			log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModel not supported" << tcu::TestLog::EndMessage;
1151			result = false;
1152		}
1153	}
1154
1155	{
1156		if ( coreFeatures.features.robustBufferAccess == VK_FALSE )
1157		{
1158			log << tcu::TestLog::Message << "Mandatory feature robustBufferAccess not supported" << tcu::TestLog::EndMessage;
1159			result = false;
1160		}
1161	}
1162
1163	if ( physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics )
1164	{
1165		if ( coreFeatures.features.shaderInt64 == VK_FALSE )
1166		{
1167			log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage;
1168			result = false;
1169		}
1170	}
1171
1172	if ( physicalDeviceVulkan12Features.shaderBufferInt64Atomics )
1173	{
1174		if ( coreFeatures.features.shaderInt64 == VK_FALSE )
1175		{
1176			log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage;
1177			result = false;
1178		}
1179	}
1180
1181	if ( physicalDeviceShaderAtomicInt64Features.shaderSharedInt64Atomics )
1182	{
1183		if ( coreFeatures.features.shaderInt64 == VK_FALSE )
1184		{
1185			log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage;
1186			result = false;
1187		}
1188	}
1189
1190	if ( physicalDeviceVulkan12Features.shaderSharedInt64Atomics )
1191	{
1192		if ( coreFeatures.features.shaderInt64 == VK_FALSE )
1193		{
1194			log << tcu::TestLog::Message << "Mandatory feature shaderInt64 not supported" << tcu::TestLog::EndMessage;
1195			result = false;
1196		}
1197	}
1198
1199#if defined(CTS_USES_VULKAN)
1200	if ( context.contextSupports(vk::ApiVersion(0, 1, 1, 0)) )
1201	{
1202		if ( physicalDeviceMultiviewFeatures.multiview == VK_FALSE )
1203		{
1204			log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage;
1205			result = false;
1206		}
1207	}
1208#endif // defined(CTS_USES_VULKAN)
1209
1210	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1211	{
1212		if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE )
1213		{
1214			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1215			result = false;
1216		}
1217	}
1218
1219	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1220	{
1221		if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE )
1222		{
1223			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1224			result = false;
1225		}
1226	}
1227
1228#if defined(CTS_USES_VULKAN)
1229	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
1230	{
1231		if ( physicalDeviceVulkan11Features.multiview == VK_FALSE )
1232		{
1233			log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage;
1234			result = false;
1235		}
1236	}
1237#endif // defined(CTS_USES_VULKAN)
1238
1239	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
1240	{
1241		if ( physicalDeviceVulkan12Features.subgroupBroadcastDynamicId == VK_FALSE )
1242		{
1243			log << tcu::TestLog::Message << "Mandatory feature subgroupBroadcastDynamicId not supported" << tcu::TestLog::EndMessage;
1244			result = false;
1245		}
1246	}
1247
1248	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
1249	{
1250		if ( physicalDeviceVulkan12Features.shaderSubgroupExtendedTypes == VK_FALSE )
1251		{
1252			log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupExtendedTypes not supported" << tcu::TestLog::EndMessage;
1253			result = false;
1254		}
1255	}
1256
1257	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
1258	{
1259		if ( physicalDeviceVulkan12Features.imagelessFramebuffer == VK_FALSE )
1260		{
1261			log << tcu::TestLog::Message << "Mandatory feature imagelessFramebuffer not supported" << tcu::TestLog::EndMessage;
1262			result = false;
1263		}
1264	}
1265
1266	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
1267	{
1268		if ( physicalDeviceVulkan12Features.uniformBufferStandardLayout == VK_FALSE )
1269		{
1270			log << tcu::TestLog::Message << "Mandatory feature uniformBufferStandardLayout not supported" << tcu::TestLog::EndMessage;
1271			result = false;
1272		}
1273	}
1274
1275	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
1276	{
1277		if ( physicalDeviceVulkan12Features.separateDepthStencilLayouts == VK_FALSE )
1278		{
1279			log << tcu::TestLog::Message << "Mandatory feature separateDepthStencilLayouts not supported" << tcu::TestLog::EndMessage;
1280			result = false;
1281		}
1282	}
1283
1284	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
1285	{
1286		if ( physicalDeviceVulkan12Features.hostQueryReset == VK_FALSE )
1287		{
1288			log << tcu::TestLog::Message << "Mandatory feature hostQueryReset not supported" << tcu::TestLog::EndMessage;
1289			result = false;
1290		}
1291	}
1292
1293#if defined(CTS_USES_VULKAN)
1294	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) )
1295	{
1296		if ( physicalDeviceVulkan12Features.timelineSemaphore == VK_FALSE )
1297		{
1298			log << tcu::TestLog::Message << "Mandatory feature timelineSemaphore not supported" << tcu::TestLog::EndMessage;
1299			result = false;
1300		}
1301	}
1302#endif // defined(CTS_USES_VULKAN)
1303
1304	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1305	{
1306		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
1307		{
1308			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1309			result = false;
1310		}
1311	}
1312
1313	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1314	{
1315		if ( physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
1316		{
1317			log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1318			result = false;
1319		}
1320	}
1321
1322	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1323	{
1324		if ( physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
1325		{
1326			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1327			result = false;
1328		}
1329	}
1330
1331	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1332	{
1333		if ( physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
1334		{
1335			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1336			result = false;
1337		}
1338	}
1339
1340	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1341	{
1342		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
1343		{
1344			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1345			result = false;
1346		}
1347	}
1348
1349	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1350	{
1351		if ( physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
1352		{
1353			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1354			result = false;
1355		}
1356	}
1357
1358	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1359	{
1360		if ( physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
1361		{
1362			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1363			result = false;
1364		}
1365	}
1366
1367	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1368	{
1369		if ( physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
1370		{
1371			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1372			result = false;
1373		}
1374	}
1375
1376	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1377	{
1378		if ( physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
1379		{
1380			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1381			result = false;
1382		}
1383	}
1384
1385	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1386	{
1387		if ( physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
1388		{
1389			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1390			result = false;
1391		}
1392	}
1393
1394	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1395	{
1396		if ( physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
1397		{
1398			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
1399			result = false;
1400		}
1401	}
1402
1403	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1404	{
1405		if ( physicalDeviceVulkan12Features.descriptorBindingPartiallyBound == VK_FALSE )
1406		{
1407			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
1408			result = false;
1409		}
1410	}
1411
1412	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1413	{
1414		if ( physicalDeviceVulkan12Features.runtimeDescriptorArray == VK_FALSE )
1415		{
1416			log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
1417			result = false;
1418		}
1419	}
1420
1421	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics )
1422	{
1423		if ( physicalDeviceVulkan12Features.shaderBufferInt64Atomics == VK_FALSE )
1424		{
1425			log << tcu::TestLog::Message << "Mandatory feature shaderBufferInt64Atomics not supported" << tcu::TestLog::EndMessage;
1426			result = false;
1427		}
1428	}
1429
1430	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_draw_indirect_count")) )
1431	{
1432		if ( physicalDeviceVulkan12Features.drawIndirectCount == VK_FALSE )
1433		{
1434			log << tcu::TestLog::Message << "Mandatory feature drawIndirectCount not supported" << tcu::TestLog::EndMessage;
1435			result = false;
1436		}
1437	}
1438
1439	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_mirror_clamp_to_edge")) )
1440	{
1441		if ( physicalDeviceVulkan12Features.samplerMirrorClampToEdge == VK_FALSE )
1442		{
1443			log << tcu::TestLog::Message << "Mandatory feature samplerMirrorClampToEdge not supported" << tcu::TestLog::EndMessage;
1444			result = false;
1445		}
1446	}
1447
1448	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_sampler_filter_minmax")) )
1449	{
1450		if ( physicalDeviceVulkan12Features.samplerFilterMinmax == VK_FALSE )
1451		{
1452			log << tcu::TestLog::Message << "Mandatory feature samplerFilterMinmax not supported" << tcu::TestLog::EndMessage;
1453			result = false;
1454		}
1455	}
1456
1457	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_viewport_index_layer")) )
1458	{
1459		if ( physicalDeviceVulkan12Features.shaderOutputViewportIndex == VK_FALSE )
1460		{
1461			log << tcu::TestLog::Message << "Mandatory feature shaderOutputViewportIndex not supported" << tcu::TestLog::EndMessage;
1462			result = false;
1463		}
1464	}
1465
1466	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_viewport_index_layer")) )
1467	{
1468		if ( physicalDeviceVulkan12Features.shaderOutputLayer == VK_FALSE )
1469		{
1470			log << tcu::TestLog::Message << "Mandatory feature shaderOutputLayer not supported" << tcu::TestLog::EndMessage;
1471			result = false;
1472		}
1473	}
1474
1475	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1476	{
1477		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
1478		{
1479			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1480			result = false;
1481		}
1482	}
1483
1484	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1485	{
1486		if ( physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
1487		{
1488			log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
1489			result = false;
1490		}
1491	}
1492
1493	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1494	{
1495		if ( physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
1496		{
1497			log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1498			result = false;
1499		}
1500	}
1501
1502	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1503	{
1504		if ( physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
1505		{
1506			log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1507			result = false;
1508		}
1509	}
1510
1511	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1512	{
1513		if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
1514		{
1515			log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
1516			result = false;
1517		}
1518	}
1519
1520	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1521	{
1522		if ( physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
1523		{
1524			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1525			result = false;
1526		}
1527	}
1528
1529	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1530	{
1531		if ( physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
1532		{
1533			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1534			result = false;
1535		}
1536	}
1537
1538	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1539	{
1540		if ( physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
1541		{
1542			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1543			result = false;
1544		}
1545	}
1546
1547	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1548	{
1549		if ( physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
1550		{
1551			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1552			result = false;
1553		}
1554	}
1555
1556	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1557	{
1558		if ( physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
1559		{
1560			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1561			result = false;
1562		}
1563	}
1564
1565	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1566	{
1567		if ( physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
1568		{
1569			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
1570			result = false;
1571		}
1572	}
1573
1574	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1575	{
1576		if ( physicalDeviceVulkan12Features.descriptorBindingPartiallyBound == VK_FALSE )
1577		{
1578			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
1579			result = false;
1580		}
1581	}
1582
1583	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1584	{
1585		if ( physicalDeviceVulkan12Features.runtimeDescriptorArray == VK_FALSE )
1586		{
1587			log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
1588			result = false;
1589		}
1590	}
1591
1592	if ( context.contextSupports(vk::ApiVersion(0, 1, 2, 0)) && isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_KHR_acceleration_structure")) )
1593	{
1594		if ( physicalDeviceVulkan12Features.bufferDeviceAddress == VK_FALSE )
1595		{
1596			log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
1597			result = false;
1598		}
1599	}
1600
1601#if defined(CTS_USES_VULKAN)
1602	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1603	{
1604		if ( physicalDeviceVulkan12Features.bufferDeviceAddress == VK_FALSE )
1605		{
1606			log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
1607			result = false;
1608		}
1609	}
1610#endif // defined(CTS_USES_VULKAN)
1611
1612#if defined(CTS_USES_VULKANSC)
1613	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1614	{
1615		if ( physicalDeviceVulkan12Features.vulkanMemoryModel == VK_FALSE )
1616		{
1617			log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModel not supported" << tcu::TestLog::EndMessage;
1618			result = false;
1619		}
1620	}
1621#endif // defined(CTS_USES_VULKANSC)
1622
1623#if defined(CTS_USES_VULKAN)
1624	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1625	{
1626		if ( physicalDeviceVulkan12Features.vulkanMemoryModelDeviceScope == VK_FALSE )
1627		{
1628			log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModelDeviceScope not supported" << tcu::TestLog::EndMessage;
1629			result = false;
1630		}
1631	}
1632#endif // defined(CTS_USES_VULKAN)
1633
1634#if defined(CTS_USES_VULKAN)
1635	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1636	{
1637		if ( physicalDeviceVulkan13Features.robustImageAccess == VK_FALSE )
1638		{
1639			log << tcu::TestLog::Message << "Mandatory feature robustImageAccess not supported" << tcu::TestLog::EndMessage;
1640			result = false;
1641		}
1642	}
1643#endif // defined(CTS_USES_VULKAN)
1644
1645#if defined(CTS_USES_VULKAN)
1646	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1647	{
1648		if ( physicalDeviceVulkan13Features.inlineUniformBlock == VK_FALSE )
1649		{
1650			log << tcu::TestLog::Message << "Mandatory feature inlineUniformBlock not supported" << tcu::TestLog::EndMessage;
1651			result = false;
1652		}
1653	}
1654#endif // defined(CTS_USES_VULKAN)
1655
1656#if defined(CTS_USES_VULKAN)
1657	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
1658	{
1659		if ( physicalDeviceVulkan13Features.descriptorBindingInlineUniformBlockUpdateAfterBind == VK_FALSE )
1660		{
1661			log << tcu::TestLog::Message << "Mandatory feature descriptorBindingInlineUniformBlockUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
1662			result = false;
1663		}
1664	}
1665#endif // defined(CTS_USES_VULKAN)
1666
1667#if defined(CTS_USES_VULKAN)
1668	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1669	{
1670		if ( physicalDeviceVulkan13Features.pipelineCreationCacheControl == VK_FALSE )
1671		{
1672			log << tcu::TestLog::Message << "Mandatory feature pipelineCreationCacheControl not supported" << tcu::TestLog::EndMessage;
1673			result = false;
1674		}
1675	}
1676#endif // defined(CTS_USES_VULKAN)
1677
1678#if defined(CTS_USES_VULKAN)
1679	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1680	{
1681		if ( physicalDeviceVulkan13Features.privateData == VK_FALSE )
1682		{
1683			log << tcu::TestLog::Message << "Mandatory feature privateData not supported" << tcu::TestLog::EndMessage;
1684			result = false;
1685		}
1686	}
1687#endif // defined(CTS_USES_VULKAN)
1688
1689#if defined(CTS_USES_VULKAN)
1690	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1691	{
1692		if ( physicalDeviceVulkan13Features.shaderDemoteToHelperInvocation == VK_FALSE )
1693		{
1694			log << tcu::TestLog::Message << "Mandatory feature shaderDemoteToHelperInvocation not supported" << tcu::TestLog::EndMessage;
1695			result = false;
1696		}
1697	}
1698#endif // defined(CTS_USES_VULKAN)
1699
1700#if defined(CTS_USES_VULKAN)
1701	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1702	{
1703		if ( physicalDeviceVulkan13Features.shaderTerminateInvocation == VK_FALSE )
1704		{
1705			log << tcu::TestLog::Message << "Mandatory feature shaderTerminateInvocation not supported" << tcu::TestLog::EndMessage;
1706			result = false;
1707		}
1708	}
1709#endif // defined(CTS_USES_VULKAN)
1710
1711#if defined(CTS_USES_VULKAN)
1712	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1713	{
1714		if ( physicalDeviceVulkan13Features.subgroupSizeControl == VK_FALSE )
1715		{
1716			log << tcu::TestLog::Message << "Mandatory feature subgroupSizeControl not supported" << tcu::TestLog::EndMessage;
1717			result = false;
1718		}
1719	}
1720#endif // defined(CTS_USES_VULKAN)
1721
1722#if defined(CTS_USES_VULKAN)
1723	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1724	{
1725		if ( physicalDeviceVulkan13Features.computeFullSubgroups == VK_FALSE )
1726		{
1727			log << tcu::TestLog::Message << "Mandatory feature computeFullSubgroups not supported" << tcu::TestLog::EndMessage;
1728			result = false;
1729		}
1730	}
1731#endif // defined(CTS_USES_VULKAN)
1732
1733#if defined(CTS_USES_VULKAN)
1734	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1735	{
1736		if ( physicalDeviceVulkan13Features.synchronization2 == VK_FALSE )
1737		{
1738			log << tcu::TestLog::Message << "Mandatory feature synchronization2 not supported" << tcu::TestLog::EndMessage;
1739			result = false;
1740		}
1741	}
1742#endif // defined(CTS_USES_VULKAN)
1743
1744#if defined(CTS_USES_VULKAN)
1745	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1746	{
1747		if ( physicalDeviceVulkan13Features.shaderZeroInitializeWorkgroupMemory == VK_FALSE )
1748		{
1749			log << tcu::TestLog::Message << "Mandatory feature shaderZeroInitializeWorkgroupMemory not supported" << tcu::TestLog::EndMessage;
1750			result = false;
1751		}
1752	}
1753#endif // defined(CTS_USES_VULKAN)
1754
1755#if defined(CTS_USES_VULKAN)
1756	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1757	{
1758		if ( physicalDeviceVulkan13Features.dynamicRendering == VK_FALSE )
1759		{
1760			log << tcu::TestLog::Message << "Mandatory feature dynamicRendering not supported" << tcu::TestLog::EndMessage;
1761			result = false;
1762		}
1763	}
1764#endif // defined(CTS_USES_VULKAN)
1765
1766#if defined(CTS_USES_VULKAN)
1767	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1768	{
1769		if ( physicalDeviceVulkan13Features.shaderIntegerDotProduct == VK_FALSE )
1770		{
1771			log << tcu::TestLog::Message << "Mandatory feature shaderIntegerDotProduct not supported" << tcu::TestLog::EndMessage;
1772			result = false;
1773		}
1774	}
1775#endif // defined(CTS_USES_VULKAN)
1776
1777#if defined(CTS_USES_VULKAN)
1778	if ( context.contextSupports(vk::ApiVersion(0, 1, 3, 0)) )
1779	{
1780		if ( physicalDeviceVulkan13Features.maintenance4 == VK_FALSE )
1781		{
1782			log << tcu::TestLog::Message << "Mandatory feature maintenance4 not supported" << tcu::TestLog::EndMessage;
1783			result = false;
1784		}
1785	}
1786#endif // defined(CTS_USES_VULKAN)
1787
1788#if defined(CTS_USES_VULKAN)
1789	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ConservativeRasterizationMode )
1790	{
1791		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_conservative_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_conservative_rasterization")))
1792		{
1793			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_conservative_rasterization not supported" << tcu::TestLog::EndMessage;
1794			result = false;
1795		}
1796	}
1797#endif // defined(CTS_USES_VULKAN)
1798
1799#if defined(CTS_USES_VULKAN)
1800	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ExtraPrimitiveOverestimationSize )
1801	{
1802		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_conservative_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_conservative_rasterization")))
1803		{
1804			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_conservative_rasterization not supported" << tcu::TestLog::EndMessage;
1805			result = false;
1806		}
1807	}
1808#endif // defined(CTS_USES_VULKAN)
1809
1810#if defined(CTS_USES_VULKAN)
1811	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3SampleLocationsEnable )
1812	{
1813		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_sample_locations")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_sample_locations")))
1814		{
1815			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_sample_locations not supported" << tcu::TestLog::EndMessage;
1816			result = false;
1817		}
1818	}
1819#endif // defined(CTS_USES_VULKAN)
1820
1821#if defined(CTS_USES_VULKAN)
1822	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ColorBlendAdvanced )
1823	{
1824		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_blend_operation_advanced")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_blend_operation_advanced")))
1825		{
1826			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_blend_operation_advanced not supported" << tcu::TestLog::EndMessage;
1827			result = false;
1828		}
1829	}
1830#endif // defined(CTS_USES_VULKAN)
1831
1832#if defined(CTS_USES_VULKAN)
1833	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LineRasterizationMode )
1834	{
1835		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_line_rasterization")))
1836		{
1837			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_line_rasterization not supported" << tcu::TestLog::EndMessage;
1838			result = false;
1839		}
1840	}
1841#endif // defined(CTS_USES_VULKAN)
1842
1843#if defined(CTS_USES_VULKAN)
1844	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3LineStippleEnable )
1845	{
1846		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) || isCoreDeviceExtension(usedApiVersion, "VK_EXT_line_rasterization")))
1847		{
1848			log << tcu::TestLog::Message << "Mandatory extension VK_EXT_line_rasterization not supported" << tcu::TestLog::EndMessage;
1849			result = false;
1850		}
1851	}
1852#endif // defined(CTS_USES_VULKAN)
1853
1854#if defined(CTS_USES_VULKAN)
1855	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ViewportWScalingEnable )
1856	{
1857		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_clip_space_w_scaling")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_clip_space_w_scaling")))
1858		{
1859			log << tcu::TestLog::Message << "Mandatory extension VK_NV_clip_space_w_scaling not supported" << tcu::TestLog::EndMessage;
1860			result = false;
1861		}
1862	}
1863#endif // defined(CTS_USES_VULKAN)
1864
1865#if defined(CTS_USES_VULKAN)
1866	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3ViewportSwizzle )
1867	{
1868		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_viewport_swizzle")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_viewport_swizzle")))
1869		{
1870			log << tcu::TestLog::Message << "Mandatory extension VK_NV_viewport_swizzle not supported" << tcu::TestLog::EndMessage;
1871			result = false;
1872		}
1873	}
1874#endif // defined(CTS_USES_VULKAN)
1875
1876#if defined(CTS_USES_VULKAN)
1877	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageToColorEnable )
1878	{
1879		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_fragment_coverage_to_color")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_fragment_coverage_to_color")))
1880		{
1881			log << tcu::TestLog::Message << "Mandatory extension VK_NV_fragment_coverage_to_color not supported" << tcu::TestLog::EndMessage;
1882			result = false;
1883		}
1884	}
1885#endif // defined(CTS_USES_VULKAN)
1886
1887#if defined(CTS_USES_VULKAN)
1888	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageToColorLocation )
1889	{
1890		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_fragment_coverage_to_color")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_fragment_coverage_to_color")))
1891		{
1892			log << tcu::TestLog::Message << "Mandatory extension VK_NV_fragment_coverage_to_color not supported" << tcu::TestLog::EndMessage;
1893			result = false;
1894		}
1895	}
1896#endif // defined(CTS_USES_VULKAN)
1897
1898#if defined(CTS_USES_VULKAN)
1899	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationMode )
1900	{
1901		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_framebuffer_mixed_samples")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_framebuffer_mixed_samples")))
1902		{
1903			log << tcu::TestLog::Message << "Mandatory extension VK_NV_framebuffer_mixed_samples not supported" << tcu::TestLog::EndMessage;
1904			result = false;
1905		}
1906	}
1907#endif // defined(CTS_USES_VULKAN)
1908
1909#if defined(CTS_USES_VULKAN)
1910	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationTableEnable )
1911	{
1912		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_framebuffer_mixed_samples")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_framebuffer_mixed_samples")))
1913		{
1914			log << tcu::TestLog::Message << "Mandatory extension VK_NV_framebuffer_mixed_samples not supported" << tcu::TestLog::EndMessage;
1915			result = false;
1916		}
1917	}
1918#endif // defined(CTS_USES_VULKAN)
1919
1920#if defined(CTS_USES_VULKAN)
1921	if ( physicalDeviceExtendedDynamicState3FeaturesEXT.extendedDynamicState3CoverageModulationTable )
1922	{
1923		if (!(isExtensionStructSupported(deviceExtensions, RequiredExtension("VK_NV_framebuffer_mixed_samples")) || isCoreDeviceExtension(usedApiVersion, "VK_NV_framebuffer_mixed_samples")))
1924		{
1925			log << tcu::TestLog::Message << "Mandatory extension VK_NV_framebuffer_mixed_samples not supported" << tcu::TestLog::EndMessage;
1926			result = false;
1927		}
1928	}
1929#endif // defined(CTS_USES_VULKAN)
1930
1931	return result;
1932}
1933
1934