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
6
7
8tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDeviceGeneratedCommandsFeaturesNV (Context& context)
9{
10	const PlatformInterface&				vkp						= context.getPlatformInterface();
11	tcu::TestLog&							log						= context.getTestContext().getLog();
12	tcu::ResultCollector					resultCollector			(log);
13	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
14	const InstanceDriver&					instanceDriver			(instance.getDriver());
15	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
16	const deUint32							queueFamilyIndex		= 0;
17	const deUint32							queueCount				= 1;
18	const float								queuePriority			= 1.0f;
19	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
20	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
21	int										numErrors				= 0;
22	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
23
24
25	VkPhysicalDeviceFeatures emptyDeviceFeatures;
26	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
27
28	// Only non-core extensions will be used when creating the device.
29	vector<const char*>	coreExtensions;
30	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
31	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
32
33	vector<const char*> extensionNames;
34	extensionNames.reserve(nonCoreExtensions.size());
35	for (const string& extension : nonCoreExtensions)
36		extensionNames.push_back(extension.c_str());
37
38	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV>()))
39	{
40		static const Feature features[] =
41		{
42		FEATURE_ITEM (VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV, deviceGeneratedCommands),
43		};
44		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(featuresStruct);
45		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
46	}
47
48	if (numErrors > 0)
49		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
50	else
51		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
52}
53
54
55tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPrivateDataFeatures (Context& context)
56{
57	const PlatformInterface&				vkp						= context.getPlatformInterface();
58	tcu::TestLog&							log						= context.getTestContext().getLog();
59	tcu::ResultCollector					resultCollector			(log);
60	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
61	const InstanceDriver&					instanceDriver			(instance.getDriver());
62	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
63	const deUint32							queueFamilyIndex		= 0;
64	const deUint32							queueCount				= 1;
65	const float								queuePriority			= 1.0f;
66	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
67	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
68	int										numErrors				= 0;
69	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
70
71
72	VkPhysicalDeviceFeatures emptyDeviceFeatures;
73	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
74
75	// Only non-core extensions will be used when creating the device.
76	vector<const char*>	coreExtensions;
77	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
78	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
79
80	vector<const char*> extensionNames;
81	extensionNames.reserve(nonCoreExtensions.size());
82	for (const string& extension : nonCoreExtensions)
83		extensionNames.push_back(extension.c_str());
84
85	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePrivateDataFeatures>()))
86	{
87		static const Feature features[] =
88		{
89		FEATURE_ITEM (VkPhysicalDevicePrivateDataFeatures, privateData),
90		};
91		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePrivateDataFeatures*>(featuresStruct);
92		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
93	}
94
95	if (numErrors > 0)
96		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
97	else
98		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
99}
100
101
102tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVariablePointersFeatures (Context& context)
103{
104	const PlatformInterface&				vkp						= context.getPlatformInterface();
105	tcu::TestLog&							log						= context.getTestContext().getLog();
106	tcu::ResultCollector					resultCollector			(log);
107	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
108	const InstanceDriver&					instanceDriver			(instance.getDriver());
109	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
110	const deUint32							queueFamilyIndex		= 0;
111	const deUint32							queueCount				= 1;
112	const float								queuePriority			= 1.0f;
113	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
114	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
115	int										numErrors				= 0;
116	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
117
118
119	VkPhysicalDeviceFeatures emptyDeviceFeatures;
120	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
121
122	// Only non-core extensions will be used when creating the device.
123	vector<const char*>	coreExtensions;
124	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
125	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
126
127	vector<const char*> extensionNames;
128	extensionNames.reserve(nonCoreExtensions.size());
129	for (const string& extension : nonCoreExtensions)
130		extensionNames.push_back(extension.c_str());
131
132	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVariablePointersFeatures>()))
133	{
134		static const Feature features[] =
135		{
136		FEATURE_ITEM (VkPhysicalDeviceVariablePointersFeatures, variablePointersStorageBuffer),
137		FEATURE_ITEM (VkPhysicalDeviceVariablePointersFeatures, variablePointers),
138		};
139		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures*>(featuresStruct);
140		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
141	}
142
143	if (numErrors > 0)
144		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
145	else
146		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
147}
148
149
150tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMultiviewFeatures (Context& context)
151{
152	const PlatformInterface&				vkp						= context.getPlatformInterface();
153	tcu::TestLog&							log						= context.getTestContext().getLog();
154	tcu::ResultCollector					resultCollector			(log);
155	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
156	const InstanceDriver&					instanceDriver			(instance.getDriver());
157	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
158	const deUint32							queueFamilyIndex		= 0;
159	const deUint32							queueCount				= 1;
160	const float								queuePriority			= 1.0f;
161	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
162	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
163	int										numErrors				= 0;
164	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
165
166
167	VkPhysicalDeviceFeatures emptyDeviceFeatures;
168	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
169
170	// Only non-core extensions will be used when creating the device.
171	vector<const char*>	coreExtensions;
172	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
173	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
174
175	vector<const char*> extensionNames;
176	extensionNames.reserve(nonCoreExtensions.size());
177	for (const string& extension : nonCoreExtensions)
178		extensionNames.push_back(extension.c_str());
179
180	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMultiviewFeatures>()))
181	{
182		static const Feature features[] =
183		{
184		FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiview),
185		FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiviewGeometryShader),
186		FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiviewTessellationShader),
187		};
188		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(featuresStruct);
189		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
190	}
191
192	if (numErrors > 0)
193		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
194	else
195		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
196}
197
198
199tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPresentIdFeaturesKHR (Context& context)
200{
201	const PlatformInterface&				vkp						= context.getPlatformInterface();
202	tcu::TestLog&							log						= context.getTestContext().getLog();
203	tcu::ResultCollector					resultCollector			(log);
204	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
205	const InstanceDriver&					instanceDriver			(instance.getDriver());
206	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
207	const deUint32							queueFamilyIndex		= 0;
208	const deUint32							queueCount				= 1;
209	const float								queuePriority			= 1.0f;
210	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
211	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
212	int										numErrors				= 0;
213	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
214
215
216	VkPhysicalDeviceFeatures emptyDeviceFeatures;
217	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
218
219	// Only non-core extensions will be used when creating the device.
220	vector<const char*>	coreExtensions;
221	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
222	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
223
224	vector<const char*> extensionNames;
225	extensionNames.reserve(nonCoreExtensions.size());
226	for (const string& extension : nonCoreExtensions)
227		extensionNames.push_back(extension.c_str());
228
229	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePresentIdFeaturesKHR>()))
230	{
231		static const Feature features[] =
232		{
233		FEATURE_ITEM (VkPhysicalDevicePresentIdFeaturesKHR, presentId),
234		};
235		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePresentIdFeaturesKHR*>(featuresStruct);
236		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
237	}
238
239	if (numErrors > 0)
240		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
241	else
242		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
243}
244
245
246tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPresentWaitFeaturesKHR (Context& context)
247{
248	const PlatformInterface&				vkp						= context.getPlatformInterface();
249	tcu::TestLog&							log						= context.getTestContext().getLog();
250	tcu::ResultCollector					resultCollector			(log);
251	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
252	const InstanceDriver&					instanceDriver			(instance.getDriver());
253	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
254	const deUint32							queueFamilyIndex		= 0;
255	const deUint32							queueCount				= 1;
256	const float								queuePriority			= 1.0f;
257	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
258	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
259	int										numErrors				= 0;
260	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
261
262
263	VkPhysicalDeviceFeatures emptyDeviceFeatures;
264	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
265
266	// Only non-core extensions will be used when creating the device.
267	vector<const char*>	coreExtensions;
268	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
269	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
270
271	vector<const char*> extensionNames;
272	extensionNames.reserve(nonCoreExtensions.size());
273	for (const string& extension : nonCoreExtensions)
274		extensionNames.push_back(extension.c_str());
275
276	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePresentWaitFeaturesKHR>()))
277	{
278		static const Feature features[] =
279		{
280		FEATURE_ITEM (VkPhysicalDevicePresentWaitFeaturesKHR, presentWait),
281		};
282		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePresentWaitFeaturesKHR*>(featuresStruct);
283		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
284	}
285
286	if (numErrors > 0)
287		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
288	else
289		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
290}
291
292
293tcu::TestStatus createDeviceWithUnsupportedFeaturesTest16BitStorageFeatures (Context& context)
294{
295	const PlatformInterface&				vkp						= context.getPlatformInterface();
296	tcu::TestLog&							log						= context.getTestContext().getLog();
297	tcu::ResultCollector					resultCollector			(log);
298	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
299	const InstanceDriver&					instanceDriver			(instance.getDriver());
300	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
301	const deUint32							queueFamilyIndex		= 0;
302	const deUint32							queueCount				= 1;
303	const float								queuePriority			= 1.0f;
304	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
305	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
306	int										numErrors				= 0;
307	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
308
309
310	VkPhysicalDeviceFeatures emptyDeviceFeatures;
311	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
312
313	// Only non-core extensions will be used when creating the device.
314	vector<const char*>	coreExtensions;
315	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
316	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
317
318	vector<const char*> extensionNames;
319	extensionNames.reserve(nonCoreExtensions.size());
320	for (const string& extension : nonCoreExtensions)
321		extensionNames.push_back(extension.c_str());
322
323	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevice16BitStorageFeatures>()))
324	{
325		static const Feature features[] =
326		{
327		FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storageBuffer16BitAccess),
328		FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, uniformAndStorageBuffer16BitAccess),
329		FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storagePushConstant16),
330		FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storageInputOutput16),
331		};
332		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(featuresStruct);
333		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
334	}
335
336	if (numErrors > 0)
337		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
338	else
339		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
340}
341
342
343tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderSubgroupExtendedTypesFeatures (Context& context)
344{
345	const PlatformInterface&				vkp						= context.getPlatformInterface();
346	tcu::TestLog&							log						= context.getTestContext().getLog();
347	tcu::ResultCollector					resultCollector			(log);
348	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
349	const InstanceDriver&					instanceDriver			(instance.getDriver());
350	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
351	const deUint32							queueFamilyIndex		= 0;
352	const deUint32							queueCount				= 1;
353	const float								queuePriority			= 1.0f;
354	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
355	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
356	int										numErrors				= 0;
357	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
358
359
360	VkPhysicalDeviceFeatures emptyDeviceFeatures;
361	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
362
363	// Only non-core extensions will be used when creating the device.
364	vector<const char*>	coreExtensions;
365	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
366	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
367
368	vector<const char*> extensionNames;
369	extensionNames.reserve(nonCoreExtensions.size());
370	for (const string& extension : nonCoreExtensions)
371		extensionNames.push_back(extension.c_str());
372
373	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>()))
374	{
375		static const Feature features[] =
376		{
377		FEATURE_ITEM (VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures, shaderSubgroupExtendedTypes),
378		};
379		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(featuresStruct);
380		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
381	}
382
383	if (numErrors > 0)
384		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
385	else
386		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
387}
388
389
390tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSamplerYcbcrConversionFeatures (Context& context)
391{
392	const PlatformInterface&				vkp						= context.getPlatformInterface();
393	tcu::TestLog&							log						= context.getTestContext().getLog();
394	tcu::ResultCollector					resultCollector			(log);
395	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
396	const InstanceDriver&					instanceDriver			(instance.getDriver());
397	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
398	const deUint32							queueFamilyIndex		= 0;
399	const deUint32							queueCount				= 1;
400	const float								queuePriority			= 1.0f;
401	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
402	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
403	int										numErrors				= 0;
404	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
405
406
407	VkPhysicalDeviceFeatures emptyDeviceFeatures;
408	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
409
410	// Only non-core extensions will be used when creating the device.
411	vector<const char*>	coreExtensions;
412	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
413	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
414
415	vector<const char*> extensionNames;
416	extensionNames.reserve(nonCoreExtensions.size());
417	for (const string& extension : nonCoreExtensions)
418		extensionNames.push_back(extension.c_str());
419
420	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures>()))
421	{
422		static const Feature features[] =
423		{
424		FEATURE_ITEM (VkPhysicalDeviceSamplerYcbcrConversionFeatures, samplerYcbcrConversion),
425		};
426		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(featuresStruct);
427		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
428	}
429
430	if (numErrors > 0)
431		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
432	else
433		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
434}
435
436
437tcu::TestStatus createDeviceWithUnsupportedFeaturesTestProtectedMemoryFeatures (Context& context)
438{
439	const PlatformInterface&				vkp						= context.getPlatformInterface();
440	tcu::TestLog&							log						= context.getTestContext().getLog();
441	tcu::ResultCollector					resultCollector			(log);
442	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
443	const InstanceDriver&					instanceDriver			(instance.getDriver());
444	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
445	const deUint32							queueFamilyIndex		= 0;
446	const deUint32							queueCount				= 1;
447	const float								queuePriority			= 1.0f;
448	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
449	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
450	int										numErrors				= 0;
451	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
452
453
454	VkPhysicalDeviceFeatures emptyDeviceFeatures;
455	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
456
457	// Only non-core extensions will be used when creating the device.
458	vector<const char*>	coreExtensions;
459	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
460	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
461
462	vector<const char*> extensionNames;
463	extensionNames.reserve(nonCoreExtensions.size());
464	for (const string& extension : nonCoreExtensions)
465		extensionNames.push_back(extension.c_str());
466
467	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceProtectedMemoryFeatures>()))
468	{
469		static const Feature features[] =
470		{
471		FEATURE_ITEM (VkPhysicalDeviceProtectedMemoryFeatures, protectedMemory),
472		};
473		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(featuresStruct);
474		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
475	}
476
477	if (numErrors > 0)
478		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
479	else
480		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
481}
482
483
484tcu::TestStatus createDeviceWithUnsupportedFeaturesTestBlendOperationAdvancedFeaturesEXT (Context& context)
485{
486	const PlatformInterface&				vkp						= context.getPlatformInterface();
487	tcu::TestLog&							log						= context.getTestContext().getLog();
488	tcu::ResultCollector					resultCollector			(log);
489	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
490	const InstanceDriver&					instanceDriver			(instance.getDriver());
491	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
492	const deUint32							queueFamilyIndex		= 0;
493	const deUint32							queueCount				= 1;
494	const float								queuePriority			= 1.0f;
495	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
496	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
497	int										numErrors				= 0;
498	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
499
500
501	VkPhysicalDeviceFeatures emptyDeviceFeatures;
502	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
503
504	// Only non-core extensions will be used when creating the device.
505	vector<const char*>	coreExtensions;
506	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
507	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
508
509	vector<const char*> extensionNames;
510	extensionNames.reserve(nonCoreExtensions.size());
511	for (const string& extension : nonCoreExtensions)
512		extensionNames.push_back(extension.c_str());
513
514	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>()))
515	{
516		static const Feature features[] =
517		{
518		FEATURE_ITEM (VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT, advancedBlendCoherentOperations),
519		};
520		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(featuresStruct);
521		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
522	}
523
524	if (numErrors > 0)
525		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
526	else
527		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
528}
529
530
531tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMultiDrawFeaturesEXT (Context& context)
532{
533	const PlatformInterface&				vkp						= context.getPlatformInterface();
534	tcu::TestLog&							log						= context.getTestContext().getLog();
535	tcu::ResultCollector					resultCollector			(log);
536	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
537	const InstanceDriver&					instanceDriver			(instance.getDriver());
538	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
539	const deUint32							queueFamilyIndex		= 0;
540	const deUint32							queueCount				= 1;
541	const float								queuePriority			= 1.0f;
542	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
543	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
544	int										numErrors				= 0;
545	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
546
547
548	VkPhysicalDeviceFeatures emptyDeviceFeatures;
549	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
550
551	// Only non-core extensions will be used when creating the device.
552	vector<const char*>	coreExtensions;
553	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
554	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
555
556	vector<const char*> extensionNames;
557	extensionNames.reserve(nonCoreExtensions.size());
558	for (const string& extension : nonCoreExtensions)
559		extensionNames.push_back(extension.c_str());
560
561	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMultiDrawFeaturesEXT>()))
562	{
563		static const Feature features[] =
564		{
565		FEATURE_ITEM (VkPhysicalDeviceMultiDrawFeaturesEXT, multiDraw),
566		};
567		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMultiDrawFeaturesEXT*>(featuresStruct);
568		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
569	}
570
571	if (numErrors > 0)
572		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
573	else
574		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
575}
576
577
578tcu::TestStatus createDeviceWithUnsupportedFeaturesTestInlineUniformBlockFeatures (Context& context)
579{
580	const PlatformInterface&				vkp						= context.getPlatformInterface();
581	tcu::TestLog&							log						= context.getTestContext().getLog();
582	tcu::ResultCollector					resultCollector			(log);
583	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
584	const InstanceDriver&					instanceDriver			(instance.getDriver());
585	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
586	const deUint32							queueFamilyIndex		= 0;
587	const deUint32							queueCount				= 1;
588	const float								queuePriority			= 1.0f;
589	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
590	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
591	int										numErrors				= 0;
592	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
593
594
595	VkPhysicalDeviceFeatures emptyDeviceFeatures;
596	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
597
598	// Only non-core extensions will be used when creating the device.
599	vector<const char*>	coreExtensions;
600	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
601	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
602
603	vector<const char*> extensionNames;
604	extensionNames.reserve(nonCoreExtensions.size());
605	for (const string& extension : nonCoreExtensions)
606		extensionNames.push_back(extension.c_str());
607
608	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceInlineUniformBlockFeatures>()))
609	{
610		static const Feature features[] =
611		{
612		FEATURE_ITEM (VkPhysicalDeviceInlineUniformBlockFeatures, inlineUniformBlock),
613		FEATURE_ITEM (VkPhysicalDeviceInlineUniformBlockFeatures, descriptorBindingInlineUniformBlockUpdateAfterBind),
614		};
615		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeatures*>(featuresStruct);
616		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
617	}
618
619	if (numErrors > 0)
620		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
621	else
622		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
623}
624
625
626tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMaintenance4Features (Context& context)
627{
628	const PlatformInterface&				vkp						= context.getPlatformInterface();
629	tcu::TestLog&							log						= context.getTestContext().getLog();
630	tcu::ResultCollector					resultCollector			(log);
631	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
632	const InstanceDriver&					instanceDriver			(instance.getDriver());
633	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
634	const deUint32							queueFamilyIndex		= 0;
635	const deUint32							queueCount				= 1;
636	const float								queuePriority			= 1.0f;
637	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
638	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
639	int										numErrors				= 0;
640	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
641
642
643	VkPhysicalDeviceFeatures emptyDeviceFeatures;
644	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
645
646	// Only non-core extensions will be used when creating the device.
647	vector<const char*>	coreExtensions;
648	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
649	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
650
651	vector<const char*> extensionNames;
652	extensionNames.reserve(nonCoreExtensions.size());
653	for (const string& extension : nonCoreExtensions)
654		extensionNames.push_back(extension.c_str());
655
656	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMaintenance4Features>()))
657	{
658		static const Feature features[] =
659		{
660		FEATURE_ITEM (VkPhysicalDeviceMaintenance4Features, maintenance4),
661		};
662		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMaintenance4Features*>(featuresStruct);
663		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
664	}
665
666	if (numErrors > 0)
667		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
668	else
669		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
670}
671
672
673tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderDrawParametersFeatures (Context& context)
674{
675	const PlatformInterface&				vkp						= context.getPlatformInterface();
676	tcu::TestLog&							log						= context.getTestContext().getLog();
677	tcu::ResultCollector					resultCollector			(log);
678	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
679	const InstanceDriver&					instanceDriver			(instance.getDriver());
680	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
681	const deUint32							queueFamilyIndex		= 0;
682	const deUint32							queueCount				= 1;
683	const float								queuePriority			= 1.0f;
684	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
685	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
686	int										numErrors				= 0;
687	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
688
689
690	VkPhysicalDeviceFeatures emptyDeviceFeatures;
691	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
692
693	// Only non-core extensions will be used when creating the device.
694	vector<const char*>	coreExtensions;
695	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
696	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
697
698	vector<const char*> extensionNames;
699	extensionNames.reserve(nonCoreExtensions.size());
700	for (const string& extension : nonCoreExtensions)
701		extensionNames.push_back(extension.c_str());
702
703	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderDrawParametersFeatures>()))
704	{
705		static const Feature features[] =
706		{
707		FEATURE_ITEM (VkPhysicalDeviceShaderDrawParametersFeatures, shaderDrawParameters),
708		};
709		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures*>(featuresStruct);
710		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
711	}
712
713	if (numErrors > 0)
714		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
715	else
716		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
717}
718
719
720tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderFloat16Int8Features (Context& context)
721{
722	const PlatformInterface&				vkp						= context.getPlatformInterface();
723	tcu::TestLog&							log						= context.getTestContext().getLog();
724	tcu::ResultCollector					resultCollector			(log);
725	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
726	const InstanceDriver&					instanceDriver			(instance.getDriver());
727	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
728	const deUint32							queueFamilyIndex		= 0;
729	const deUint32							queueCount				= 1;
730	const float								queuePriority			= 1.0f;
731	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
732	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
733	int										numErrors				= 0;
734	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
735
736
737	VkPhysicalDeviceFeatures emptyDeviceFeatures;
738	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
739
740	// Only non-core extensions will be used when creating the device.
741	vector<const char*>	coreExtensions;
742	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
743	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
744
745	vector<const char*> extensionNames;
746	extensionNames.reserve(nonCoreExtensions.size());
747	for (const string& extension : nonCoreExtensions)
748		extensionNames.push_back(extension.c_str());
749
750	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderFloat16Int8Features>()))
751	{
752		static const Feature features[] =
753		{
754		FEATURE_ITEM (VkPhysicalDeviceShaderFloat16Int8Features, shaderFloat16),
755		FEATURE_ITEM (VkPhysicalDeviceShaderFloat16Int8Features, shaderInt8),
756		};
757		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features*>(featuresStruct);
758		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
759	}
760
761	if (numErrors > 0)
762		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
763	else
764		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
765}
766
767
768tcu::TestStatus createDeviceWithUnsupportedFeaturesTestHostQueryResetFeatures (Context& context)
769{
770	const PlatformInterface&				vkp						= context.getPlatformInterface();
771	tcu::TestLog&							log						= context.getTestContext().getLog();
772	tcu::ResultCollector					resultCollector			(log);
773	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
774	const InstanceDriver&					instanceDriver			(instance.getDriver());
775	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
776	const deUint32							queueFamilyIndex		= 0;
777	const deUint32							queueCount				= 1;
778	const float								queuePriority			= 1.0f;
779	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
780	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
781	int										numErrors				= 0;
782	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
783
784
785	VkPhysicalDeviceFeatures emptyDeviceFeatures;
786	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
787
788	// Only non-core extensions will be used when creating the device.
789	vector<const char*>	coreExtensions;
790	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
791	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
792
793	vector<const char*> extensionNames;
794	extensionNames.reserve(nonCoreExtensions.size());
795	for (const string& extension : nonCoreExtensions)
796		extensionNames.push_back(extension.c_str());
797
798	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceHostQueryResetFeatures>()))
799	{
800		static const Feature features[] =
801		{
802		FEATURE_ITEM (VkPhysicalDeviceHostQueryResetFeatures, hostQueryReset),
803		};
804		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures*>(featuresStruct);
805		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
806	}
807
808	if (numErrors > 0)
809		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
810	else
811		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
812}
813
814
815tcu::TestStatus createDeviceWithUnsupportedFeaturesTestGlobalPriorityQueryFeaturesKHR (Context& context)
816{
817	const PlatformInterface&				vkp						= context.getPlatformInterface();
818	tcu::TestLog&							log						= context.getTestContext().getLog();
819	tcu::ResultCollector					resultCollector			(log);
820	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
821	const InstanceDriver&					instanceDriver			(instance.getDriver());
822	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
823	const deUint32							queueFamilyIndex		= 0;
824	const deUint32							queueCount				= 1;
825	const float								queuePriority			= 1.0f;
826	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
827	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
828	int										numErrors				= 0;
829	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
830
831
832	VkPhysicalDeviceFeatures emptyDeviceFeatures;
833	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
834
835	// Only non-core extensions will be used when creating the device.
836	vector<const char*>	coreExtensions;
837	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
838	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
839
840	vector<const char*> extensionNames;
841	extensionNames.reserve(nonCoreExtensions.size());
842	for (const string& extension : nonCoreExtensions)
843		extensionNames.push_back(extension.c_str());
844
845	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR>()))
846	{
847		static const Feature features[] =
848		{
849		FEATURE_ITEM (VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR, globalPriorityQuery),
850		};
851		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR*>(featuresStruct);
852		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
853	}
854
855	if (numErrors > 0)
856		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
857	else
858		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
859}
860
861
862tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDeviceMemoryReportFeaturesEXT (Context& context)
863{
864	const PlatformInterface&				vkp						= context.getPlatformInterface();
865	tcu::TestLog&							log						= context.getTestContext().getLog();
866	tcu::ResultCollector					resultCollector			(log);
867	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
868	const InstanceDriver&					instanceDriver			(instance.getDriver());
869	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
870	const deUint32							queueFamilyIndex		= 0;
871	const deUint32							queueCount				= 1;
872	const float								queuePriority			= 1.0f;
873	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
874	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
875	int										numErrors				= 0;
876	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
877
878
879	VkPhysicalDeviceFeatures emptyDeviceFeatures;
880	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
881
882	// Only non-core extensions will be used when creating the device.
883	vector<const char*>	coreExtensions;
884	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
885	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
886
887	vector<const char*> extensionNames;
888	extensionNames.reserve(nonCoreExtensions.size());
889	for (const string& extension : nonCoreExtensions)
890		extensionNames.push_back(extension.c_str());
891
892	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT>()))
893	{
894		static const Feature features[] =
895		{
896		FEATURE_ITEM (VkPhysicalDeviceDeviceMemoryReportFeaturesEXT, deviceMemoryReport),
897		};
898		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(featuresStruct);
899		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
900	}
901
902	if (numErrors > 0)
903		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
904	else
905		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
906}
907
908
909tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDescriptorIndexingFeatures (Context& context)
910{
911	const PlatformInterface&				vkp						= context.getPlatformInterface();
912	tcu::TestLog&							log						= context.getTestContext().getLog();
913	tcu::ResultCollector					resultCollector			(log);
914	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
915	const InstanceDriver&					instanceDriver			(instance.getDriver());
916	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
917	const deUint32							queueFamilyIndex		= 0;
918	const deUint32							queueCount				= 1;
919	const float								queuePriority			= 1.0f;
920	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
921	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
922	int										numErrors				= 0;
923	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
924
925
926	VkPhysicalDeviceFeatures emptyDeviceFeatures;
927	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
928
929	// Only non-core extensions will be used when creating the device.
930	vector<const char*>	coreExtensions;
931	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
932	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
933
934	vector<const char*> extensionNames;
935	extensionNames.reserve(nonCoreExtensions.size());
936	for (const string& extension : nonCoreExtensions)
937		extensionNames.push_back(extension.c_str());
938
939	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDescriptorIndexingFeatures>()))
940	{
941		static const Feature features[] =
942		{
943		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayDynamicIndexing),
944		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayDynamicIndexing),
945		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayDynamicIndexing),
946		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformBufferArrayNonUniformIndexing),
947		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderSampledImageArrayNonUniformIndexing),
948		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageBufferArrayNonUniformIndexing),
949		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageImageArrayNonUniformIndexing),
950		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayNonUniformIndexing),
951		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayNonUniformIndexing),
952		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayNonUniformIndexing),
953		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformBufferUpdateAfterBind),
954		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingSampledImageUpdateAfterBind),
955		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageImageUpdateAfterBind),
956		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageBufferUpdateAfterBind),
957		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformTexelBufferUpdateAfterBind),
958		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageTexelBufferUpdateAfterBind),
959		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUpdateUnusedWhilePending),
960		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingPartiallyBound),
961		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingVariableDescriptorCount),
962		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, runtimeDescriptorArray),
963		};
964		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures*>(featuresStruct);
965		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 20, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
966	}
967
968	if (numErrors > 0)
969		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
970	else
971		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
972}
973
974
975tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTimelineSemaphoreFeatures (Context& context)
976{
977	const PlatformInterface&				vkp						= context.getPlatformInterface();
978	tcu::TestLog&							log						= context.getTestContext().getLog();
979	tcu::ResultCollector					resultCollector			(log);
980	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
981	const InstanceDriver&					instanceDriver			(instance.getDriver());
982	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
983	const deUint32							queueFamilyIndex		= 0;
984	const deUint32							queueCount				= 1;
985	const float								queuePriority			= 1.0f;
986	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
987	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
988	int										numErrors				= 0;
989	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
990
991
992	VkPhysicalDeviceFeatures emptyDeviceFeatures;
993	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
994
995	// Only non-core extensions will be used when creating the device.
996	vector<const char*>	coreExtensions;
997	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
998	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
999
1000	vector<const char*> extensionNames;
1001	extensionNames.reserve(nonCoreExtensions.size());
1002	for (const string& extension : nonCoreExtensions)
1003		extensionNames.push_back(extension.c_str());
1004
1005	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceTimelineSemaphoreFeatures>()))
1006	{
1007		static const Feature features[] =
1008		{
1009		FEATURE_ITEM (VkPhysicalDeviceTimelineSemaphoreFeatures, timelineSemaphore),
1010		};
1011		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures*>(featuresStruct);
1012		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1013	}
1014
1015	if (numErrors > 0)
1016		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1017	else
1018		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1019}
1020
1021
1022tcu::TestStatus createDeviceWithUnsupportedFeaturesTest8BitStorageFeatures (Context& context)
1023{
1024	const PlatformInterface&				vkp						= context.getPlatformInterface();
1025	tcu::TestLog&							log						= context.getTestContext().getLog();
1026	tcu::ResultCollector					resultCollector			(log);
1027	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1028	const InstanceDriver&					instanceDriver			(instance.getDriver());
1029	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1030	const deUint32							queueFamilyIndex		= 0;
1031	const deUint32							queueCount				= 1;
1032	const float								queuePriority			= 1.0f;
1033	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1034	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1035	int										numErrors				= 0;
1036	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1037
1038
1039	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1040	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1041
1042	// Only non-core extensions will be used when creating the device.
1043	vector<const char*>	coreExtensions;
1044	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1045	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1046
1047	vector<const char*> extensionNames;
1048	extensionNames.reserve(nonCoreExtensions.size());
1049	for (const string& extension : nonCoreExtensions)
1050		extensionNames.push_back(extension.c_str());
1051
1052	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevice8BitStorageFeatures>()))
1053	{
1054		static const Feature features[] =
1055		{
1056		FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, storageBuffer8BitAccess),
1057		FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, uniformAndStorageBuffer8BitAccess),
1058		FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, storagePushConstant8),
1059		};
1060		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures*>(featuresStruct);
1061		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1062	}
1063
1064	if (numErrors > 0)
1065		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1066	else
1067		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1068}
1069
1070
1071tcu::TestStatus createDeviceWithUnsupportedFeaturesTestConditionalRenderingFeaturesEXT (Context& context)
1072{
1073	const PlatformInterface&				vkp						= context.getPlatformInterface();
1074	tcu::TestLog&							log						= context.getTestContext().getLog();
1075	tcu::ResultCollector					resultCollector			(log);
1076	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1077	const InstanceDriver&					instanceDriver			(instance.getDriver());
1078	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1079	const deUint32							queueFamilyIndex		= 0;
1080	const deUint32							queueCount				= 1;
1081	const float								queuePriority			= 1.0f;
1082	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1083	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1084	int										numErrors				= 0;
1085	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1086
1087
1088	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1089	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1090
1091	// Only non-core extensions will be used when creating the device.
1092	vector<const char*>	coreExtensions;
1093	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1094	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1095
1096	vector<const char*> extensionNames;
1097	extensionNames.reserve(nonCoreExtensions.size());
1098	for (const string& extension : nonCoreExtensions)
1099		extensionNames.push_back(extension.c_str());
1100
1101	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceConditionalRenderingFeaturesEXT>()))
1102	{
1103		static const Feature features[] =
1104		{
1105		FEATURE_ITEM (VkPhysicalDeviceConditionalRenderingFeaturesEXT, conditionalRendering),
1106		FEATURE_ITEM (VkPhysicalDeviceConditionalRenderingFeaturesEXT, inheritedConditionalRendering),
1107		};
1108		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(featuresStruct);
1109		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1110	}
1111
1112	if (numErrors > 0)
1113		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1114	else
1115		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1116}
1117
1118
1119tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkanMemoryModelFeatures (Context& context)
1120{
1121	const PlatformInterface&				vkp						= context.getPlatformInterface();
1122	tcu::TestLog&							log						= context.getTestContext().getLog();
1123	tcu::ResultCollector					resultCollector			(log);
1124	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1125	const InstanceDriver&					instanceDriver			(instance.getDriver());
1126	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1127	const deUint32							queueFamilyIndex		= 0;
1128	const deUint32							queueCount				= 1;
1129	const float								queuePriority			= 1.0f;
1130	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1131	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1132	int										numErrors				= 0;
1133	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1134
1135
1136	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1137	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1138
1139	// Only non-core extensions will be used when creating the device.
1140	vector<const char*>	coreExtensions;
1141	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1142	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1143
1144	vector<const char*> extensionNames;
1145	extensionNames.reserve(nonCoreExtensions.size());
1146	for (const string& extension : nonCoreExtensions)
1147		extensionNames.push_back(extension.c_str());
1148
1149	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVulkanMemoryModelFeatures>()))
1150	{
1151		static const Feature features[] =
1152		{
1153		FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModel),
1154		FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModelDeviceScope),
1155		FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModelAvailabilityVisibilityChains),
1156		};
1157		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures*>(featuresStruct);
1158		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1159	}
1160
1161	if (numErrors > 0)
1162		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1163	else
1164		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1165}
1166
1167
1168tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderAtomicInt64Features (Context& context)
1169{
1170	const PlatformInterface&				vkp						= context.getPlatformInterface();
1171	tcu::TestLog&							log						= context.getTestContext().getLog();
1172	tcu::ResultCollector					resultCollector			(log);
1173	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1174	const InstanceDriver&					instanceDriver			(instance.getDriver());
1175	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1176	const deUint32							queueFamilyIndex		= 0;
1177	const deUint32							queueCount				= 1;
1178	const float								queuePriority			= 1.0f;
1179	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1180	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1181	int										numErrors				= 0;
1182	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1183
1184
1185	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1186	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1187
1188	// Only non-core extensions will be used when creating the device.
1189	vector<const char*>	coreExtensions;
1190	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1191	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1192
1193	vector<const char*> extensionNames;
1194	extensionNames.reserve(nonCoreExtensions.size());
1195	for (const string& extension : nonCoreExtensions)
1196		extensionNames.push_back(extension.c_str());
1197
1198	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderAtomicInt64Features>()))
1199	{
1200		static const Feature features[] =
1201		{
1202		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicInt64Features, shaderBufferInt64Atomics),
1203		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicInt64Features, shaderSharedInt64Atomics),
1204		};
1205		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features*>(featuresStruct);
1206		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1207	}
1208
1209	if (numErrors > 0)
1210		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1211	else
1212		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1213}
1214
1215
1216tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderAtomicFloatFeaturesEXT (Context& context)
1217{
1218	const PlatformInterface&				vkp						= context.getPlatformInterface();
1219	tcu::TestLog&							log						= context.getTestContext().getLog();
1220	tcu::ResultCollector					resultCollector			(log);
1221	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1222	const InstanceDriver&					instanceDriver			(instance.getDriver());
1223	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1224	const deUint32							queueFamilyIndex		= 0;
1225	const deUint32							queueCount				= 1;
1226	const float								queuePriority			= 1.0f;
1227	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1228	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1229	int										numErrors				= 0;
1230	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1231
1232
1233	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1234	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1235
1236	// Only non-core extensions will be used when creating the device.
1237	vector<const char*>	coreExtensions;
1238	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1239	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1240
1241	vector<const char*> extensionNames;
1242	extensionNames.reserve(nonCoreExtensions.size());
1243	for (const string& extension : nonCoreExtensions)
1244		extensionNames.push_back(extension.c_str());
1245
1246	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>()))
1247	{
1248		static const Feature features[] =
1249		{
1250		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat32Atomics),
1251		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat32AtomicAdd),
1252		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat64Atomics),
1253		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat64AtomicAdd),
1254		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat32Atomics),
1255		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat32AtomicAdd),
1256		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat64Atomics),
1257		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat64AtomicAdd),
1258		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderImageFloat32Atomics),
1259		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderImageFloat32AtomicAdd),
1260		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, sparseImageFloat32Atomics),
1261		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, sparseImageFloat32AtomicAdd),
1262		};
1263		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(featuresStruct);
1264		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 12, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1265	}
1266
1267	if (numErrors > 0)
1268		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1269	else
1270		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1271}
1272
1273
1274tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderAtomicFloat2FeaturesEXT (Context& context)
1275{
1276	const PlatformInterface&				vkp						= context.getPlatformInterface();
1277	tcu::TestLog&							log						= context.getTestContext().getLog();
1278	tcu::ResultCollector					resultCollector			(log);
1279	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1280	const InstanceDriver&					instanceDriver			(instance.getDriver());
1281	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1282	const deUint32							queueFamilyIndex		= 0;
1283	const deUint32							queueCount				= 1;
1284	const float								queuePriority			= 1.0f;
1285	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1286	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1287	int										numErrors				= 0;
1288	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1289
1290
1291	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1292	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1293
1294	// Only non-core extensions will be used when creating the device.
1295	vector<const char*>	coreExtensions;
1296	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1297	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1298
1299	vector<const char*> extensionNames;
1300	extensionNames.reserve(nonCoreExtensions.size());
1301	for (const string& extension : nonCoreExtensions)
1302		extensionNames.push_back(extension.c_str());
1303
1304	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT>()))
1305	{
1306		static const Feature features[] =
1307		{
1308		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderBufferFloat16Atomics),
1309		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderBufferFloat16AtomicAdd),
1310		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderBufferFloat16AtomicMinMax),
1311		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderBufferFloat32AtomicMinMax),
1312		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderBufferFloat64AtomicMinMax),
1313		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderSharedFloat16Atomics),
1314		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderSharedFloat16AtomicAdd),
1315		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderSharedFloat16AtomicMinMax),
1316		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderSharedFloat32AtomicMinMax),
1317		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderSharedFloat64AtomicMinMax),
1318		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, shaderImageFloat32AtomicMinMax),
1319		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT, sparseImageFloat32AtomicMinMax),
1320		};
1321		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT*>(featuresStruct);
1322		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 12, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1323	}
1324
1325	if (numErrors > 0)
1326		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1327	else
1328		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1329}
1330
1331
1332tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVertexAttributeDivisorFeaturesEXT (Context& context)
1333{
1334	const PlatformInterface&				vkp						= context.getPlatformInterface();
1335	tcu::TestLog&							log						= context.getTestContext().getLog();
1336	tcu::ResultCollector					resultCollector			(log);
1337	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1338	const InstanceDriver&					instanceDriver			(instance.getDriver());
1339	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1340	const deUint32							queueFamilyIndex		= 0;
1341	const deUint32							queueCount				= 1;
1342	const float								queuePriority			= 1.0f;
1343	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1344	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1345	int										numErrors				= 0;
1346	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1347
1348
1349	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1350	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1351
1352	// Only non-core extensions will be used when creating the device.
1353	vector<const char*>	coreExtensions;
1354	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1355	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1356
1357	vector<const char*> extensionNames;
1358	extensionNames.reserve(nonCoreExtensions.size());
1359	for (const string& extension : nonCoreExtensions)
1360		extensionNames.push_back(extension.c_str());
1361
1362	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>()))
1363	{
1364		static const Feature features[] =
1365		{
1366		FEATURE_ITEM (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT, vertexAttributeInstanceRateDivisor),
1367		FEATURE_ITEM (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT, vertexAttributeInstanceRateZeroDivisor),
1368		};
1369		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(featuresStruct);
1370		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1371	}
1372
1373	if (numErrors > 0)
1374		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1375	else
1376		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1377}
1378
1379
1380tcu::TestStatus createDeviceWithUnsupportedFeaturesTestASTCDecodeFeaturesEXT (Context& context)
1381{
1382	const PlatformInterface&				vkp						= context.getPlatformInterface();
1383	tcu::TestLog&							log						= context.getTestContext().getLog();
1384	tcu::ResultCollector					resultCollector			(log);
1385	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1386	const InstanceDriver&					instanceDriver			(instance.getDriver());
1387	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1388	const deUint32							queueFamilyIndex		= 0;
1389	const deUint32							queueCount				= 1;
1390	const float								queuePriority			= 1.0f;
1391	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1392	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1393	int										numErrors				= 0;
1394	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1395
1396
1397	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1398	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1399
1400	// Only non-core extensions will be used when creating the device.
1401	vector<const char*>	coreExtensions;
1402	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1403	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1404
1405	vector<const char*> extensionNames;
1406	extensionNames.reserve(nonCoreExtensions.size());
1407	for (const string& extension : nonCoreExtensions)
1408		extensionNames.push_back(extension.c_str());
1409
1410	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceASTCDecodeFeaturesEXT>()))
1411	{
1412		static const Feature features[] =
1413		{
1414		FEATURE_ITEM (VkPhysicalDeviceASTCDecodeFeaturesEXT, decodeModeSharedExponent),
1415		};
1416		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT*>(featuresStruct);
1417		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1418	}
1419
1420	if (numErrors > 0)
1421		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1422	else
1423		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1424}
1425
1426
1427tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTransformFeedbackFeaturesEXT (Context& context)
1428{
1429	const PlatformInterface&				vkp						= context.getPlatformInterface();
1430	tcu::TestLog&							log						= context.getTestContext().getLog();
1431	tcu::ResultCollector					resultCollector			(log);
1432	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1433	const InstanceDriver&					instanceDriver			(instance.getDriver());
1434	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1435	const deUint32							queueFamilyIndex		= 0;
1436	const deUint32							queueCount				= 1;
1437	const float								queuePriority			= 1.0f;
1438	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1439	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1440	int										numErrors				= 0;
1441	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1442
1443
1444	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1445	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1446
1447	// Only non-core extensions will be used when creating the device.
1448	vector<const char*>	coreExtensions;
1449	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1450	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1451
1452	vector<const char*> extensionNames;
1453	extensionNames.reserve(nonCoreExtensions.size());
1454	for (const string& extension : nonCoreExtensions)
1455		extensionNames.push_back(extension.c_str());
1456
1457	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceTransformFeedbackFeaturesEXT>()))
1458	{
1459		static const Feature features[] =
1460		{
1461		FEATURE_ITEM (VkPhysicalDeviceTransformFeedbackFeaturesEXT, transformFeedback),
1462		FEATURE_ITEM (VkPhysicalDeviceTransformFeedbackFeaturesEXT, geometryStreams),
1463		};
1464		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(featuresStruct);
1465		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1466	}
1467
1468	if (numErrors > 0)
1469		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1470	else
1471		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1472}
1473
1474
1475tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRepresentativeFragmentTestFeaturesNV (Context& context)
1476{
1477	const PlatformInterface&				vkp						= context.getPlatformInterface();
1478	tcu::TestLog&							log						= context.getTestContext().getLog();
1479	tcu::ResultCollector					resultCollector			(log);
1480	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1481	const InstanceDriver&					instanceDriver			(instance.getDriver());
1482	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1483	const deUint32							queueFamilyIndex		= 0;
1484	const deUint32							queueCount				= 1;
1485	const float								queuePriority			= 1.0f;
1486	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1487	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1488	int										numErrors				= 0;
1489	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1490
1491
1492	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1493	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1494
1495	// Only non-core extensions will be used when creating the device.
1496	vector<const char*>	coreExtensions;
1497	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1498	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1499
1500	vector<const char*> extensionNames;
1501	extensionNames.reserve(nonCoreExtensions.size());
1502	for (const string& extension : nonCoreExtensions)
1503		extensionNames.push_back(extension.c_str());
1504
1505	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>()))
1506	{
1507		static const Feature features[] =
1508		{
1509		FEATURE_ITEM (VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV, representativeFragmentTest),
1510		};
1511		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(featuresStruct);
1512		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1513	}
1514
1515	if (numErrors > 0)
1516		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1517	else
1518		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1519}
1520
1521
1522tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExclusiveScissorFeaturesNV (Context& context)
1523{
1524	const PlatformInterface&				vkp						= context.getPlatformInterface();
1525	tcu::TestLog&							log						= context.getTestContext().getLog();
1526	tcu::ResultCollector					resultCollector			(log);
1527	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1528	const InstanceDriver&					instanceDriver			(instance.getDriver());
1529	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1530	const deUint32							queueFamilyIndex		= 0;
1531	const deUint32							queueCount				= 1;
1532	const float								queuePriority			= 1.0f;
1533	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1534	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1535	int										numErrors				= 0;
1536	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1537
1538
1539	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1540	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1541
1542	// Only non-core extensions will be used when creating the device.
1543	vector<const char*>	coreExtensions;
1544	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1545	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1546
1547	vector<const char*> extensionNames;
1548	extensionNames.reserve(nonCoreExtensions.size());
1549	for (const string& extension : nonCoreExtensions)
1550		extensionNames.push_back(extension.c_str());
1551
1552	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExclusiveScissorFeaturesNV>()))
1553	{
1554		static const Feature features[] =
1555		{
1556		FEATURE_ITEM (VkPhysicalDeviceExclusiveScissorFeaturesNV, exclusiveScissor),
1557		};
1558		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV*>(featuresStruct);
1559		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1560	}
1561
1562	if (numErrors > 0)
1563		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1564	else
1565		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1566}
1567
1568
1569tcu::TestStatus createDeviceWithUnsupportedFeaturesTestCornerSampledImageFeaturesNV (Context& context)
1570{
1571	const PlatformInterface&				vkp						= context.getPlatformInterface();
1572	tcu::TestLog&							log						= context.getTestContext().getLog();
1573	tcu::ResultCollector					resultCollector			(log);
1574	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1575	const InstanceDriver&					instanceDriver			(instance.getDriver());
1576	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1577	const deUint32							queueFamilyIndex		= 0;
1578	const deUint32							queueCount				= 1;
1579	const float								queuePriority			= 1.0f;
1580	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1581	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1582	int										numErrors				= 0;
1583	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1584
1585
1586	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1587	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1588
1589	// Only non-core extensions will be used when creating the device.
1590	vector<const char*>	coreExtensions;
1591	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1592	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1593
1594	vector<const char*> extensionNames;
1595	extensionNames.reserve(nonCoreExtensions.size());
1596	for (const string& extension : nonCoreExtensions)
1597		extensionNames.push_back(extension.c_str());
1598
1599	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceCornerSampledImageFeaturesNV>()))
1600	{
1601		static const Feature features[] =
1602		{
1603		FEATURE_ITEM (VkPhysicalDeviceCornerSampledImageFeaturesNV, cornerSampledImage),
1604		};
1605		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV*>(featuresStruct);
1606		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1607	}
1608
1609	if (numErrors > 0)
1610		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1611	else
1612		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1613}
1614
1615
1616tcu::TestStatus createDeviceWithUnsupportedFeaturesTestComputeShaderDerivativesFeaturesNV (Context& context)
1617{
1618	const PlatformInterface&				vkp						= context.getPlatformInterface();
1619	tcu::TestLog&							log						= context.getTestContext().getLog();
1620	tcu::ResultCollector					resultCollector			(log);
1621	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1622	const InstanceDriver&					instanceDriver			(instance.getDriver());
1623	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1624	const deUint32							queueFamilyIndex		= 0;
1625	const deUint32							queueCount				= 1;
1626	const float								queuePriority			= 1.0f;
1627	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1628	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1629	int										numErrors				= 0;
1630	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1631
1632
1633	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1634	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1635
1636	// Only non-core extensions will be used when creating the device.
1637	vector<const char*>	coreExtensions;
1638	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1639	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1640
1641	vector<const char*> extensionNames;
1642	extensionNames.reserve(nonCoreExtensions.size());
1643	for (const string& extension : nonCoreExtensions)
1644		extensionNames.push_back(extension.c_str());
1645
1646	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>()))
1647	{
1648		static const Feature features[] =
1649		{
1650		FEATURE_ITEM (VkPhysicalDeviceComputeShaderDerivativesFeaturesNV, computeDerivativeGroupQuads),
1651		FEATURE_ITEM (VkPhysicalDeviceComputeShaderDerivativesFeaturesNV, computeDerivativeGroupLinear),
1652		};
1653		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(featuresStruct);
1654		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1655	}
1656
1657	if (numErrors > 0)
1658		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1659	else
1660		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1661}
1662
1663
1664tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderImageFootprintFeaturesNV (Context& context)
1665{
1666	const PlatformInterface&				vkp						= context.getPlatformInterface();
1667	tcu::TestLog&							log						= context.getTestContext().getLog();
1668	tcu::ResultCollector					resultCollector			(log);
1669	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1670	const InstanceDriver&					instanceDriver			(instance.getDriver());
1671	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1672	const deUint32							queueFamilyIndex		= 0;
1673	const deUint32							queueCount				= 1;
1674	const float								queuePriority			= 1.0f;
1675	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1676	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1677	int										numErrors				= 0;
1678	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1679
1680
1681	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1682	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1683
1684	// Only non-core extensions will be used when creating the device.
1685	vector<const char*>	coreExtensions;
1686	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1687	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1688
1689	vector<const char*> extensionNames;
1690	extensionNames.reserve(nonCoreExtensions.size());
1691	for (const string& extension : nonCoreExtensions)
1692		extensionNames.push_back(extension.c_str());
1693
1694	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderImageFootprintFeaturesNV>()))
1695	{
1696		static const Feature features[] =
1697		{
1698		FEATURE_ITEM (VkPhysicalDeviceShaderImageFootprintFeaturesNV, imageFootprint),
1699		};
1700		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(featuresStruct);
1701		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1702	}
1703
1704	if (numErrors > 0)
1705		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1706	else
1707		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1708}
1709
1710
1711tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDedicatedAllocationImageAliasingFeaturesNV (Context& context)
1712{
1713	const PlatformInterface&				vkp						= context.getPlatformInterface();
1714	tcu::TestLog&							log						= context.getTestContext().getLog();
1715	tcu::ResultCollector					resultCollector			(log);
1716	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1717	const InstanceDriver&					instanceDriver			(instance.getDriver());
1718	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1719	const deUint32							queueFamilyIndex		= 0;
1720	const deUint32							queueCount				= 1;
1721	const float								queuePriority			= 1.0f;
1722	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1723	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1724	int										numErrors				= 0;
1725	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1726
1727
1728	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1729	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1730
1731	// Only non-core extensions will be used when creating the device.
1732	vector<const char*>	coreExtensions;
1733	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1734	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1735
1736	vector<const char*> extensionNames;
1737	extensionNames.reserve(nonCoreExtensions.size());
1738	for (const string& extension : nonCoreExtensions)
1739		extensionNames.push_back(extension.c_str());
1740
1741	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>()))
1742	{
1743		static const Feature features[] =
1744		{
1745		FEATURE_ITEM (VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV, dedicatedAllocationImageAliasing),
1746		};
1747		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(featuresStruct);
1748		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1749	}
1750
1751	if (numErrors > 0)
1752		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1753	else
1754		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1755}
1756
1757
1758tcu::TestStatus createDeviceWithUnsupportedFeaturesTestCopyMemoryIndirectFeaturesNV (Context& context)
1759{
1760	const PlatformInterface&				vkp						= context.getPlatformInterface();
1761	tcu::TestLog&							log						= context.getTestContext().getLog();
1762	tcu::ResultCollector					resultCollector			(log);
1763	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1764	const InstanceDriver&					instanceDriver			(instance.getDriver());
1765	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1766	const deUint32							queueFamilyIndex		= 0;
1767	const deUint32							queueCount				= 1;
1768	const float								queuePriority			= 1.0f;
1769	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1770	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1771	int										numErrors				= 0;
1772	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1773
1774
1775	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1776	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1777
1778	// Only non-core extensions will be used when creating the device.
1779	vector<const char*>	coreExtensions;
1780	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1781	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1782
1783	vector<const char*> extensionNames;
1784	extensionNames.reserve(nonCoreExtensions.size());
1785	for (const string& extension : nonCoreExtensions)
1786		extensionNames.push_back(extension.c_str());
1787
1788	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceCopyMemoryIndirectFeaturesNV>()))
1789	{
1790		static const Feature features[] =
1791		{
1792		FEATURE_ITEM (VkPhysicalDeviceCopyMemoryIndirectFeaturesNV, indirectCopy),
1793		};
1794		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceCopyMemoryIndirectFeaturesNV*>(featuresStruct);
1795		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1796	}
1797
1798	if (numErrors > 0)
1799		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1800	else
1801		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1802}
1803
1804
1805tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMemoryDecompressionFeaturesNV (Context& context)
1806{
1807	const PlatformInterface&				vkp						= context.getPlatformInterface();
1808	tcu::TestLog&							log						= context.getTestContext().getLog();
1809	tcu::ResultCollector					resultCollector			(log);
1810	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1811	const InstanceDriver&					instanceDriver			(instance.getDriver());
1812	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1813	const deUint32							queueFamilyIndex		= 0;
1814	const deUint32							queueCount				= 1;
1815	const float								queuePriority			= 1.0f;
1816	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1817	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1818	int										numErrors				= 0;
1819	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1820
1821
1822	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1823	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1824
1825	// Only non-core extensions will be used when creating the device.
1826	vector<const char*>	coreExtensions;
1827	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1828	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1829
1830	vector<const char*> extensionNames;
1831	extensionNames.reserve(nonCoreExtensions.size());
1832	for (const string& extension : nonCoreExtensions)
1833		extensionNames.push_back(extension.c_str());
1834
1835	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMemoryDecompressionFeaturesNV>()))
1836	{
1837		static const Feature features[] =
1838		{
1839		FEATURE_ITEM (VkPhysicalDeviceMemoryDecompressionFeaturesNV, memoryDecompression),
1840		};
1841		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMemoryDecompressionFeaturesNV*>(featuresStruct);
1842		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1843	}
1844
1845	if (numErrors > 0)
1846		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1847	else
1848		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1849}
1850
1851
1852tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShadingRateImageFeaturesNV (Context& context)
1853{
1854	const PlatformInterface&				vkp						= context.getPlatformInterface();
1855	tcu::TestLog&							log						= context.getTestContext().getLog();
1856	tcu::ResultCollector					resultCollector			(log);
1857	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1858	const InstanceDriver&					instanceDriver			(instance.getDriver());
1859	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1860	const deUint32							queueFamilyIndex		= 0;
1861	const deUint32							queueCount				= 1;
1862	const float								queuePriority			= 1.0f;
1863	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1864	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1865	int										numErrors				= 0;
1866	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1867
1868
1869	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1870	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1871
1872	// Only non-core extensions will be used when creating the device.
1873	vector<const char*>	coreExtensions;
1874	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1875	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1876
1877	vector<const char*> extensionNames;
1878	extensionNames.reserve(nonCoreExtensions.size());
1879	for (const string& extension : nonCoreExtensions)
1880		extensionNames.push_back(extension.c_str());
1881
1882	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShadingRateImageFeaturesNV>()))
1883	{
1884		static const Feature features[] =
1885		{
1886		FEATURE_ITEM (VkPhysicalDeviceShadingRateImageFeaturesNV, shadingRateImage),
1887		FEATURE_ITEM (VkPhysicalDeviceShadingRateImageFeaturesNV, shadingRateCoarseSampleOrder),
1888		};
1889		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV*>(featuresStruct);
1890		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1891	}
1892
1893	if (numErrors > 0)
1894		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1895	else
1896		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1897}
1898
1899
1900tcu::TestStatus createDeviceWithUnsupportedFeaturesTestInvocationMaskFeaturesHUAWEI (Context& context)
1901{
1902	const PlatformInterface&				vkp						= context.getPlatformInterface();
1903	tcu::TestLog&							log						= context.getTestContext().getLog();
1904	tcu::ResultCollector					resultCollector			(log);
1905	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1906	const InstanceDriver&					instanceDriver			(instance.getDriver());
1907	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1908	const deUint32							queueFamilyIndex		= 0;
1909	const deUint32							queueCount				= 1;
1910	const float								queuePriority			= 1.0f;
1911	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1912	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1913	int										numErrors				= 0;
1914	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1915
1916
1917	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1918	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1919
1920	// Only non-core extensions will be used when creating the device.
1921	vector<const char*>	coreExtensions;
1922	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1923	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1924
1925	vector<const char*> extensionNames;
1926	extensionNames.reserve(nonCoreExtensions.size());
1927	for (const string& extension : nonCoreExtensions)
1928		extensionNames.push_back(extension.c_str());
1929
1930	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceInvocationMaskFeaturesHUAWEI>()))
1931	{
1932		static const Feature features[] =
1933		{
1934		FEATURE_ITEM (VkPhysicalDeviceInvocationMaskFeaturesHUAWEI, invocationMask),
1935		};
1936		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI*>(featuresStruct);
1937		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1938	}
1939
1940	if (numErrors > 0)
1941		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1942	else
1943		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1944}
1945
1946
1947tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMeshShaderFeaturesNV (Context& context)
1948{
1949	const PlatformInterface&				vkp						= context.getPlatformInterface();
1950	tcu::TestLog&							log						= context.getTestContext().getLog();
1951	tcu::ResultCollector					resultCollector			(log);
1952	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1953	const InstanceDriver&					instanceDriver			(instance.getDriver());
1954	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1955	const deUint32							queueFamilyIndex		= 0;
1956	const deUint32							queueCount				= 1;
1957	const float								queuePriority			= 1.0f;
1958	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1959	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1960	int										numErrors				= 0;
1961	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1962
1963
1964	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1965	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1966
1967	// Only non-core extensions will be used when creating the device.
1968	vector<const char*>	coreExtensions;
1969	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
1970	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
1971
1972	vector<const char*> extensionNames;
1973	extensionNames.reserve(nonCoreExtensions.size());
1974	for (const string& extension : nonCoreExtensions)
1975		extensionNames.push_back(extension.c_str());
1976
1977	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMeshShaderFeaturesNV>()))
1978	{
1979		static const Feature features[] =
1980		{
1981		FEATURE_ITEM (VkPhysicalDeviceMeshShaderFeaturesNV, taskShader),
1982		FEATURE_ITEM (VkPhysicalDeviceMeshShaderFeaturesNV, meshShader),
1983		};
1984		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV*>(featuresStruct);
1985		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
1986	}
1987
1988	if (numErrors > 0)
1989		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1990	else
1991		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1992}
1993
1994
1995tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMeshShaderFeaturesEXT (Context& context)
1996{
1997	const PlatformInterface&				vkp						= context.getPlatformInterface();
1998	tcu::TestLog&							log						= context.getTestContext().getLog();
1999	tcu::ResultCollector					resultCollector			(log);
2000	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2001	const InstanceDriver&					instanceDriver			(instance.getDriver());
2002	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2003	const deUint32							queueFamilyIndex		= 0;
2004	const deUint32							queueCount				= 1;
2005	const float								queuePriority			= 1.0f;
2006	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2007	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2008	int										numErrors				= 0;
2009	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2010
2011
2012	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2013	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2014
2015	// Only non-core extensions will be used when creating the device.
2016	vector<const char*>	coreExtensions;
2017	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2018	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2019
2020	vector<const char*> extensionNames;
2021	extensionNames.reserve(nonCoreExtensions.size());
2022	for (const string& extension : nonCoreExtensions)
2023		extensionNames.push_back(extension.c_str());
2024
2025	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMeshShaderFeaturesEXT>()))
2026	{
2027		static const Feature features[] =
2028		{
2029		FEATURE_ITEM (VkPhysicalDeviceMeshShaderFeaturesEXT, taskShader),
2030		FEATURE_ITEM (VkPhysicalDeviceMeshShaderFeaturesEXT, meshShader),
2031		FEATURE_ITEM (VkPhysicalDeviceMeshShaderFeaturesEXT, multiviewMeshShader),
2032		FEATURE_ITEM (VkPhysicalDeviceMeshShaderFeaturesEXT, primitiveFragmentShadingRateMeshShader),
2033		FEATURE_ITEM (VkPhysicalDeviceMeshShaderFeaturesEXT, meshShaderQueries),
2034		};
2035		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesEXT*>(featuresStruct);
2036		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 5, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2037	}
2038
2039	if (numErrors > 0)
2040		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2041	else
2042		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2043}
2044
2045
2046tcu::TestStatus createDeviceWithUnsupportedFeaturesTestAccelerationStructureFeaturesKHR (Context& context)
2047{
2048	const PlatformInterface&				vkp						= context.getPlatformInterface();
2049	tcu::TestLog&							log						= context.getTestContext().getLog();
2050	tcu::ResultCollector					resultCollector			(log);
2051	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2052	const InstanceDriver&					instanceDriver			(instance.getDriver());
2053	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2054	const deUint32							queueFamilyIndex		= 0;
2055	const deUint32							queueCount				= 1;
2056	const float								queuePriority			= 1.0f;
2057	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2058	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2059	int										numErrors				= 0;
2060	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2061
2062
2063	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2064	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2065
2066	// Only non-core extensions will be used when creating the device.
2067	vector<const char*>	coreExtensions;
2068	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2069	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2070
2071	vector<const char*> extensionNames;
2072	extensionNames.reserve(nonCoreExtensions.size());
2073	for (const string& extension : nonCoreExtensions)
2074		extensionNames.push_back(extension.c_str());
2075
2076	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceAccelerationStructureFeaturesKHR>()))
2077	{
2078		static const Feature features[] =
2079		{
2080		FEATURE_ITEM (VkPhysicalDeviceAccelerationStructureFeaturesKHR, accelerationStructure),
2081		FEATURE_ITEM (VkPhysicalDeviceAccelerationStructureFeaturesKHR, accelerationStructureCaptureReplay),
2082		FEATURE_ITEM (VkPhysicalDeviceAccelerationStructureFeaturesKHR, accelerationStructureIndirectBuild),
2083		FEATURE_ITEM (VkPhysicalDeviceAccelerationStructureFeaturesKHR, accelerationStructureHostCommands),
2084		FEATURE_ITEM (VkPhysicalDeviceAccelerationStructureFeaturesKHR, descriptorBindingAccelerationStructureUpdateAfterBind),
2085		};
2086		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(featuresStruct);
2087		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 5, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2088	}
2089
2090	if (numErrors > 0)
2091		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2092	else
2093		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2094}
2095
2096
2097tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRayTracingPipelineFeaturesKHR (Context& context)
2098{
2099	const PlatformInterface&				vkp						= context.getPlatformInterface();
2100	tcu::TestLog&							log						= context.getTestContext().getLog();
2101	tcu::ResultCollector					resultCollector			(log);
2102	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2103	const InstanceDriver&					instanceDriver			(instance.getDriver());
2104	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2105	const deUint32							queueFamilyIndex		= 0;
2106	const deUint32							queueCount				= 1;
2107	const float								queuePriority			= 1.0f;
2108	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2109	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2110	int										numErrors				= 0;
2111	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2112
2113
2114	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2115	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2116
2117	// Only non-core extensions will be used when creating the device.
2118	vector<const char*>	coreExtensions;
2119	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2120	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2121
2122	vector<const char*> extensionNames;
2123	extensionNames.reserve(nonCoreExtensions.size());
2124	for (const string& extension : nonCoreExtensions)
2125		extensionNames.push_back(extension.c_str());
2126
2127	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>()))
2128	{
2129		static const Feature features[] =
2130		{
2131		FEATURE_ITEM (VkPhysicalDeviceRayTracingPipelineFeaturesKHR, rayTracingPipeline),
2132		FEATURE_ITEM (VkPhysicalDeviceRayTracingPipelineFeaturesKHR, rayTracingPipelineShaderGroupHandleCaptureReplay),
2133		FEATURE_ITEM (VkPhysicalDeviceRayTracingPipelineFeaturesKHR, rayTracingPipelineShaderGroupHandleCaptureReplayMixed),
2134		FEATURE_ITEM (VkPhysicalDeviceRayTracingPipelineFeaturesKHR, rayTracingPipelineTraceRaysIndirect),
2135		FEATURE_ITEM (VkPhysicalDeviceRayTracingPipelineFeaturesKHR, rayTraversalPrimitiveCulling),
2136		};
2137		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(featuresStruct);
2138		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 5, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2139	}
2140
2141	if (numErrors > 0)
2142		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2143	else
2144		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2145}
2146
2147
2148tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRayQueryFeaturesKHR (Context& context)
2149{
2150	const PlatformInterface&				vkp						= context.getPlatformInterface();
2151	tcu::TestLog&							log						= context.getTestContext().getLog();
2152	tcu::ResultCollector					resultCollector			(log);
2153	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2154	const InstanceDriver&					instanceDriver			(instance.getDriver());
2155	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2156	const deUint32							queueFamilyIndex		= 0;
2157	const deUint32							queueCount				= 1;
2158	const float								queuePriority			= 1.0f;
2159	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2160	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2161	int										numErrors				= 0;
2162	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2163
2164
2165	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2166	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2167
2168	// Only non-core extensions will be used when creating the device.
2169	vector<const char*>	coreExtensions;
2170	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2171	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2172
2173	vector<const char*> extensionNames;
2174	extensionNames.reserve(nonCoreExtensions.size());
2175	for (const string& extension : nonCoreExtensions)
2176		extensionNames.push_back(extension.c_str());
2177
2178	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRayQueryFeaturesKHR>()))
2179	{
2180		static const Feature features[] =
2181		{
2182		FEATURE_ITEM (VkPhysicalDeviceRayQueryFeaturesKHR, rayQuery),
2183		};
2184		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR*>(featuresStruct);
2185		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2186	}
2187
2188	if (numErrors > 0)
2189		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2190	else
2191		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2192}
2193
2194
2195tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRayTracingMaintenance1FeaturesKHR (Context& context)
2196{
2197	const PlatformInterface&				vkp						= context.getPlatformInterface();
2198	tcu::TestLog&							log						= context.getTestContext().getLog();
2199	tcu::ResultCollector					resultCollector			(log);
2200	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2201	const InstanceDriver&					instanceDriver			(instance.getDriver());
2202	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2203	const deUint32							queueFamilyIndex		= 0;
2204	const deUint32							queueCount				= 1;
2205	const float								queuePriority			= 1.0f;
2206	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2207	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2208	int										numErrors				= 0;
2209	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2210
2211
2212	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2213	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2214
2215	// Only non-core extensions will be used when creating the device.
2216	vector<const char*>	coreExtensions;
2217	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2218	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2219
2220	vector<const char*> extensionNames;
2221	extensionNames.reserve(nonCoreExtensions.size());
2222	for (const string& extension : nonCoreExtensions)
2223		extensionNames.push_back(extension.c_str());
2224
2225	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR>()))
2226	{
2227		static const Feature features[] =
2228		{
2229		FEATURE_ITEM (VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR, rayTracingMaintenance1),
2230		FEATURE_ITEM (VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR, rayTracingPipelineTraceRaysIndirect2),
2231		};
2232		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR*>(featuresStruct);
2233		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2234	}
2235
2236	if (numErrors > 0)
2237		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2238	else
2239		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2240}
2241
2242
2243tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentDensityMapFeaturesEXT (Context& context)
2244{
2245	const PlatformInterface&				vkp						= context.getPlatformInterface();
2246	tcu::TestLog&							log						= context.getTestContext().getLog();
2247	tcu::ResultCollector					resultCollector			(log);
2248	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2249	const InstanceDriver&					instanceDriver			(instance.getDriver());
2250	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2251	const deUint32							queueFamilyIndex		= 0;
2252	const deUint32							queueCount				= 1;
2253	const float								queuePriority			= 1.0f;
2254	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2255	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2256	int										numErrors				= 0;
2257	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2258
2259
2260	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2261	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2262
2263	// Only non-core extensions will be used when creating the device.
2264	vector<const char*>	coreExtensions;
2265	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2266	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2267
2268	vector<const char*> extensionNames;
2269	extensionNames.reserve(nonCoreExtensions.size());
2270	for (const string& extension : nonCoreExtensions)
2271		extensionNames.push_back(extension.c_str());
2272
2273	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>()))
2274	{
2275		static const Feature features[] =
2276		{
2277		FEATURE_ITEM (VkPhysicalDeviceFragmentDensityMapFeaturesEXT, fragmentDensityMap),
2278		FEATURE_ITEM (VkPhysicalDeviceFragmentDensityMapFeaturesEXT, fragmentDensityMapDynamic),
2279		FEATURE_ITEM (VkPhysicalDeviceFragmentDensityMapFeaturesEXT, fragmentDensityMapNonSubsampledImages),
2280		};
2281		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(featuresStruct);
2282		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2283	}
2284
2285	if (numErrors > 0)
2286		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2287	else
2288		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2289}
2290
2291
2292tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentDensityMap2FeaturesEXT (Context& context)
2293{
2294	const PlatformInterface&				vkp						= context.getPlatformInterface();
2295	tcu::TestLog&							log						= context.getTestContext().getLog();
2296	tcu::ResultCollector					resultCollector			(log);
2297	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2298	const InstanceDriver&					instanceDriver			(instance.getDriver());
2299	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2300	const deUint32							queueFamilyIndex		= 0;
2301	const deUint32							queueCount				= 1;
2302	const float								queuePriority			= 1.0f;
2303	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2304	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2305	int										numErrors				= 0;
2306	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2307
2308
2309	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2310	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2311
2312	// Only non-core extensions will be used when creating the device.
2313	vector<const char*>	coreExtensions;
2314	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2315	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2316
2317	vector<const char*> extensionNames;
2318	extensionNames.reserve(nonCoreExtensions.size());
2319	for (const string& extension : nonCoreExtensions)
2320		extensionNames.push_back(extension.c_str());
2321
2322	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>()))
2323	{
2324		static const Feature features[] =
2325		{
2326		FEATURE_ITEM (VkPhysicalDeviceFragmentDensityMap2FeaturesEXT, fragmentDensityMapDeferred),
2327		};
2328		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(featuresStruct);
2329		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2330	}
2331
2332	if (numErrors > 0)
2333		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2334	else
2335		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2336}
2337
2338
2339tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentDensityMapOffsetFeaturesQCOM (Context& context)
2340{
2341	const PlatformInterface&				vkp						= context.getPlatformInterface();
2342	tcu::TestLog&							log						= context.getTestContext().getLog();
2343	tcu::ResultCollector					resultCollector			(log);
2344	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2345	const InstanceDriver&					instanceDriver			(instance.getDriver());
2346	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2347	const deUint32							queueFamilyIndex		= 0;
2348	const deUint32							queueCount				= 1;
2349	const float								queuePriority			= 1.0f;
2350	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2351	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2352	int										numErrors				= 0;
2353	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2354
2355
2356	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2357	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2358
2359	// Only non-core extensions will be used when creating the device.
2360	vector<const char*>	coreExtensions;
2361	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2362	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2363
2364	vector<const char*> extensionNames;
2365	extensionNames.reserve(nonCoreExtensions.size());
2366	for (const string& extension : nonCoreExtensions)
2367		extensionNames.push_back(extension.c_str());
2368
2369	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>()))
2370	{
2371		static const Feature features[] =
2372		{
2373		FEATURE_ITEM (VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM, fragmentDensityMapOffset),
2374		};
2375		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM*>(featuresStruct);
2376		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2377	}
2378
2379	if (numErrors > 0)
2380		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2381	else
2382		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2383}
2384
2385
2386tcu::TestStatus createDeviceWithUnsupportedFeaturesTestScalarBlockLayoutFeatures (Context& context)
2387{
2388	const PlatformInterface&				vkp						= context.getPlatformInterface();
2389	tcu::TestLog&							log						= context.getTestContext().getLog();
2390	tcu::ResultCollector					resultCollector			(log);
2391	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2392	const InstanceDriver&					instanceDriver			(instance.getDriver());
2393	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2394	const deUint32							queueFamilyIndex		= 0;
2395	const deUint32							queueCount				= 1;
2396	const float								queuePriority			= 1.0f;
2397	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2398	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2399	int										numErrors				= 0;
2400	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2401
2402
2403	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2404	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2405
2406	// Only non-core extensions will be used when creating the device.
2407	vector<const char*>	coreExtensions;
2408	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2409	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2410
2411	vector<const char*> extensionNames;
2412	extensionNames.reserve(nonCoreExtensions.size());
2413	for (const string& extension : nonCoreExtensions)
2414		extensionNames.push_back(extension.c_str());
2415
2416	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceScalarBlockLayoutFeatures>()))
2417	{
2418		static const Feature features[] =
2419		{
2420		FEATURE_ITEM (VkPhysicalDeviceScalarBlockLayoutFeatures, scalarBlockLayout),
2421		};
2422		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures*>(featuresStruct);
2423		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2424	}
2425
2426	if (numErrors > 0)
2427		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2428	else
2429		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2430}
2431
2432
2433tcu::TestStatus createDeviceWithUnsupportedFeaturesTestUniformBufferStandardLayoutFeatures (Context& context)
2434{
2435	const PlatformInterface&				vkp						= context.getPlatformInterface();
2436	tcu::TestLog&							log						= context.getTestContext().getLog();
2437	tcu::ResultCollector					resultCollector			(log);
2438	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2439	const InstanceDriver&					instanceDriver			(instance.getDriver());
2440	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2441	const deUint32							queueFamilyIndex		= 0;
2442	const deUint32							queueCount				= 1;
2443	const float								queuePriority			= 1.0f;
2444	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2445	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2446	int										numErrors				= 0;
2447	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2448
2449
2450	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2451	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2452
2453	// Only non-core extensions will be used when creating the device.
2454	vector<const char*>	coreExtensions;
2455	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2456	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2457
2458	vector<const char*> extensionNames;
2459	extensionNames.reserve(nonCoreExtensions.size());
2460	for (const string& extension : nonCoreExtensions)
2461		extensionNames.push_back(extension.c_str());
2462
2463	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>()))
2464	{
2465		static const Feature features[] =
2466		{
2467		FEATURE_ITEM (VkPhysicalDeviceUniformBufferStandardLayoutFeatures, uniformBufferStandardLayout),
2468		};
2469		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(featuresStruct);
2470		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2471	}
2472
2473	if (numErrors > 0)
2474		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2475	else
2476		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2477}
2478
2479
2480tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDepthClipEnableFeaturesEXT (Context& context)
2481{
2482	const PlatformInterface&				vkp						= context.getPlatformInterface();
2483	tcu::TestLog&							log						= context.getTestContext().getLog();
2484	tcu::ResultCollector					resultCollector			(log);
2485	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2486	const InstanceDriver&					instanceDriver			(instance.getDriver());
2487	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2488	const deUint32							queueFamilyIndex		= 0;
2489	const deUint32							queueCount				= 1;
2490	const float								queuePriority			= 1.0f;
2491	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2492	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2493	int										numErrors				= 0;
2494	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2495
2496
2497	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2498	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2499
2500	// Only non-core extensions will be used when creating the device.
2501	vector<const char*>	coreExtensions;
2502	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2503	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2504
2505	vector<const char*> extensionNames;
2506	extensionNames.reserve(nonCoreExtensions.size());
2507	for (const string& extension : nonCoreExtensions)
2508		extensionNames.push_back(extension.c_str());
2509
2510	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT>()))
2511	{
2512		static const Feature features[] =
2513		{
2514		FEATURE_ITEM (VkPhysicalDeviceDepthClipEnableFeaturesEXT, depthClipEnable),
2515		};
2516		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(featuresStruct);
2517		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2518	}
2519
2520	if (numErrors > 0)
2521		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2522	else
2523		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2524}
2525
2526
2527tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMemoryPriorityFeaturesEXT (Context& context)
2528{
2529	const PlatformInterface&				vkp						= context.getPlatformInterface();
2530	tcu::TestLog&							log						= context.getTestContext().getLog();
2531	tcu::ResultCollector					resultCollector			(log);
2532	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2533	const InstanceDriver&					instanceDriver			(instance.getDriver());
2534	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2535	const deUint32							queueFamilyIndex		= 0;
2536	const deUint32							queueCount				= 1;
2537	const float								queuePriority			= 1.0f;
2538	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2539	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2540	int										numErrors				= 0;
2541	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2542
2543
2544	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2545	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2546
2547	// Only non-core extensions will be used when creating the device.
2548	vector<const char*>	coreExtensions;
2549	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2550	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2551
2552	vector<const char*> extensionNames;
2553	extensionNames.reserve(nonCoreExtensions.size());
2554	for (const string& extension : nonCoreExtensions)
2555		extensionNames.push_back(extension.c_str());
2556
2557	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMemoryPriorityFeaturesEXT>()))
2558	{
2559		static const Feature features[] =
2560		{
2561		FEATURE_ITEM (VkPhysicalDeviceMemoryPriorityFeaturesEXT, memoryPriority),
2562		};
2563		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(featuresStruct);
2564		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2565	}
2566
2567	if (numErrors > 0)
2568		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2569	else
2570		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2571}
2572
2573
2574tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPageableDeviceLocalMemoryFeaturesEXT (Context& context)
2575{
2576	const PlatformInterface&				vkp						= context.getPlatformInterface();
2577	tcu::TestLog&							log						= context.getTestContext().getLog();
2578	tcu::ResultCollector					resultCollector			(log);
2579	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2580	const InstanceDriver&					instanceDriver			(instance.getDriver());
2581	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2582	const deUint32							queueFamilyIndex		= 0;
2583	const deUint32							queueCount				= 1;
2584	const float								queuePriority			= 1.0f;
2585	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2586	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2587	int										numErrors				= 0;
2588	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2589
2590
2591	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2592	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2593
2594	// Only non-core extensions will be used when creating the device.
2595	vector<const char*>	coreExtensions;
2596	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2597	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2598
2599	vector<const char*> extensionNames;
2600	extensionNames.reserve(nonCoreExtensions.size());
2601	for (const string& extension : nonCoreExtensions)
2602		extensionNames.push_back(extension.c_str());
2603
2604	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>()))
2605	{
2606		static const Feature features[] =
2607		{
2608		FEATURE_ITEM (VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT, pageableDeviceLocalMemory),
2609		};
2610		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT*>(featuresStruct);
2611		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2612	}
2613
2614	if (numErrors > 0)
2615		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2616	else
2617		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2618}
2619
2620
2621tcu::TestStatus createDeviceWithUnsupportedFeaturesTestBufferDeviceAddressFeatures (Context& context)
2622{
2623	const PlatformInterface&				vkp						= context.getPlatformInterface();
2624	tcu::TestLog&							log						= context.getTestContext().getLog();
2625	tcu::ResultCollector					resultCollector			(log);
2626	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2627	const InstanceDriver&					instanceDriver			(instance.getDriver());
2628	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2629	const deUint32							queueFamilyIndex		= 0;
2630	const deUint32							queueCount				= 1;
2631	const float								queuePriority			= 1.0f;
2632	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2633	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2634	int										numErrors				= 0;
2635	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2636
2637
2638	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2639	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2640
2641	// Only non-core extensions will be used when creating the device.
2642	vector<const char*>	coreExtensions;
2643	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2644	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2645
2646	vector<const char*> extensionNames;
2647	extensionNames.reserve(nonCoreExtensions.size());
2648	for (const string& extension : nonCoreExtensions)
2649		extensionNames.push_back(extension.c_str());
2650
2651	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceBufferDeviceAddressFeatures>()))
2652	{
2653		static const Feature features[] =
2654		{
2655		FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddress),
2656		FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddressCaptureReplay),
2657		FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddressMultiDevice),
2658		};
2659		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures*>(featuresStruct);
2660		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2661	}
2662
2663	if (numErrors > 0)
2664		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2665	else
2666		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2667}
2668
2669
2670tcu::TestStatus createDeviceWithUnsupportedFeaturesTestBufferDeviceAddressFeaturesEXT (Context& context)
2671{
2672	const PlatformInterface&				vkp						= context.getPlatformInterface();
2673	tcu::TestLog&							log						= context.getTestContext().getLog();
2674	tcu::ResultCollector					resultCollector			(log);
2675	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2676	const InstanceDriver&					instanceDriver			(instance.getDriver());
2677	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2678	const deUint32							queueFamilyIndex		= 0;
2679	const deUint32							queueCount				= 1;
2680	const float								queuePriority			= 1.0f;
2681	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2682	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2683	int										numErrors				= 0;
2684	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2685
2686
2687	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2688	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2689
2690	// Only non-core extensions will be used when creating the device.
2691	vector<const char*>	coreExtensions;
2692	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2693	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2694
2695	vector<const char*> extensionNames;
2696	extensionNames.reserve(nonCoreExtensions.size());
2697	for (const string& extension : nonCoreExtensions)
2698		extensionNames.push_back(extension.c_str());
2699
2700	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>()))
2701	{
2702		static const Feature features[] =
2703		{
2704		FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeaturesEXT, bufferDeviceAddress),
2705		FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeaturesEXT, bufferDeviceAddressCaptureReplay),
2706		FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeaturesEXT, bufferDeviceAddressMultiDevice),
2707		};
2708		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(featuresStruct);
2709		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2710	}
2711
2712	if (numErrors > 0)
2713		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2714	else
2715		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2716}
2717
2718
2719tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImagelessFramebufferFeatures (Context& context)
2720{
2721	const PlatformInterface&				vkp						= context.getPlatformInterface();
2722	tcu::TestLog&							log						= context.getTestContext().getLog();
2723	tcu::ResultCollector					resultCollector			(log);
2724	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2725	const InstanceDriver&					instanceDriver			(instance.getDriver());
2726	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2727	const deUint32							queueFamilyIndex		= 0;
2728	const deUint32							queueCount				= 1;
2729	const float								queuePriority			= 1.0f;
2730	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2731	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2732	int										numErrors				= 0;
2733	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2734
2735
2736	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2737	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2738
2739	// Only non-core extensions will be used when creating the device.
2740	vector<const char*>	coreExtensions;
2741	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2742	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2743
2744	vector<const char*> extensionNames;
2745	extensionNames.reserve(nonCoreExtensions.size());
2746	for (const string& extension : nonCoreExtensions)
2747		extensionNames.push_back(extension.c_str());
2748
2749	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImagelessFramebufferFeatures>()))
2750	{
2751		static const Feature features[] =
2752		{
2753		FEATURE_ITEM (VkPhysicalDeviceImagelessFramebufferFeatures, imagelessFramebuffer),
2754		};
2755		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures*>(featuresStruct);
2756		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2757	}
2758
2759	if (numErrors > 0)
2760		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2761	else
2762		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2763}
2764
2765
2766tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTextureCompressionASTCHDRFeatures (Context& context)
2767{
2768	const PlatformInterface&				vkp						= context.getPlatformInterface();
2769	tcu::TestLog&							log						= context.getTestContext().getLog();
2770	tcu::ResultCollector					resultCollector			(log);
2771	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2772	const InstanceDriver&					instanceDriver			(instance.getDriver());
2773	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2774	const deUint32							queueFamilyIndex		= 0;
2775	const deUint32							queueCount				= 1;
2776	const float								queuePriority			= 1.0f;
2777	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2778	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2779	int										numErrors				= 0;
2780	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2781
2782
2783	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2784	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2785
2786	// Only non-core extensions will be used when creating the device.
2787	vector<const char*>	coreExtensions;
2788	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2789	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2790
2791	vector<const char*> extensionNames;
2792	extensionNames.reserve(nonCoreExtensions.size());
2793	for (const string& extension : nonCoreExtensions)
2794		extensionNames.push_back(extension.c_str());
2795
2796	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceTextureCompressionASTCHDRFeatures>()))
2797	{
2798		static const Feature features[] =
2799		{
2800		FEATURE_ITEM (VkPhysicalDeviceTextureCompressionASTCHDRFeatures, textureCompressionASTC_HDR),
2801		};
2802		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeatures*>(featuresStruct);
2803		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2804	}
2805
2806	if (numErrors > 0)
2807		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2808	else
2809		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2810}
2811
2812
2813tcu::TestStatus createDeviceWithUnsupportedFeaturesTestCooperativeMatrixFeaturesNV (Context& context)
2814{
2815	const PlatformInterface&				vkp						= context.getPlatformInterface();
2816	tcu::TestLog&							log						= context.getTestContext().getLog();
2817	tcu::ResultCollector					resultCollector			(log);
2818	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2819	const InstanceDriver&					instanceDriver			(instance.getDriver());
2820	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2821	const deUint32							queueFamilyIndex		= 0;
2822	const deUint32							queueCount				= 1;
2823	const float								queuePriority			= 1.0f;
2824	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2825	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2826	int										numErrors				= 0;
2827	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2828
2829
2830	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2831	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2832
2833	// Only non-core extensions will be used when creating the device.
2834	vector<const char*>	coreExtensions;
2835	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2836	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2837
2838	vector<const char*> extensionNames;
2839	extensionNames.reserve(nonCoreExtensions.size());
2840	for (const string& extension : nonCoreExtensions)
2841		extensionNames.push_back(extension.c_str());
2842
2843	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceCooperativeMatrixFeaturesNV>()))
2844	{
2845		static const Feature features[] =
2846		{
2847		FEATURE_ITEM (VkPhysicalDeviceCooperativeMatrixFeaturesNV, cooperativeMatrix),
2848		FEATURE_ITEM (VkPhysicalDeviceCooperativeMatrixFeaturesNV, cooperativeMatrixRobustBufferAccess),
2849		};
2850		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(featuresStruct);
2851		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2852	}
2853
2854	if (numErrors > 0)
2855		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2856	else
2857		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2858}
2859
2860
2861tcu::TestStatus createDeviceWithUnsupportedFeaturesTestYcbcrImageArraysFeaturesEXT (Context& context)
2862{
2863	const PlatformInterface&				vkp						= context.getPlatformInterface();
2864	tcu::TestLog&							log						= context.getTestContext().getLog();
2865	tcu::ResultCollector					resultCollector			(log);
2866	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2867	const InstanceDriver&					instanceDriver			(instance.getDriver());
2868	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2869	const deUint32							queueFamilyIndex		= 0;
2870	const deUint32							queueCount				= 1;
2871	const float								queuePriority			= 1.0f;
2872	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2873	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2874	int										numErrors				= 0;
2875	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2876
2877
2878	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2879	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2880
2881	// Only non-core extensions will be used when creating the device.
2882	vector<const char*>	coreExtensions;
2883	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2884	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2885
2886	vector<const char*> extensionNames;
2887	extensionNames.reserve(nonCoreExtensions.size());
2888	for (const string& extension : nonCoreExtensions)
2889		extensionNames.push_back(extension.c_str());
2890
2891	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>()))
2892	{
2893		static const Feature features[] =
2894		{
2895		FEATURE_ITEM (VkPhysicalDeviceYcbcrImageArraysFeaturesEXT, ycbcrImageArrays),
2896		};
2897		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(featuresStruct);
2898		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2899	}
2900
2901	if (numErrors > 0)
2902		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2903	else
2904		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2905}
2906
2907
2908tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPresentBarrierFeaturesNV (Context& context)
2909{
2910	const PlatformInterface&				vkp						= context.getPlatformInterface();
2911	tcu::TestLog&							log						= context.getTestContext().getLog();
2912	tcu::ResultCollector					resultCollector			(log);
2913	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2914	const InstanceDriver&					instanceDriver			(instance.getDriver());
2915	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2916	const deUint32							queueFamilyIndex		= 0;
2917	const deUint32							queueCount				= 1;
2918	const float								queuePriority			= 1.0f;
2919	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2920	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2921	int										numErrors				= 0;
2922	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2923
2924
2925	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2926	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2927
2928	// Only non-core extensions will be used when creating the device.
2929	vector<const char*>	coreExtensions;
2930	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2931	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2932
2933	vector<const char*> extensionNames;
2934	extensionNames.reserve(nonCoreExtensions.size());
2935	for (const string& extension : nonCoreExtensions)
2936		extensionNames.push_back(extension.c_str());
2937
2938	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePresentBarrierFeaturesNV>()))
2939	{
2940		static const Feature features[] =
2941		{
2942		FEATURE_ITEM (VkPhysicalDevicePresentBarrierFeaturesNV, presentBarrier),
2943		};
2944		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePresentBarrierFeaturesNV*>(featuresStruct);
2945		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2946	}
2947
2948	if (numErrors > 0)
2949		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2950	else
2951		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2952}
2953
2954
2955tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPerformanceQueryFeaturesKHR (Context& context)
2956{
2957	const PlatformInterface&				vkp						= context.getPlatformInterface();
2958	tcu::TestLog&							log						= context.getTestContext().getLog();
2959	tcu::ResultCollector					resultCollector			(log);
2960	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2961	const InstanceDriver&					instanceDriver			(instance.getDriver());
2962	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2963	const deUint32							queueFamilyIndex		= 0;
2964	const deUint32							queueCount				= 1;
2965	const float								queuePriority			= 1.0f;
2966	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2967	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2968	int										numErrors				= 0;
2969	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2970
2971
2972	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2973	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2974
2975	// Only non-core extensions will be used when creating the device.
2976	vector<const char*>	coreExtensions;
2977	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
2978	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
2979
2980	vector<const char*> extensionNames;
2981	extensionNames.reserve(nonCoreExtensions.size());
2982	for (const string& extension : nonCoreExtensions)
2983		extensionNames.push_back(extension.c_str());
2984
2985	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePerformanceQueryFeaturesKHR>()))
2986	{
2987		static const Feature features[] =
2988		{
2989		FEATURE_ITEM (VkPhysicalDevicePerformanceQueryFeaturesKHR, performanceCounterQueryPools),
2990		FEATURE_ITEM (VkPhysicalDevicePerformanceQueryFeaturesKHR, performanceCounterMultipleQueryPools),
2991		};
2992		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR*>(featuresStruct);
2993		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
2994	}
2995
2996	if (numErrors > 0)
2997		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2998	else
2999		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3000}
3001
3002
3003tcu::TestStatus createDeviceWithUnsupportedFeaturesTestCoverageReductionModeFeaturesNV (Context& context)
3004{
3005	const PlatformInterface&				vkp						= context.getPlatformInterface();
3006	tcu::TestLog&							log						= context.getTestContext().getLog();
3007	tcu::ResultCollector					resultCollector			(log);
3008	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3009	const InstanceDriver&					instanceDriver			(instance.getDriver());
3010	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3011	const deUint32							queueFamilyIndex		= 0;
3012	const deUint32							queueCount				= 1;
3013	const float								queuePriority			= 1.0f;
3014	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3015	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3016	int										numErrors				= 0;
3017	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3018
3019
3020	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3021	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3022
3023	// Only non-core extensions will be used when creating the device.
3024	vector<const char*>	coreExtensions;
3025	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3026	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3027
3028	vector<const char*> extensionNames;
3029	extensionNames.reserve(nonCoreExtensions.size());
3030	for (const string& extension : nonCoreExtensions)
3031		extensionNames.push_back(extension.c_str());
3032
3033	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceCoverageReductionModeFeaturesNV>()))
3034	{
3035		static const Feature features[] =
3036		{
3037		FEATURE_ITEM (VkPhysicalDeviceCoverageReductionModeFeaturesNV, coverageReductionMode),
3038		};
3039		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(featuresStruct);
3040		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3041	}
3042
3043	if (numErrors > 0)
3044		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3045	else
3046		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3047}
3048
3049
3050tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderIntegerFunctions2FeaturesINTEL (Context& context)
3051{
3052	const PlatformInterface&				vkp						= context.getPlatformInterface();
3053	tcu::TestLog&							log						= context.getTestContext().getLog();
3054	tcu::ResultCollector					resultCollector			(log);
3055	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3056	const InstanceDriver&					instanceDriver			(instance.getDriver());
3057	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3058	const deUint32							queueFamilyIndex		= 0;
3059	const deUint32							queueCount				= 1;
3060	const float								queuePriority			= 1.0f;
3061	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3062	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3063	int										numErrors				= 0;
3064	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3065
3066
3067	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3068	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3069
3070	// Only non-core extensions will be used when creating the device.
3071	vector<const char*>	coreExtensions;
3072	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3073	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3074
3075	vector<const char*> extensionNames;
3076	extensionNames.reserve(nonCoreExtensions.size());
3077	for (const string& extension : nonCoreExtensions)
3078		extensionNames.push_back(extension.c_str());
3079
3080	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>()))
3081	{
3082		static const Feature features[] =
3083		{
3084		FEATURE_ITEM (VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL, shaderIntegerFunctions2),
3085		};
3086		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(featuresStruct);
3087		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3088	}
3089
3090	if (numErrors > 0)
3091		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3092	else
3093		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3094}
3095
3096
3097tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderClockFeaturesKHR (Context& context)
3098{
3099	const PlatformInterface&				vkp						= context.getPlatformInterface();
3100	tcu::TestLog&							log						= context.getTestContext().getLog();
3101	tcu::ResultCollector					resultCollector			(log);
3102	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3103	const InstanceDriver&					instanceDriver			(instance.getDriver());
3104	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3105	const deUint32							queueFamilyIndex		= 0;
3106	const deUint32							queueCount				= 1;
3107	const float								queuePriority			= 1.0f;
3108	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3109	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3110	int										numErrors				= 0;
3111	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3112
3113
3114	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3115	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3116
3117	// Only non-core extensions will be used when creating the device.
3118	vector<const char*>	coreExtensions;
3119	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3120	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3121
3122	vector<const char*> extensionNames;
3123	extensionNames.reserve(nonCoreExtensions.size());
3124	for (const string& extension : nonCoreExtensions)
3125		extensionNames.push_back(extension.c_str());
3126
3127	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderClockFeaturesKHR>()))
3128	{
3129		static const Feature features[] =
3130		{
3131		FEATURE_ITEM (VkPhysicalDeviceShaderClockFeaturesKHR, shaderSubgroupClock),
3132		FEATURE_ITEM (VkPhysicalDeviceShaderClockFeaturesKHR, shaderDeviceClock),
3133		};
3134		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR*>(featuresStruct);
3135		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3136	}
3137
3138	if (numErrors > 0)
3139		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3140	else
3141		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3142}
3143
3144
3145tcu::TestStatus createDeviceWithUnsupportedFeaturesTestIndexTypeUint8FeaturesEXT (Context& context)
3146{
3147	const PlatformInterface&				vkp						= context.getPlatformInterface();
3148	tcu::TestLog&							log						= context.getTestContext().getLog();
3149	tcu::ResultCollector					resultCollector			(log);
3150	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3151	const InstanceDriver&					instanceDriver			(instance.getDriver());
3152	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3153	const deUint32							queueFamilyIndex		= 0;
3154	const deUint32							queueCount				= 1;
3155	const float								queuePriority			= 1.0f;
3156	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3157	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3158	int										numErrors				= 0;
3159	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3160
3161
3162	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3163	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3164
3165	// Only non-core extensions will be used when creating the device.
3166	vector<const char*>	coreExtensions;
3167	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3168	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3169
3170	vector<const char*> extensionNames;
3171	extensionNames.reserve(nonCoreExtensions.size());
3172	for (const string& extension : nonCoreExtensions)
3173		extensionNames.push_back(extension.c_str());
3174
3175	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>()))
3176	{
3177		static const Feature features[] =
3178		{
3179		FEATURE_ITEM (VkPhysicalDeviceIndexTypeUint8FeaturesEXT, indexTypeUint8),
3180		};
3181		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(featuresStruct);
3182		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3183	}
3184
3185	if (numErrors > 0)
3186		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3187	else
3188		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3189}
3190
3191
3192tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderSMBuiltinsFeaturesNV (Context& context)
3193{
3194	const PlatformInterface&				vkp						= context.getPlatformInterface();
3195	tcu::TestLog&							log						= context.getTestContext().getLog();
3196	tcu::ResultCollector					resultCollector			(log);
3197	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3198	const InstanceDriver&					instanceDriver			(instance.getDriver());
3199	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3200	const deUint32							queueFamilyIndex		= 0;
3201	const deUint32							queueCount				= 1;
3202	const float								queuePriority			= 1.0f;
3203	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3204	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3205	int										numErrors				= 0;
3206	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3207
3208
3209	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3210	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3211
3212	// Only non-core extensions will be used when creating the device.
3213	vector<const char*>	coreExtensions;
3214	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3215	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3216
3217	vector<const char*> extensionNames;
3218	extensionNames.reserve(nonCoreExtensions.size());
3219	for (const string& extension : nonCoreExtensions)
3220		extensionNames.push_back(extension.c_str());
3221
3222	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>()))
3223	{
3224		static const Feature features[] =
3225		{
3226		FEATURE_ITEM (VkPhysicalDeviceShaderSMBuiltinsFeaturesNV, shaderSMBuiltins),
3227		};
3228		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(featuresStruct);
3229		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3230	}
3231
3232	if (numErrors > 0)
3233		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3234	else
3235		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3236}
3237
3238
3239tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentShaderInterlockFeaturesEXT (Context& context)
3240{
3241	const PlatformInterface&				vkp						= context.getPlatformInterface();
3242	tcu::TestLog&							log						= context.getTestContext().getLog();
3243	tcu::ResultCollector					resultCollector			(log);
3244	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3245	const InstanceDriver&					instanceDriver			(instance.getDriver());
3246	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3247	const deUint32							queueFamilyIndex		= 0;
3248	const deUint32							queueCount				= 1;
3249	const float								queuePriority			= 1.0f;
3250	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3251	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3252	int										numErrors				= 0;
3253	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3254
3255
3256	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3257	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3258
3259	// Only non-core extensions will be used when creating the device.
3260	vector<const char*>	coreExtensions;
3261	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3262	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3263
3264	vector<const char*> extensionNames;
3265	extensionNames.reserve(nonCoreExtensions.size());
3266	for (const string& extension : nonCoreExtensions)
3267		extensionNames.push_back(extension.c_str());
3268
3269	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>()))
3270	{
3271		static const Feature features[] =
3272		{
3273		FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderSampleInterlock),
3274		FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderPixelInterlock),
3275		FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderShadingRateInterlock),
3276		};
3277		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(featuresStruct);
3278		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3279	}
3280
3281	if (numErrors > 0)
3282		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3283	else
3284		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3285}
3286
3287
3288tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSeparateDepthStencilLayoutsFeatures (Context& context)
3289{
3290	const PlatformInterface&				vkp						= context.getPlatformInterface();
3291	tcu::TestLog&							log						= context.getTestContext().getLog();
3292	tcu::ResultCollector					resultCollector			(log);
3293	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3294	const InstanceDriver&					instanceDriver			(instance.getDriver());
3295	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3296	const deUint32							queueFamilyIndex		= 0;
3297	const deUint32							queueCount				= 1;
3298	const float								queuePriority			= 1.0f;
3299	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3300	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3301	int										numErrors				= 0;
3302	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3303
3304
3305	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3306	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3307
3308	// Only non-core extensions will be used when creating the device.
3309	vector<const char*>	coreExtensions;
3310	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3311	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3312
3313	vector<const char*> extensionNames;
3314	extensionNames.reserve(nonCoreExtensions.size());
3315	for (const string& extension : nonCoreExtensions)
3316		extensionNames.push_back(extension.c_str());
3317
3318	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>()))
3319	{
3320		static const Feature features[] =
3321		{
3322		FEATURE_ITEM (VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures, separateDepthStencilLayouts),
3323		};
3324		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(featuresStruct);
3325		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3326	}
3327
3328	if (numErrors > 0)
3329		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3330	else
3331		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3332}
3333
3334
3335tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPrimitiveTopologyListRestartFeaturesEXT (Context& context)
3336{
3337	const PlatformInterface&				vkp						= context.getPlatformInterface();
3338	tcu::TestLog&							log						= context.getTestContext().getLog();
3339	tcu::ResultCollector					resultCollector			(log);
3340	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3341	const InstanceDriver&					instanceDriver			(instance.getDriver());
3342	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3343	const deUint32							queueFamilyIndex		= 0;
3344	const deUint32							queueCount				= 1;
3345	const float								queuePriority			= 1.0f;
3346	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3347	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3348	int										numErrors				= 0;
3349	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3350
3351
3352	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3353	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3354
3355	// Only non-core extensions will be used when creating the device.
3356	vector<const char*>	coreExtensions;
3357	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3358	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3359
3360	vector<const char*> extensionNames;
3361	extensionNames.reserve(nonCoreExtensions.size());
3362	for (const string& extension : nonCoreExtensions)
3363		extensionNames.push_back(extension.c_str());
3364
3365	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>()))
3366	{
3367		static const Feature features[] =
3368		{
3369		FEATURE_ITEM (VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT, primitiveTopologyListRestart),
3370		FEATURE_ITEM (VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT, primitiveTopologyPatchListRestart),
3371		};
3372		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT*>(featuresStruct);
3373		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3374	}
3375
3376	if (numErrors > 0)
3377		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3378	else
3379		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3380}
3381
3382
3383tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPipelineExecutablePropertiesFeaturesKHR (Context& context)
3384{
3385	const PlatformInterface&				vkp						= context.getPlatformInterface();
3386	tcu::TestLog&							log						= context.getTestContext().getLog();
3387	tcu::ResultCollector					resultCollector			(log);
3388	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3389	const InstanceDriver&					instanceDriver			(instance.getDriver());
3390	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3391	const deUint32							queueFamilyIndex		= 0;
3392	const deUint32							queueCount				= 1;
3393	const float								queuePriority			= 1.0f;
3394	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3395	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3396	int										numErrors				= 0;
3397	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3398
3399
3400	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3401	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3402
3403	// Only non-core extensions will be used when creating the device.
3404	vector<const char*>	coreExtensions;
3405	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3406	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3407
3408	vector<const char*> extensionNames;
3409	extensionNames.reserve(nonCoreExtensions.size());
3410	for (const string& extension : nonCoreExtensions)
3411		extensionNames.push_back(extension.c_str());
3412
3413	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>()))
3414	{
3415		static const Feature features[] =
3416		{
3417		FEATURE_ITEM (VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR, pipelineExecutableInfo),
3418		};
3419		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(featuresStruct);
3420		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3421	}
3422
3423	if (numErrors > 0)
3424		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3425	else
3426		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3427}
3428
3429
3430tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderDemoteToHelperInvocationFeatures (Context& context)
3431{
3432	const PlatformInterface&				vkp						= context.getPlatformInterface();
3433	tcu::TestLog&							log						= context.getTestContext().getLog();
3434	tcu::ResultCollector					resultCollector			(log);
3435	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3436	const InstanceDriver&					instanceDriver			(instance.getDriver());
3437	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3438	const deUint32							queueFamilyIndex		= 0;
3439	const deUint32							queueCount				= 1;
3440	const float								queuePriority			= 1.0f;
3441	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3442	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3443	int										numErrors				= 0;
3444	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3445
3446
3447	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3448	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3449
3450	// Only non-core extensions will be used when creating the device.
3451	vector<const char*>	coreExtensions;
3452	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3453	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3454
3455	vector<const char*> extensionNames;
3456	extensionNames.reserve(nonCoreExtensions.size());
3457	for (const string& extension : nonCoreExtensions)
3458		extensionNames.push_back(extension.c_str());
3459
3460	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures>()))
3461	{
3462		static const Feature features[] =
3463		{
3464		FEATURE_ITEM (VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures, shaderDemoteToHelperInvocation),
3465		};
3466		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures*>(featuresStruct);
3467		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3468	}
3469
3470	if (numErrors > 0)
3471		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3472	else
3473		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3474}
3475
3476
3477tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTexelBufferAlignmentFeaturesEXT (Context& context)
3478{
3479	const PlatformInterface&				vkp						= context.getPlatformInterface();
3480	tcu::TestLog&							log						= context.getTestContext().getLog();
3481	tcu::ResultCollector					resultCollector			(log);
3482	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3483	const InstanceDriver&					instanceDriver			(instance.getDriver());
3484	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3485	const deUint32							queueFamilyIndex		= 0;
3486	const deUint32							queueCount				= 1;
3487	const float								queuePriority			= 1.0f;
3488	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3489	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3490	int										numErrors				= 0;
3491	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3492
3493
3494	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3495	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3496
3497	// Only non-core extensions will be used when creating the device.
3498	vector<const char*>	coreExtensions;
3499	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3500	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3501
3502	vector<const char*> extensionNames;
3503	extensionNames.reserve(nonCoreExtensions.size());
3504	for (const string& extension : nonCoreExtensions)
3505		extensionNames.push_back(extension.c_str());
3506
3507	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>()))
3508	{
3509		static const Feature features[] =
3510		{
3511		FEATURE_ITEM (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT, texelBufferAlignment),
3512		};
3513		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(featuresStruct);
3514		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3515	}
3516
3517	if (numErrors > 0)
3518		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3519	else
3520		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3521}
3522
3523
3524tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSubgroupSizeControlFeatures (Context& context)
3525{
3526	const PlatformInterface&				vkp						= context.getPlatformInterface();
3527	tcu::TestLog&							log						= context.getTestContext().getLog();
3528	tcu::ResultCollector					resultCollector			(log);
3529	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3530	const InstanceDriver&					instanceDriver			(instance.getDriver());
3531	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3532	const deUint32							queueFamilyIndex		= 0;
3533	const deUint32							queueCount				= 1;
3534	const float								queuePriority			= 1.0f;
3535	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3536	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3537	int										numErrors				= 0;
3538	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3539
3540
3541	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3542	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3543
3544	// Only non-core extensions will be used when creating the device.
3545	vector<const char*>	coreExtensions;
3546	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3547	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3548
3549	vector<const char*> extensionNames;
3550	extensionNames.reserve(nonCoreExtensions.size());
3551	for (const string& extension : nonCoreExtensions)
3552		extensionNames.push_back(extension.c_str());
3553
3554	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSubgroupSizeControlFeatures>()))
3555	{
3556		static const Feature features[] =
3557		{
3558		FEATURE_ITEM (VkPhysicalDeviceSubgroupSizeControlFeatures, subgroupSizeControl),
3559		FEATURE_ITEM (VkPhysicalDeviceSubgroupSizeControlFeatures, computeFullSubgroups),
3560		};
3561		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeatures*>(featuresStruct);
3562		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3563	}
3564
3565	if (numErrors > 0)
3566		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3567	else
3568		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3569}
3570
3571
3572tcu::TestStatus createDeviceWithUnsupportedFeaturesTestLineRasterizationFeaturesEXT (Context& context)
3573{
3574	const PlatformInterface&				vkp						= context.getPlatformInterface();
3575	tcu::TestLog&							log						= context.getTestContext().getLog();
3576	tcu::ResultCollector					resultCollector			(log);
3577	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3578	const InstanceDriver&					instanceDriver			(instance.getDriver());
3579	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3580	const deUint32							queueFamilyIndex		= 0;
3581	const deUint32							queueCount				= 1;
3582	const float								queuePriority			= 1.0f;
3583	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3584	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3585	int										numErrors				= 0;
3586	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3587
3588
3589	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3590	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3591
3592	// Only non-core extensions will be used when creating the device.
3593	vector<const char*>	coreExtensions;
3594	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3595	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3596
3597	vector<const char*> extensionNames;
3598	extensionNames.reserve(nonCoreExtensions.size());
3599	for (const string& extension : nonCoreExtensions)
3600		extensionNames.push_back(extension.c_str());
3601
3602	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceLineRasterizationFeaturesEXT>()))
3603	{
3604		static const Feature features[] =
3605		{
3606		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, rectangularLines),
3607		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, bresenhamLines),
3608		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, smoothLines),
3609		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledRectangularLines),
3610		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledBresenhamLines),
3611		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledSmoothLines),
3612		};
3613		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(featuresStruct);
3614		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 6, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3615	}
3616
3617	if (numErrors > 0)
3618		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3619	else
3620		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3621}
3622
3623
3624tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPipelineCreationCacheControlFeatures (Context& context)
3625{
3626	const PlatformInterface&				vkp						= context.getPlatformInterface();
3627	tcu::TestLog&							log						= context.getTestContext().getLog();
3628	tcu::ResultCollector					resultCollector			(log);
3629	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3630	const InstanceDriver&					instanceDriver			(instance.getDriver());
3631	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3632	const deUint32							queueFamilyIndex		= 0;
3633	const deUint32							queueCount				= 1;
3634	const float								queuePriority			= 1.0f;
3635	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3636	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3637	int										numErrors				= 0;
3638	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3639
3640
3641	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3642	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3643
3644	// Only non-core extensions will be used when creating the device.
3645	vector<const char*>	coreExtensions;
3646	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3647	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3648
3649	vector<const char*> extensionNames;
3650	extensionNames.reserve(nonCoreExtensions.size());
3651	for (const string& extension : nonCoreExtensions)
3652		extensionNames.push_back(extension.c_str());
3653
3654	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePipelineCreationCacheControlFeatures>()))
3655	{
3656		static const Feature features[] =
3657		{
3658		FEATURE_ITEM (VkPhysicalDevicePipelineCreationCacheControlFeatures, pipelineCreationCacheControl),
3659		};
3660		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeatures*>(featuresStruct);
3661		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3662	}
3663
3664	if (numErrors > 0)
3665		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3666	else
3667		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3668}
3669
3670
3671tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkan11Features (Context& context)
3672{
3673	const PlatformInterface&				vkp						= context.getPlatformInterface();
3674	tcu::TestLog&							log						= context.getTestContext().getLog();
3675	tcu::ResultCollector					resultCollector			(log);
3676	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3677	const InstanceDriver&					instanceDriver			(instance.getDriver());
3678	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3679	const deUint32							queueFamilyIndex		= 0;
3680	const deUint32							queueCount				= 1;
3681	const float								queuePriority			= 1.0f;
3682	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3683	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3684	int										numErrors				= 0;
3685	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3686
3687
3688	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3689	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3690
3691	// Only non-core extensions will be used when creating the device.
3692	vector<const char*>	coreExtensions;
3693	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3694	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3695
3696	vector<const char*> extensionNames;
3697	extensionNames.reserve(nonCoreExtensions.size());
3698	for (const string& extension : nonCoreExtensions)
3699		extensionNames.push_back(extension.c_str());
3700
3701	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVulkan11Features>()))
3702	{
3703		static const Feature features[] =
3704		{
3705		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storageBuffer16BitAccess),
3706		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, uniformAndStorageBuffer16BitAccess),
3707		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storagePushConstant16),
3708		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storageInputOutput16),
3709		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiview),
3710		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiviewGeometryShader),
3711		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiviewTessellationShader),
3712		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, variablePointersStorageBuffer),
3713		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, variablePointers),
3714		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, protectedMemory),
3715		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, samplerYcbcrConversion),
3716		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, shaderDrawParameters),
3717		};
3718		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVulkan11Features*>(featuresStruct);
3719		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 12, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures, isSubProcess);
3720	}
3721
3722	if (numErrors > 0)
3723		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3724	else
3725		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3726}
3727
3728
3729tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkan12Features (Context& context)
3730{
3731	const PlatformInterface&				vkp						= context.getPlatformInterface();
3732	tcu::TestLog&							log						= context.getTestContext().getLog();
3733	tcu::ResultCollector					resultCollector			(log);
3734	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3735	const InstanceDriver&					instanceDriver			(instance.getDriver());
3736	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3737	const deUint32							queueFamilyIndex		= 0;
3738	const deUint32							queueCount				= 1;
3739	const float								queuePriority			= 1.0f;
3740	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3741	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3742	int										numErrors				= 0;
3743	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3744
3745
3746	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3747	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3748
3749	// Only non-core extensions will be used when creating the device.
3750	vector<const char*>	coreExtensions;
3751	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3752	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3753
3754	vector<const char*> extensionNames;
3755	extensionNames.reserve(nonCoreExtensions.size());
3756	for (const string& extension : nonCoreExtensions)
3757		extensionNames.push_back(extension.c_str());
3758
3759	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVulkan12Features>()))
3760	{
3761		static const Feature features[] =
3762		{
3763		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, samplerMirrorClampToEdge),
3764		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, drawIndirectCount),
3765		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, storageBuffer8BitAccess),
3766		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, uniformAndStorageBuffer8BitAccess),
3767		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, storagePushConstant8),
3768		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderBufferInt64Atomics),
3769		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSharedInt64Atomics),
3770		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderFloat16),
3771		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInt8),
3772		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorIndexing),
3773		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInputAttachmentArrayDynamicIndexing),
3774		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformTexelBufferArrayDynamicIndexing),
3775		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageTexelBufferArrayDynamicIndexing),
3776		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformBufferArrayNonUniformIndexing),
3777		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSampledImageArrayNonUniformIndexing),
3778		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageBufferArrayNonUniformIndexing),
3779		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageImageArrayNonUniformIndexing),
3780		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInputAttachmentArrayNonUniformIndexing),
3781		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformTexelBufferArrayNonUniformIndexing),
3782		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageTexelBufferArrayNonUniformIndexing),
3783		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUniformBufferUpdateAfterBind),
3784		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingSampledImageUpdateAfterBind),
3785		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageImageUpdateAfterBind),
3786		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageBufferUpdateAfterBind),
3787		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUniformTexelBufferUpdateAfterBind),
3788		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageTexelBufferUpdateAfterBind),
3789		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUpdateUnusedWhilePending),
3790		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingPartiallyBound),
3791		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingVariableDescriptorCount),
3792		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, runtimeDescriptorArray),
3793		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, samplerFilterMinmax),
3794		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, scalarBlockLayout),
3795		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, imagelessFramebuffer),
3796		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, uniformBufferStandardLayout),
3797		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSubgroupExtendedTypes),
3798		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, separateDepthStencilLayouts),
3799		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, hostQueryReset),
3800		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, timelineSemaphore),
3801		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddress),
3802		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddressCaptureReplay),
3803		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddressMultiDevice),
3804		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModel),
3805		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModelDeviceScope),
3806		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModelAvailabilityVisibilityChains),
3807		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderOutputViewportIndex),
3808		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderOutputLayer),
3809		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, subgroupBroadcastDynamicId),
3810		};
3811		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVulkan12Features*>(featuresStruct);
3812		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 47, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures, isSubProcess);
3813	}
3814
3815	if (numErrors > 0)
3816		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3817	else
3818		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3819}
3820
3821
3822tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkan13Features (Context& context)
3823{
3824	const PlatformInterface&				vkp						= context.getPlatformInterface();
3825	tcu::TestLog&							log						= context.getTestContext().getLog();
3826	tcu::ResultCollector					resultCollector			(log);
3827	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3828	const InstanceDriver&					instanceDriver			(instance.getDriver());
3829	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3830	const deUint32							queueFamilyIndex		= 0;
3831	const deUint32							queueCount				= 1;
3832	const float								queuePriority			= 1.0f;
3833	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3834	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3835	int										numErrors				= 0;
3836	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3837
3838
3839	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3840	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3841
3842	// Only non-core extensions will be used when creating the device.
3843	vector<const char*>	coreExtensions;
3844	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3845	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3846
3847	vector<const char*> extensionNames;
3848	extensionNames.reserve(nonCoreExtensions.size());
3849	for (const string& extension : nonCoreExtensions)
3850		extensionNames.push_back(extension.c_str());
3851
3852	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVulkan13Features>()))
3853	{
3854		static const Feature features[] =
3855		{
3856		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, robustImageAccess),
3857		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, inlineUniformBlock),
3858		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, descriptorBindingInlineUniformBlockUpdateAfterBind),
3859		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, pipelineCreationCacheControl),
3860		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, privateData),
3861		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderDemoteToHelperInvocation),
3862		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderTerminateInvocation),
3863		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, subgroupSizeControl),
3864		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, computeFullSubgroups),
3865		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, synchronization2),
3866		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, textureCompressionASTC_HDR),
3867		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderZeroInitializeWorkgroupMemory),
3868		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, dynamicRendering),
3869		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderIntegerDotProduct),
3870		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, maintenance4),
3871		};
3872		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVulkan13Features*>(featuresStruct);
3873		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 15, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures, isSubProcess);
3874	}
3875
3876	if (numErrors > 0)
3877		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3878	else
3879		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3880}
3881
3882
3883tcu::TestStatus createDeviceWithUnsupportedFeaturesTestCoherentMemoryFeaturesAMD (Context& context)
3884{
3885	const PlatformInterface&				vkp						= context.getPlatformInterface();
3886	tcu::TestLog&							log						= context.getTestContext().getLog();
3887	tcu::ResultCollector					resultCollector			(log);
3888	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3889	const InstanceDriver&					instanceDriver			(instance.getDriver());
3890	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3891	const deUint32							queueFamilyIndex		= 0;
3892	const deUint32							queueCount				= 1;
3893	const float								queuePriority			= 1.0f;
3894	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3895	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3896	int										numErrors				= 0;
3897	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3898
3899
3900	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3901	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3902
3903	// Only non-core extensions will be used when creating the device.
3904	vector<const char*>	coreExtensions;
3905	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3906	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3907
3908	vector<const char*> extensionNames;
3909	extensionNames.reserve(nonCoreExtensions.size());
3910	for (const string& extension : nonCoreExtensions)
3911		extensionNames.push_back(extension.c_str());
3912
3913	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceCoherentMemoryFeaturesAMD>()))
3914	{
3915		static const Feature features[] =
3916		{
3917		FEATURE_ITEM (VkPhysicalDeviceCoherentMemoryFeaturesAMD, deviceCoherentMemory),
3918		};
3919		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(featuresStruct);
3920		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3921	}
3922
3923	if (numErrors > 0)
3924		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3925	else
3926		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3927}
3928
3929
3930tcu::TestStatus createDeviceWithUnsupportedFeaturesTestCustomBorderColorFeaturesEXT (Context& context)
3931{
3932	const PlatformInterface&				vkp						= context.getPlatformInterface();
3933	tcu::TestLog&							log						= context.getTestContext().getLog();
3934	tcu::ResultCollector					resultCollector			(log);
3935	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3936	const InstanceDriver&					instanceDriver			(instance.getDriver());
3937	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3938	const deUint32							queueFamilyIndex		= 0;
3939	const deUint32							queueCount				= 1;
3940	const float								queuePriority			= 1.0f;
3941	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3942	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3943	int										numErrors				= 0;
3944	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3945
3946
3947	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3948	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3949
3950	// Only non-core extensions will be used when creating the device.
3951	vector<const char*>	coreExtensions;
3952	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
3953	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
3954
3955	vector<const char*> extensionNames;
3956	extensionNames.reserve(nonCoreExtensions.size());
3957	for (const string& extension : nonCoreExtensions)
3958		extensionNames.push_back(extension.c_str());
3959
3960	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceCustomBorderColorFeaturesEXT>()))
3961	{
3962		static const Feature features[] =
3963		{
3964		FEATURE_ITEM (VkPhysicalDeviceCustomBorderColorFeaturesEXT, customBorderColors),
3965		FEATURE_ITEM (VkPhysicalDeviceCustomBorderColorFeaturesEXT, customBorderColorWithoutFormat),
3966		};
3967		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(featuresStruct);
3968		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
3969	}
3970
3971	if (numErrors > 0)
3972		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
3973	else
3974		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
3975}
3976
3977
3978tcu::TestStatus createDeviceWithUnsupportedFeaturesTestBorderColorSwizzleFeaturesEXT (Context& context)
3979{
3980	const PlatformInterface&				vkp						= context.getPlatformInterface();
3981	tcu::TestLog&							log						= context.getTestContext().getLog();
3982	tcu::ResultCollector					resultCollector			(log);
3983	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
3984	const InstanceDriver&					instanceDriver			(instance.getDriver());
3985	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
3986	const deUint32							queueFamilyIndex		= 0;
3987	const deUint32							queueCount				= 1;
3988	const float								queuePriority			= 1.0f;
3989	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
3990	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
3991	int										numErrors				= 0;
3992	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
3993
3994
3995	VkPhysicalDeviceFeatures emptyDeviceFeatures;
3996	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
3997
3998	// Only non-core extensions will be used when creating the device.
3999	vector<const char*>	coreExtensions;
4000	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4001	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4002
4003	vector<const char*> extensionNames;
4004	extensionNames.reserve(nonCoreExtensions.size());
4005	for (const string& extension : nonCoreExtensions)
4006		extensionNames.push_back(extension.c_str());
4007
4008	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceBorderColorSwizzleFeaturesEXT>()))
4009	{
4010		static const Feature features[] =
4011		{
4012		FEATURE_ITEM (VkPhysicalDeviceBorderColorSwizzleFeaturesEXT, borderColorSwizzle),
4013		FEATURE_ITEM (VkPhysicalDeviceBorderColorSwizzleFeaturesEXT, borderColorSwizzleFromImage),
4014		};
4015		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT*>(featuresStruct);
4016		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4017	}
4018
4019	if (numErrors > 0)
4020		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4021	else
4022		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4023}
4024
4025
4026tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExtendedDynamicStateFeaturesEXT (Context& context)
4027{
4028	const PlatformInterface&				vkp						= context.getPlatformInterface();
4029	tcu::TestLog&							log						= context.getTestContext().getLog();
4030	tcu::ResultCollector					resultCollector			(log);
4031	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4032	const InstanceDriver&					instanceDriver			(instance.getDriver());
4033	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4034	const deUint32							queueFamilyIndex		= 0;
4035	const deUint32							queueCount				= 1;
4036	const float								queuePriority			= 1.0f;
4037	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4038	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4039	int										numErrors				= 0;
4040	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4041
4042
4043	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4044	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4045
4046	// Only non-core extensions will be used when creating the device.
4047	vector<const char*>	coreExtensions;
4048	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4049	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4050
4051	vector<const char*> extensionNames;
4052	extensionNames.reserve(nonCoreExtensions.size());
4053	for (const string& extension : nonCoreExtensions)
4054		extensionNames.push_back(extension.c_str());
4055
4056	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>()))
4057	{
4058		static const Feature features[] =
4059		{
4060		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicStateFeaturesEXT, extendedDynamicState),
4061		};
4062		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(featuresStruct);
4063		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4064	}
4065
4066	if (numErrors > 0)
4067		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4068	else
4069		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4070}
4071
4072
4073tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExtendedDynamicState2FeaturesEXT (Context& context)
4074{
4075	const PlatformInterface&				vkp						= context.getPlatformInterface();
4076	tcu::TestLog&							log						= context.getTestContext().getLog();
4077	tcu::ResultCollector					resultCollector			(log);
4078	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4079	const InstanceDriver&					instanceDriver			(instance.getDriver());
4080	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4081	const deUint32							queueFamilyIndex		= 0;
4082	const deUint32							queueCount				= 1;
4083	const float								queuePriority			= 1.0f;
4084	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4085	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4086	int										numErrors				= 0;
4087	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4088
4089
4090	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4091	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4092
4093	// Only non-core extensions will be used when creating the device.
4094	vector<const char*>	coreExtensions;
4095	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4096	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4097
4098	vector<const char*> extensionNames;
4099	extensionNames.reserve(nonCoreExtensions.size());
4100	for (const string& extension : nonCoreExtensions)
4101		extensionNames.push_back(extension.c_str());
4102
4103	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>()))
4104	{
4105		static const Feature features[] =
4106		{
4107		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2),
4108		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2LogicOp),
4109		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2PatchControlPoints),
4110		};
4111		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT*>(featuresStruct);
4112		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4113	}
4114
4115	if (numErrors > 0)
4116		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4117	else
4118		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4119}
4120
4121
4122tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExtendedDynamicState3FeaturesEXT (Context& context)
4123{
4124	const PlatformInterface&				vkp						= context.getPlatformInterface();
4125	tcu::TestLog&							log						= context.getTestContext().getLog();
4126	tcu::ResultCollector					resultCollector			(log);
4127	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4128	const InstanceDriver&					instanceDriver			(instance.getDriver());
4129	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4130	const deUint32							queueFamilyIndex		= 0;
4131	const deUint32							queueCount				= 1;
4132	const float								queuePriority			= 1.0f;
4133	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4134	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4135	int										numErrors				= 0;
4136	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4137
4138
4139	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4140	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4141
4142	// Only non-core extensions will be used when creating the device.
4143	vector<const char*>	coreExtensions;
4144	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4145	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4146
4147	vector<const char*> extensionNames;
4148	extensionNames.reserve(nonCoreExtensions.size());
4149	for (const string& extension : nonCoreExtensions)
4150		extensionNames.push_back(extension.c_str());
4151
4152	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExtendedDynamicState3FeaturesEXT>()))
4153	{
4154		static const Feature features[] =
4155		{
4156		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3TessellationDomainOrigin),
4157		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3DepthClampEnable),
4158		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3PolygonMode),
4159		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3RasterizationSamples),
4160		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3SampleMask),
4161		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3AlphaToCoverageEnable),
4162		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3AlphaToOneEnable),
4163		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3LogicOpEnable),
4164		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3ColorBlendEnable),
4165		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3ColorBlendEquation),
4166		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3ColorWriteMask),
4167		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3RasterizationStream),
4168		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3ConservativeRasterizationMode),
4169		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3ExtraPrimitiveOverestimationSize),
4170		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3DepthClipEnable),
4171		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3SampleLocationsEnable),
4172		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3ColorBlendAdvanced),
4173		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3ProvokingVertexMode),
4174		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3LineRasterizationMode),
4175		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3LineStippleEnable),
4176		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3DepthClipNegativeOneToOne),
4177		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3ViewportWScalingEnable),
4178		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3ViewportSwizzle),
4179		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3CoverageToColorEnable),
4180		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3CoverageToColorLocation),
4181		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3CoverageModulationMode),
4182		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3CoverageModulationTableEnable),
4183		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3CoverageModulationTable),
4184		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3CoverageReductionMode),
4185		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3RepresentativeFragmentTestEnable),
4186		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState3FeaturesEXT, extendedDynamicState3ShadingRateImageEnable),
4187		};
4188		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT*>(featuresStruct);
4189		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 31, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4190	}
4191
4192	if (numErrors > 0)
4193		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4194	else
4195		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4196}
4197
4198
4199tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDiagnosticsConfigFeaturesNV (Context& context)
4200{
4201	const PlatformInterface&				vkp						= context.getPlatformInterface();
4202	tcu::TestLog&							log						= context.getTestContext().getLog();
4203	tcu::ResultCollector					resultCollector			(log);
4204	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4205	const InstanceDriver&					instanceDriver			(instance.getDriver());
4206	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4207	const deUint32							queueFamilyIndex		= 0;
4208	const deUint32							queueCount				= 1;
4209	const float								queuePriority			= 1.0f;
4210	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4211	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4212	int										numErrors				= 0;
4213	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4214
4215
4216	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4217	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4218
4219	// Only non-core extensions will be used when creating the device.
4220	vector<const char*>	coreExtensions;
4221	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4222	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4223
4224	vector<const char*> extensionNames;
4225	extensionNames.reserve(nonCoreExtensions.size());
4226	for (const string& extension : nonCoreExtensions)
4227		extensionNames.push_back(extension.c_str());
4228
4229	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>()))
4230	{
4231		static const Feature features[] =
4232		{
4233		FEATURE_ITEM (VkPhysicalDeviceDiagnosticsConfigFeaturesNV, diagnosticsConfig),
4234		};
4235		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(featuresStruct);
4236		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4237	}
4238
4239	if (numErrors > 0)
4240		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4241	else
4242		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4243}
4244
4245
4246tcu::TestStatus createDeviceWithUnsupportedFeaturesTestZeroInitializeWorkgroupMemoryFeatures (Context& context)
4247{
4248	const PlatformInterface&				vkp						= context.getPlatformInterface();
4249	tcu::TestLog&							log						= context.getTestContext().getLog();
4250	tcu::ResultCollector					resultCollector			(log);
4251	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4252	const InstanceDriver&					instanceDriver			(instance.getDriver());
4253	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4254	const deUint32							queueFamilyIndex		= 0;
4255	const deUint32							queueCount				= 1;
4256	const float								queuePriority			= 1.0f;
4257	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4258	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4259	int										numErrors				= 0;
4260	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4261
4262
4263	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4264	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4265
4266	// Only non-core extensions will be used when creating the device.
4267	vector<const char*>	coreExtensions;
4268	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4269	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4270
4271	vector<const char*> extensionNames;
4272	extensionNames.reserve(nonCoreExtensions.size());
4273	for (const string& extension : nonCoreExtensions)
4274		extensionNames.push_back(extension.c_str());
4275
4276	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures>()))
4277	{
4278		static const Feature features[] =
4279		{
4280		FEATURE_ITEM (VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures, shaderZeroInitializeWorkgroupMemory),
4281		};
4282		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures*>(featuresStruct);
4283		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4284	}
4285
4286	if (numErrors > 0)
4287		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4288	else
4289		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4290}
4291
4292
4293tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderSubgroupUniformControlFlowFeaturesKHR (Context& context)
4294{
4295	const PlatformInterface&				vkp						= context.getPlatformInterface();
4296	tcu::TestLog&							log						= context.getTestContext().getLog();
4297	tcu::ResultCollector					resultCollector			(log);
4298	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4299	const InstanceDriver&					instanceDriver			(instance.getDriver());
4300	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4301	const deUint32							queueFamilyIndex		= 0;
4302	const deUint32							queueCount				= 1;
4303	const float								queuePriority			= 1.0f;
4304	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4305	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4306	int										numErrors				= 0;
4307	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4308
4309
4310	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4311	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4312
4313	// Only non-core extensions will be used when creating the device.
4314	vector<const char*>	coreExtensions;
4315	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4316	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4317
4318	vector<const char*> extensionNames;
4319	extensionNames.reserve(nonCoreExtensions.size());
4320	for (const string& extension : nonCoreExtensions)
4321		extensionNames.push_back(extension.c_str());
4322
4323	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>()))
4324	{
4325		static const Feature features[] =
4326		{
4327		FEATURE_ITEM (VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR, shaderSubgroupUniformControlFlow),
4328		};
4329		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR*>(featuresStruct);
4330		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4331	}
4332
4333	if (numErrors > 0)
4334		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4335	else
4336		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4337}
4338
4339
4340tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRobustness2FeaturesEXT (Context& context)
4341{
4342	const PlatformInterface&				vkp						= context.getPlatformInterface();
4343	tcu::TestLog&							log						= context.getTestContext().getLog();
4344	tcu::ResultCollector					resultCollector			(log);
4345	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4346	const InstanceDriver&					instanceDriver			(instance.getDriver());
4347	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4348	const deUint32							queueFamilyIndex		= 0;
4349	const deUint32							queueCount				= 1;
4350	const float								queuePriority			= 1.0f;
4351	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4352	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4353	int										numErrors				= 0;
4354	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4355
4356
4357	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4358	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4359
4360	// Only non-core extensions will be used when creating the device.
4361	vector<const char*>	coreExtensions;
4362	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4363	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4364
4365	vector<const char*> extensionNames;
4366	extensionNames.reserve(nonCoreExtensions.size());
4367	for (const string& extension : nonCoreExtensions)
4368		extensionNames.push_back(extension.c_str());
4369
4370	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRobustness2FeaturesEXT>()))
4371	{
4372		static const Feature features[] =
4373		{
4374		FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, robustBufferAccess2),
4375		FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, robustImageAccess2),
4376		FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, nullDescriptor),
4377		};
4378		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT*>(featuresStruct);
4379		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4380	}
4381
4382	if (numErrors > 0)
4383		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4384	else
4385		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4386}
4387
4388
4389tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImageRobustnessFeatures (Context& context)
4390{
4391	const PlatformInterface&				vkp						= context.getPlatformInterface();
4392	tcu::TestLog&							log						= context.getTestContext().getLog();
4393	tcu::ResultCollector					resultCollector			(log);
4394	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4395	const InstanceDriver&					instanceDriver			(instance.getDriver());
4396	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4397	const deUint32							queueFamilyIndex		= 0;
4398	const deUint32							queueCount				= 1;
4399	const float								queuePriority			= 1.0f;
4400	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4401	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4402	int										numErrors				= 0;
4403	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4404
4405
4406	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4407	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4408
4409	// Only non-core extensions will be used when creating the device.
4410	vector<const char*>	coreExtensions;
4411	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4412	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4413
4414	vector<const char*> extensionNames;
4415	extensionNames.reserve(nonCoreExtensions.size());
4416	for (const string& extension : nonCoreExtensions)
4417		extensionNames.push_back(extension.c_str());
4418
4419	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImageRobustnessFeatures>()))
4420	{
4421		static const Feature features[] =
4422		{
4423		FEATURE_ITEM (VkPhysicalDeviceImageRobustnessFeatures, robustImageAccess),
4424		};
4425		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeatures*>(featuresStruct);
4426		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4427	}
4428
4429	if (numErrors > 0)
4430		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4431	else
4432		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4433}
4434
4435
4436tcu::TestStatus createDeviceWithUnsupportedFeaturesTestWorkgroupMemoryExplicitLayoutFeaturesKHR (Context& context)
4437{
4438	const PlatformInterface&				vkp						= context.getPlatformInterface();
4439	tcu::TestLog&							log						= context.getTestContext().getLog();
4440	tcu::ResultCollector					resultCollector			(log);
4441	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4442	const InstanceDriver&					instanceDriver			(instance.getDriver());
4443	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4444	const deUint32							queueFamilyIndex		= 0;
4445	const deUint32							queueCount				= 1;
4446	const float								queuePriority			= 1.0f;
4447	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4448	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4449	int										numErrors				= 0;
4450	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4451
4452
4453	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4454	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4455
4456	// Only non-core extensions will be used when creating the device.
4457	vector<const char*>	coreExtensions;
4458	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4459	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4460
4461	vector<const char*> extensionNames;
4462	extensionNames.reserve(nonCoreExtensions.size());
4463	for (const string& extension : nonCoreExtensions)
4464		extensionNames.push_back(extension.c_str());
4465
4466	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>()))
4467	{
4468		static const Feature features[] =
4469		{
4470		FEATURE_ITEM (VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, workgroupMemoryExplicitLayout),
4471		FEATURE_ITEM (VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, workgroupMemoryExplicitLayoutScalarBlockLayout),
4472		FEATURE_ITEM (VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, workgroupMemoryExplicitLayout8BitAccess),
4473		FEATURE_ITEM (VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, workgroupMemoryExplicitLayout16BitAccess),
4474		};
4475		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR*>(featuresStruct);
4476		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4477	}
4478
4479	if (numErrors > 0)
4480		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4481	else
4482		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4483}
4484
4485
4486tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPortabilitySubsetFeaturesKHR (Context& context)
4487{
4488	const PlatformInterface&				vkp						= context.getPlatformInterface();
4489	tcu::TestLog&							log						= context.getTestContext().getLog();
4490	tcu::ResultCollector					resultCollector			(log);
4491	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4492	const InstanceDriver&					instanceDriver			(instance.getDriver());
4493	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4494	const deUint32							queueFamilyIndex		= 0;
4495	const deUint32							queueCount				= 1;
4496	const float								queuePriority			= 1.0f;
4497	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4498	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4499	int										numErrors				= 0;
4500	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4501
4502
4503	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4504	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4505
4506	// Only non-core extensions will be used when creating the device.
4507	vector<const char*>	coreExtensions;
4508	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4509	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4510
4511	vector<const char*> extensionNames;
4512	extensionNames.reserve(nonCoreExtensions.size());
4513	for (const string& extension : nonCoreExtensions)
4514		extensionNames.push_back(extension.c_str());
4515
4516	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePortabilitySubsetFeaturesKHR>()))
4517	{
4518		static const Feature features[] =
4519		{
4520		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, constantAlphaColorBlendFactors),
4521		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, events),
4522		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, imageViewFormatReinterpretation),
4523		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, imageViewFormatSwizzle),
4524		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, imageView2DOn3DImage),
4525		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, multisampleArrayImage),
4526		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, mutableComparisonSamplers),
4527		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, pointPolygons),
4528		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, samplerMipLodBias),
4529		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, separateStencilMaskRef),
4530		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, shaderSampleRateInterpolationFunctions),
4531		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, tessellationIsolines),
4532		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, tessellationPointMode),
4533		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, triangleFans),
4534		FEATURE_ITEM (VkPhysicalDevicePortabilitySubsetFeaturesKHR, vertexAttributeAccessBeyondStride),
4535		};
4536		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(featuresStruct);
4537		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 15, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4538	}
4539
4540	if (numErrors > 0)
4541		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4542	else
4543		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4544}
4545
4546
4547tcu::TestStatus createDeviceWithUnsupportedFeaturesTest4444FormatsFeaturesEXT (Context& context)
4548{
4549	const PlatformInterface&				vkp						= context.getPlatformInterface();
4550	tcu::TestLog&							log						= context.getTestContext().getLog();
4551	tcu::ResultCollector					resultCollector			(log);
4552	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4553	const InstanceDriver&					instanceDriver			(instance.getDriver());
4554	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4555	const deUint32							queueFamilyIndex		= 0;
4556	const deUint32							queueCount				= 1;
4557	const float								queuePriority			= 1.0f;
4558	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4559	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4560	int										numErrors				= 0;
4561	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4562
4563
4564	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4565	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4566
4567	// Only non-core extensions will be used when creating the device.
4568	vector<const char*>	coreExtensions;
4569	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4570	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4571
4572	vector<const char*> extensionNames;
4573	extensionNames.reserve(nonCoreExtensions.size());
4574	for (const string& extension : nonCoreExtensions)
4575		extensionNames.push_back(extension.c_str());
4576
4577	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevice4444FormatsFeaturesEXT>()))
4578	{
4579		static const Feature features[] =
4580		{
4581		FEATURE_ITEM (VkPhysicalDevice4444FormatsFeaturesEXT, formatA4R4G4B4),
4582		FEATURE_ITEM (VkPhysicalDevice4444FormatsFeaturesEXT, formatA4B4G4R4),
4583		};
4584		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT*>(featuresStruct);
4585		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4586	}
4587
4588	if (numErrors > 0)
4589		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4590	else
4591		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4592}
4593
4594
4595tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSubpassShadingFeaturesHUAWEI (Context& context)
4596{
4597	const PlatformInterface&				vkp						= context.getPlatformInterface();
4598	tcu::TestLog&							log						= context.getTestContext().getLog();
4599	tcu::ResultCollector					resultCollector			(log);
4600	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4601	const InstanceDriver&					instanceDriver			(instance.getDriver());
4602	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4603	const deUint32							queueFamilyIndex		= 0;
4604	const deUint32							queueCount				= 1;
4605	const float								queuePriority			= 1.0f;
4606	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4607	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4608	int										numErrors				= 0;
4609	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4610
4611
4612	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4613	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4614
4615	// Only non-core extensions will be used when creating the device.
4616	vector<const char*>	coreExtensions;
4617	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4618	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4619
4620	vector<const char*> extensionNames;
4621	extensionNames.reserve(nonCoreExtensions.size());
4622	for (const string& extension : nonCoreExtensions)
4623		extensionNames.push_back(extension.c_str());
4624
4625	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSubpassShadingFeaturesHUAWEI>()))
4626	{
4627		static const Feature features[] =
4628		{
4629		FEATURE_ITEM (VkPhysicalDeviceSubpassShadingFeaturesHUAWEI, subpassShading),
4630		};
4631		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSubpassShadingFeaturesHUAWEI*>(featuresStruct);
4632		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4633	}
4634
4635	if (numErrors > 0)
4636		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4637	else
4638		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4639}
4640
4641
4642tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderImageAtomicInt64FeaturesEXT (Context& context)
4643{
4644	const PlatformInterface&				vkp						= context.getPlatformInterface();
4645	tcu::TestLog&							log						= context.getTestContext().getLog();
4646	tcu::ResultCollector					resultCollector			(log);
4647	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4648	const InstanceDriver&					instanceDriver			(instance.getDriver());
4649	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4650	const deUint32							queueFamilyIndex		= 0;
4651	const deUint32							queueCount				= 1;
4652	const float								queuePriority			= 1.0f;
4653	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4654	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4655	int										numErrors				= 0;
4656	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4657
4658
4659	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4660	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4661
4662	// Only non-core extensions will be used when creating the device.
4663	vector<const char*>	coreExtensions;
4664	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4665	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4666
4667	vector<const char*> extensionNames;
4668	extensionNames.reserve(nonCoreExtensions.size());
4669	for (const string& extension : nonCoreExtensions)
4670		extensionNames.push_back(extension.c_str());
4671
4672	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>()))
4673	{
4674		static const Feature features[] =
4675		{
4676		FEATURE_ITEM (VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT, shaderImageInt64Atomics),
4677		FEATURE_ITEM (VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT, sparseImageInt64Atomics),
4678		};
4679		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(featuresStruct);
4680		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4681	}
4682
4683	if (numErrors > 0)
4684		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4685	else
4686		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4687}
4688
4689
4690tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentShadingRateFeaturesKHR (Context& context)
4691{
4692	const PlatformInterface&				vkp						= context.getPlatformInterface();
4693	tcu::TestLog&							log						= context.getTestContext().getLog();
4694	tcu::ResultCollector					resultCollector			(log);
4695	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4696	const InstanceDriver&					instanceDriver			(instance.getDriver());
4697	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4698	const deUint32							queueFamilyIndex		= 0;
4699	const deUint32							queueCount				= 1;
4700	const float								queuePriority			= 1.0f;
4701	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4702	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4703	int										numErrors				= 0;
4704	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4705
4706
4707	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4708	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4709
4710	// Only non-core extensions will be used when creating the device.
4711	vector<const char*>	coreExtensions;
4712	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4713	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4714
4715	vector<const char*> extensionNames;
4716	extensionNames.reserve(nonCoreExtensions.size());
4717	for (const string& extension : nonCoreExtensions)
4718		extensionNames.push_back(extension.c_str());
4719
4720	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>()))
4721	{
4722		static const Feature features[] =
4723		{
4724		FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, pipelineFragmentShadingRate),
4725		FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, primitiveFragmentShadingRate),
4726		FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, attachmentFragmentShadingRate),
4727		};
4728		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(featuresStruct);
4729		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4730	}
4731
4732	if (numErrors > 0)
4733		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4734	else
4735		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4736}
4737
4738
4739tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderTerminateInvocationFeatures (Context& context)
4740{
4741	const PlatformInterface&				vkp						= context.getPlatformInterface();
4742	tcu::TestLog&							log						= context.getTestContext().getLog();
4743	tcu::ResultCollector					resultCollector			(log);
4744	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4745	const InstanceDriver&					instanceDriver			(instance.getDriver());
4746	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4747	const deUint32							queueFamilyIndex		= 0;
4748	const deUint32							queueCount				= 1;
4749	const float								queuePriority			= 1.0f;
4750	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4751	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4752	int										numErrors				= 0;
4753	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4754
4755
4756	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4757	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4758
4759	// Only non-core extensions will be used when creating the device.
4760	vector<const char*>	coreExtensions;
4761	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4762	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4763
4764	vector<const char*> extensionNames;
4765	extensionNames.reserve(nonCoreExtensions.size());
4766	for (const string& extension : nonCoreExtensions)
4767		extensionNames.push_back(extension.c_str());
4768
4769	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderTerminateInvocationFeatures>()))
4770	{
4771		static const Feature features[] =
4772		{
4773		FEATURE_ITEM (VkPhysicalDeviceShaderTerminateInvocationFeatures, shaderTerminateInvocation),
4774		};
4775		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeatures*>(featuresStruct);
4776		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4777	}
4778
4779	if (numErrors > 0)
4780		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4781	else
4782		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4783}
4784
4785
4786tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentShadingRateEnumsFeaturesNV (Context& context)
4787{
4788	const PlatformInterface&				vkp						= context.getPlatformInterface();
4789	tcu::TestLog&							log						= context.getTestContext().getLog();
4790	tcu::ResultCollector					resultCollector			(log);
4791	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4792	const InstanceDriver&					instanceDriver			(instance.getDriver());
4793	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4794	const deUint32							queueFamilyIndex		= 0;
4795	const deUint32							queueCount				= 1;
4796	const float								queuePriority			= 1.0f;
4797	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4798	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4799	int										numErrors				= 0;
4800	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4801
4802
4803	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4804	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4805
4806	// Only non-core extensions will be used when creating the device.
4807	vector<const char*>	coreExtensions;
4808	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4809	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4810
4811	vector<const char*> extensionNames;
4812	extensionNames.reserve(nonCoreExtensions.size());
4813	for (const string& extension : nonCoreExtensions)
4814		extensionNames.push_back(extension.c_str());
4815
4816	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV>()))
4817	{
4818		static const Feature features[] =
4819		{
4820		FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV, fragmentShadingRateEnums),
4821		FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV, supersampleFragmentShadingRates),
4822		FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV, noInvocationFragmentShadingRates),
4823		};
4824		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(featuresStruct);
4825		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4826	}
4827
4828	if (numErrors > 0)
4829		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4830	else
4831		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4832}
4833
4834
4835tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImage2DViewOf3DFeaturesEXT (Context& context)
4836{
4837	const PlatformInterface&				vkp						= context.getPlatformInterface();
4838	tcu::TestLog&							log						= context.getTestContext().getLog();
4839	tcu::ResultCollector					resultCollector			(log);
4840	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4841	const InstanceDriver&					instanceDriver			(instance.getDriver());
4842	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4843	const deUint32							queueFamilyIndex		= 0;
4844	const deUint32							queueCount				= 1;
4845	const float								queuePriority			= 1.0f;
4846	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4847	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4848	int										numErrors				= 0;
4849	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4850
4851
4852	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4853	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4854
4855	// Only non-core extensions will be used when creating the device.
4856	vector<const char*>	coreExtensions;
4857	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4858	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4859
4860	vector<const char*> extensionNames;
4861	extensionNames.reserve(nonCoreExtensions.size());
4862	for (const string& extension : nonCoreExtensions)
4863		extensionNames.push_back(extension.c_str());
4864
4865	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImage2DViewOf3DFeaturesEXT>()))
4866	{
4867		static const Feature features[] =
4868		{
4869		FEATURE_ITEM (VkPhysicalDeviceImage2DViewOf3DFeaturesEXT, image2DViewOf3D),
4870		FEATURE_ITEM (VkPhysicalDeviceImage2DViewOf3DFeaturesEXT, sampler2DViewOf3D),
4871		};
4872		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT*>(featuresStruct);
4873		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4874	}
4875
4876	if (numErrors > 0)
4877		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4878	else
4879		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4880}
4881
4882
4883tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMutableDescriptorTypeFeaturesEXT (Context& context)
4884{
4885	const PlatformInterface&				vkp						= context.getPlatformInterface();
4886	tcu::TestLog&							log						= context.getTestContext().getLog();
4887	tcu::ResultCollector					resultCollector			(log);
4888	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4889	const InstanceDriver&					instanceDriver			(instance.getDriver());
4890	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4891	const deUint32							queueFamilyIndex		= 0;
4892	const deUint32							queueCount				= 1;
4893	const float								queuePriority			= 1.0f;
4894	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4895	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4896	int										numErrors				= 0;
4897	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4898
4899
4900	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4901	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4902
4903	// Only non-core extensions will be used when creating the device.
4904	vector<const char*>	coreExtensions;
4905	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4906	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4907
4908	vector<const char*> extensionNames;
4909	extensionNames.reserve(nonCoreExtensions.size());
4910	for (const string& extension : nonCoreExtensions)
4911		extensionNames.push_back(extension.c_str());
4912
4913	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT>()))
4914	{
4915		static const Feature features[] =
4916		{
4917		FEATURE_ITEM (VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT, mutableDescriptorType),
4918		};
4919		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT*>(featuresStruct);
4920		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4921	}
4922
4923	if (numErrors > 0)
4924		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4925	else
4926		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4927}
4928
4929
4930tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDepthClipControlFeaturesEXT (Context& context)
4931{
4932	const PlatformInterface&				vkp						= context.getPlatformInterface();
4933	tcu::TestLog&							log						= context.getTestContext().getLog();
4934	tcu::ResultCollector					resultCollector			(log);
4935	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4936	const InstanceDriver&					instanceDriver			(instance.getDriver());
4937	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4938	const deUint32							queueFamilyIndex		= 0;
4939	const deUint32							queueCount				= 1;
4940	const float								queuePriority			= 1.0f;
4941	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4942	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4943	int										numErrors				= 0;
4944	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4945
4946
4947	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4948	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4949
4950	// Only non-core extensions will be used when creating the device.
4951	vector<const char*>	coreExtensions;
4952	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
4953	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
4954
4955	vector<const char*> extensionNames;
4956	extensionNames.reserve(nonCoreExtensions.size());
4957	for (const string& extension : nonCoreExtensions)
4958		extensionNames.push_back(extension.c_str());
4959
4960	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDepthClipControlFeaturesEXT>()))
4961	{
4962		static const Feature features[] =
4963		{
4964		FEATURE_ITEM (VkPhysicalDeviceDepthClipControlFeaturesEXT, depthClipControl),
4965		};
4966		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDepthClipControlFeaturesEXT*>(featuresStruct);
4967		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
4968	}
4969
4970	if (numErrors > 0)
4971		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
4972	else
4973		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
4974}
4975
4976
4977tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVertexInputDynamicStateFeaturesEXT (Context& context)
4978{
4979	const PlatformInterface&				vkp						= context.getPlatformInterface();
4980	tcu::TestLog&							log						= context.getTestContext().getLog();
4981	tcu::ResultCollector					resultCollector			(log);
4982	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
4983	const InstanceDriver&					instanceDriver			(instance.getDriver());
4984	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
4985	const deUint32							queueFamilyIndex		= 0;
4986	const deUint32							queueCount				= 1;
4987	const float								queuePriority			= 1.0f;
4988	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
4989	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
4990	int										numErrors				= 0;
4991	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
4992
4993
4994	VkPhysicalDeviceFeatures emptyDeviceFeatures;
4995	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
4996
4997	// Only non-core extensions will be used when creating the device.
4998	vector<const char*>	coreExtensions;
4999	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5000	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5001
5002	vector<const char*> extensionNames;
5003	extensionNames.reserve(nonCoreExtensions.size());
5004	for (const string& extension : nonCoreExtensions)
5005		extensionNames.push_back(extension.c_str());
5006
5007	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>()))
5008	{
5009		static const Feature features[] =
5010		{
5011		FEATURE_ITEM (VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT, vertexInputDynamicState),
5012		};
5013		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT*>(featuresStruct);
5014		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5015	}
5016
5017	if (numErrors > 0)
5018		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5019	else
5020		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5021}
5022
5023
5024tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExternalMemoryRDMAFeaturesNV (Context& context)
5025{
5026	const PlatformInterface&				vkp						= context.getPlatformInterface();
5027	tcu::TestLog&							log						= context.getTestContext().getLog();
5028	tcu::ResultCollector					resultCollector			(log);
5029	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5030	const InstanceDriver&					instanceDriver			(instance.getDriver());
5031	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5032	const deUint32							queueFamilyIndex		= 0;
5033	const deUint32							queueCount				= 1;
5034	const float								queuePriority			= 1.0f;
5035	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5036	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5037	int										numErrors				= 0;
5038	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5039
5040
5041	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5042	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5043
5044	// Only non-core extensions will be used when creating the device.
5045	vector<const char*>	coreExtensions;
5046	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5047	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5048
5049	vector<const char*> extensionNames;
5050	extensionNames.reserve(nonCoreExtensions.size());
5051	for (const string& extension : nonCoreExtensions)
5052		extensionNames.push_back(extension.c_str());
5053
5054	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExternalMemoryRDMAFeaturesNV>()))
5055	{
5056		static const Feature features[] =
5057		{
5058		FEATURE_ITEM (VkPhysicalDeviceExternalMemoryRDMAFeaturesNV, externalMemoryRDMA),
5059		};
5060		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV*>(featuresStruct);
5061		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5062	}
5063
5064	if (numErrors > 0)
5065		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5066	else
5067		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5068}
5069
5070
5071tcu::TestStatus createDeviceWithUnsupportedFeaturesTestColorWriteEnableFeaturesEXT (Context& context)
5072{
5073	const PlatformInterface&				vkp						= context.getPlatformInterface();
5074	tcu::TestLog&							log						= context.getTestContext().getLog();
5075	tcu::ResultCollector					resultCollector			(log);
5076	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5077	const InstanceDriver&					instanceDriver			(instance.getDriver());
5078	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5079	const deUint32							queueFamilyIndex		= 0;
5080	const deUint32							queueCount				= 1;
5081	const float								queuePriority			= 1.0f;
5082	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5083	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5084	int										numErrors				= 0;
5085	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5086
5087
5088	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5089	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5090
5091	// Only non-core extensions will be used when creating the device.
5092	vector<const char*>	coreExtensions;
5093	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5094	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5095
5096	vector<const char*> extensionNames;
5097	extensionNames.reserve(nonCoreExtensions.size());
5098	for (const string& extension : nonCoreExtensions)
5099		extensionNames.push_back(extension.c_str());
5100
5101	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceColorWriteEnableFeaturesEXT>()))
5102	{
5103		static const Feature features[] =
5104		{
5105		FEATURE_ITEM (VkPhysicalDeviceColorWriteEnableFeaturesEXT, colorWriteEnable),
5106		};
5107		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceColorWriteEnableFeaturesEXT*>(featuresStruct);
5108		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5109	}
5110
5111	if (numErrors > 0)
5112		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5113	else
5114		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5115}
5116
5117
5118tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSynchronization2Features (Context& context)
5119{
5120	const PlatformInterface&				vkp						= context.getPlatformInterface();
5121	tcu::TestLog&							log						= context.getTestContext().getLog();
5122	tcu::ResultCollector					resultCollector			(log);
5123	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5124	const InstanceDriver&					instanceDriver			(instance.getDriver());
5125	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5126	const deUint32							queueFamilyIndex		= 0;
5127	const deUint32							queueCount				= 1;
5128	const float								queuePriority			= 1.0f;
5129	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5130	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5131	int										numErrors				= 0;
5132	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5133
5134
5135	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5136	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5137
5138	// Only non-core extensions will be used when creating the device.
5139	vector<const char*>	coreExtensions;
5140	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5141	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5142
5143	vector<const char*> extensionNames;
5144	extensionNames.reserve(nonCoreExtensions.size());
5145	for (const string& extension : nonCoreExtensions)
5146		extensionNames.push_back(extension.c_str());
5147
5148	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSynchronization2Features>()))
5149	{
5150		static const Feature features[] =
5151		{
5152		FEATURE_ITEM (VkPhysicalDeviceSynchronization2Features, synchronization2),
5153		};
5154		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSynchronization2Features*>(featuresStruct);
5155		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5156	}
5157
5158	if (numErrors > 0)
5159		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5160	else
5161		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5162}
5163
5164
5165tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPrimitivesGeneratedQueryFeaturesEXT (Context& context)
5166{
5167	const PlatformInterface&				vkp						= context.getPlatformInterface();
5168	tcu::TestLog&							log						= context.getTestContext().getLog();
5169	tcu::ResultCollector					resultCollector			(log);
5170	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5171	const InstanceDriver&					instanceDriver			(instance.getDriver());
5172	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5173	const deUint32							queueFamilyIndex		= 0;
5174	const deUint32							queueCount				= 1;
5175	const float								queuePriority			= 1.0f;
5176	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5177	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5178	int										numErrors				= 0;
5179	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5180
5181
5182	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5183	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5184
5185	// Only non-core extensions will be used when creating the device.
5186	vector<const char*>	coreExtensions;
5187	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5188	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5189
5190	vector<const char*> extensionNames;
5191	extensionNames.reserve(nonCoreExtensions.size());
5192	for (const string& extension : nonCoreExtensions)
5193		extensionNames.push_back(extension.c_str());
5194
5195	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT>()))
5196	{
5197		static const Feature features[] =
5198		{
5199		FEATURE_ITEM (VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT, primitivesGeneratedQuery),
5200		FEATURE_ITEM (VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT, primitivesGeneratedQueryWithRasterizerDiscard),
5201		FEATURE_ITEM (VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT, primitivesGeneratedQueryWithNonZeroStreams),
5202		};
5203		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT*>(featuresStruct);
5204		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5205	}
5206
5207	if (numErrors > 0)
5208		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5209	else
5210		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5211}
5212
5213
5214tcu::TestStatus createDeviceWithUnsupportedFeaturesTestLegacyDitheringFeaturesEXT (Context& context)
5215{
5216	const PlatformInterface&				vkp						= context.getPlatformInterface();
5217	tcu::TestLog&							log						= context.getTestContext().getLog();
5218	tcu::ResultCollector					resultCollector			(log);
5219	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5220	const InstanceDriver&					instanceDriver			(instance.getDriver());
5221	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5222	const deUint32							queueFamilyIndex		= 0;
5223	const deUint32							queueCount				= 1;
5224	const float								queuePriority			= 1.0f;
5225	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5226	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5227	int										numErrors				= 0;
5228	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5229
5230
5231	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5232	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5233
5234	// Only non-core extensions will be used when creating the device.
5235	vector<const char*>	coreExtensions;
5236	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5237	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5238
5239	vector<const char*> extensionNames;
5240	extensionNames.reserve(nonCoreExtensions.size());
5241	for (const string& extension : nonCoreExtensions)
5242		extensionNames.push_back(extension.c_str());
5243
5244	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceLegacyDitheringFeaturesEXT>()))
5245	{
5246		static const Feature features[] =
5247		{
5248		FEATURE_ITEM (VkPhysicalDeviceLegacyDitheringFeaturesEXT, legacyDithering),
5249		};
5250		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceLegacyDitheringFeaturesEXT*>(featuresStruct);
5251		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5252	}
5253
5254	if (numErrors > 0)
5255		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5256	else
5257		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5258}
5259
5260
5261tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMultisampledRenderToSingleSampledFeaturesEXT (Context& context)
5262{
5263	const PlatformInterface&				vkp						= context.getPlatformInterface();
5264	tcu::TestLog&							log						= context.getTestContext().getLog();
5265	tcu::ResultCollector					resultCollector			(log);
5266	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5267	const InstanceDriver&					instanceDriver			(instance.getDriver());
5268	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5269	const deUint32							queueFamilyIndex		= 0;
5270	const deUint32							queueCount				= 1;
5271	const float								queuePriority			= 1.0f;
5272	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5273	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5274	int										numErrors				= 0;
5275	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5276
5277
5278	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5279	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5280
5281	// Only non-core extensions will be used when creating the device.
5282	vector<const char*>	coreExtensions;
5283	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5284	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5285
5286	vector<const char*> extensionNames;
5287	extensionNames.reserve(nonCoreExtensions.size());
5288	for (const string& extension : nonCoreExtensions)
5289		extensionNames.push_back(extension.c_str());
5290
5291	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT>()))
5292	{
5293		static const Feature features[] =
5294		{
5295		FEATURE_ITEM (VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT, multisampledRenderToSingleSampled),
5296		};
5297		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT*>(featuresStruct);
5298		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5299	}
5300
5301	if (numErrors > 0)
5302		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5303	else
5304		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5305}
5306
5307
5308tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPipelineProtectedAccessFeaturesEXT (Context& context)
5309{
5310	const PlatformInterface&				vkp						= context.getPlatformInterface();
5311	tcu::TestLog&							log						= context.getTestContext().getLog();
5312	tcu::ResultCollector					resultCollector			(log);
5313	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5314	const InstanceDriver&					instanceDriver			(instance.getDriver());
5315	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5316	const deUint32							queueFamilyIndex		= 0;
5317	const deUint32							queueCount				= 1;
5318	const float								queuePriority			= 1.0f;
5319	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5320	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5321	int										numErrors				= 0;
5322	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5323
5324
5325	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5326	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5327
5328	// Only non-core extensions will be used when creating the device.
5329	vector<const char*>	coreExtensions;
5330	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5331	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5332
5333	vector<const char*> extensionNames;
5334	extensionNames.reserve(nonCoreExtensions.size());
5335	for (const string& extension : nonCoreExtensions)
5336		extensionNames.push_back(extension.c_str());
5337
5338	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePipelineProtectedAccessFeaturesEXT>()))
5339	{
5340		static const Feature features[] =
5341		{
5342		FEATURE_ITEM (VkPhysicalDevicePipelineProtectedAccessFeaturesEXT, pipelineProtectedAccess),
5343		};
5344		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePipelineProtectedAccessFeaturesEXT*>(featuresStruct);
5345		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5346	}
5347
5348	if (numErrors > 0)
5349		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5350	else
5351		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5352}
5353
5354
5355tcu::TestStatus createDeviceWithUnsupportedFeaturesTestInheritedViewportScissorFeaturesNV (Context& context)
5356{
5357	const PlatformInterface&				vkp						= context.getPlatformInterface();
5358	tcu::TestLog&							log						= context.getTestContext().getLog();
5359	tcu::ResultCollector					resultCollector			(log);
5360	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5361	const InstanceDriver&					instanceDriver			(instance.getDriver());
5362	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5363	const deUint32							queueFamilyIndex		= 0;
5364	const deUint32							queueCount				= 1;
5365	const float								queuePriority			= 1.0f;
5366	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5367	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5368	int										numErrors				= 0;
5369	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5370
5371
5372	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5373	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5374
5375	// Only non-core extensions will be used when creating the device.
5376	vector<const char*>	coreExtensions;
5377	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5378	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5379
5380	vector<const char*> extensionNames;
5381	extensionNames.reserve(nonCoreExtensions.size());
5382	for (const string& extension : nonCoreExtensions)
5383		extensionNames.push_back(extension.c_str());
5384
5385	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>()))
5386	{
5387		static const Feature features[] =
5388		{
5389		FEATURE_ITEM (VkPhysicalDeviceInheritedViewportScissorFeaturesNV, inheritedViewportScissor2D),
5390		};
5391		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceInheritedViewportScissorFeaturesNV*>(featuresStruct);
5392		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5393	}
5394
5395	if (numErrors > 0)
5396		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5397	else
5398		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5399}
5400
5401
5402tcu::TestStatus createDeviceWithUnsupportedFeaturesTestYcbcr2Plane444FormatsFeaturesEXT (Context& context)
5403{
5404	const PlatformInterface&				vkp						= context.getPlatformInterface();
5405	tcu::TestLog&							log						= context.getTestContext().getLog();
5406	tcu::ResultCollector					resultCollector			(log);
5407	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5408	const InstanceDriver&					instanceDriver			(instance.getDriver());
5409	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5410	const deUint32							queueFamilyIndex		= 0;
5411	const deUint32							queueCount				= 1;
5412	const float								queuePriority			= 1.0f;
5413	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5414	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5415	int										numErrors				= 0;
5416	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5417
5418
5419	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5420	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5421
5422	// Only non-core extensions will be used when creating the device.
5423	vector<const char*>	coreExtensions;
5424	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5425	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5426
5427	vector<const char*> extensionNames;
5428	extensionNames.reserve(nonCoreExtensions.size());
5429	for (const string& extension : nonCoreExtensions)
5430		extensionNames.push_back(extension.c_str());
5431
5432	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>()))
5433	{
5434		static const Feature features[] =
5435		{
5436		FEATURE_ITEM (VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT, ycbcr2plane444Formats),
5437		};
5438		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT*>(featuresStruct);
5439		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5440	}
5441
5442	if (numErrors > 0)
5443		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5444	else
5445		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5446}
5447
5448
5449tcu::TestStatus createDeviceWithUnsupportedFeaturesTestProvokingVertexFeaturesEXT (Context& context)
5450{
5451	const PlatformInterface&				vkp						= context.getPlatformInterface();
5452	tcu::TestLog&							log						= context.getTestContext().getLog();
5453	tcu::ResultCollector					resultCollector			(log);
5454	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5455	const InstanceDriver&					instanceDriver			(instance.getDriver());
5456	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5457	const deUint32							queueFamilyIndex		= 0;
5458	const deUint32							queueCount				= 1;
5459	const float								queuePriority			= 1.0f;
5460	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5461	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5462	int										numErrors				= 0;
5463	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5464
5465
5466	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5467	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5468
5469	// Only non-core extensions will be used when creating the device.
5470	vector<const char*>	coreExtensions;
5471	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5472	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5473
5474	vector<const char*> extensionNames;
5475	extensionNames.reserve(nonCoreExtensions.size());
5476	for (const string& extension : nonCoreExtensions)
5477		extensionNames.push_back(extension.c_str());
5478
5479	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceProvokingVertexFeaturesEXT>()))
5480	{
5481		static const Feature features[] =
5482		{
5483		FEATURE_ITEM (VkPhysicalDeviceProvokingVertexFeaturesEXT, provokingVertexLast),
5484		FEATURE_ITEM (VkPhysicalDeviceProvokingVertexFeaturesEXT, transformFeedbackPreservesProvokingVertex),
5485		};
5486		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceProvokingVertexFeaturesEXT*>(featuresStruct);
5487		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5488	}
5489
5490	if (numErrors > 0)
5491		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5492	else
5493		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5494}
5495
5496
5497tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDescriptorBufferFeaturesEXT (Context& context)
5498{
5499	const PlatformInterface&				vkp						= context.getPlatformInterface();
5500	tcu::TestLog&							log						= context.getTestContext().getLog();
5501	tcu::ResultCollector					resultCollector			(log);
5502	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5503	const InstanceDriver&					instanceDriver			(instance.getDriver());
5504	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5505	const deUint32							queueFamilyIndex		= 0;
5506	const deUint32							queueCount				= 1;
5507	const float								queuePriority			= 1.0f;
5508	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5509	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5510	int										numErrors				= 0;
5511	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5512
5513
5514	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5515	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5516
5517	// Only non-core extensions will be used when creating the device.
5518	vector<const char*>	coreExtensions;
5519	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5520	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5521
5522	vector<const char*> extensionNames;
5523	extensionNames.reserve(nonCoreExtensions.size());
5524	for (const string& extension : nonCoreExtensions)
5525		extensionNames.push_back(extension.c_str());
5526
5527	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDescriptorBufferFeaturesEXT>()))
5528	{
5529		static const Feature features[] =
5530		{
5531		FEATURE_ITEM (VkPhysicalDeviceDescriptorBufferFeaturesEXT, descriptorBuffer),
5532		FEATURE_ITEM (VkPhysicalDeviceDescriptorBufferFeaturesEXT, descriptorBufferCaptureReplay),
5533		FEATURE_ITEM (VkPhysicalDeviceDescriptorBufferFeaturesEXT, descriptorBufferImageLayoutIgnored),
5534		FEATURE_ITEM (VkPhysicalDeviceDescriptorBufferFeaturesEXT, descriptorBufferPushDescriptors),
5535		};
5536		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDescriptorBufferFeaturesEXT*>(featuresStruct);
5537		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5538	}
5539
5540	if (numErrors > 0)
5541		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5542	else
5543		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5544}
5545
5546
5547tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderIntegerDotProductFeatures (Context& context)
5548{
5549	const PlatformInterface&				vkp						= context.getPlatformInterface();
5550	tcu::TestLog&							log						= context.getTestContext().getLog();
5551	tcu::ResultCollector					resultCollector			(log);
5552	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5553	const InstanceDriver&					instanceDriver			(instance.getDriver());
5554	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5555	const deUint32							queueFamilyIndex		= 0;
5556	const deUint32							queueCount				= 1;
5557	const float								queuePriority			= 1.0f;
5558	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5559	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5560	int										numErrors				= 0;
5561	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5562
5563
5564	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5565	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5566
5567	// Only non-core extensions will be used when creating the device.
5568	vector<const char*>	coreExtensions;
5569	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5570	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5571
5572	vector<const char*> extensionNames;
5573	extensionNames.reserve(nonCoreExtensions.size());
5574	for (const string& extension : nonCoreExtensions)
5575		extensionNames.push_back(extension.c_str());
5576
5577	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderIntegerDotProductFeatures>()))
5578	{
5579		static const Feature features[] =
5580		{
5581		FEATURE_ITEM (VkPhysicalDeviceShaderIntegerDotProductFeatures, shaderIntegerDotProduct),
5582		};
5583		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderIntegerDotProductFeatures*>(featuresStruct);
5584		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5585	}
5586
5587	if (numErrors > 0)
5588		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5589	else
5590		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5591}
5592
5593
5594tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentShaderBarycentricFeaturesKHR (Context& context)
5595{
5596	const PlatformInterface&				vkp						= context.getPlatformInterface();
5597	tcu::TestLog&							log						= context.getTestContext().getLog();
5598	tcu::ResultCollector					resultCollector			(log);
5599	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5600	const InstanceDriver&					instanceDriver			(instance.getDriver());
5601	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5602	const deUint32							queueFamilyIndex		= 0;
5603	const deUint32							queueCount				= 1;
5604	const float								queuePriority			= 1.0f;
5605	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5606	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5607	int										numErrors				= 0;
5608	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5609
5610
5611	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5612	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5613
5614	// Only non-core extensions will be used when creating the device.
5615	vector<const char*>	coreExtensions;
5616	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5617	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5618
5619	vector<const char*> extensionNames;
5620	extensionNames.reserve(nonCoreExtensions.size());
5621	for (const string& extension : nonCoreExtensions)
5622		extensionNames.push_back(extension.c_str());
5623
5624	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR>()))
5625	{
5626		static const Feature features[] =
5627		{
5628		FEATURE_ITEM (VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR, fragmentShaderBarycentric),
5629		};
5630		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR*>(featuresStruct);
5631		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5632	}
5633
5634	if (numErrors > 0)
5635		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5636	else
5637		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5638}
5639
5640
5641tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRayTracingMotionBlurFeaturesNV (Context& context)
5642{
5643	const PlatformInterface&				vkp						= context.getPlatformInterface();
5644	tcu::TestLog&							log						= context.getTestContext().getLog();
5645	tcu::ResultCollector					resultCollector			(log);
5646	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5647	const InstanceDriver&					instanceDriver			(instance.getDriver());
5648	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5649	const deUint32							queueFamilyIndex		= 0;
5650	const deUint32							queueCount				= 1;
5651	const float								queuePriority			= 1.0f;
5652	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5653	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5654	int										numErrors				= 0;
5655	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5656
5657
5658	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5659	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5660
5661	// Only non-core extensions will be used when creating the device.
5662	vector<const char*>	coreExtensions;
5663	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5664	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5665
5666	vector<const char*> extensionNames;
5667	extensionNames.reserve(nonCoreExtensions.size());
5668	for (const string& extension : nonCoreExtensions)
5669		extensionNames.push_back(extension.c_str());
5670
5671	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV>()))
5672	{
5673		static const Feature features[] =
5674		{
5675		FEATURE_ITEM (VkPhysicalDeviceRayTracingMotionBlurFeaturesNV, rayTracingMotionBlur),
5676		FEATURE_ITEM (VkPhysicalDeviceRayTracingMotionBlurFeaturesNV, rayTracingMotionBlurPipelineTraceRaysIndirect),
5677		};
5678		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV*>(featuresStruct);
5679		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5680	}
5681
5682	if (numErrors > 0)
5683		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5684	else
5685		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5686}
5687
5688
5689tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRGBA10X6FormatsFeaturesEXT (Context& context)
5690{
5691	const PlatformInterface&				vkp						= context.getPlatformInterface();
5692	tcu::TestLog&							log						= context.getTestContext().getLog();
5693	tcu::ResultCollector					resultCollector			(log);
5694	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5695	const InstanceDriver&					instanceDriver			(instance.getDriver());
5696	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5697	const deUint32							queueFamilyIndex		= 0;
5698	const deUint32							queueCount				= 1;
5699	const float								queuePriority			= 1.0f;
5700	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5701	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5702	int										numErrors				= 0;
5703	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5704
5705
5706	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5707	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5708
5709	// Only non-core extensions will be used when creating the device.
5710	vector<const char*>	coreExtensions;
5711	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5712	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5713
5714	vector<const char*> extensionNames;
5715	extensionNames.reserve(nonCoreExtensions.size());
5716	for (const string& extension : nonCoreExtensions)
5717		extensionNames.push_back(extension.c_str());
5718
5719	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT>()))
5720	{
5721		static const Feature features[] =
5722		{
5723		FEATURE_ITEM (VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT, formatRgba10x6WithoutYCbCrSampler),
5724		};
5725		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT*>(featuresStruct);
5726		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5727	}
5728
5729	if (numErrors > 0)
5730		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5731	else
5732		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5733}
5734
5735
5736tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDynamicRenderingFeatures (Context& context)
5737{
5738	const PlatformInterface&				vkp						= context.getPlatformInterface();
5739	tcu::TestLog&							log						= context.getTestContext().getLog();
5740	tcu::ResultCollector					resultCollector			(log);
5741	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5742	const InstanceDriver&					instanceDriver			(instance.getDriver());
5743	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5744	const deUint32							queueFamilyIndex		= 0;
5745	const deUint32							queueCount				= 1;
5746	const float								queuePriority			= 1.0f;
5747	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5748	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5749	int										numErrors				= 0;
5750	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5751
5752
5753	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5754	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5755
5756	// Only non-core extensions will be used when creating the device.
5757	vector<const char*>	coreExtensions;
5758	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5759	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5760
5761	vector<const char*> extensionNames;
5762	extensionNames.reserve(nonCoreExtensions.size());
5763	for (const string& extension : nonCoreExtensions)
5764		extensionNames.push_back(extension.c_str());
5765
5766	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDynamicRenderingFeatures>()))
5767	{
5768		static const Feature features[] =
5769		{
5770		FEATURE_ITEM (VkPhysicalDeviceDynamicRenderingFeatures, dynamicRendering),
5771		};
5772		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDynamicRenderingFeatures*>(featuresStruct);
5773		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5774	}
5775
5776	if (numErrors > 0)
5777		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5778	else
5779		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5780}
5781
5782
5783tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImageViewMinLodFeaturesEXT (Context& context)
5784{
5785	const PlatformInterface&				vkp						= context.getPlatformInterface();
5786	tcu::TestLog&							log						= context.getTestContext().getLog();
5787	tcu::ResultCollector					resultCollector			(log);
5788	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5789	const InstanceDriver&					instanceDriver			(instance.getDriver());
5790	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5791	const deUint32							queueFamilyIndex		= 0;
5792	const deUint32							queueCount				= 1;
5793	const float								queuePriority			= 1.0f;
5794	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5795	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5796	int										numErrors				= 0;
5797	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5798
5799
5800	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5801	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5802
5803	// Only non-core extensions will be used when creating the device.
5804	vector<const char*>	coreExtensions;
5805	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5806	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5807
5808	vector<const char*> extensionNames;
5809	extensionNames.reserve(nonCoreExtensions.size());
5810	for (const string& extension : nonCoreExtensions)
5811		extensionNames.push_back(extension.c_str());
5812
5813	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImageViewMinLodFeaturesEXT>()))
5814	{
5815		static const Feature features[] =
5816		{
5817		FEATURE_ITEM (VkPhysicalDeviceImageViewMinLodFeaturesEXT, minLod),
5818		};
5819		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImageViewMinLodFeaturesEXT*>(featuresStruct);
5820		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5821	}
5822
5823	if (numErrors > 0)
5824		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5825	else
5826		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5827}
5828
5829
5830tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRasterizationOrderAttachmentAccessFeaturesEXT (Context& context)
5831{
5832	const PlatformInterface&				vkp						= context.getPlatformInterface();
5833	tcu::TestLog&							log						= context.getTestContext().getLog();
5834	tcu::ResultCollector					resultCollector			(log);
5835	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5836	const InstanceDriver&					instanceDriver			(instance.getDriver());
5837	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5838	const deUint32							queueFamilyIndex		= 0;
5839	const deUint32							queueCount				= 1;
5840	const float								queuePriority			= 1.0f;
5841	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5842	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5843	int										numErrors				= 0;
5844	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5845
5846
5847	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5848	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5849
5850	// Only non-core extensions will be used when creating the device.
5851	vector<const char*>	coreExtensions;
5852	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5853	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5854
5855	vector<const char*> extensionNames;
5856	extensionNames.reserve(nonCoreExtensions.size());
5857	for (const string& extension : nonCoreExtensions)
5858		extensionNames.push_back(extension.c_str());
5859
5860	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT>()))
5861	{
5862		static const Feature features[] =
5863		{
5864		FEATURE_ITEM (VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT, rasterizationOrderColorAttachmentAccess),
5865		FEATURE_ITEM (VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT, rasterizationOrderDepthAttachmentAccess),
5866		FEATURE_ITEM (VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT, rasterizationOrderStencilAttachmentAccess),
5867		};
5868		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT*>(featuresStruct);
5869		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5870	}
5871
5872	if (numErrors > 0)
5873		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5874	else
5875		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5876}
5877
5878
5879tcu::TestStatus createDeviceWithUnsupportedFeaturesTestLinearColorAttachmentFeaturesNV (Context& context)
5880{
5881	const PlatformInterface&				vkp						= context.getPlatformInterface();
5882	tcu::TestLog&							log						= context.getTestContext().getLog();
5883	tcu::ResultCollector					resultCollector			(log);
5884	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5885	const InstanceDriver&					instanceDriver			(instance.getDriver());
5886	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5887	const deUint32							queueFamilyIndex		= 0;
5888	const deUint32							queueCount				= 1;
5889	const float								queuePriority			= 1.0f;
5890	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5891	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5892	int										numErrors				= 0;
5893	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5894
5895
5896	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5897	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5898
5899	// Only non-core extensions will be used when creating the device.
5900	vector<const char*>	coreExtensions;
5901	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5902	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5903
5904	vector<const char*> extensionNames;
5905	extensionNames.reserve(nonCoreExtensions.size());
5906	for (const string& extension : nonCoreExtensions)
5907		extensionNames.push_back(extension.c_str());
5908
5909	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceLinearColorAttachmentFeaturesNV>()))
5910	{
5911		static const Feature features[] =
5912		{
5913		FEATURE_ITEM (VkPhysicalDeviceLinearColorAttachmentFeaturesNV, linearColorAttachment),
5914		};
5915		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceLinearColorAttachmentFeaturesNV*>(featuresStruct);
5916		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5917	}
5918
5919	if (numErrors > 0)
5920		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5921	else
5922		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5923}
5924
5925
5926tcu::TestStatus createDeviceWithUnsupportedFeaturesTestGraphicsPipelineLibraryFeaturesEXT (Context& context)
5927{
5928	const PlatformInterface&				vkp						= context.getPlatformInterface();
5929	tcu::TestLog&							log						= context.getTestContext().getLog();
5930	tcu::ResultCollector					resultCollector			(log);
5931	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5932	const InstanceDriver&					instanceDriver			(instance.getDriver());
5933	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5934	const deUint32							queueFamilyIndex		= 0;
5935	const deUint32							queueCount				= 1;
5936	const float								queuePriority			= 1.0f;
5937	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5938	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5939	int										numErrors				= 0;
5940	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5941
5942
5943	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5944	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5945
5946	// Only non-core extensions will be used when creating the device.
5947	vector<const char*>	coreExtensions;
5948	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5949	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5950
5951	vector<const char*> extensionNames;
5952	extensionNames.reserve(nonCoreExtensions.size());
5953	for (const string& extension : nonCoreExtensions)
5954		extensionNames.push_back(extension.c_str());
5955
5956	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT>()))
5957	{
5958		static const Feature features[] =
5959		{
5960		FEATURE_ITEM (VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT, graphicsPipelineLibrary),
5961		};
5962		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT*>(featuresStruct);
5963		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
5964	}
5965
5966	if (numErrors > 0)
5967		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
5968	else
5969		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
5970}
5971
5972
5973tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDescriptorSetHostMappingFeaturesVALVE (Context& context)
5974{
5975	const PlatformInterface&				vkp						= context.getPlatformInterface();
5976	tcu::TestLog&							log						= context.getTestContext().getLog();
5977	tcu::ResultCollector					resultCollector			(log);
5978	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
5979	const InstanceDriver&					instanceDriver			(instance.getDriver());
5980	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
5981	const deUint32							queueFamilyIndex		= 0;
5982	const deUint32							queueCount				= 1;
5983	const float								queuePriority			= 1.0f;
5984	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
5985	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
5986	int										numErrors				= 0;
5987	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
5988
5989
5990	VkPhysicalDeviceFeatures emptyDeviceFeatures;
5991	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
5992
5993	// Only non-core extensions will be used when creating the device.
5994	vector<const char*>	coreExtensions;
5995	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
5996	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
5997
5998	vector<const char*> extensionNames;
5999	extensionNames.reserve(nonCoreExtensions.size());
6000	for (const string& extension : nonCoreExtensions)
6001		extensionNames.push_back(extension.c_str());
6002
6003	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE>()))
6004	{
6005		static const Feature features[] =
6006		{
6007		FEATURE_ITEM (VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE, descriptorSetHostMapping),
6008		};
6009		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE*>(featuresStruct);
6010		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6011	}
6012
6013	if (numErrors > 0)
6014		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6015	else
6016		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6017}
6018
6019
6020tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderModuleIdentifierFeaturesEXT (Context& context)
6021{
6022	const PlatformInterface&				vkp						= context.getPlatformInterface();
6023	tcu::TestLog&							log						= context.getTestContext().getLog();
6024	tcu::ResultCollector					resultCollector			(log);
6025	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6026	const InstanceDriver&					instanceDriver			(instance.getDriver());
6027	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6028	const deUint32							queueFamilyIndex		= 0;
6029	const deUint32							queueCount				= 1;
6030	const float								queuePriority			= 1.0f;
6031	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6032	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6033	int										numErrors				= 0;
6034	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6035
6036
6037	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6038	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6039
6040	// Only non-core extensions will be used when creating the device.
6041	vector<const char*>	coreExtensions;
6042	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6043	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6044
6045	vector<const char*> extensionNames;
6046	extensionNames.reserve(nonCoreExtensions.size());
6047	for (const string& extension : nonCoreExtensions)
6048		extensionNames.push_back(extension.c_str());
6049
6050	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT>()))
6051	{
6052		static const Feature features[] =
6053		{
6054		FEATURE_ITEM (VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT, shaderModuleIdentifier),
6055		};
6056		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT*>(featuresStruct);
6057		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6058	}
6059
6060	if (numErrors > 0)
6061		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6062	else
6063		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6064}
6065
6066
6067tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImageCompressionControlFeaturesEXT (Context& context)
6068{
6069	const PlatformInterface&				vkp						= context.getPlatformInterface();
6070	tcu::TestLog&							log						= context.getTestContext().getLog();
6071	tcu::ResultCollector					resultCollector			(log);
6072	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6073	const InstanceDriver&					instanceDriver			(instance.getDriver());
6074	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6075	const deUint32							queueFamilyIndex		= 0;
6076	const deUint32							queueCount				= 1;
6077	const float								queuePriority			= 1.0f;
6078	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6079	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6080	int										numErrors				= 0;
6081	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6082
6083
6084	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6085	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6086
6087	// Only non-core extensions will be used when creating the device.
6088	vector<const char*>	coreExtensions;
6089	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6090	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6091
6092	vector<const char*> extensionNames;
6093	extensionNames.reserve(nonCoreExtensions.size());
6094	for (const string& extension : nonCoreExtensions)
6095		extensionNames.push_back(extension.c_str());
6096
6097	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImageCompressionControlFeaturesEXT>()))
6098	{
6099		static const Feature features[] =
6100		{
6101		FEATURE_ITEM (VkPhysicalDeviceImageCompressionControlFeaturesEXT, imageCompressionControl),
6102		};
6103		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImageCompressionControlFeaturesEXT*>(featuresStruct);
6104		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6105	}
6106
6107	if (numErrors > 0)
6108		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6109	else
6110		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6111}
6112
6113
6114tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImageCompressionControlSwapchainFeaturesEXT (Context& context)
6115{
6116	const PlatformInterface&				vkp						= context.getPlatformInterface();
6117	tcu::TestLog&							log						= context.getTestContext().getLog();
6118	tcu::ResultCollector					resultCollector			(log);
6119	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6120	const InstanceDriver&					instanceDriver			(instance.getDriver());
6121	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6122	const deUint32							queueFamilyIndex		= 0;
6123	const deUint32							queueCount				= 1;
6124	const float								queuePriority			= 1.0f;
6125	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6126	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6127	int										numErrors				= 0;
6128	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6129
6130
6131	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6132	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6133
6134	// Only non-core extensions will be used when creating the device.
6135	vector<const char*>	coreExtensions;
6136	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6137	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6138
6139	vector<const char*> extensionNames;
6140	extensionNames.reserve(nonCoreExtensions.size());
6141	for (const string& extension : nonCoreExtensions)
6142		extensionNames.push_back(extension.c_str());
6143
6144	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT>()))
6145	{
6146		static const Feature features[] =
6147		{
6148		FEATURE_ITEM (VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT, imageCompressionControlSwapchain),
6149		};
6150		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT*>(featuresStruct);
6151		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6152	}
6153
6154	if (numErrors > 0)
6155		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6156	else
6157		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6158}
6159
6160
6161tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSubpassMergeFeedbackFeaturesEXT (Context& context)
6162{
6163	const PlatformInterface&				vkp						= context.getPlatformInterface();
6164	tcu::TestLog&							log						= context.getTestContext().getLog();
6165	tcu::ResultCollector					resultCollector			(log);
6166	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6167	const InstanceDriver&					instanceDriver			(instance.getDriver());
6168	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6169	const deUint32							queueFamilyIndex		= 0;
6170	const deUint32							queueCount				= 1;
6171	const float								queuePriority			= 1.0f;
6172	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6173	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6174	int										numErrors				= 0;
6175	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6176
6177
6178	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6179	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6180
6181	// Only non-core extensions will be used when creating the device.
6182	vector<const char*>	coreExtensions;
6183	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6184	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6185
6186	vector<const char*> extensionNames;
6187	extensionNames.reserve(nonCoreExtensions.size());
6188	for (const string& extension : nonCoreExtensions)
6189		extensionNames.push_back(extension.c_str());
6190
6191	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT>()))
6192	{
6193		static const Feature features[] =
6194		{
6195		FEATURE_ITEM (VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT, subpassMergeFeedback),
6196		};
6197		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT*>(featuresStruct);
6198		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6199	}
6200
6201	if (numErrors > 0)
6202		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6203	else
6204		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6205}
6206
6207
6208tcu::TestStatus createDeviceWithUnsupportedFeaturesTestOpacityMicromapFeaturesEXT (Context& context)
6209{
6210	const PlatformInterface&				vkp						= context.getPlatformInterface();
6211	tcu::TestLog&							log						= context.getTestContext().getLog();
6212	tcu::ResultCollector					resultCollector			(log);
6213	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6214	const InstanceDriver&					instanceDriver			(instance.getDriver());
6215	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6216	const deUint32							queueFamilyIndex		= 0;
6217	const deUint32							queueCount				= 1;
6218	const float								queuePriority			= 1.0f;
6219	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6220	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6221	int										numErrors				= 0;
6222	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6223
6224
6225	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6226	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6227
6228	// Only non-core extensions will be used when creating the device.
6229	vector<const char*>	coreExtensions;
6230	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6231	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6232
6233	vector<const char*> extensionNames;
6234	extensionNames.reserve(nonCoreExtensions.size());
6235	for (const string& extension : nonCoreExtensions)
6236		extensionNames.push_back(extension.c_str());
6237
6238	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceOpacityMicromapFeaturesEXT>()))
6239	{
6240		static const Feature features[] =
6241		{
6242		FEATURE_ITEM (VkPhysicalDeviceOpacityMicromapFeaturesEXT, micromap),
6243		FEATURE_ITEM (VkPhysicalDeviceOpacityMicromapFeaturesEXT, micromapCaptureReplay),
6244		FEATURE_ITEM (VkPhysicalDeviceOpacityMicromapFeaturesEXT, micromapHostCommands),
6245		};
6246		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceOpacityMicromapFeaturesEXT*>(featuresStruct);
6247		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6248	}
6249
6250	if (numErrors > 0)
6251		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6252	else
6253		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6254}
6255
6256
6257tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPipelinePropertiesFeaturesEXT (Context& context)
6258{
6259	const PlatformInterface&				vkp						= context.getPlatformInterface();
6260	tcu::TestLog&							log						= context.getTestContext().getLog();
6261	tcu::ResultCollector					resultCollector			(log);
6262	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6263	const InstanceDriver&					instanceDriver			(instance.getDriver());
6264	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6265	const deUint32							queueFamilyIndex		= 0;
6266	const deUint32							queueCount				= 1;
6267	const float								queuePriority			= 1.0f;
6268	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6269	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6270	int										numErrors				= 0;
6271	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6272
6273
6274	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6275	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6276
6277	// Only non-core extensions will be used when creating the device.
6278	vector<const char*>	coreExtensions;
6279	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6280	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6281
6282	vector<const char*> extensionNames;
6283	extensionNames.reserve(nonCoreExtensions.size());
6284	for (const string& extension : nonCoreExtensions)
6285		extensionNames.push_back(extension.c_str());
6286
6287	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePipelinePropertiesFeaturesEXT>()))
6288	{
6289		static const Feature features[] =
6290		{
6291		FEATURE_ITEM (VkPhysicalDevicePipelinePropertiesFeaturesEXT, pipelinePropertiesIdentifier),
6292		};
6293		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePipelinePropertiesFeaturesEXT*>(featuresStruct);
6294		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6295	}
6296
6297	if (numErrors > 0)
6298		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6299	else
6300		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6301}
6302
6303
6304tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderEarlyAndLateFragmentTestsFeaturesAMD (Context& context)
6305{
6306	const PlatformInterface&				vkp						= context.getPlatformInterface();
6307	tcu::TestLog&							log						= context.getTestContext().getLog();
6308	tcu::ResultCollector					resultCollector			(log);
6309	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6310	const InstanceDriver&					instanceDriver			(instance.getDriver());
6311	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6312	const deUint32							queueFamilyIndex		= 0;
6313	const deUint32							queueCount				= 1;
6314	const float								queuePriority			= 1.0f;
6315	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6316	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6317	int										numErrors				= 0;
6318	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6319
6320
6321	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6322	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6323
6324	// Only non-core extensions will be used when creating the device.
6325	vector<const char*>	coreExtensions;
6326	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6327	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6328
6329	vector<const char*> extensionNames;
6330	extensionNames.reserve(nonCoreExtensions.size());
6331	for (const string& extension : nonCoreExtensions)
6332		extensionNames.push_back(extension.c_str());
6333
6334	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD>()))
6335	{
6336		static const Feature features[] =
6337		{
6338		FEATURE_ITEM (VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD, shaderEarlyAndLateFragmentTests),
6339		};
6340		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD*>(featuresStruct);
6341		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6342	}
6343
6344	if (numErrors > 0)
6345		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6346	else
6347		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6348}
6349
6350
6351tcu::TestStatus createDeviceWithUnsupportedFeaturesTestNonSeamlessCubeMapFeaturesEXT (Context& context)
6352{
6353	const PlatformInterface&				vkp						= context.getPlatformInterface();
6354	tcu::TestLog&							log						= context.getTestContext().getLog();
6355	tcu::ResultCollector					resultCollector			(log);
6356	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6357	const InstanceDriver&					instanceDriver			(instance.getDriver());
6358	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6359	const deUint32							queueFamilyIndex		= 0;
6360	const deUint32							queueCount				= 1;
6361	const float								queuePriority			= 1.0f;
6362	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6363	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6364	int										numErrors				= 0;
6365	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6366
6367
6368	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6369	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6370
6371	// Only non-core extensions will be used when creating the device.
6372	vector<const char*>	coreExtensions;
6373	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6374	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6375
6376	vector<const char*> extensionNames;
6377	extensionNames.reserve(nonCoreExtensions.size());
6378	for (const string& extension : nonCoreExtensions)
6379		extensionNames.push_back(extension.c_str());
6380
6381	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT>()))
6382	{
6383		static const Feature features[] =
6384		{
6385		FEATURE_ITEM (VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT, nonSeamlessCubeMap),
6386		};
6387		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT*>(featuresStruct);
6388		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6389	}
6390
6391	if (numErrors > 0)
6392		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6393	else
6394		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6395}
6396
6397
6398tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPipelineRobustnessFeaturesEXT (Context& context)
6399{
6400	const PlatformInterface&				vkp						= context.getPlatformInterface();
6401	tcu::TestLog&							log						= context.getTestContext().getLog();
6402	tcu::ResultCollector					resultCollector			(log);
6403	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6404	const InstanceDriver&					instanceDriver			(instance.getDriver());
6405	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6406	const deUint32							queueFamilyIndex		= 0;
6407	const deUint32							queueCount				= 1;
6408	const float								queuePriority			= 1.0f;
6409	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6410	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6411	int										numErrors				= 0;
6412	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6413
6414
6415	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6416	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6417
6418	// Only non-core extensions will be used when creating the device.
6419	vector<const char*>	coreExtensions;
6420	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6421	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6422
6423	vector<const char*> extensionNames;
6424	extensionNames.reserve(nonCoreExtensions.size());
6425	for (const string& extension : nonCoreExtensions)
6426		extensionNames.push_back(extension.c_str());
6427
6428	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePipelineRobustnessFeaturesEXT>()))
6429	{
6430		static const Feature features[] =
6431		{
6432		FEATURE_ITEM (VkPhysicalDevicePipelineRobustnessFeaturesEXT, pipelineRobustness),
6433		};
6434		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePipelineRobustnessFeaturesEXT*>(featuresStruct);
6435		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6436	}
6437
6438	if (numErrors > 0)
6439		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6440	else
6441		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6442}
6443
6444
6445tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImageProcessingFeaturesQCOM (Context& context)
6446{
6447	const PlatformInterface&				vkp						= context.getPlatformInterface();
6448	tcu::TestLog&							log						= context.getTestContext().getLog();
6449	tcu::ResultCollector					resultCollector			(log);
6450	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6451	const InstanceDriver&					instanceDriver			(instance.getDriver());
6452	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6453	const deUint32							queueFamilyIndex		= 0;
6454	const deUint32							queueCount				= 1;
6455	const float								queuePriority			= 1.0f;
6456	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6457	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6458	int										numErrors				= 0;
6459	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6460
6461
6462	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6463	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6464
6465	// Only non-core extensions will be used when creating the device.
6466	vector<const char*>	coreExtensions;
6467	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6468	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6469
6470	vector<const char*> extensionNames;
6471	extensionNames.reserve(nonCoreExtensions.size());
6472	for (const string& extension : nonCoreExtensions)
6473		extensionNames.push_back(extension.c_str());
6474
6475	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImageProcessingFeaturesQCOM>()))
6476	{
6477		static const Feature features[] =
6478		{
6479		FEATURE_ITEM (VkPhysicalDeviceImageProcessingFeaturesQCOM, textureSampleWeighted),
6480		FEATURE_ITEM (VkPhysicalDeviceImageProcessingFeaturesQCOM, textureBoxFilter),
6481		FEATURE_ITEM (VkPhysicalDeviceImageProcessingFeaturesQCOM, textureBlockMatch),
6482		};
6483		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImageProcessingFeaturesQCOM*>(featuresStruct);
6484		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6485	}
6486
6487	if (numErrors > 0)
6488		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6489	else
6490		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6491}
6492
6493
6494tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTilePropertiesFeaturesQCOM (Context& context)
6495{
6496	const PlatformInterface&				vkp						= context.getPlatformInterface();
6497	tcu::TestLog&							log						= context.getTestContext().getLog();
6498	tcu::ResultCollector					resultCollector			(log);
6499	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6500	const InstanceDriver&					instanceDriver			(instance.getDriver());
6501	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6502	const deUint32							queueFamilyIndex		= 0;
6503	const deUint32							queueCount				= 1;
6504	const float								queuePriority			= 1.0f;
6505	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6506	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6507	int										numErrors				= 0;
6508	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6509
6510
6511	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6512	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6513
6514	// Only non-core extensions will be used when creating the device.
6515	vector<const char*>	coreExtensions;
6516	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6517	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6518
6519	vector<const char*> extensionNames;
6520	extensionNames.reserve(nonCoreExtensions.size());
6521	for (const string& extension : nonCoreExtensions)
6522		extensionNames.push_back(extension.c_str());
6523
6524	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceTilePropertiesFeaturesQCOM>()))
6525	{
6526		static const Feature features[] =
6527		{
6528		FEATURE_ITEM (VkPhysicalDeviceTilePropertiesFeaturesQCOM, tileProperties),
6529		};
6530		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceTilePropertiesFeaturesQCOM*>(featuresStruct);
6531		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6532	}
6533
6534	if (numErrors > 0)
6535		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6536	else
6537		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6538}
6539
6540
6541tcu::TestStatus createDeviceWithUnsupportedFeaturesTestAmigoProfilingFeaturesSEC (Context& context)
6542{
6543	const PlatformInterface&				vkp						= context.getPlatformInterface();
6544	tcu::TestLog&							log						= context.getTestContext().getLog();
6545	tcu::ResultCollector					resultCollector			(log);
6546	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6547	const InstanceDriver&					instanceDriver			(instance.getDriver());
6548	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6549	const deUint32							queueFamilyIndex		= 0;
6550	const deUint32							queueCount				= 1;
6551	const float								queuePriority			= 1.0f;
6552	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6553	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6554	int										numErrors				= 0;
6555	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6556
6557
6558	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6559	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6560
6561	// Only non-core extensions will be used when creating the device.
6562	vector<const char*>	coreExtensions;
6563	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6564	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6565
6566	vector<const char*> extensionNames;
6567	extensionNames.reserve(nonCoreExtensions.size());
6568	for (const string& extension : nonCoreExtensions)
6569		extensionNames.push_back(extension.c_str());
6570
6571	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceAmigoProfilingFeaturesSEC>()))
6572	{
6573		static const Feature features[] =
6574		{
6575		FEATURE_ITEM (VkPhysicalDeviceAmigoProfilingFeaturesSEC, amigoProfiling),
6576		};
6577		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceAmigoProfilingFeaturesSEC*>(featuresStruct);
6578		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6579	}
6580
6581	if (numErrors > 0)
6582		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6583	else
6584		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6585}
6586
6587
6588tcu::TestStatus createDeviceWithUnsupportedFeaturesTestAttachmentFeedbackLoopLayoutFeaturesEXT (Context& context)
6589{
6590	const PlatformInterface&				vkp						= context.getPlatformInterface();
6591	tcu::TestLog&							log						= context.getTestContext().getLog();
6592	tcu::ResultCollector					resultCollector			(log);
6593	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6594	const InstanceDriver&					instanceDriver			(instance.getDriver());
6595	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6596	const deUint32							queueFamilyIndex		= 0;
6597	const deUint32							queueCount				= 1;
6598	const float								queuePriority			= 1.0f;
6599	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6600	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6601	int										numErrors				= 0;
6602	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6603
6604
6605	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6606	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6607
6608	// Only non-core extensions will be used when creating the device.
6609	vector<const char*>	coreExtensions;
6610	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6611	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6612
6613	vector<const char*> extensionNames;
6614	extensionNames.reserve(nonCoreExtensions.size());
6615	for (const string& extension : nonCoreExtensions)
6616		extensionNames.push_back(extension.c_str());
6617
6618	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT>()))
6619	{
6620		static const Feature features[] =
6621		{
6622		FEATURE_ITEM (VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT, attachmentFeedbackLoopLayout),
6623		};
6624		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT*>(featuresStruct);
6625		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6626	}
6627
6628	if (numErrors > 0)
6629		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6630	else
6631		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6632}
6633
6634
6635tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDepthClampZeroOneFeaturesEXT (Context& context)
6636{
6637	const PlatformInterface&				vkp						= context.getPlatformInterface();
6638	tcu::TestLog&							log						= context.getTestContext().getLog();
6639	tcu::ResultCollector					resultCollector			(log);
6640	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6641	const InstanceDriver&					instanceDriver			(instance.getDriver());
6642	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6643	const deUint32							queueFamilyIndex		= 0;
6644	const deUint32							queueCount				= 1;
6645	const float								queuePriority			= 1.0f;
6646	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6647	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6648	int										numErrors				= 0;
6649	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6650
6651
6652	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6653	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6654
6655	// Only non-core extensions will be used when creating the device.
6656	vector<const char*>	coreExtensions;
6657	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6658	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6659
6660	vector<const char*> extensionNames;
6661	extensionNames.reserve(nonCoreExtensions.size());
6662	for (const string& extension : nonCoreExtensions)
6663		extensionNames.push_back(extension.c_str());
6664
6665	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDepthClampZeroOneFeaturesEXT>()))
6666	{
6667		static const Feature features[] =
6668		{
6669		FEATURE_ITEM (VkPhysicalDeviceDepthClampZeroOneFeaturesEXT, depthClampZeroOne),
6670		};
6671		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDepthClampZeroOneFeaturesEXT*>(featuresStruct);
6672		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6673	}
6674
6675	if (numErrors > 0)
6676		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6677	else
6678		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6679}
6680
6681
6682tcu::TestStatus createDeviceWithUnsupportedFeaturesTestAddressBindingReportFeaturesEXT (Context& context)
6683{
6684	const PlatformInterface&				vkp						= context.getPlatformInterface();
6685	tcu::TestLog&							log						= context.getTestContext().getLog();
6686	tcu::ResultCollector					resultCollector			(log);
6687	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6688	const InstanceDriver&					instanceDriver			(instance.getDriver());
6689	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6690	const deUint32							queueFamilyIndex		= 0;
6691	const deUint32							queueCount				= 1;
6692	const float								queuePriority			= 1.0f;
6693	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6694	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6695	int										numErrors				= 0;
6696	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6697
6698
6699	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6700	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6701
6702	// Only non-core extensions will be used when creating the device.
6703	vector<const char*>	coreExtensions;
6704	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6705	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6706
6707	vector<const char*> extensionNames;
6708	extensionNames.reserve(nonCoreExtensions.size());
6709	for (const string& extension : nonCoreExtensions)
6710		extensionNames.push_back(extension.c_str());
6711
6712	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceAddressBindingReportFeaturesEXT>()))
6713	{
6714		static const Feature features[] =
6715		{
6716		FEATURE_ITEM (VkPhysicalDeviceAddressBindingReportFeaturesEXT, reportAddressBinding),
6717		};
6718		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceAddressBindingReportFeaturesEXT*>(featuresStruct);
6719		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6720	}
6721
6722	if (numErrors > 0)
6723		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6724	else
6725		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6726}
6727
6728
6729tcu::TestStatus createDeviceWithUnsupportedFeaturesTestOpticalFlowFeaturesNV (Context& context)
6730{
6731	const PlatformInterface&				vkp						= context.getPlatformInterface();
6732	tcu::TestLog&							log						= context.getTestContext().getLog();
6733	tcu::ResultCollector					resultCollector			(log);
6734	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6735	const InstanceDriver&					instanceDriver			(instance.getDriver());
6736	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6737	const deUint32							queueFamilyIndex		= 0;
6738	const deUint32							queueCount				= 1;
6739	const float								queuePriority			= 1.0f;
6740	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6741	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6742	int										numErrors				= 0;
6743	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6744
6745
6746	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6747	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6748
6749	// Only non-core extensions will be used when creating the device.
6750	vector<const char*>	coreExtensions;
6751	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6752	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6753
6754	vector<const char*> extensionNames;
6755	extensionNames.reserve(nonCoreExtensions.size());
6756	for (const string& extension : nonCoreExtensions)
6757		extensionNames.push_back(extension.c_str());
6758
6759	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceOpticalFlowFeaturesNV>()))
6760	{
6761		static const Feature features[] =
6762		{
6763		FEATURE_ITEM (VkPhysicalDeviceOpticalFlowFeaturesNV, opticalFlow),
6764		};
6765		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceOpticalFlowFeaturesNV*>(featuresStruct);
6766		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6767	}
6768
6769	if (numErrors > 0)
6770		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6771	else
6772		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6773}
6774
6775
6776tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFaultFeaturesEXT (Context& context)
6777{
6778	const PlatformInterface&				vkp						= context.getPlatformInterface();
6779	tcu::TestLog&							log						= context.getTestContext().getLog();
6780	tcu::ResultCollector					resultCollector			(log);
6781	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6782	const InstanceDriver&					instanceDriver			(instance.getDriver());
6783	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6784	const deUint32							queueFamilyIndex		= 0;
6785	const deUint32							queueCount				= 1;
6786	const float								queuePriority			= 1.0f;
6787	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6788	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6789	int										numErrors				= 0;
6790	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6791
6792
6793	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6794	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6795
6796	// Only non-core extensions will be used when creating the device.
6797	vector<const char*>	coreExtensions;
6798	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6799	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6800
6801	vector<const char*> extensionNames;
6802	extensionNames.reserve(nonCoreExtensions.size());
6803	for (const string& extension : nonCoreExtensions)
6804		extensionNames.push_back(extension.c_str());
6805
6806	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceFaultFeaturesEXT>()))
6807	{
6808		static const Feature features[] =
6809		{
6810		FEATURE_ITEM (VkPhysicalDeviceFaultFeaturesEXT, deviceFault),
6811		FEATURE_ITEM (VkPhysicalDeviceFaultFeaturesEXT, deviceFaultVendorBinary),
6812		};
6813		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceFaultFeaturesEXT*>(featuresStruct);
6814		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6815	}
6816
6817	if (numErrors > 0)
6818		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6819	else
6820		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6821}
6822
6823
6824tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderCoreBuiltinsFeaturesARM (Context& context)
6825{
6826	const PlatformInterface&				vkp						= context.getPlatformInterface();
6827	tcu::TestLog&							log						= context.getTestContext().getLog();
6828	tcu::ResultCollector					resultCollector			(log);
6829	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6830	const InstanceDriver&					instanceDriver			(instance.getDriver());
6831	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6832	const deUint32							queueFamilyIndex		= 0;
6833	const deUint32							queueCount				= 1;
6834	const float								queuePriority			= 1.0f;
6835	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6836	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6837	int										numErrors				= 0;
6838	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6839
6840
6841	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6842	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6843
6844	// Only non-core extensions will be used when creating the device.
6845	vector<const char*>	coreExtensions;
6846	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6847	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6848
6849	vector<const char*> extensionNames;
6850	extensionNames.reserve(nonCoreExtensions.size());
6851	for (const string& extension : nonCoreExtensions)
6852		extensionNames.push_back(extension.c_str());
6853
6854	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM>()))
6855	{
6856		static const Feature features[] =
6857		{
6858		FEATURE_ITEM (VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM, shaderCoreBuiltins),
6859		};
6860		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM*>(featuresStruct);
6861		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6862	}
6863
6864	if (numErrors > 0)
6865		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6866	else
6867		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6868}
6869
6870
6871tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSwapchainMaintenance1FeaturesEXT (Context& context)
6872{
6873	const PlatformInterface&				vkp						= context.getPlatformInterface();
6874	tcu::TestLog&							log						= context.getTestContext().getLog();
6875	tcu::ResultCollector					resultCollector			(log);
6876	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6877	const InstanceDriver&					instanceDriver			(instance.getDriver());
6878	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6879	const deUint32							queueFamilyIndex		= 0;
6880	const deUint32							queueCount				= 1;
6881	const float								queuePriority			= 1.0f;
6882	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6883	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6884	int										numErrors				= 0;
6885	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6886
6887
6888	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6889	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6890
6891	// Only non-core extensions will be used when creating the device.
6892	vector<const char*>	coreExtensions;
6893	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6894	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6895
6896	vector<const char*> extensionNames;
6897	extensionNames.reserve(nonCoreExtensions.size());
6898	for (const string& extension : nonCoreExtensions)
6899		extensionNames.push_back(extension.c_str());
6900
6901	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT>()))
6902	{
6903		static const Feature features[] =
6904		{
6905		FEATURE_ITEM (VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT, swapchainMaintenance1),
6906		};
6907		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT*>(featuresStruct);
6908		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6909	}
6910
6911	if (numErrors > 0)
6912		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6913	else
6914		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6915}
6916
6917
6918tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRayTracingInvocationReorderFeaturesNV (Context& context)
6919{
6920	const PlatformInterface&				vkp						= context.getPlatformInterface();
6921	tcu::TestLog&							log						= context.getTestContext().getLog();
6922	tcu::ResultCollector					resultCollector			(log);
6923	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6924	const InstanceDriver&					instanceDriver			(instance.getDriver());
6925	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6926	const deUint32							queueFamilyIndex		= 0;
6927	const deUint32							queueCount				= 1;
6928	const float								queuePriority			= 1.0f;
6929	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6930	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6931	int										numErrors				= 0;
6932	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6933
6934
6935	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6936	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6937
6938	// Only non-core extensions will be used when creating the device.
6939	vector<const char*>	coreExtensions;
6940	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6941	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6942
6943	vector<const char*> extensionNames;
6944	extensionNames.reserve(nonCoreExtensions.size());
6945	for (const string& extension : nonCoreExtensions)
6946		extensionNames.push_back(extension.c_str());
6947
6948	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV>()))
6949	{
6950		static const Feature features[] =
6951		{
6952		FEATURE_ITEM (VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV, rayTracingInvocationReorder),
6953		};
6954		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV*>(featuresStruct);
6955		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
6956	}
6957
6958	if (numErrors > 0)
6959		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
6960	else
6961		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
6962}
6963
6964
6965tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMultiviewPerViewViewportsFeaturesQCOM (Context& context)
6966{
6967	const PlatformInterface&				vkp						= context.getPlatformInterface();
6968	tcu::TestLog&							log						= context.getTestContext().getLog();
6969	tcu::ResultCollector					resultCollector			(log);
6970	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
6971	const InstanceDriver&					instanceDriver			(instance.getDriver());
6972	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
6973	const deUint32							queueFamilyIndex		= 0;
6974	const deUint32							queueCount				= 1;
6975	const float								queuePriority			= 1.0f;
6976	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
6977	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
6978	int										numErrors				= 0;
6979	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
6980
6981
6982	VkPhysicalDeviceFeatures emptyDeviceFeatures;
6983	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
6984
6985	// Only non-core extensions will be used when creating the device.
6986	vector<const char*>	coreExtensions;
6987	getCoreDeviceExtensions(context.getUsedApiVersion(), coreExtensions);
6988	vector<string> nonCoreExtensions(removeExtensions(context.getDeviceExtensions(), coreExtensions));
6989
6990	vector<const char*> extensionNames;
6991	extensionNames.reserve(nonCoreExtensions.size());
6992	for (const string& extension : nonCoreExtensions)
6993		extensionNames.push_back(extension.c_str());
6994
6995	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM>()))
6996	{
6997		static const Feature features[] =
6998		{
6999		FEATURE_ITEM (VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM, multiviewPerViewViewports),
7000		};
7001		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM*>(featuresStruct);
7002		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, isSubProcess);
7003	}
7004
7005	if (numErrors > 0)
7006		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
7007	else
7008		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
7009}
7010
7011
7012void addSeparateUnsupportedFeatureTests (tcu::TestCaseGroup* testGroup)
7013{
7014
7015	addFunctionCase(testGroup, "device_generated_commands_features_nv", "createDeviceWithUnsupportedFeaturesTestDeviceGeneratedCommandsFeaturesNV", createDeviceWithUnsupportedFeaturesTestDeviceGeneratedCommandsFeaturesNV);
7016	addFunctionCase(testGroup, "private_data_features", "createDeviceWithUnsupportedFeaturesTestPrivateDataFeatures", createDeviceWithUnsupportedFeaturesTestPrivateDataFeatures);
7017	addFunctionCase(testGroup, "variable_pointers_features", "createDeviceWithUnsupportedFeaturesTestVariablePointersFeatures", createDeviceWithUnsupportedFeaturesTestVariablePointersFeatures);
7018	addFunctionCase(testGroup, "multiview_features", "createDeviceWithUnsupportedFeaturesTestMultiviewFeatures", createDeviceWithUnsupportedFeaturesTestMultiviewFeatures);
7019	addFunctionCase(testGroup, "present_id_features_khr", "createDeviceWithUnsupportedFeaturesTestPresentIdFeaturesKHR", createDeviceWithUnsupportedFeaturesTestPresentIdFeaturesKHR);
7020	addFunctionCase(testGroup, "present_wait_features_khr", "createDeviceWithUnsupportedFeaturesTestPresentWaitFeaturesKHR", createDeviceWithUnsupportedFeaturesTestPresentWaitFeaturesKHR);
7021	addFunctionCase(testGroup, "16_bit_storage_features", "createDeviceWithUnsupportedFeaturesTest16BitStorageFeatures", createDeviceWithUnsupportedFeaturesTest16BitStorageFeatures);
7022	addFunctionCase(testGroup, "shader_subgroup_extended_types_features", "createDeviceWithUnsupportedFeaturesTestShaderSubgroupExtendedTypesFeatures", createDeviceWithUnsupportedFeaturesTestShaderSubgroupExtendedTypesFeatures);
7023	addFunctionCase(testGroup, "sampler_ycbcr_conversion_features", "createDeviceWithUnsupportedFeaturesTestSamplerYcbcrConversionFeatures", createDeviceWithUnsupportedFeaturesTestSamplerYcbcrConversionFeatures);
7024	addFunctionCase(testGroup, "protected_memory_features", "createDeviceWithUnsupportedFeaturesTestProtectedMemoryFeatures", createDeviceWithUnsupportedFeaturesTestProtectedMemoryFeatures);
7025	addFunctionCase(testGroup, "blend_operation_advanced_features_ext", "createDeviceWithUnsupportedFeaturesTestBlendOperationAdvancedFeaturesEXT", createDeviceWithUnsupportedFeaturesTestBlendOperationAdvancedFeaturesEXT);
7026	addFunctionCase(testGroup, "multi_draw_features_ext", "createDeviceWithUnsupportedFeaturesTestMultiDrawFeaturesEXT", createDeviceWithUnsupportedFeaturesTestMultiDrawFeaturesEXT);
7027	addFunctionCase(testGroup, "inline_uniform_block_features", "createDeviceWithUnsupportedFeaturesTestInlineUniformBlockFeatures", createDeviceWithUnsupportedFeaturesTestInlineUniformBlockFeatures);
7028	addFunctionCase(testGroup, "maintenance4_features", "createDeviceWithUnsupportedFeaturesTestMaintenance4Features", createDeviceWithUnsupportedFeaturesTestMaintenance4Features);
7029	addFunctionCase(testGroup, "shader_draw_parameters_features", "createDeviceWithUnsupportedFeaturesTestShaderDrawParametersFeatures", createDeviceWithUnsupportedFeaturesTestShaderDrawParametersFeatures);
7030	addFunctionCase(testGroup, "shader_float16_int8_features", "createDeviceWithUnsupportedFeaturesTestShaderFloat16Int8Features", createDeviceWithUnsupportedFeaturesTestShaderFloat16Int8Features);
7031	addFunctionCase(testGroup, "host_query_reset_features", "createDeviceWithUnsupportedFeaturesTestHostQueryResetFeatures", createDeviceWithUnsupportedFeaturesTestHostQueryResetFeatures);
7032	addFunctionCase(testGroup, "global_priority_query_features_khr", "createDeviceWithUnsupportedFeaturesTestGlobalPriorityQueryFeaturesKHR", createDeviceWithUnsupportedFeaturesTestGlobalPriorityQueryFeaturesKHR);
7033	addFunctionCase(testGroup, "device_memory_report_features_ext", "createDeviceWithUnsupportedFeaturesTestDeviceMemoryReportFeaturesEXT", createDeviceWithUnsupportedFeaturesTestDeviceMemoryReportFeaturesEXT);
7034	addFunctionCase(testGroup, "descriptor_indexing_features", "createDeviceWithUnsupportedFeaturesTestDescriptorIndexingFeatures", createDeviceWithUnsupportedFeaturesTestDescriptorIndexingFeatures);
7035	addFunctionCase(testGroup, "timeline_semaphore_features", "createDeviceWithUnsupportedFeaturesTestTimelineSemaphoreFeatures", createDeviceWithUnsupportedFeaturesTestTimelineSemaphoreFeatures);
7036	addFunctionCase(testGroup, "8_bit_storage_features", "createDeviceWithUnsupportedFeaturesTest8BitStorageFeatures", createDeviceWithUnsupportedFeaturesTest8BitStorageFeatures);
7037	addFunctionCase(testGroup, "conditional_rendering_features_ext", "createDeviceWithUnsupportedFeaturesTestConditionalRenderingFeaturesEXT", createDeviceWithUnsupportedFeaturesTestConditionalRenderingFeaturesEXT);
7038	addFunctionCase(testGroup, "vulkan_memory_model_features", "createDeviceWithUnsupportedFeaturesTestVulkanMemoryModelFeatures", createDeviceWithUnsupportedFeaturesTestVulkanMemoryModelFeatures);
7039	addFunctionCase(testGroup, "shader_atomic_int64_features", "createDeviceWithUnsupportedFeaturesTestShaderAtomicInt64Features", createDeviceWithUnsupportedFeaturesTestShaderAtomicInt64Features);
7040	addFunctionCase(testGroup, "shader_atomic_float_features_ext", "createDeviceWithUnsupportedFeaturesTestShaderAtomicFloatFeaturesEXT", createDeviceWithUnsupportedFeaturesTestShaderAtomicFloatFeaturesEXT);
7041	addFunctionCase(testGroup, "shader_atomic_float2_features_ext", "createDeviceWithUnsupportedFeaturesTestShaderAtomicFloat2FeaturesEXT", createDeviceWithUnsupportedFeaturesTestShaderAtomicFloat2FeaturesEXT);
7042	addFunctionCase(testGroup, "vertex_attribute_divisor_features_ext", "createDeviceWithUnsupportedFeaturesTestVertexAttributeDivisorFeaturesEXT", createDeviceWithUnsupportedFeaturesTestVertexAttributeDivisorFeaturesEXT);
7043	addFunctionCase(testGroup, "astc_decode_features_ext", "createDeviceWithUnsupportedFeaturesTestASTCDecodeFeaturesEXT", createDeviceWithUnsupportedFeaturesTestASTCDecodeFeaturesEXT);
7044	addFunctionCase(testGroup, "transform_feedback_features_ext", "createDeviceWithUnsupportedFeaturesTestTransformFeedbackFeaturesEXT", createDeviceWithUnsupportedFeaturesTestTransformFeedbackFeaturesEXT);
7045	addFunctionCase(testGroup, "representative_fragment_test_features_nv", "createDeviceWithUnsupportedFeaturesTestRepresentativeFragmentTestFeaturesNV", createDeviceWithUnsupportedFeaturesTestRepresentativeFragmentTestFeaturesNV);
7046	addFunctionCase(testGroup, "exclusive_scissor_features_nv", "createDeviceWithUnsupportedFeaturesTestExclusiveScissorFeaturesNV", createDeviceWithUnsupportedFeaturesTestExclusiveScissorFeaturesNV);
7047	addFunctionCase(testGroup, "corner_sampled_image_features_nv", "createDeviceWithUnsupportedFeaturesTestCornerSampledImageFeaturesNV", createDeviceWithUnsupportedFeaturesTestCornerSampledImageFeaturesNV);
7048	addFunctionCase(testGroup, "compute_shader_derivatives_features_nv", "createDeviceWithUnsupportedFeaturesTestComputeShaderDerivativesFeaturesNV", createDeviceWithUnsupportedFeaturesTestComputeShaderDerivativesFeaturesNV);
7049	addFunctionCase(testGroup, "shader_image_footprint_features_nv", "createDeviceWithUnsupportedFeaturesTestShaderImageFootprintFeaturesNV", createDeviceWithUnsupportedFeaturesTestShaderImageFootprintFeaturesNV);
7050	addFunctionCase(testGroup, "dedicated_allocation_image_aliasing_features_nv", "createDeviceWithUnsupportedFeaturesTestDedicatedAllocationImageAliasingFeaturesNV", createDeviceWithUnsupportedFeaturesTestDedicatedAllocationImageAliasingFeaturesNV);
7051	addFunctionCase(testGroup, "copy_memory_indirect_features_nv", "createDeviceWithUnsupportedFeaturesTestCopyMemoryIndirectFeaturesNV", createDeviceWithUnsupportedFeaturesTestCopyMemoryIndirectFeaturesNV);
7052	addFunctionCase(testGroup, "memory_decompression_features_nv", "createDeviceWithUnsupportedFeaturesTestMemoryDecompressionFeaturesNV", createDeviceWithUnsupportedFeaturesTestMemoryDecompressionFeaturesNV);
7053	addFunctionCase(testGroup, "shading_rate_image_features_nv", "createDeviceWithUnsupportedFeaturesTestShadingRateImageFeaturesNV", createDeviceWithUnsupportedFeaturesTestShadingRateImageFeaturesNV);
7054	addFunctionCase(testGroup, "invocation_mask_features_huawei", "createDeviceWithUnsupportedFeaturesTestInvocationMaskFeaturesHUAWEI", createDeviceWithUnsupportedFeaturesTestInvocationMaskFeaturesHUAWEI);
7055	addFunctionCase(testGroup, "mesh_shader_features_nv", "createDeviceWithUnsupportedFeaturesTestMeshShaderFeaturesNV", createDeviceWithUnsupportedFeaturesTestMeshShaderFeaturesNV);
7056	addFunctionCase(testGroup, "mesh_shader_features_ext", "createDeviceWithUnsupportedFeaturesTestMeshShaderFeaturesEXT", createDeviceWithUnsupportedFeaturesTestMeshShaderFeaturesEXT);
7057	addFunctionCase(testGroup, "acceleration_structure_features_khr", "createDeviceWithUnsupportedFeaturesTestAccelerationStructureFeaturesKHR", createDeviceWithUnsupportedFeaturesTestAccelerationStructureFeaturesKHR);
7058	addFunctionCase(testGroup, "ray_tracing_pipeline_features_khr", "createDeviceWithUnsupportedFeaturesTestRayTracingPipelineFeaturesKHR", createDeviceWithUnsupportedFeaturesTestRayTracingPipelineFeaturesKHR);
7059	addFunctionCase(testGroup, "ray_query_features_khr", "createDeviceWithUnsupportedFeaturesTestRayQueryFeaturesKHR", createDeviceWithUnsupportedFeaturesTestRayQueryFeaturesKHR);
7060	addFunctionCase(testGroup, "ray_tracing_maintenance1_features_khr", "createDeviceWithUnsupportedFeaturesTestRayTracingMaintenance1FeaturesKHR", createDeviceWithUnsupportedFeaturesTestRayTracingMaintenance1FeaturesKHR);
7061	addFunctionCase(testGroup, "fragment_density_map_features_ext", "createDeviceWithUnsupportedFeaturesTestFragmentDensityMapFeaturesEXT", createDeviceWithUnsupportedFeaturesTestFragmentDensityMapFeaturesEXT);
7062	addFunctionCase(testGroup, "fragment_density_map2_features_ext", "createDeviceWithUnsupportedFeaturesTestFragmentDensityMap2FeaturesEXT", createDeviceWithUnsupportedFeaturesTestFragmentDensityMap2FeaturesEXT);
7063	addFunctionCase(testGroup, "fragment_density_map_offset_features_qcom", "createDeviceWithUnsupportedFeaturesTestFragmentDensityMapOffsetFeaturesQCOM", createDeviceWithUnsupportedFeaturesTestFragmentDensityMapOffsetFeaturesQCOM);
7064	addFunctionCase(testGroup, "scalar_block_layout_features", "createDeviceWithUnsupportedFeaturesTestScalarBlockLayoutFeatures", createDeviceWithUnsupportedFeaturesTestScalarBlockLayoutFeatures);
7065	addFunctionCase(testGroup, "uniform_buffer_standard_layout_features", "createDeviceWithUnsupportedFeaturesTestUniformBufferStandardLayoutFeatures", createDeviceWithUnsupportedFeaturesTestUniformBufferStandardLayoutFeatures);
7066	addFunctionCase(testGroup, "depth_clip_enable_features_ext", "createDeviceWithUnsupportedFeaturesTestDepthClipEnableFeaturesEXT", createDeviceWithUnsupportedFeaturesTestDepthClipEnableFeaturesEXT);
7067	addFunctionCase(testGroup, "memory_priority_features_ext", "createDeviceWithUnsupportedFeaturesTestMemoryPriorityFeaturesEXT", createDeviceWithUnsupportedFeaturesTestMemoryPriorityFeaturesEXT);
7068	addFunctionCase(testGroup, "pageable_device_local_memory_features_ext", "createDeviceWithUnsupportedFeaturesTestPageableDeviceLocalMemoryFeaturesEXT", createDeviceWithUnsupportedFeaturesTestPageableDeviceLocalMemoryFeaturesEXT);
7069	addFunctionCase(testGroup, "buffer_device_address_features", "createDeviceWithUnsupportedFeaturesTestBufferDeviceAddressFeatures", createDeviceWithUnsupportedFeaturesTestBufferDeviceAddressFeatures);
7070	addFunctionCase(testGroup, "buffer_device_address_features_ext", "createDeviceWithUnsupportedFeaturesTestBufferDeviceAddressFeaturesEXT", createDeviceWithUnsupportedFeaturesTestBufferDeviceAddressFeaturesEXT);
7071	addFunctionCase(testGroup, "imageless_framebuffer_features", "createDeviceWithUnsupportedFeaturesTestImagelessFramebufferFeatures", createDeviceWithUnsupportedFeaturesTestImagelessFramebufferFeatures);
7072	addFunctionCase(testGroup, "texture_compression_astchdr_features", "createDeviceWithUnsupportedFeaturesTestTextureCompressionASTCHDRFeatures", createDeviceWithUnsupportedFeaturesTestTextureCompressionASTCHDRFeatures);
7073	addFunctionCase(testGroup, "cooperative_matrix_features_nv", "createDeviceWithUnsupportedFeaturesTestCooperativeMatrixFeaturesNV", createDeviceWithUnsupportedFeaturesTestCooperativeMatrixFeaturesNV);
7074	addFunctionCase(testGroup, "ycbcr_image_arrays_features_ext", "createDeviceWithUnsupportedFeaturesTestYcbcrImageArraysFeaturesEXT", createDeviceWithUnsupportedFeaturesTestYcbcrImageArraysFeaturesEXT);
7075	addFunctionCase(testGroup, "present_barrier_features_nv", "createDeviceWithUnsupportedFeaturesTestPresentBarrierFeaturesNV", createDeviceWithUnsupportedFeaturesTestPresentBarrierFeaturesNV);
7076	addFunctionCase(testGroup, "performance_query_features_khr", "createDeviceWithUnsupportedFeaturesTestPerformanceQueryFeaturesKHR", createDeviceWithUnsupportedFeaturesTestPerformanceQueryFeaturesKHR);
7077	addFunctionCase(testGroup, "coverage_reduction_mode_features_nv", "createDeviceWithUnsupportedFeaturesTestCoverageReductionModeFeaturesNV", createDeviceWithUnsupportedFeaturesTestCoverageReductionModeFeaturesNV);
7078	addFunctionCase(testGroup, "shader_integer_functions2_features_intel", "createDeviceWithUnsupportedFeaturesTestShaderIntegerFunctions2FeaturesINTEL", createDeviceWithUnsupportedFeaturesTestShaderIntegerFunctions2FeaturesINTEL);
7079	addFunctionCase(testGroup, "shader_clock_features_khr", "createDeviceWithUnsupportedFeaturesTestShaderClockFeaturesKHR", createDeviceWithUnsupportedFeaturesTestShaderClockFeaturesKHR);
7080	addFunctionCase(testGroup, "index_type_uint8_features_ext", "createDeviceWithUnsupportedFeaturesTestIndexTypeUint8FeaturesEXT", createDeviceWithUnsupportedFeaturesTestIndexTypeUint8FeaturesEXT);
7081	addFunctionCase(testGroup, "shader_sm_builtins_features_nv", "createDeviceWithUnsupportedFeaturesTestShaderSMBuiltinsFeaturesNV", createDeviceWithUnsupportedFeaturesTestShaderSMBuiltinsFeaturesNV);
7082	addFunctionCase(testGroup, "fragment_shader_interlock_features_ext", "createDeviceWithUnsupportedFeaturesTestFragmentShaderInterlockFeaturesEXT", createDeviceWithUnsupportedFeaturesTestFragmentShaderInterlockFeaturesEXT);
7083	addFunctionCase(testGroup, "separate_depth_stencil_layouts_features", "createDeviceWithUnsupportedFeaturesTestSeparateDepthStencilLayoutsFeatures", createDeviceWithUnsupportedFeaturesTestSeparateDepthStencilLayoutsFeatures);
7084	addFunctionCase(testGroup, "primitive_topology_list_restart_features_ext", "createDeviceWithUnsupportedFeaturesTestPrimitiveTopologyListRestartFeaturesEXT", createDeviceWithUnsupportedFeaturesTestPrimitiveTopologyListRestartFeaturesEXT);
7085	addFunctionCase(testGroup, "pipeline_executable_properties_features_khr", "createDeviceWithUnsupportedFeaturesTestPipelineExecutablePropertiesFeaturesKHR", createDeviceWithUnsupportedFeaturesTestPipelineExecutablePropertiesFeaturesKHR);
7086	addFunctionCase(testGroup, "shader_demote_to_helper_invocation_features", "createDeviceWithUnsupportedFeaturesTestShaderDemoteToHelperInvocationFeatures", createDeviceWithUnsupportedFeaturesTestShaderDemoteToHelperInvocationFeatures);
7087	addFunctionCase(testGroup, "texel_buffer_alignment_features_ext", "createDeviceWithUnsupportedFeaturesTestTexelBufferAlignmentFeaturesEXT", createDeviceWithUnsupportedFeaturesTestTexelBufferAlignmentFeaturesEXT);
7088	addFunctionCase(testGroup, "subgroup_size_control_features", "createDeviceWithUnsupportedFeaturesTestSubgroupSizeControlFeatures", createDeviceWithUnsupportedFeaturesTestSubgroupSizeControlFeatures);
7089	addFunctionCase(testGroup, "line_rasterization_features_ext", "createDeviceWithUnsupportedFeaturesTestLineRasterizationFeaturesEXT", createDeviceWithUnsupportedFeaturesTestLineRasterizationFeaturesEXT);
7090	addFunctionCase(testGroup, "pipeline_creation_cache_control_features", "createDeviceWithUnsupportedFeaturesTestPipelineCreationCacheControlFeatures", createDeviceWithUnsupportedFeaturesTestPipelineCreationCacheControlFeatures);
7091	addFunctionCase(testGroup, "vulkan11_features", "createDeviceWithUnsupportedFeaturesTestVulkan11Features", createDeviceWithUnsupportedFeaturesTestVulkan11Features);
7092	addFunctionCase(testGroup, "vulkan12_features", "createDeviceWithUnsupportedFeaturesTestVulkan12Features", createDeviceWithUnsupportedFeaturesTestVulkan12Features);
7093	addFunctionCase(testGroup, "vulkan13_features", "createDeviceWithUnsupportedFeaturesTestVulkan13Features", createDeviceWithUnsupportedFeaturesTestVulkan13Features);
7094	addFunctionCase(testGroup, "coherent_memory_features_amd", "createDeviceWithUnsupportedFeaturesTestCoherentMemoryFeaturesAMD", createDeviceWithUnsupportedFeaturesTestCoherentMemoryFeaturesAMD);
7095	addFunctionCase(testGroup, "custom_border_color_features_ext", "createDeviceWithUnsupportedFeaturesTestCustomBorderColorFeaturesEXT", createDeviceWithUnsupportedFeaturesTestCustomBorderColorFeaturesEXT);
7096	addFunctionCase(testGroup, "border_color_swizzle_features_ext", "createDeviceWithUnsupportedFeaturesTestBorderColorSwizzleFeaturesEXT", createDeviceWithUnsupportedFeaturesTestBorderColorSwizzleFeaturesEXT);
7097	addFunctionCase(testGroup, "extended_dynamic_state_features_ext", "createDeviceWithUnsupportedFeaturesTestExtendedDynamicStateFeaturesEXT", createDeviceWithUnsupportedFeaturesTestExtendedDynamicStateFeaturesEXT);
7098	addFunctionCase(testGroup, "extended_dynamic_state2_features_ext", "createDeviceWithUnsupportedFeaturesTestExtendedDynamicState2FeaturesEXT", createDeviceWithUnsupportedFeaturesTestExtendedDynamicState2FeaturesEXT);
7099	addFunctionCase(testGroup, "extended_dynamic_state3_features_ext", "createDeviceWithUnsupportedFeaturesTestExtendedDynamicState3FeaturesEXT", createDeviceWithUnsupportedFeaturesTestExtendedDynamicState3FeaturesEXT);
7100	addFunctionCase(testGroup, "diagnostics_config_features_nv", "createDeviceWithUnsupportedFeaturesTestDiagnosticsConfigFeaturesNV", createDeviceWithUnsupportedFeaturesTestDiagnosticsConfigFeaturesNV);
7101	addFunctionCase(testGroup, "zero_initialize_workgroup_memory_features", "createDeviceWithUnsupportedFeaturesTestZeroInitializeWorkgroupMemoryFeatures", createDeviceWithUnsupportedFeaturesTestZeroInitializeWorkgroupMemoryFeatures);
7102	addFunctionCase(testGroup, "shader_subgroup_uniform_control_flow_features_khr", "createDeviceWithUnsupportedFeaturesTestShaderSubgroupUniformControlFlowFeaturesKHR", createDeviceWithUnsupportedFeaturesTestShaderSubgroupUniformControlFlowFeaturesKHR);
7103	addFunctionCase(testGroup, "robustness2_features_ext", "createDeviceWithUnsupportedFeaturesTestRobustness2FeaturesEXT", createDeviceWithUnsupportedFeaturesTestRobustness2FeaturesEXT);
7104	addFunctionCase(testGroup, "image_robustness_features", "createDeviceWithUnsupportedFeaturesTestImageRobustnessFeatures", createDeviceWithUnsupportedFeaturesTestImageRobustnessFeatures);
7105	addFunctionCase(testGroup, "workgroup_memory_explicit_layout_features_khr", "createDeviceWithUnsupportedFeaturesTestWorkgroupMemoryExplicitLayoutFeaturesKHR", createDeviceWithUnsupportedFeaturesTestWorkgroupMemoryExplicitLayoutFeaturesKHR);
7106	addFunctionCase(testGroup, "portability_subset_features_khr", "createDeviceWithUnsupportedFeaturesTestPortabilitySubsetFeaturesKHR", createDeviceWithUnsupportedFeaturesTestPortabilitySubsetFeaturesKHR);
7107	addFunctionCase(testGroup, "4444_formats_features_ext", "createDeviceWithUnsupportedFeaturesTest4444FormatsFeaturesEXT", createDeviceWithUnsupportedFeaturesTest4444FormatsFeaturesEXT);
7108	addFunctionCase(testGroup, "subpass_shading_features_huawei", "createDeviceWithUnsupportedFeaturesTestSubpassShadingFeaturesHUAWEI", createDeviceWithUnsupportedFeaturesTestSubpassShadingFeaturesHUAWEI);
7109	addFunctionCase(testGroup, "shader_image_atomic_int64_features_ext", "createDeviceWithUnsupportedFeaturesTestShaderImageAtomicInt64FeaturesEXT", createDeviceWithUnsupportedFeaturesTestShaderImageAtomicInt64FeaturesEXT);
7110	addFunctionCase(testGroup, "fragment_shading_rate_features_khr", "createDeviceWithUnsupportedFeaturesTestFragmentShadingRateFeaturesKHR", createDeviceWithUnsupportedFeaturesTestFragmentShadingRateFeaturesKHR);
7111	addFunctionCase(testGroup, "shader_terminate_invocation_features", "createDeviceWithUnsupportedFeaturesTestShaderTerminateInvocationFeatures", createDeviceWithUnsupportedFeaturesTestShaderTerminateInvocationFeatures);
7112	addFunctionCase(testGroup, "fragment_shading_rate_enums_features_nv", "createDeviceWithUnsupportedFeaturesTestFragmentShadingRateEnumsFeaturesNV", createDeviceWithUnsupportedFeaturesTestFragmentShadingRateEnumsFeaturesNV);
7113	addFunctionCase(testGroup, "image2_d_view_of3_d_features_ext", "createDeviceWithUnsupportedFeaturesTestImage2DViewOf3DFeaturesEXT", createDeviceWithUnsupportedFeaturesTestImage2DViewOf3DFeaturesEXT);
7114	addFunctionCase(testGroup, "mutable_descriptor_type_features_ext", "createDeviceWithUnsupportedFeaturesTestMutableDescriptorTypeFeaturesEXT", createDeviceWithUnsupportedFeaturesTestMutableDescriptorTypeFeaturesEXT);
7115	addFunctionCase(testGroup, "depth_clip_control_features_ext", "createDeviceWithUnsupportedFeaturesTestDepthClipControlFeaturesEXT", createDeviceWithUnsupportedFeaturesTestDepthClipControlFeaturesEXT);
7116	addFunctionCase(testGroup, "vertex_input_dynamic_state_features_ext", "createDeviceWithUnsupportedFeaturesTestVertexInputDynamicStateFeaturesEXT", createDeviceWithUnsupportedFeaturesTestVertexInputDynamicStateFeaturesEXT);
7117	addFunctionCase(testGroup, "external_memory_rdma_features_nv", "createDeviceWithUnsupportedFeaturesTestExternalMemoryRDMAFeaturesNV", createDeviceWithUnsupportedFeaturesTestExternalMemoryRDMAFeaturesNV);
7118	addFunctionCase(testGroup, "color_write_enable_features_ext", "createDeviceWithUnsupportedFeaturesTestColorWriteEnableFeaturesEXT", createDeviceWithUnsupportedFeaturesTestColorWriteEnableFeaturesEXT);
7119	addFunctionCase(testGroup, "synchronization2_features", "createDeviceWithUnsupportedFeaturesTestSynchronization2Features", createDeviceWithUnsupportedFeaturesTestSynchronization2Features);
7120	addFunctionCase(testGroup, "primitives_generated_query_features_ext", "createDeviceWithUnsupportedFeaturesTestPrimitivesGeneratedQueryFeaturesEXT", createDeviceWithUnsupportedFeaturesTestPrimitivesGeneratedQueryFeaturesEXT);
7121	addFunctionCase(testGroup, "legacy_dithering_features_ext", "createDeviceWithUnsupportedFeaturesTestLegacyDitheringFeaturesEXT", createDeviceWithUnsupportedFeaturesTestLegacyDitheringFeaturesEXT);
7122	addFunctionCase(testGroup, "multisampled_render_to_single_sampled_features_ext", "createDeviceWithUnsupportedFeaturesTestMultisampledRenderToSingleSampledFeaturesEXT", createDeviceWithUnsupportedFeaturesTestMultisampledRenderToSingleSampledFeaturesEXT);
7123	addFunctionCase(testGroup, "pipeline_protected_access_features_ext", "createDeviceWithUnsupportedFeaturesTestPipelineProtectedAccessFeaturesEXT", createDeviceWithUnsupportedFeaturesTestPipelineProtectedAccessFeaturesEXT);
7124	addFunctionCase(testGroup, "inherited_viewport_scissor_features_nv", "createDeviceWithUnsupportedFeaturesTestInheritedViewportScissorFeaturesNV", createDeviceWithUnsupportedFeaturesTestInheritedViewportScissorFeaturesNV);
7125	addFunctionCase(testGroup, "ycbcr2_plane444_formats_features_ext", "createDeviceWithUnsupportedFeaturesTestYcbcr2Plane444FormatsFeaturesEXT", createDeviceWithUnsupportedFeaturesTestYcbcr2Plane444FormatsFeaturesEXT);
7126	addFunctionCase(testGroup, "provoking_vertex_features_ext", "createDeviceWithUnsupportedFeaturesTestProvokingVertexFeaturesEXT", createDeviceWithUnsupportedFeaturesTestProvokingVertexFeaturesEXT);
7127	addFunctionCase(testGroup, "descriptor_buffer_features_ext", "createDeviceWithUnsupportedFeaturesTestDescriptorBufferFeaturesEXT", createDeviceWithUnsupportedFeaturesTestDescriptorBufferFeaturesEXT);
7128	addFunctionCase(testGroup, "shader_integer_dot_product_features", "createDeviceWithUnsupportedFeaturesTestShaderIntegerDotProductFeatures", createDeviceWithUnsupportedFeaturesTestShaderIntegerDotProductFeatures);
7129	addFunctionCase(testGroup, "fragment_shader_barycentric_features_khr", "createDeviceWithUnsupportedFeaturesTestFragmentShaderBarycentricFeaturesKHR", createDeviceWithUnsupportedFeaturesTestFragmentShaderBarycentricFeaturesKHR);
7130	addFunctionCase(testGroup, "ray_tracing_motion_blur_features_nv", "createDeviceWithUnsupportedFeaturesTestRayTracingMotionBlurFeaturesNV", createDeviceWithUnsupportedFeaturesTestRayTracingMotionBlurFeaturesNV);
7131	addFunctionCase(testGroup, "rgba10_x6_formats_features_ext", "createDeviceWithUnsupportedFeaturesTestRGBA10X6FormatsFeaturesEXT", createDeviceWithUnsupportedFeaturesTestRGBA10X6FormatsFeaturesEXT);
7132	addFunctionCase(testGroup, "dynamic_rendering_features", "createDeviceWithUnsupportedFeaturesTestDynamicRenderingFeatures", createDeviceWithUnsupportedFeaturesTestDynamicRenderingFeatures);
7133	addFunctionCase(testGroup, "image_view_min_lod_features_ext", "createDeviceWithUnsupportedFeaturesTestImageViewMinLodFeaturesEXT", createDeviceWithUnsupportedFeaturesTestImageViewMinLodFeaturesEXT);
7134	addFunctionCase(testGroup, "rasterization_order_attachment_access_features_ext", "createDeviceWithUnsupportedFeaturesTestRasterizationOrderAttachmentAccessFeaturesEXT", createDeviceWithUnsupportedFeaturesTestRasterizationOrderAttachmentAccessFeaturesEXT);
7135	addFunctionCase(testGroup, "linear_color_attachment_features_nv", "createDeviceWithUnsupportedFeaturesTestLinearColorAttachmentFeaturesNV", createDeviceWithUnsupportedFeaturesTestLinearColorAttachmentFeaturesNV);
7136	addFunctionCase(testGroup, "graphics_pipeline_library_features_ext", "createDeviceWithUnsupportedFeaturesTestGraphicsPipelineLibraryFeaturesEXT", createDeviceWithUnsupportedFeaturesTestGraphicsPipelineLibraryFeaturesEXT);
7137	addFunctionCase(testGroup, "descriptor_set_host_mapping_features_valve", "createDeviceWithUnsupportedFeaturesTestDescriptorSetHostMappingFeaturesVALVE", createDeviceWithUnsupportedFeaturesTestDescriptorSetHostMappingFeaturesVALVE);
7138	addFunctionCase(testGroup, "shader_module_identifier_features_ext", "createDeviceWithUnsupportedFeaturesTestShaderModuleIdentifierFeaturesEXT", createDeviceWithUnsupportedFeaturesTestShaderModuleIdentifierFeaturesEXT);
7139	addFunctionCase(testGroup, "image_compression_control_features_ext", "createDeviceWithUnsupportedFeaturesTestImageCompressionControlFeaturesEXT", createDeviceWithUnsupportedFeaturesTestImageCompressionControlFeaturesEXT);
7140	addFunctionCase(testGroup, "image_compression_control_swapchain_features_ext", "createDeviceWithUnsupportedFeaturesTestImageCompressionControlSwapchainFeaturesEXT", createDeviceWithUnsupportedFeaturesTestImageCompressionControlSwapchainFeaturesEXT);
7141	addFunctionCase(testGroup, "subpass_merge_feedback_features_ext", "createDeviceWithUnsupportedFeaturesTestSubpassMergeFeedbackFeaturesEXT", createDeviceWithUnsupportedFeaturesTestSubpassMergeFeedbackFeaturesEXT);
7142	addFunctionCase(testGroup, "opacity_micromap_features_ext", "createDeviceWithUnsupportedFeaturesTestOpacityMicromapFeaturesEXT", createDeviceWithUnsupportedFeaturesTestOpacityMicromapFeaturesEXT);
7143	addFunctionCase(testGroup, "pipeline_properties_features_ext", "createDeviceWithUnsupportedFeaturesTestPipelinePropertiesFeaturesEXT", createDeviceWithUnsupportedFeaturesTestPipelinePropertiesFeaturesEXT);
7144	addFunctionCase(testGroup, "shader_early_and_late_fragment_tests_features_amd", "createDeviceWithUnsupportedFeaturesTestShaderEarlyAndLateFragmentTestsFeaturesAMD", createDeviceWithUnsupportedFeaturesTestShaderEarlyAndLateFragmentTestsFeaturesAMD);
7145	addFunctionCase(testGroup, "non_seamless_cube_map_features_ext", "createDeviceWithUnsupportedFeaturesTestNonSeamlessCubeMapFeaturesEXT", createDeviceWithUnsupportedFeaturesTestNonSeamlessCubeMapFeaturesEXT);
7146	addFunctionCase(testGroup, "pipeline_robustness_features_ext", "createDeviceWithUnsupportedFeaturesTestPipelineRobustnessFeaturesEXT", createDeviceWithUnsupportedFeaturesTestPipelineRobustnessFeaturesEXT);
7147	addFunctionCase(testGroup, "image_processing_features_qcom", "createDeviceWithUnsupportedFeaturesTestImageProcessingFeaturesQCOM", createDeviceWithUnsupportedFeaturesTestImageProcessingFeaturesQCOM);
7148	addFunctionCase(testGroup, "tile_properties_features_qcom", "createDeviceWithUnsupportedFeaturesTestTilePropertiesFeaturesQCOM", createDeviceWithUnsupportedFeaturesTestTilePropertiesFeaturesQCOM);
7149	addFunctionCase(testGroup, "amigo_profiling_features_sec", "createDeviceWithUnsupportedFeaturesTestAmigoProfilingFeaturesSEC", createDeviceWithUnsupportedFeaturesTestAmigoProfilingFeaturesSEC);
7150	addFunctionCase(testGroup, "attachment_feedback_loop_layout_features_ext", "createDeviceWithUnsupportedFeaturesTestAttachmentFeedbackLoopLayoutFeaturesEXT", createDeviceWithUnsupportedFeaturesTestAttachmentFeedbackLoopLayoutFeaturesEXT);
7151	addFunctionCase(testGroup, "depth_clamp_zero_one_features_ext", "createDeviceWithUnsupportedFeaturesTestDepthClampZeroOneFeaturesEXT", createDeviceWithUnsupportedFeaturesTestDepthClampZeroOneFeaturesEXT);
7152	addFunctionCase(testGroup, "address_binding_report_features_ext", "createDeviceWithUnsupportedFeaturesTestAddressBindingReportFeaturesEXT", createDeviceWithUnsupportedFeaturesTestAddressBindingReportFeaturesEXT);
7153	addFunctionCase(testGroup, "optical_flow_features_nv", "createDeviceWithUnsupportedFeaturesTestOpticalFlowFeaturesNV", createDeviceWithUnsupportedFeaturesTestOpticalFlowFeaturesNV);
7154	addFunctionCase(testGroup, "fault_features_ext", "createDeviceWithUnsupportedFeaturesTestFaultFeaturesEXT", createDeviceWithUnsupportedFeaturesTestFaultFeaturesEXT);
7155	addFunctionCase(testGroup, "shader_core_builtins_features_arm", "createDeviceWithUnsupportedFeaturesTestShaderCoreBuiltinsFeaturesARM", createDeviceWithUnsupportedFeaturesTestShaderCoreBuiltinsFeaturesARM);
7156	addFunctionCase(testGroup, "swapchain_maintenance1_features_ext", "createDeviceWithUnsupportedFeaturesTestSwapchainMaintenance1FeaturesEXT", createDeviceWithUnsupportedFeaturesTestSwapchainMaintenance1FeaturesEXT);
7157	addFunctionCase(testGroup, "ray_tracing_invocation_reorder_features_nv", "createDeviceWithUnsupportedFeaturesTestRayTracingInvocationReorderFeaturesNV", createDeviceWithUnsupportedFeaturesTestRayTracingInvocationReorderFeaturesNV);
7158	addFunctionCase(testGroup, "multiview_per_view_viewports_features_qcom", "createDeviceWithUnsupportedFeaturesTestMultiviewPerViewViewportsFeaturesQCOM", createDeviceWithUnsupportedFeaturesTestMultiviewPerViewViewportsFeaturesQCOM);
7159}
7160
7161