• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* WARNING: This is auto-generated file. Do not modify, since changes will
2 * be lost! Modify the generating script instead.
3 * This file was generated by /scripts/gen_framework.py
4 */
5
6
7
8tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExternalMemorySciBufFeaturesNV (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	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
24
25	VkPhysicalDeviceFeatures emptyDeviceFeatures;
26	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
27
28	// Only non-core extensions will be used when creating the device.
29	const auto& extensionNames = context.getDeviceCreationExtensions();
30	DE_UNREF(extensionNames); // In some cases this is not used.
31
32	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExternalMemorySciBufFeaturesNV>()))
33	{
34		static const Feature features[] =
35		{
36		FEATURE_ITEM (VkPhysicalDeviceExternalMemorySciBufFeaturesNV, sciBufImport),
37		FEATURE_ITEM (VkPhysicalDeviceExternalMemorySciBufFeaturesNV, sciBufExport),
38		};
39		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExternalMemorySciBufFeaturesNV*>(featuresStruct);
40		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
41	}
42
43	if (numErrors > 0)
44		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
45	else
46		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
47}
48
49
50tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVariablePointersFeatures (Context& context)
51{
52	const PlatformInterface&				vkp						= context.getPlatformInterface();
53	tcu::TestLog&							log						= context.getTestContext().getLog();
54	tcu::ResultCollector					resultCollector			(log);
55	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
56	const InstanceDriver&					instanceDriver			(instance.getDriver());
57	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
58	const deUint32							queueFamilyIndex		= 0;
59	const deUint32							queueCount				= 1;
60	const float								queuePriority			= 1.0f;
61	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
62	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
63	int										numErrors				= 0;
64	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
65	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
66
67	VkPhysicalDeviceFeatures emptyDeviceFeatures;
68	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
69
70	// Only non-core extensions will be used when creating the device.
71	const auto& extensionNames = context.getDeviceCreationExtensions();
72	DE_UNREF(extensionNames); // In some cases this is not used.
73
74	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVariablePointersFeatures>()))
75	{
76		static const Feature features[] =
77		{
78		FEATURE_ITEM (VkPhysicalDeviceVariablePointersFeatures, variablePointersStorageBuffer),
79		FEATURE_ITEM (VkPhysicalDeviceVariablePointersFeatures, variablePointers),
80		};
81		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures*>(featuresStruct);
82		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
83	}
84
85	if (numErrors > 0)
86		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
87	else
88		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
89}
90
91
92tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExternalSciSyncFeaturesNV (Context& context)
93{
94	const PlatformInterface&				vkp						= context.getPlatformInterface();
95	tcu::TestLog&							log						= context.getTestContext().getLog();
96	tcu::ResultCollector					resultCollector			(log);
97	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
98	const InstanceDriver&					instanceDriver			(instance.getDriver());
99	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
100	const deUint32							queueFamilyIndex		= 0;
101	const deUint32							queueCount				= 1;
102	const float								queuePriority			= 1.0f;
103	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
104	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
105	int										numErrors				= 0;
106	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
107	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
108
109	VkPhysicalDeviceFeatures emptyDeviceFeatures;
110	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
111
112	// Only non-core extensions will be used when creating the device.
113	const auto& extensionNames = context.getDeviceCreationExtensions();
114	DE_UNREF(extensionNames); // In some cases this is not used.
115
116	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExternalSciSyncFeaturesNV>()))
117	{
118		static const Feature features[] =
119		{
120		FEATURE_ITEM (VkPhysicalDeviceExternalSciSyncFeaturesNV, sciSyncFence),
121		FEATURE_ITEM (VkPhysicalDeviceExternalSciSyncFeaturesNV, sciSyncSemaphore),
122		FEATURE_ITEM (VkPhysicalDeviceExternalSciSyncFeaturesNV, sciSyncImport),
123		FEATURE_ITEM (VkPhysicalDeviceExternalSciSyncFeaturesNV, sciSyncExport),
124		};
125		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExternalSciSyncFeaturesNV*>(featuresStruct);
126		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
127	}
128
129	if (numErrors > 0)
130		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
131	else
132		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
133}
134
135
136tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExternalSciSync2FeaturesNV (Context& context)
137{
138	const PlatformInterface&				vkp						= context.getPlatformInterface();
139	tcu::TestLog&							log						= context.getTestContext().getLog();
140	tcu::ResultCollector					resultCollector			(log);
141	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
142	const InstanceDriver&					instanceDriver			(instance.getDriver());
143	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
144	const deUint32							queueFamilyIndex		= 0;
145	const deUint32							queueCount				= 1;
146	const float								queuePriority			= 1.0f;
147	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
148	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
149	int										numErrors				= 0;
150	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
151	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
152
153	VkPhysicalDeviceFeatures emptyDeviceFeatures;
154	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
155
156	// Only non-core extensions will be used when creating the device.
157	const auto& extensionNames = context.getDeviceCreationExtensions();
158	DE_UNREF(extensionNames); // In some cases this is not used.
159
160	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExternalSciSync2FeaturesNV>()))
161	{
162		static const Feature features[] =
163		{
164		FEATURE_ITEM (VkPhysicalDeviceExternalSciSync2FeaturesNV, sciSyncFence),
165		FEATURE_ITEM (VkPhysicalDeviceExternalSciSync2FeaturesNV, sciSyncSemaphore2),
166		FEATURE_ITEM (VkPhysicalDeviceExternalSciSync2FeaturesNV, sciSyncImport),
167		FEATURE_ITEM (VkPhysicalDeviceExternalSciSync2FeaturesNV, sciSyncExport),
168		};
169		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExternalSciSync2FeaturesNV*>(featuresStruct);
170		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
171	}
172
173	if (numErrors > 0)
174		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
175	else
176		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
177}
178
179
180tcu::TestStatus createDeviceWithUnsupportedFeaturesTestMultiviewFeatures (Context& context)
181{
182	const PlatformInterface&				vkp						= context.getPlatformInterface();
183	tcu::TestLog&							log						= context.getTestContext().getLog();
184	tcu::ResultCollector					resultCollector			(log);
185	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
186	const InstanceDriver&					instanceDriver			(instance.getDriver());
187	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
188	const deUint32							queueFamilyIndex		= 0;
189	const deUint32							queueCount				= 1;
190	const float								queuePriority			= 1.0f;
191	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
192	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
193	int										numErrors				= 0;
194	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
195	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
196
197	VkPhysicalDeviceFeatures emptyDeviceFeatures;
198	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
199
200	// Only non-core extensions will be used when creating the device.
201	const auto& extensionNames = context.getDeviceCreationExtensions();
202	DE_UNREF(extensionNames); // In some cases this is not used.
203
204	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceMultiviewFeatures>()))
205	{
206		static const Feature features[] =
207		{
208		FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiview),
209		FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiviewGeometryShader),
210		FEATURE_ITEM (VkPhysicalDeviceMultiviewFeatures, multiviewTessellationShader),
211		};
212		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(featuresStruct);
213		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
214	}
215
216	if (numErrors > 0)
217		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
218	else
219		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
220}
221
222
223tcu::TestStatus createDeviceWithUnsupportedFeaturesTest16BitStorageFeatures (Context& context)
224{
225	const PlatformInterface&				vkp						= context.getPlatformInterface();
226	tcu::TestLog&							log						= context.getTestContext().getLog();
227	tcu::ResultCollector					resultCollector			(log);
228	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
229	const InstanceDriver&					instanceDriver			(instance.getDriver());
230	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
231	const deUint32							queueFamilyIndex		= 0;
232	const deUint32							queueCount				= 1;
233	const float								queuePriority			= 1.0f;
234	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
235	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
236	int										numErrors				= 0;
237	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
238	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
239
240	VkPhysicalDeviceFeatures emptyDeviceFeatures;
241	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
242
243	// Only non-core extensions will be used when creating the device.
244	const auto& extensionNames = context.getDeviceCreationExtensions();
245	DE_UNREF(extensionNames); // In some cases this is not used.
246
247	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevice16BitStorageFeatures>()))
248	{
249		static const Feature features[] =
250		{
251		FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storageBuffer16BitAccess),
252		FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, uniformAndStorageBuffer16BitAccess),
253		FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storagePushConstant16),
254		FEATURE_ITEM (VkPhysicalDevice16BitStorageFeatures, storageInputOutput16),
255		};
256		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(featuresStruct);
257		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 4, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
258	}
259
260	if (numErrors > 0)
261		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
262	else
263		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
264}
265
266
267tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderSubgroupExtendedTypesFeatures (Context& context)
268{
269	const PlatformInterface&				vkp						= context.getPlatformInterface();
270	tcu::TestLog&							log						= context.getTestContext().getLog();
271	tcu::ResultCollector					resultCollector			(log);
272	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
273	const InstanceDriver&					instanceDriver			(instance.getDriver());
274	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
275	const deUint32							queueFamilyIndex		= 0;
276	const deUint32							queueCount				= 1;
277	const float								queuePriority			= 1.0f;
278	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
279	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
280	int										numErrors				= 0;
281	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
282	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
283
284	VkPhysicalDeviceFeatures emptyDeviceFeatures;
285	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
286
287	// Only non-core extensions will be used when creating the device.
288	const auto& extensionNames = context.getDeviceCreationExtensions();
289	DE_UNREF(extensionNames); // In some cases this is not used.
290
291	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>()))
292	{
293		static const Feature features[] =
294		{
295		FEATURE_ITEM (VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures, shaderSubgroupExtendedTypes),
296		};
297		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(featuresStruct);
298		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
299	}
300
301	if (numErrors > 0)
302		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
303	else
304		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
305}
306
307
308tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSamplerYcbcrConversionFeatures (Context& context)
309{
310	const PlatformInterface&				vkp						= context.getPlatformInterface();
311	tcu::TestLog&							log						= context.getTestContext().getLog();
312	tcu::ResultCollector					resultCollector			(log);
313	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
314	const InstanceDriver&					instanceDriver			(instance.getDriver());
315	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
316	const deUint32							queueFamilyIndex		= 0;
317	const deUint32							queueCount				= 1;
318	const float								queuePriority			= 1.0f;
319	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
320	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
321	int										numErrors				= 0;
322	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
323	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
324
325	VkPhysicalDeviceFeatures emptyDeviceFeatures;
326	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
327
328	// Only non-core extensions will be used when creating the device.
329	const auto& extensionNames = context.getDeviceCreationExtensions();
330	DE_UNREF(extensionNames); // In some cases this is not used.
331
332	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures>()))
333	{
334		static const Feature features[] =
335		{
336		FEATURE_ITEM (VkPhysicalDeviceSamplerYcbcrConversionFeatures, samplerYcbcrConversion),
337		};
338		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(featuresStruct);
339		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
340	}
341
342	if (numErrors > 0)
343		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
344	else
345		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
346}
347
348
349tcu::TestStatus createDeviceWithUnsupportedFeaturesTestProtectedMemoryFeatures (Context& context)
350{
351	const PlatformInterface&				vkp						= context.getPlatformInterface();
352	tcu::TestLog&							log						= context.getTestContext().getLog();
353	tcu::ResultCollector					resultCollector			(log);
354	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
355	const InstanceDriver&					instanceDriver			(instance.getDriver());
356	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
357	const deUint32							queueFamilyIndex		= 0;
358	const deUint32							queueCount				= 1;
359	const float								queuePriority			= 1.0f;
360	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
361	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
362	int										numErrors				= 0;
363	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
364	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
365
366	VkPhysicalDeviceFeatures emptyDeviceFeatures;
367	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
368
369	// Only non-core extensions will be used when creating the device.
370	const auto& extensionNames = context.getDeviceCreationExtensions();
371	DE_UNREF(extensionNames); // In some cases this is not used.
372
373	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceProtectedMemoryFeatures>()))
374	{
375		static const Feature features[] =
376		{
377		FEATURE_ITEM (VkPhysicalDeviceProtectedMemoryFeatures, protectedMemory),
378		};
379		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(featuresStruct);
380		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
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 createDeviceWithUnsupportedFeaturesTestBlendOperationAdvancedFeaturesEXT (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	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
406
407	VkPhysicalDeviceFeatures emptyDeviceFeatures;
408	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
409
410	// Only non-core extensions will be used when creating the device.
411	const auto& extensionNames = context.getDeviceCreationExtensions();
412	DE_UNREF(extensionNames); // In some cases this is not used.
413
414	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>()))
415	{
416		static const Feature features[] =
417		{
418		FEATURE_ITEM (VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT, advancedBlendCoherentOperations),
419		};
420		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(featuresStruct);
421		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
422	}
423
424	if (numErrors > 0)
425		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
426	else
427		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
428}
429
430
431tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderDrawParametersFeatures (Context& context)
432{
433	const PlatformInterface&				vkp						= context.getPlatformInterface();
434	tcu::TestLog&							log						= context.getTestContext().getLog();
435	tcu::ResultCollector					resultCollector			(log);
436	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
437	const InstanceDriver&					instanceDriver			(instance.getDriver());
438	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
439	const deUint32							queueFamilyIndex		= 0;
440	const deUint32							queueCount				= 1;
441	const float								queuePriority			= 1.0f;
442	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
443	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
444	int										numErrors				= 0;
445	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
446	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
447
448	VkPhysicalDeviceFeatures emptyDeviceFeatures;
449	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
450
451	// Only non-core extensions will be used when creating the device.
452	const auto& extensionNames = context.getDeviceCreationExtensions();
453	DE_UNREF(extensionNames); // In some cases this is not used.
454
455	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderDrawParametersFeatures>()))
456	{
457		static const Feature features[] =
458		{
459		FEATURE_ITEM (VkPhysicalDeviceShaderDrawParametersFeatures, shaderDrawParameters),
460		};
461		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures*>(featuresStruct);
462		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
463	}
464
465	if (numErrors > 0)
466		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
467	else
468		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
469}
470
471
472tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderFloat16Int8Features (Context& context)
473{
474	const PlatformInterface&				vkp						= context.getPlatformInterface();
475	tcu::TestLog&							log						= context.getTestContext().getLog();
476	tcu::ResultCollector					resultCollector			(log);
477	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
478	const InstanceDriver&					instanceDriver			(instance.getDriver());
479	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
480	const deUint32							queueFamilyIndex		= 0;
481	const deUint32							queueCount				= 1;
482	const float								queuePriority			= 1.0f;
483	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
484	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
485	int										numErrors				= 0;
486	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
487	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
488
489	VkPhysicalDeviceFeatures emptyDeviceFeatures;
490	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
491
492	// Only non-core extensions will be used when creating the device.
493	const auto& extensionNames = context.getDeviceCreationExtensions();
494	DE_UNREF(extensionNames); // In some cases this is not used.
495
496	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderFloat16Int8Features>()))
497	{
498		static const Feature features[] =
499		{
500		FEATURE_ITEM (VkPhysicalDeviceShaderFloat16Int8Features, shaderFloat16),
501		FEATURE_ITEM (VkPhysicalDeviceShaderFloat16Int8Features, shaderInt8),
502		};
503		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features*>(featuresStruct);
504		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
505	}
506
507	if (numErrors > 0)
508		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
509	else
510		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
511}
512
513
514tcu::TestStatus createDeviceWithUnsupportedFeaturesTestHostQueryResetFeatures (Context& context)
515{
516	const PlatformInterface&				vkp						= context.getPlatformInterface();
517	tcu::TestLog&							log						= context.getTestContext().getLog();
518	tcu::ResultCollector					resultCollector			(log);
519	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
520	const InstanceDriver&					instanceDriver			(instance.getDriver());
521	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
522	const deUint32							queueFamilyIndex		= 0;
523	const deUint32							queueCount				= 1;
524	const float								queuePriority			= 1.0f;
525	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
526	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
527	int										numErrors				= 0;
528	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
529	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
530
531	VkPhysicalDeviceFeatures emptyDeviceFeatures;
532	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
533
534	// Only non-core extensions will be used when creating the device.
535	const auto& extensionNames = context.getDeviceCreationExtensions();
536	DE_UNREF(extensionNames); // In some cases this is not used.
537
538	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceHostQueryResetFeatures>()))
539	{
540		static const Feature features[] =
541		{
542		FEATURE_ITEM (VkPhysicalDeviceHostQueryResetFeatures, hostQueryReset),
543		};
544		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures*>(featuresStruct);
545		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
546	}
547
548	if (numErrors > 0)
549		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
550	else
551		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
552}
553
554
555tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDescriptorIndexingFeatures (Context& context)
556{
557	const PlatformInterface&				vkp						= context.getPlatformInterface();
558	tcu::TestLog&							log						= context.getTestContext().getLog();
559	tcu::ResultCollector					resultCollector			(log);
560	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
561	const InstanceDriver&					instanceDriver			(instance.getDriver());
562	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
563	const deUint32							queueFamilyIndex		= 0;
564	const deUint32							queueCount				= 1;
565	const float								queuePriority			= 1.0f;
566	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
567	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
568	int										numErrors				= 0;
569	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
570	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
571
572	VkPhysicalDeviceFeatures emptyDeviceFeatures;
573	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
574
575	// Only non-core extensions will be used when creating the device.
576	const auto& extensionNames = context.getDeviceCreationExtensions();
577	DE_UNREF(extensionNames); // In some cases this is not used.
578
579	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDescriptorIndexingFeatures>()))
580	{
581		static const Feature features[] =
582		{
583		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayDynamicIndexing),
584		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayDynamicIndexing),
585		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayDynamicIndexing),
586		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformBufferArrayNonUniformIndexing),
587		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderSampledImageArrayNonUniformIndexing),
588		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageBufferArrayNonUniformIndexing),
589		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageImageArrayNonUniformIndexing),
590		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayNonUniformIndexing),
591		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayNonUniformIndexing),
592		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayNonUniformIndexing),
593		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformBufferUpdateAfterBind),
594		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingSampledImageUpdateAfterBind),
595		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageImageUpdateAfterBind),
596		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageBufferUpdateAfterBind),
597		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformTexelBufferUpdateAfterBind),
598		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageTexelBufferUpdateAfterBind),
599		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUpdateUnusedWhilePending),
600		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingPartiallyBound),
601		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingVariableDescriptorCount),
602		FEATURE_ITEM (VkPhysicalDeviceDescriptorIndexingFeatures, runtimeDescriptorArray),
603		};
604		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures*>(featuresStruct);
605		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 20, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
606	}
607
608	if (numErrors > 0)
609		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
610	else
611		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
612}
613
614
615tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTimelineSemaphoreFeatures (Context& context)
616{
617	const PlatformInterface&				vkp						= context.getPlatformInterface();
618	tcu::TestLog&							log						= context.getTestContext().getLog();
619	tcu::ResultCollector					resultCollector			(log);
620	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
621	const InstanceDriver&					instanceDriver			(instance.getDriver());
622	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
623	const deUint32							queueFamilyIndex		= 0;
624	const deUint32							queueCount				= 1;
625	const float								queuePriority			= 1.0f;
626	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
627	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
628	int										numErrors				= 0;
629	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
630	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
631
632	VkPhysicalDeviceFeatures emptyDeviceFeatures;
633	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
634
635	// Only non-core extensions will be used when creating the device.
636	const auto& extensionNames = context.getDeviceCreationExtensions();
637	DE_UNREF(extensionNames); // In some cases this is not used.
638
639	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceTimelineSemaphoreFeatures>()))
640	{
641		static const Feature features[] =
642		{
643		FEATURE_ITEM (VkPhysicalDeviceTimelineSemaphoreFeatures, timelineSemaphore),
644		};
645		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures*>(featuresStruct);
646		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
647	}
648
649	if (numErrors > 0)
650		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
651	else
652		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
653}
654
655
656tcu::TestStatus createDeviceWithUnsupportedFeaturesTest8BitStorageFeatures (Context& context)
657{
658	const PlatformInterface&				vkp						= context.getPlatformInterface();
659	tcu::TestLog&							log						= context.getTestContext().getLog();
660	tcu::ResultCollector					resultCollector			(log);
661	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
662	const InstanceDriver&					instanceDriver			(instance.getDriver());
663	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
664	const deUint32							queueFamilyIndex		= 0;
665	const deUint32							queueCount				= 1;
666	const float								queuePriority			= 1.0f;
667	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
668	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
669	int										numErrors				= 0;
670	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
671	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
672
673	VkPhysicalDeviceFeatures emptyDeviceFeatures;
674	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
675
676	// Only non-core extensions will be used when creating the device.
677	const auto& extensionNames = context.getDeviceCreationExtensions();
678	DE_UNREF(extensionNames); // In some cases this is not used.
679
680	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevice8BitStorageFeatures>()))
681	{
682		static const Feature features[] =
683		{
684		FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, storageBuffer8BitAccess),
685		FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, uniformAndStorageBuffer8BitAccess),
686		FEATURE_ITEM (VkPhysicalDevice8BitStorageFeatures, storagePushConstant8),
687		};
688		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures*>(featuresStruct);
689		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
690	}
691
692	if (numErrors > 0)
693		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
694	else
695		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
696}
697
698
699tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkanMemoryModelFeatures (Context& context)
700{
701	const PlatformInterface&				vkp						= context.getPlatformInterface();
702	tcu::TestLog&							log						= context.getTestContext().getLog();
703	tcu::ResultCollector					resultCollector			(log);
704	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
705	const InstanceDriver&					instanceDriver			(instance.getDriver());
706	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
707	const deUint32							queueFamilyIndex		= 0;
708	const deUint32							queueCount				= 1;
709	const float								queuePriority			= 1.0f;
710	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
711	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
712	int										numErrors				= 0;
713	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
714	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
715
716	VkPhysicalDeviceFeatures emptyDeviceFeatures;
717	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
718
719	// Only non-core extensions will be used when creating the device.
720	const auto& extensionNames = context.getDeviceCreationExtensions();
721	DE_UNREF(extensionNames); // In some cases this is not used.
722
723	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVulkanMemoryModelFeatures>()))
724	{
725		static const Feature features[] =
726		{
727		FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModel),
728		FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModelDeviceScope),
729		FEATURE_ITEM (VkPhysicalDeviceVulkanMemoryModelFeatures, vulkanMemoryModelAvailabilityVisibilityChains),
730		};
731		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures*>(featuresStruct);
732		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
733	}
734
735	if (numErrors > 0)
736		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
737	else
738		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
739}
740
741
742tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderAtomicInt64Features (Context& context)
743{
744	const PlatformInterface&				vkp						= context.getPlatformInterface();
745	tcu::TestLog&							log						= context.getTestContext().getLog();
746	tcu::ResultCollector					resultCollector			(log);
747	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
748	const InstanceDriver&					instanceDriver			(instance.getDriver());
749	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
750	const deUint32							queueFamilyIndex		= 0;
751	const deUint32							queueCount				= 1;
752	const float								queuePriority			= 1.0f;
753	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
754	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
755	int										numErrors				= 0;
756	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
757	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
758
759	VkPhysicalDeviceFeatures emptyDeviceFeatures;
760	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
761
762	// Only non-core extensions will be used when creating the device.
763	const auto& extensionNames = context.getDeviceCreationExtensions();
764	DE_UNREF(extensionNames); // In some cases this is not used.
765
766	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderAtomicInt64Features>()))
767	{
768		static const Feature features[] =
769		{
770		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicInt64Features, shaderBufferInt64Atomics),
771		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicInt64Features, shaderSharedInt64Atomics),
772		};
773		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features*>(featuresStruct);
774		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
775	}
776
777	if (numErrors > 0)
778		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
779	else
780		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
781}
782
783
784tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderAtomicFloatFeaturesEXT (Context& context)
785{
786	const PlatformInterface&				vkp						= context.getPlatformInterface();
787	tcu::TestLog&							log						= context.getTestContext().getLog();
788	tcu::ResultCollector					resultCollector			(log);
789	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
790	const InstanceDriver&					instanceDriver			(instance.getDriver());
791	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
792	const deUint32							queueFamilyIndex		= 0;
793	const deUint32							queueCount				= 1;
794	const float								queuePriority			= 1.0f;
795	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
796	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
797	int										numErrors				= 0;
798	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
799	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
800
801	VkPhysicalDeviceFeatures emptyDeviceFeatures;
802	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
803
804	// Only non-core extensions will be used when creating the device.
805	const auto& extensionNames = context.getDeviceCreationExtensions();
806	DE_UNREF(extensionNames); // In some cases this is not used.
807
808	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>()))
809	{
810		static const Feature features[] =
811		{
812		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat32Atomics),
813		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat32AtomicAdd),
814		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat64Atomics),
815		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderBufferFloat64AtomicAdd),
816		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat32Atomics),
817		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat32AtomicAdd),
818		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat64Atomics),
819		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderSharedFloat64AtomicAdd),
820		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderImageFloat32Atomics),
821		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, shaderImageFloat32AtomicAdd),
822		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, sparseImageFloat32Atomics),
823		FEATURE_ITEM (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT, sparseImageFloat32AtomicAdd),
824		};
825		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(featuresStruct);
826		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 12, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
827	}
828
829	if (numErrors > 0)
830		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
831	else
832		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
833}
834
835
836tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVertexAttributeDivisorFeaturesEXT (Context& context)
837{
838	const PlatformInterface&				vkp						= context.getPlatformInterface();
839	tcu::TestLog&							log						= context.getTestContext().getLog();
840	tcu::ResultCollector					resultCollector			(log);
841	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
842	const InstanceDriver&					instanceDriver			(instance.getDriver());
843	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
844	const deUint32							queueFamilyIndex		= 0;
845	const deUint32							queueCount				= 1;
846	const float								queuePriority			= 1.0f;
847	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
848	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
849	int										numErrors				= 0;
850	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
851	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
852
853	VkPhysicalDeviceFeatures emptyDeviceFeatures;
854	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
855
856	// Only non-core extensions will be used when creating the device.
857	const auto& extensionNames = context.getDeviceCreationExtensions();
858	DE_UNREF(extensionNames); // In some cases this is not used.
859
860	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>()))
861	{
862		static const Feature features[] =
863		{
864		FEATURE_ITEM (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT, vertexAttributeInstanceRateDivisor),
865		FEATURE_ITEM (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT, vertexAttributeInstanceRateZeroDivisor),
866		};
867		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(featuresStruct);
868		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
869	}
870
871	if (numErrors > 0)
872		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
873	else
874		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
875}
876
877
878tcu::TestStatus createDeviceWithUnsupportedFeaturesTestASTCDecodeFeaturesEXT (Context& context)
879{
880	const PlatformInterface&				vkp						= context.getPlatformInterface();
881	tcu::TestLog&							log						= context.getTestContext().getLog();
882	tcu::ResultCollector					resultCollector			(log);
883	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
884	const InstanceDriver&					instanceDriver			(instance.getDriver());
885	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
886	const deUint32							queueFamilyIndex		= 0;
887	const deUint32							queueCount				= 1;
888	const float								queuePriority			= 1.0f;
889	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
890	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
891	int										numErrors				= 0;
892	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
893	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
894
895	VkPhysicalDeviceFeatures emptyDeviceFeatures;
896	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
897
898	// Only non-core extensions will be used when creating the device.
899	const auto& extensionNames = context.getDeviceCreationExtensions();
900	DE_UNREF(extensionNames); // In some cases this is not used.
901
902	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceASTCDecodeFeaturesEXT>()))
903	{
904		static const Feature features[] =
905		{
906		FEATURE_ITEM (VkPhysicalDeviceASTCDecodeFeaturesEXT, decodeModeSharedExponent),
907		};
908		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT*>(featuresStruct);
909		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
910	}
911
912	if (numErrors > 0)
913		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
914	else
915		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
916}
917
918
919tcu::TestStatus createDeviceWithUnsupportedFeaturesTestScalarBlockLayoutFeatures (Context& context)
920{
921	const PlatformInterface&				vkp						= context.getPlatformInterface();
922	tcu::TestLog&							log						= context.getTestContext().getLog();
923	tcu::ResultCollector					resultCollector			(log);
924	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
925	const InstanceDriver&					instanceDriver			(instance.getDriver());
926	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
927	const deUint32							queueFamilyIndex		= 0;
928	const deUint32							queueCount				= 1;
929	const float								queuePriority			= 1.0f;
930	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
931	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
932	int										numErrors				= 0;
933	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
934	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
935
936	VkPhysicalDeviceFeatures emptyDeviceFeatures;
937	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
938
939	// Only non-core extensions will be used when creating the device.
940	const auto& extensionNames = context.getDeviceCreationExtensions();
941	DE_UNREF(extensionNames); // In some cases this is not used.
942
943	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceScalarBlockLayoutFeatures>()))
944	{
945		static const Feature features[] =
946		{
947		FEATURE_ITEM (VkPhysicalDeviceScalarBlockLayoutFeatures, scalarBlockLayout),
948		};
949		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures*>(featuresStruct);
950		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
951	}
952
953	if (numErrors > 0)
954		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
955	else
956		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
957}
958
959
960tcu::TestStatus createDeviceWithUnsupportedFeaturesTestUniformBufferStandardLayoutFeatures (Context& context)
961{
962	const PlatformInterface&				vkp						= context.getPlatformInterface();
963	tcu::TestLog&							log						= context.getTestContext().getLog();
964	tcu::ResultCollector					resultCollector			(log);
965	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
966	const InstanceDriver&					instanceDriver			(instance.getDriver());
967	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
968	const deUint32							queueFamilyIndex		= 0;
969	const deUint32							queueCount				= 1;
970	const float								queuePriority			= 1.0f;
971	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
972	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
973	int										numErrors				= 0;
974	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
975	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
976
977	VkPhysicalDeviceFeatures emptyDeviceFeatures;
978	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
979
980	// Only non-core extensions will be used when creating the device.
981	const auto& extensionNames = context.getDeviceCreationExtensions();
982	DE_UNREF(extensionNames); // In some cases this is not used.
983
984	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>()))
985	{
986		static const Feature features[] =
987		{
988		FEATURE_ITEM (VkPhysicalDeviceUniformBufferStandardLayoutFeatures, uniformBufferStandardLayout),
989		};
990		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(featuresStruct);
991		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
992	}
993
994	if (numErrors > 0)
995		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
996	else
997		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
998}
999
1000
1001tcu::TestStatus createDeviceWithUnsupportedFeaturesTestDepthClipEnableFeaturesEXT (Context& context)
1002{
1003	const PlatformInterface&				vkp						= context.getPlatformInterface();
1004	tcu::TestLog&							log						= context.getTestContext().getLog();
1005	tcu::ResultCollector					resultCollector			(log);
1006	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1007	const InstanceDriver&					instanceDriver			(instance.getDriver());
1008	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1009	const deUint32							queueFamilyIndex		= 0;
1010	const deUint32							queueCount				= 1;
1011	const float								queuePriority			= 1.0f;
1012	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1013	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1014	int										numErrors				= 0;
1015	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1016	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1017
1018	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1019	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1020
1021	// Only non-core extensions will be used when creating the device.
1022	const auto& extensionNames = context.getDeviceCreationExtensions();
1023	DE_UNREF(extensionNames); // In some cases this is not used.
1024
1025	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT>()))
1026	{
1027		static const Feature features[] =
1028		{
1029		FEATURE_ITEM (VkPhysicalDeviceDepthClipEnableFeaturesEXT, depthClipEnable),
1030		};
1031		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(featuresStruct);
1032		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1033	}
1034
1035	if (numErrors > 0)
1036		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1037	else
1038		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1039}
1040
1041
1042tcu::TestStatus createDeviceWithUnsupportedFeaturesTestBufferDeviceAddressFeatures (Context& context)
1043{
1044	const PlatformInterface&				vkp						= context.getPlatformInterface();
1045	tcu::TestLog&							log						= context.getTestContext().getLog();
1046	tcu::ResultCollector					resultCollector			(log);
1047	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1048	const InstanceDriver&					instanceDriver			(instance.getDriver());
1049	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1050	const deUint32							queueFamilyIndex		= 0;
1051	const deUint32							queueCount				= 1;
1052	const float								queuePriority			= 1.0f;
1053	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1054	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1055	int										numErrors				= 0;
1056	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1057	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1058
1059	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1060	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1061
1062	// Only non-core extensions will be used when creating the device.
1063	const auto& extensionNames = context.getDeviceCreationExtensions();
1064	DE_UNREF(extensionNames); // In some cases this is not used.
1065
1066	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceBufferDeviceAddressFeatures>()))
1067	{
1068		static const Feature features[] =
1069		{
1070		FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddress),
1071		FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddressCaptureReplay),
1072		FEATURE_ITEM (VkPhysicalDeviceBufferDeviceAddressFeatures, bufferDeviceAddressMultiDevice),
1073		};
1074		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures*>(featuresStruct);
1075		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1076	}
1077
1078	if (numErrors > 0)
1079		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1080	else
1081		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1082}
1083
1084
1085tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImagelessFramebufferFeatures (Context& context)
1086{
1087	const PlatformInterface&				vkp						= context.getPlatformInterface();
1088	tcu::TestLog&							log						= context.getTestContext().getLog();
1089	tcu::ResultCollector					resultCollector			(log);
1090	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1091	const InstanceDriver&					instanceDriver			(instance.getDriver());
1092	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1093	const deUint32							queueFamilyIndex		= 0;
1094	const deUint32							queueCount				= 1;
1095	const float								queuePriority			= 1.0f;
1096	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1097	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1098	int										numErrors				= 0;
1099	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1100	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1101
1102	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1103	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1104
1105	// Only non-core extensions will be used when creating the device.
1106	const auto& extensionNames = context.getDeviceCreationExtensions();
1107	DE_UNREF(extensionNames); // In some cases this is not used.
1108
1109	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImagelessFramebufferFeatures>()))
1110	{
1111		static const Feature features[] =
1112		{
1113		FEATURE_ITEM (VkPhysicalDeviceImagelessFramebufferFeatures, imagelessFramebuffer),
1114		};
1115		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures*>(featuresStruct);
1116		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1117	}
1118
1119	if (numErrors > 0)
1120		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1121	else
1122		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1123}
1124
1125
1126tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTextureCompressionASTCHDRFeaturesEXT (Context& context)
1127{
1128	const PlatformInterface&				vkp						= context.getPlatformInterface();
1129	tcu::TestLog&							log						= context.getTestContext().getLog();
1130	tcu::ResultCollector					resultCollector			(log);
1131	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1132	const InstanceDriver&					instanceDriver			(instance.getDriver());
1133	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1134	const deUint32							queueFamilyIndex		= 0;
1135	const deUint32							queueCount				= 1;
1136	const float								queuePriority			= 1.0f;
1137	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1138	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1139	int										numErrors				= 0;
1140	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1141	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1142
1143	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1144	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1145
1146	// Only non-core extensions will be used when creating the device.
1147	const auto& extensionNames = context.getDeviceCreationExtensions();
1148	DE_UNREF(extensionNames); // In some cases this is not used.
1149
1150	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>()))
1151	{
1152		static const Feature features[] =
1153		{
1154		FEATURE_ITEM (VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT, textureCompressionASTC_HDR),
1155		};
1156		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(featuresStruct);
1157		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1158	}
1159
1160	if (numErrors > 0)
1161		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1162	else
1163		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1164}
1165
1166
1167tcu::TestStatus createDeviceWithUnsupportedFeaturesTestYcbcrImageArraysFeaturesEXT (Context& context)
1168{
1169	const PlatformInterface&				vkp						= context.getPlatformInterface();
1170	tcu::TestLog&							log						= context.getTestContext().getLog();
1171	tcu::ResultCollector					resultCollector			(log);
1172	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1173	const InstanceDriver&					instanceDriver			(instance.getDriver());
1174	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1175	const deUint32							queueFamilyIndex		= 0;
1176	const deUint32							queueCount				= 1;
1177	const float								queuePriority			= 1.0f;
1178	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1179	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1180	int										numErrors				= 0;
1181	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1182	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1183
1184	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1185	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1186
1187	// Only non-core extensions will be used when creating the device.
1188	const auto& extensionNames = context.getDeviceCreationExtensions();
1189	DE_UNREF(extensionNames); // In some cases this is not used.
1190
1191	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>()))
1192	{
1193		static const Feature features[] =
1194		{
1195		FEATURE_ITEM (VkPhysicalDeviceYcbcrImageArraysFeaturesEXT, ycbcrImageArrays),
1196		};
1197		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(featuresStruct);
1198		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1199	}
1200
1201	if (numErrors > 0)
1202		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1203	else
1204		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1205}
1206
1207
1208tcu::TestStatus createDeviceWithUnsupportedFeaturesTestPerformanceQueryFeaturesKHR (Context& context)
1209{
1210	const PlatformInterface&				vkp						= context.getPlatformInterface();
1211	tcu::TestLog&							log						= context.getTestContext().getLog();
1212	tcu::ResultCollector					resultCollector			(log);
1213	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1214	const InstanceDriver&					instanceDriver			(instance.getDriver());
1215	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1216	const deUint32							queueFamilyIndex		= 0;
1217	const deUint32							queueCount				= 1;
1218	const float								queuePriority			= 1.0f;
1219	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1220	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1221	int										numErrors				= 0;
1222	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1223	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1224
1225	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1226	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1227
1228	// Only non-core extensions will be used when creating the device.
1229	const auto& extensionNames = context.getDeviceCreationExtensions();
1230	DE_UNREF(extensionNames); // In some cases this is not used.
1231
1232	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevicePerformanceQueryFeaturesKHR>()))
1233	{
1234		static const Feature features[] =
1235		{
1236		FEATURE_ITEM (VkPhysicalDevicePerformanceQueryFeaturesKHR, performanceCounterQueryPools),
1237		FEATURE_ITEM (VkPhysicalDevicePerformanceQueryFeaturesKHR, performanceCounterMultipleQueryPools),
1238		};
1239		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR*>(featuresStruct);
1240		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1241	}
1242
1243	if (numErrors > 0)
1244		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1245	else
1246		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1247}
1248
1249
1250tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderClockFeaturesKHR (Context& context)
1251{
1252	const PlatformInterface&				vkp						= context.getPlatformInterface();
1253	tcu::TestLog&							log						= context.getTestContext().getLog();
1254	tcu::ResultCollector					resultCollector			(log);
1255	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1256	const InstanceDriver&					instanceDriver			(instance.getDriver());
1257	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1258	const deUint32							queueFamilyIndex		= 0;
1259	const deUint32							queueCount				= 1;
1260	const float								queuePriority			= 1.0f;
1261	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1262	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1263	int										numErrors				= 0;
1264	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1265	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1266
1267	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1268	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1269
1270	// Only non-core extensions will be used when creating the device.
1271	const auto& extensionNames = context.getDeviceCreationExtensions();
1272	DE_UNREF(extensionNames); // In some cases this is not used.
1273
1274	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderClockFeaturesKHR>()))
1275	{
1276		static const Feature features[] =
1277		{
1278		FEATURE_ITEM (VkPhysicalDeviceShaderClockFeaturesKHR, shaderSubgroupClock),
1279		FEATURE_ITEM (VkPhysicalDeviceShaderClockFeaturesKHR, shaderDeviceClock),
1280		};
1281		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR*>(featuresStruct);
1282		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1283	}
1284
1285	if (numErrors > 0)
1286		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1287	else
1288		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1289}
1290
1291
1292tcu::TestStatus createDeviceWithUnsupportedFeaturesTestIndexTypeUint8FeaturesEXT (Context& context)
1293{
1294	const PlatformInterface&				vkp						= context.getPlatformInterface();
1295	tcu::TestLog&							log						= context.getTestContext().getLog();
1296	tcu::ResultCollector					resultCollector			(log);
1297	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1298	const InstanceDriver&					instanceDriver			(instance.getDriver());
1299	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1300	const deUint32							queueFamilyIndex		= 0;
1301	const deUint32							queueCount				= 1;
1302	const float								queuePriority			= 1.0f;
1303	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1304	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1305	int										numErrors				= 0;
1306	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1307	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1308
1309	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1310	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1311
1312	// Only non-core extensions will be used when creating the device.
1313	const auto& extensionNames = context.getDeviceCreationExtensions();
1314	DE_UNREF(extensionNames); // In some cases this is not used.
1315
1316	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>()))
1317	{
1318		static const Feature features[] =
1319		{
1320		FEATURE_ITEM (VkPhysicalDeviceIndexTypeUint8FeaturesEXT, indexTypeUint8),
1321		};
1322		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(featuresStruct);
1323		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1324	}
1325
1326	if (numErrors > 0)
1327		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1328	else
1329		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1330}
1331
1332
1333tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentShaderInterlockFeaturesEXT (Context& context)
1334{
1335	const PlatformInterface&				vkp						= context.getPlatformInterface();
1336	tcu::TestLog&							log						= context.getTestContext().getLog();
1337	tcu::ResultCollector					resultCollector			(log);
1338	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1339	const InstanceDriver&					instanceDriver			(instance.getDriver());
1340	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1341	const deUint32							queueFamilyIndex		= 0;
1342	const deUint32							queueCount				= 1;
1343	const float								queuePriority			= 1.0f;
1344	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1345	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1346	int										numErrors				= 0;
1347	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1348	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1349
1350	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1351	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1352
1353	// Only non-core extensions will be used when creating the device.
1354	const auto& extensionNames = context.getDeviceCreationExtensions();
1355	DE_UNREF(extensionNames); // In some cases this is not used.
1356
1357	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>()))
1358	{
1359		static const Feature features[] =
1360		{
1361		FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderSampleInterlock),
1362		FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderPixelInterlock),
1363		FEATURE_ITEM (VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT, fragmentShaderShadingRateInterlock),
1364		};
1365		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(featuresStruct);
1366		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1367	}
1368
1369	if (numErrors > 0)
1370		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1371	else
1372		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1373}
1374
1375
1376tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSeparateDepthStencilLayoutsFeatures (Context& context)
1377{
1378	const PlatformInterface&				vkp						= context.getPlatformInterface();
1379	tcu::TestLog&							log						= context.getTestContext().getLog();
1380	tcu::ResultCollector					resultCollector			(log);
1381	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1382	const InstanceDriver&					instanceDriver			(instance.getDriver());
1383	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1384	const deUint32							queueFamilyIndex		= 0;
1385	const deUint32							queueCount				= 1;
1386	const float								queuePriority			= 1.0f;
1387	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1388	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1389	int										numErrors				= 0;
1390	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1391	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1392
1393	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1394	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1395
1396	// Only non-core extensions will be used when creating the device.
1397	const auto& extensionNames = context.getDeviceCreationExtensions();
1398	DE_UNREF(extensionNames); // In some cases this is not used.
1399
1400	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>()))
1401	{
1402		static const Feature features[] =
1403		{
1404		FEATURE_ITEM (VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures, separateDepthStencilLayouts),
1405		};
1406		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(featuresStruct);
1407		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1408	}
1409
1410	if (numErrors > 0)
1411		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1412	else
1413		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1414}
1415
1416
1417tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderDemoteToHelperInvocationFeaturesEXT (Context& context)
1418{
1419	const PlatformInterface&				vkp						= context.getPlatformInterface();
1420	tcu::TestLog&							log						= context.getTestContext().getLog();
1421	tcu::ResultCollector					resultCollector			(log);
1422	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1423	const InstanceDriver&					instanceDriver			(instance.getDriver());
1424	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1425	const deUint32							queueFamilyIndex		= 0;
1426	const deUint32							queueCount				= 1;
1427	const float								queuePriority			= 1.0f;
1428	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1429	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1430	int										numErrors				= 0;
1431	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1432	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1433
1434	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1435	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1436
1437	// Only non-core extensions will be used when creating the device.
1438	const auto& extensionNames = context.getDeviceCreationExtensions();
1439	DE_UNREF(extensionNames); // In some cases this is not used.
1440
1441	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>()))
1442	{
1443		static const Feature features[] =
1444		{
1445		FEATURE_ITEM (VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT, shaderDemoteToHelperInvocation),
1446		};
1447		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(featuresStruct);
1448		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1449	}
1450
1451	if (numErrors > 0)
1452		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1453	else
1454		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1455}
1456
1457
1458tcu::TestStatus createDeviceWithUnsupportedFeaturesTestTexelBufferAlignmentFeaturesEXT (Context& context)
1459{
1460	const PlatformInterface&				vkp						= context.getPlatformInterface();
1461	tcu::TestLog&							log						= context.getTestContext().getLog();
1462	tcu::ResultCollector					resultCollector			(log);
1463	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1464	const InstanceDriver&					instanceDriver			(instance.getDriver());
1465	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1466	const deUint32							queueFamilyIndex		= 0;
1467	const deUint32							queueCount				= 1;
1468	const float								queuePriority			= 1.0f;
1469	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1470	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1471	int										numErrors				= 0;
1472	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1473	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1474
1475	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1476	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1477
1478	// Only non-core extensions will be used when creating the device.
1479	const auto& extensionNames = context.getDeviceCreationExtensions();
1480	DE_UNREF(extensionNames); // In some cases this is not used.
1481
1482	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>()))
1483	{
1484		static const Feature features[] =
1485		{
1486		FEATURE_ITEM (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT, texelBufferAlignment),
1487		};
1488		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(featuresStruct);
1489		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1490	}
1491
1492	if (numErrors > 0)
1493		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1494	else
1495		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1496}
1497
1498
1499tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSubgroupSizeControlFeaturesEXT (Context& context)
1500{
1501	const PlatformInterface&				vkp						= context.getPlatformInterface();
1502	tcu::TestLog&							log						= context.getTestContext().getLog();
1503	tcu::ResultCollector					resultCollector			(log);
1504	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1505	const InstanceDriver&					instanceDriver			(instance.getDriver());
1506	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1507	const deUint32							queueFamilyIndex		= 0;
1508	const deUint32							queueCount				= 1;
1509	const float								queuePriority			= 1.0f;
1510	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1511	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1512	int										numErrors				= 0;
1513	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1514	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1515
1516	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1517	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1518
1519	// Only non-core extensions will be used when creating the device.
1520	const auto& extensionNames = context.getDeviceCreationExtensions();
1521	DE_UNREF(extensionNames); // In some cases this is not used.
1522
1523	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>()))
1524	{
1525		static const Feature features[] =
1526		{
1527		FEATURE_ITEM (VkPhysicalDeviceSubgroupSizeControlFeaturesEXT, subgroupSizeControl),
1528		FEATURE_ITEM (VkPhysicalDeviceSubgroupSizeControlFeaturesEXT, computeFullSubgroups),
1529		};
1530		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(featuresStruct);
1531		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1532	}
1533
1534	if (numErrors > 0)
1535		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1536	else
1537		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1538}
1539
1540
1541tcu::TestStatus createDeviceWithUnsupportedFeaturesTestLineRasterizationFeaturesEXT (Context& context)
1542{
1543	const PlatformInterface&				vkp						= context.getPlatformInterface();
1544	tcu::TestLog&							log						= context.getTestContext().getLog();
1545	tcu::ResultCollector					resultCollector			(log);
1546	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1547	const InstanceDriver&					instanceDriver			(instance.getDriver());
1548	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1549	const deUint32							queueFamilyIndex		= 0;
1550	const deUint32							queueCount				= 1;
1551	const float								queuePriority			= 1.0f;
1552	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1553	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1554	int										numErrors				= 0;
1555	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1556	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1557
1558	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1559	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1560
1561	// Only non-core extensions will be used when creating the device.
1562	const auto& extensionNames = context.getDeviceCreationExtensions();
1563	DE_UNREF(extensionNames); // In some cases this is not used.
1564
1565	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceLineRasterizationFeaturesEXT>()))
1566	{
1567		static const Feature features[] =
1568		{
1569		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, rectangularLines),
1570		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, bresenhamLines),
1571		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, smoothLines),
1572		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledRectangularLines),
1573		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledBresenhamLines),
1574		FEATURE_ITEM (VkPhysicalDeviceLineRasterizationFeaturesEXT, stippledSmoothLines),
1575		};
1576		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(featuresStruct);
1577		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 6, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1578	}
1579
1580	if (numErrors > 0)
1581		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1582	else
1583		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1584}
1585
1586
1587tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkan11Features (Context& context)
1588{
1589	const PlatformInterface&				vkp						= context.getPlatformInterface();
1590	tcu::TestLog&							log						= context.getTestContext().getLog();
1591	tcu::ResultCollector					resultCollector			(log);
1592	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1593	const InstanceDriver&					instanceDriver			(instance.getDriver());
1594	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1595	const deUint32							queueFamilyIndex		= 0;
1596	const deUint32							queueCount				= 1;
1597	const float								queuePriority			= 1.0f;
1598	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1599	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1600	int										numErrors				= 0;
1601	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1602	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1603
1604	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1605	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1606
1607	// Only non-core extensions will be used when creating the device.
1608	const auto& extensionNames = context.getDeviceCreationExtensions();
1609	DE_UNREF(extensionNames); // In some cases this is not used.
1610
1611	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVulkan11Features>()))
1612	{
1613		static const Feature features[] =
1614		{
1615		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storageBuffer16BitAccess),
1616		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, uniformAndStorageBuffer16BitAccess),
1617		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storagePushConstant16),
1618		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, storageInputOutput16),
1619		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiview),
1620		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiviewGeometryShader),
1621		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, multiviewTessellationShader),
1622		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, variablePointersStorageBuffer),
1623		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, variablePointers),
1624		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, protectedMemory),
1625		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, samplerYcbcrConversion),
1626		FEATURE_ITEM (VkPhysicalDeviceVulkan11Features, shaderDrawParameters),
1627		};
1628		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVulkan11Features*>(featuresStruct);
1629		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 12, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1630	}
1631
1632	if (numErrors > 0)
1633		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1634	else
1635		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1636}
1637
1638
1639tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkan12Features (Context& context)
1640{
1641	const PlatformInterface&				vkp						= context.getPlatformInterface();
1642	tcu::TestLog&							log						= context.getTestContext().getLog();
1643	tcu::ResultCollector					resultCollector			(log);
1644	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1645	const InstanceDriver&					instanceDriver			(instance.getDriver());
1646	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1647	const deUint32							queueFamilyIndex		= 0;
1648	const deUint32							queueCount				= 1;
1649	const float								queuePriority			= 1.0f;
1650	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1651	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1652	int										numErrors				= 0;
1653	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1654	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1655
1656	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1657	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1658
1659	// Only non-core extensions will be used when creating the device.
1660	const auto& extensionNames = context.getDeviceCreationExtensions();
1661	DE_UNREF(extensionNames); // In some cases this is not used.
1662
1663	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVulkan12Features>()))
1664	{
1665		static const Feature features[] =
1666		{
1667		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, samplerMirrorClampToEdge),
1668		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, drawIndirectCount),
1669		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, storageBuffer8BitAccess),
1670		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, uniformAndStorageBuffer8BitAccess),
1671		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, storagePushConstant8),
1672		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderBufferInt64Atomics),
1673		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSharedInt64Atomics),
1674		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderFloat16),
1675		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInt8),
1676		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorIndexing),
1677		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInputAttachmentArrayDynamicIndexing),
1678		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformTexelBufferArrayDynamicIndexing),
1679		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageTexelBufferArrayDynamicIndexing),
1680		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformBufferArrayNonUniformIndexing),
1681		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSampledImageArrayNonUniformIndexing),
1682		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageBufferArrayNonUniformIndexing),
1683		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageImageArrayNonUniformIndexing),
1684		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderInputAttachmentArrayNonUniformIndexing),
1685		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderUniformTexelBufferArrayNonUniformIndexing),
1686		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderStorageTexelBufferArrayNonUniformIndexing),
1687		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUniformBufferUpdateAfterBind),
1688		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingSampledImageUpdateAfterBind),
1689		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageImageUpdateAfterBind),
1690		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageBufferUpdateAfterBind),
1691		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUniformTexelBufferUpdateAfterBind),
1692		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingStorageTexelBufferUpdateAfterBind),
1693		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingUpdateUnusedWhilePending),
1694		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingPartiallyBound),
1695		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, descriptorBindingVariableDescriptorCount),
1696		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, runtimeDescriptorArray),
1697		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, samplerFilterMinmax),
1698		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, scalarBlockLayout),
1699		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, imagelessFramebuffer),
1700		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, uniformBufferStandardLayout),
1701		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderSubgroupExtendedTypes),
1702		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, separateDepthStencilLayouts),
1703		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, hostQueryReset),
1704		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, timelineSemaphore),
1705		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddress),
1706		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddressCaptureReplay),
1707		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, bufferDeviceAddressMultiDevice),
1708		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModel),
1709		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModelDeviceScope),
1710		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, vulkanMemoryModelAvailabilityVisibilityChains),
1711		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderOutputViewportIndex),
1712		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, shaderOutputLayer),
1713		FEATURE_ITEM (VkPhysicalDeviceVulkan12Features, subgroupBroadcastDynamicId),
1714		};
1715		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVulkan12Features*>(featuresStruct);
1716		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 47, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1717	}
1718
1719	if (numErrors > 0)
1720		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1721	else
1722		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1723}
1724
1725
1726tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkan13Features (Context& context)
1727{
1728	const PlatformInterface&				vkp						= context.getPlatformInterface();
1729	tcu::TestLog&							log						= context.getTestContext().getLog();
1730	tcu::ResultCollector					resultCollector			(log);
1731	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1732	const InstanceDriver&					instanceDriver			(instance.getDriver());
1733	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1734	const deUint32							queueFamilyIndex		= 0;
1735	const deUint32							queueCount				= 1;
1736	const float								queuePriority			= 1.0f;
1737	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1738	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1739	int										numErrors				= 0;
1740	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1741	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1742
1743	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1744	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1745
1746	// Only non-core extensions will be used when creating the device.
1747	const auto& extensionNames = context.getDeviceCreationExtensions();
1748	DE_UNREF(extensionNames); // In some cases this is not used.
1749
1750	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVulkan13Features>()))
1751	{
1752		static const Feature features[] =
1753		{
1754		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, robustImageAccess),
1755		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, inlineUniformBlock),
1756		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, descriptorBindingInlineUniformBlockUpdateAfterBind),
1757		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, pipelineCreationCacheControl),
1758		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, privateData),
1759		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderDemoteToHelperInvocation),
1760		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderTerminateInvocation),
1761		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, subgroupSizeControl),
1762		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, computeFullSubgroups),
1763		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, synchronization2),
1764		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, textureCompressionASTC_HDR),
1765		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderZeroInitializeWorkgroupMemory),
1766		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, dynamicRendering),
1767		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, shaderIntegerDotProduct),
1768		FEATURE_ITEM (VkPhysicalDeviceVulkan13Features, maintenance4),
1769		};
1770		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVulkan13Features*>(featuresStruct);
1771		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 15, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, DE_NULL, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1772	}
1773
1774	if (numErrors > 0)
1775		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1776	else
1777		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1778}
1779
1780
1781tcu::TestStatus createDeviceWithUnsupportedFeaturesTestCustomBorderColorFeaturesEXT (Context& context)
1782{
1783	const PlatformInterface&				vkp						= context.getPlatformInterface();
1784	tcu::TestLog&							log						= context.getTestContext().getLog();
1785	tcu::ResultCollector					resultCollector			(log);
1786	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1787	const InstanceDriver&					instanceDriver			(instance.getDriver());
1788	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1789	const deUint32							queueFamilyIndex		= 0;
1790	const deUint32							queueCount				= 1;
1791	const float								queuePriority			= 1.0f;
1792	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1793	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1794	int										numErrors				= 0;
1795	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1796	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1797
1798	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1799	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1800
1801	// Only non-core extensions will be used when creating the device.
1802	const auto& extensionNames = context.getDeviceCreationExtensions();
1803	DE_UNREF(extensionNames); // In some cases this is not used.
1804
1805	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceCustomBorderColorFeaturesEXT>()))
1806	{
1807		static const Feature features[] =
1808		{
1809		FEATURE_ITEM (VkPhysicalDeviceCustomBorderColorFeaturesEXT, customBorderColors),
1810		FEATURE_ITEM (VkPhysicalDeviceCustomBorderColorFeaturesEXT, customBorderColorWithoutFormat),
1811		};
1812		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(featuresStruct);
1813		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1814	}
1815
1816	if (numErrors > 0)
1817		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1818	else
1819		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1820}
1821
1822
1823tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExtendedDynamicStateFeaturesEXT (Context& context)
1824{
1825	const PlatformInterface&				vkp						= context.getPlatformInterface();
1826	tcu::TestLog&							log						= context.getTestContext().getLog();
1827	tcu::ResultCollector					resultCollector			(log);
1828	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1829	const InstanceDriver&					instanceDriver			(instance.getDriver());
1830	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1831	const deUint32							queueFamilyIndex		= 0;
1832	const deUint32							queueCount				= 1;
1833	const float								queuePriority			= 1.0f;
1834	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1835	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1836	int										numErrors				= 0;
1837	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1838	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1839
1840	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1841	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1842
1843	// Only non-core extensions will be used when creating the device.
1844	const auto& extensionNames = context.getDeviceCreationExtensions();
1845	DE_UNREF(extensionNames); // In some cases this is not used.
1846
1847	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>()))
1848	{
1849		static const Feature features[] =
1850		{
1851		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicStateFeaturesEXT, extendedDynamicState),
1852		};
1853		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(featuresStruct);
1854		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1855	}
1856
1857	if (numErrors > 0)
1858		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1859	else
1860		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1861}
1862
1863
1864tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExtendedDynamicState2FeaturesEXT (Context& context)
1865{
1866	const PlatformInterface&				vkp						= context.getPlatformInterface();
1867	tcu::TestLog&							log						= context.getTestContext().getLog();
1868	tcu::ResultCollector					resultCollector			(log);
1869	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1870	const InstanceDriver&					instanceDriver			(instance.getDriver());
1871	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1872	const deUint32							queueFamilyIndex		= 0;
1873	const deUint32							queueCount				= 1;
1874	const float								queuePriority			= 1.0f;
1875	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1876	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1877	int										numErrors				= 0;
1878	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1879	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1880
1881	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1882	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1883
1884	// Only non-core extensions will be used when creating the device.
1885	const auto& extensionNames = context.getDeviceCreationExtensions();
1886	DE_UNREF(extensionNames); // In some cases this is not used.
1887
1888	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>()))
1889	{
1890		static const Feature features[] =
1891		{
1892		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2),
1893		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2LogicOp),
1894		FEATURE_ITEM (VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, extendedDynamicState2PatchControlPoints),
1895		};
1896		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT*>(featuresStruct);
1897		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1898	}
1899
1900	if (numErrors > 0)
1901		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1902	else
1903		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1904}
1905
1906
1907tcu::TestStatus createDeviceWithUnsupportedFeaturesTestRobustness2FeaturesEXT (Context& context)
1908{
1909	const PlatformInterface&				vkp						= context.getPlatformInterface();
1910	tcu::TestLog&							log						= context.getTestContext().getLog();
1911	tcu::ResultCollector					resultCollector			(log);
1912	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1913	const InstanceDriver&					instanceDriver			(instance.getDriver());
1914	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1915	const deUint32							queueFamilyIndex		= 0;
1916	const deUint32							queueCount				= 1;
1917	const float								queuePriority			= 1.0f;
1918	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1919	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1920	int										numErrors				= 0;
1921	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1922	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1923
1924	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1925	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1926
1927	// Only non-core extensions will be used when creating the device.
1928	const auto& extensionNames = context.getDeviceCreationExtensions();
1929	DE_UNREF(extensionNames); // In some cases this is not used.
1930
1931	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceRobustness2FeaturesEXT>()))
1932	{
1933		static const Feature features[] =
1934		{
1935		FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, robustBufferAccess2),
1936		FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, robustImageAccess2),
1937		FEATURE_ITEM (VkPhysicalDeviceRobustness2FeaturesEXT, nullDescriptor),
1938		};
1939		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT*>(featuresStruct);
1940		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1941	}
1942
1943	if (numErrors > 0)
1944		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1945	else
1946		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1947}
1948
1949
1950tcu::TestStatus createDeviceWithUnsupportedFeaturesTestImageRobustnessFeaturesEXT (Context& context)
1951{
1952	const PlatformInterface&				vkp						= context.getPlatformInterface();
1953	tcu::TestLog&							log						= context.getTestContext().getLog();
1954	tcu::ResultCollector					resultCollector			(log);
1955	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1956	const InstanceDriver&					instanceDriver			(instance.getDriver());
1957	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1958	const deUint32							queueFamilyIndex		= 0;
1959	const deUint32							queueCount				= 1;
1960	const float								queuePriority			= 1.0f;
1961	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
1962	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
1963	int										numErrors				= 0;
1964	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
1965	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
1966
1967	VkPhysicalDeviceFeatures emptyDeviceFeatures;
1968	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
1969
1970	// Only non-core extensions will be used when creating the device.
1971	const auto& extensionNames = context.getDeviceCreationExtensions();
1972	DE_UNREF(extensionNames); // In some cases this is not used.
1973
1974	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceImageRobustnessFeaturesEXT>()))
1975	{
1976		static const Feature features[] =
1977		{
1978		FEATURE_ITEM (VkPhysicalDeviceImageRobustnessFeaturesEXT, robustImageAccess),
1979		};
1980		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeaturesEXT*>(featuresStruct);
1981		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
1982	}
1983
1984	if (numErrors > 0)
1985		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
1986	else
1987		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
1988}
1989
1990
1991tcu::TestStatus createDeviceWithUnsupportedFeaturesTest4444FormatsFeaturesEXT (Context& context)
1992{
1993	const PlatformInterface&				vkp						= context.getPlatformInterface();
1994	tcu::TestLog&							log						= context.getTestContext().getLog();
1995	tcu::ResultCollector					resultCollector			(log);
1996	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
1997	const InstanceDriver&					instanceDriver			(instance.getDriver());
1998	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
1999	const deUint32							queueFamilyIndex		= 0;
2000	const deUint32							queueCount				= 1;
2001	const float								queuePriority			= 1.0f;
2002	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2003	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2004	int										numErrors				= 0;
2005	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2006	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
2007
2008	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2009	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2010
2011	// Only non-core extensions will be used when creating the device.
2012	const auto& extensionNames = context.getDeviceCreationExtensions();
2013	DE_UNREF(extensionNames); // In some cases this is not used.
2014
2015	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDevice4444FormatsFeaturesEXT>()))
2016	{
2017		static const Feature features[] =
2018		{
2019		FEATURE_ITEM (VkPhysicalDevice4444FormatsFeaturesEXT, formatA4R4G4B4),
2020		FEATURE_ITEM (VkPhysicalDevice4444FormatsFeaturesEXT, formatA4B4G4R4),
2021		};
2022		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT*>(featuresStruct);
2023		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
2024	}
2025
2026	if (numErrors > 0)
2027		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2028	else
2029		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2030}
2031
2032
2033tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderImageAtomicInt64FeaturesEXT (Context& context)
2034{
2035	const PlatformInterface&				vkp						= context.getPlatformInterface();
2036	tcu::TestLog&							log						= context.getTestContext().getLog();
2037	tcu::ResultCollector					resultCollector			(log);
2038	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2039	const InstanceDriver&					instanceDriver			(instance.getDriver());
2040	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2041	const deUint32							queueFamilyIndex		= 0;
2042	const deUint32							queueCount				= 1;
2043	const float								queuePriority			= 1.0f;
2044	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2045	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2046	int										numErrors				= 0;
2047	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2048	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
2049
2050	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2051	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2052
2053	// Only non-core extensions will be used when creating the device.
2054	const auto& extensionNames = context.getDeviceCreationExtensions();
2055	DE_UNREF(extensionNames); // In some cases this is not used.
2056
2057	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>()))
2058	{
2059		static const Feature features[] =
2060		{
2061		FEATURE_ITEM (VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT, shaderImageInt64Atomics),
2062		FEATURE_ITEM (VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT, sparseImageInt64Atomics),
2063		};
2064		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(featuresStruct);
2065		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 2, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
2066	}
2067
2068	if (numErrors > 0)
2069		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2070	else
2071		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2072}
2073
2074
2075tcu::TestStatus createDeviceWithUnsupportedFeaturesTestFragmentShadingRateFeaturesKHR (Context& context)
2076{
2077	const PlatformInterface&				vkp						= context.getPlatformInterface();
2078	tcu::TestLog&							log						= context.getTestContext().getLog();
2079	tcu::ResultCollector					resultCollector			(log);
2080	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2081	const InstanceDriver&					instanceDriver			(instance.getDriver());
2082	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2083	const deUint32							queueFamilyIndex		= 0;
2084	const deUint32							queueCount				= 1;
2085	const float								queuePriority			= 1.0f;
2086	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2087	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2088	int										numErrors				= 0;
2089	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2090	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
2091
2092	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2093	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2094
2095	// Only non-core extensions will be used when creating the device.
2096	const auto& extensionNames = context.getDeviceCreationExtensions();
2097	DE_UNREF(extensionNames); // In some cases this is not used.
2098
2099	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>()))
2100	{
2101		static const Feature features[] =
2102		{
2103		FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, pipelineFragmentShadingRate),
2104		FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, primitiveFragmentShadingRate),
2105		FEATURE_ITEM (VkPhysicalDeviceFragmentShadingRateFeaturesKHR, attachmentFragmentShadingRate),
2106		};
2107		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(featuresStruct);
2108		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 3, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
2109	}
2110
2111	if (numErrors > 0)
2112		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2113	else
2114		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2115}
2116
2117
2118tcu::TestStatus createDeviceWithUnsupportedFeaturesTestShaderTerminateInvocationFeaturesKHR (Context& context)
2119{
2120	const PlatformInterface&				vkp						= context.getPlatformInterface();
2121	tcu::TestLog&							log						= context.getTestContext().getLog();
2122	tcu::ResultCollector					resultCollector			(log);
2123	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2124	const InstanceDriver&					instanceDriver			(instance.getDriver());
2125	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2126	const deUint32							queueFamilyIndex		= 0;
2127	const deUint32							queueCount				= 1;
2128	const float								queuePriority			= 1.0f;
2129	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2130	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2131	int										numErrors				= 0;
2132	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2133	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
2134
2135	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2136	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2137
2138	// Only non-core extensions will be used when creating the device.
2139	const auto& extensionNames = context.getDeviceCreationExtensions();
2140	DE_UNREF(extensionNames); // In some cases this is not used.
2141
2142	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>()))
2143	{
2144		static const Feature features[] =
2145		{
2146		FEATURE_ITEM (VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR, shaderTerminateInvocation),
2147		};
2148		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(featuresStruct);
2149		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
2150	}
2151
2152	if (numErrors > 0)
2153		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2154	else
2155		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2156}
2157
2158
2159tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVertexInputDynamicStateFeaturesEXT (Context& context)
2160{
2161	const PlatformInterface&				vkp						= context.getPlatformInterface();
2162	tcu::TestLog&							log						= context.getTestContext().getLog();
2163	tcu::ResultCollector					resultCollector			(log);
2164	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2165	const InstanceDriver&					instanceDriver			(instance.getDriver());
2166	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2167	const deUint32							queueFamilyIndex		= 0;
2168	const deUint32							queueCount				= 1;
2169	const float								queuePriority			= 1.0f;
2170	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2171	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2172	int										numErrors				= 0;
2173	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2174	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
2175
2176	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2177	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2178
2179	// Only non-core extensions will be used when creating the device.
2180	const auto& extensionNames = context.getDeviceCreationExtensions();
2181	DE_UNREF(extensionNames); // In some cases this is not used.
2182
2183	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT>()))
2184	{
2185		static const Feature features[] =
2186		{
2187		FEATURE_ITEM (VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT, vertexInputDynamicState),
2188		};
2189		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT*>(featuresStruct);
2190		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
2191	}
2192
2193	if (numErrors > 0)
2194		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2195	else
2196		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2197}
2198
2199
2200tcu::TestStatus createDeviceWithUnsupportedFeaturesTestColorWriteEnableFeaturesEXT (Context& context)
2201{
2202	const PlatformInterface&				vkp						= context.getPlatformInterface();
2203	tcu::TestLog&							log						= context.getTestContext().getLog();
2204	tcu::ResultCollector					resultCollector			(log);
2205	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2206	const InstanceDriver&					instanceDriver			(instance.getDriver());
2207	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2208	const deUint32							queueFamilyIndex		= 0;
2209	const deUint32							queueCount				= 1;
2210	const float								queuePriority			= 1.0f;
2211	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2212	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2213	int										numErrors				= 0;
2214	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2215	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
2216
2217	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2218	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2219
2220	// Only non-core extensions will be used when creating the device.
2221	const auto& extensionNames = context.getDeviceCreationExtensions();
2222	DE_UNREF(extensionNames); // In some cases this is not used.
2223
2224	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceColorWriteEnableFeaturesEXT>()))
2225	{
2226		static const Feature features[] =
2227		{
2228		FEATURE_ITEM (VkPhysicalDeviceColorWriteEnableFeaturesEXT, colorWriteEnable),
2229		};
2230		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceColorWriteEnableFeaturesEXT*>(featuresStruct);
2231		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
2232	}
2233
2234	if (numErrors > 0)
2235		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2236	else
2237		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2238}
2239
2240
2241tcu::TestStatus createDeviceWithUnsupportedFeaturesTestSynchronization2FeaturesKHR (Context& context)
2242{
2243	const PlatformInterface&				vkp						= context.getPlatformInterface();
2244	tcu::TestLog&							log						= context.getTestContext().getLog();
2245	tcu::ResultCollector					resultCollector			(log);
2246	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2247	const InstanceDriver&					instanceDriver			(instance.getDriver());
2248	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2249	const deUint32							queueFamilyIndex		= 0;
2250	const deUint32							queueCount				= 1;
2251	const float								queuePriority			= 1.0f;
2252	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2253	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2254	int										numErrors				= 0;
2255	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2256	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
2257
2258	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2259	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2260
2261	// Only non-core extensions will be used when creating the device.
2262	const auto& extensionNames = context.getDeviceCreationExtensions();
2263	DE_UNREF(extensionNames); // In some cases this is not used.
2264
2265	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceSynchronization2FeaturesKHR>()))
2266	{
2267		static const Feature features[] =
2268		{
2269		FEATURE_ITEM (VkPhysicalDeviceSynchronization2FeaturesKHR, synchronization2),
2270		};
2271		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceSynchronization2FeaturesKHR*>(featuresStruct);
2272		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
2273	}
2274
2275	if (numErrors > 0)
2276		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2277	else
2278		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2279}
2280
2281
2282tcu::TestStatus createDeviceWithUnsupportedFeaturesTestVulkanSC10Features (Context& context)
2283{
2284	const PlatformInterface&				vkp						= context.getPlatformInterface();
2285	tcu::TestLog&							log						= context.getTestContext().getLog();
2286	tcu::ResultCollector					resultCollector			(log);
2287	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2288	const InstanceDriver&					instanceDriver			(instance.getDriver());
2289	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2290	const deUint32							queueFamilyIndex		= 0;
2291	const deUint32							queueCount				= 1;
2292	const float								queuePriority			= 1.0f;
2293	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2294	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2295	int										numErrors				= 0;
2296	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2297	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
2298
2299	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2300	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2301
2302	// Only non-core extensions will be used when creating the device.
2303	const auto& extensionNames = context.getDeviceCreationExtensions();
2304	DE_UNREF(extensionNames); // In some cases this is not used.
2305
2306	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceVulkanSC10Features>()))
2307	{
2308		static const Feature features[] =
2309		{
2310		FEATURE_ITEM (VkPhysicalDeviceVulkanSC10Features, shaderAtomicInstructions),
2311		};
2312		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceVulkanSC10Features*>(featuresStruct);
2313		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
2314	}
2315
2316	if (numErrors > 0)
2317		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2318	else
2319		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2320}
2321
2322
2323tcu::TestStatus createDeviceWithUnsupportedFeaturesTestYcbcr2Plane444FormatsFeaturesEXT (Context& context)
2324{
2325	const PlatformInterface&				vkp						= context.getPlatformInterface();
2326	tcu::TestLog&							log						= context.getTestContext().getLog();
2327	tcu::ResultCollector					resultCollector			(log);
2328	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2329	const InstanceDriver&					instanceDriver			(instance.getDriver());
2330	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2331	const deUint32							queueFamilyIndex		= 0;
2332	const deUint32							queueCount				= 1;
2333	const float								queuePriority			= 1.0f;
2334	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2335	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2336	int										numErrors				= 0;
2337	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2338	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
2339
2340	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2341	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2342
2343	// Only non-core extensions will be used when creating the device.
2344	const auto& extensionNames = context.getDeviceCreationExtensions();
2345	DE_UNREF(extensionNames); // In some cases this is not used.
2346
2347	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>()))
2348	{
2349		static const Feature features[] =
2350		{
2351		FEATURE_ITEM (VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT, ycbcr2plane444Formats),
2352		};
2353		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT*>(featuresStruct);
2354		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
2355	}
2356
2357	if (numErrors > 0)
2358		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2359	else
2360		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2361}
2362
2363
2364tcu::TestStatus createDeviceWithUnsupportedFeaturesTestExternalMemoryScreenBufferFeaturesQNX (Context& context)
2365{
2366	const PlatformInterface&				vkp						= context.getPlatformInterface();
2367	tcu::TestLog&							log						= context.getTestContext().getLog();
2368	tcu::ResultCollector					resultCollector			(log);
2369	const CustomInstance					instance				(createCustomInstanceWithExtensions(context, context.getInstanceExtensions(), DE_NULL, true));
2370	const InstanceDriver&					instanceDriver			(instance.getDriver());
2371	const VkPhysicalDevice					physicalDevice			= chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine());
2372	const deUint32							queueFamilyIndex		= 0;
2373	const deUint32							queueCount				= 1;
2374	const float								queuePriority			= 1.0f;
2375	const DeviceFeatures					deviceFeaturesAll		(context.getInstanceInterface(), context.getUsedApiVersion(), physicalDevice, context.getInstanceExtensions(), context.getDeviceExtensions(), DE_TRUE);
2376	const VkPhysicalDeviceFeatures2			deviceFeatures2			= deviceFeaturesAll.getCoreFeatures2();
2377	int										numErrors				= 0;
2378	bool                                                                    isSubProcess                    = context.getTestContext().getCommandLine().isSubProcess();
2379	VkDeviceObjectReservationCreateInfo memReservationStatMax = context.getResourceInterface()->getStatMax();
2380
2381	VkPhysicalDeviceFeatures emptyDeviceFeatures;
2382	deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
2383
2384	// Only non-core extensions will be used when creating the device.
2385	const auto& extensionNames = context.getDeviceCreationExtensions();
2386	DE_UNREF(extensionNames); // In some cases this is not used.
2387
2388	if (const void* featuresStruct = findStructureInChain(const_cast<const void*>(deviceFeatures2.pNext), getStructureType<VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX>()))
2389	{
2390		static const Feature features[] =
2391		{
2392		FEATURE_ITEM (VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX, screenBufferImport),
2393		};
2394		auto* supportedFeatures = reinterpret_cast<const VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX*>(featuresStruct);
2395		checkFeatures(vkp, instance, instanceDriver, physicalDevice, 1, features, supportedFeatures, queueFamilyIndex, queueCount, queuePriority, numErrors, resultCollector, &extensionNames, emptyDeviceFeatures, memReservationStatMax, isSubProcess, context.getUsedApiVersion());
2396	}
2397
2398	if (numErrors > 0)
2399		return tcu::TestStatus(resultCollector.getResult(), "Enabling unsupported features didn't return VK_ERROR_FEATURE_NOT_PRESENT.");
2400	else
2401		return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage());
2402}
2403
2404
2405void addSeparateUnsupportedFeatureTests (tcu::TestCaseGroup* testGroup)
2406{
2407
2408	addFunctionCase(testGroup, "external_memory_sci_buf_features_nv", createDeviceWithUnsupportedFeaturesTestExternalMemorySciBufFeaturesNV);
2409	addFunctionCase(testGroup, "variable_pointers_features", createDeviceWithUnsupportedFeaturesTestVariablePointersFeatures);
2410	addFunctionCase(testGroup, "external_sci_sync_features_nv", createDeviceWithUnsupportedFeaturesTestExternalSciSyncFeaturesNV);
2411	addFunctionCase(testGroup, "external_sci_sync2_features_nv", createDeviceWithUnsupportedFeaturesTestExternalSciSync2FeaturesNV);
2412	addFunctionCase(testGroup, "multiview_features", createDeviceWithUnsupportedFeaturesTestMultiviewFeatures);
2413	addFunctionCase(testGroup, "16_bit_storage_features", createDeviceWithUnsupportedFeaturesTest16BitStorageFeatures);
2414	addFunctionCase(testGroup, "shader_subgroup_extended_types_features", createDeviceWithUnsupportedFeaturesTestShaderSubgroupExtendedTypesFeatures);
2415	addFunctionCase(testGroup, "sampler_ycbcr_conversion_features", createDeviceWithUnsupportedFeaturesTestSamplerYcbcrConversionFeatures);
2416	addFunctionCase(testGroup, "protected_memory_features", createDeviceWithUnsupportedFeaturesTestProtectedMemoryFeatures);
2417	addFunctionCase(testGroup, "blend_operation_advanced_features_ext", createDeviceWithUnsupportedFeaturesTestBlendOperationAdvancedFeaturesEXT);
2418	addFunctionCase(testGroup, "shader_draw_parameters_features", createDeviceWithUnsupportedFeaturesTestShaderDrawParametersFeatures);
2419	addFunctionCase(testGroup, "shader_float16_int8_features", createDeviceWithUnsupportedFeaturesTestShaderFloat16Int8Features);
2420	addFunctionCase(testGroup, "host_query_reset_features", createDeviceWithUnsupportedFeaturesTestHostQueryResetFeatures);
2421	addFunctionCase(testGroup, "descriptor_indexing_features", createDeviceWithUnsupportedFeaturesTestDescriptorIndexingFeatures);
2422	addFunctionCase(testGroup, "timeline_semaphore_features", createDeviceWithUnsupportedFeaturesTestTimelineSemaphoreFeatures);
2423	addFunctionCase(testGroup, "8_bit_storage_features", createDeviceWithUnsupportedFeaturesTest8BitStorageFeatures);
2424	addFunctionCase(testGroup, "vulkan_memory_model_features", createDeviceWithUnsupportedFeaturesTestVulkanMemoryModelFeatures);
2425	addFunctionCase(testGroup, "shader_atomic_int64_features", createDeviceWithUnsupportedFeaturesTestShaderAtomicInt64Features);
2426	addFunctionCase(testGroup, "shader_atomic_float_features_ext", createDeviceWithUnsupportedFeaturesTestShaderAtomicFloatFeaturesEXT);
2427	addFunctionCase(testGroup, "vertex_attribute_divisor_features_ext", createDeviceWithUnsupportedFeaturesTestVertexAttributeDivisorFeaturesEXT);
2428	addFunctionCase(testGroup, "astc_decode_features_ext", createDeviceWithUnsupportedFeaturesTestASTCDecodeFeaturesEXT);
2429	addFunctionCase(testGroup, "scalar_block_layout_features", createDeviceWithUnsupportedFeaturesTestScalarBlockLayoutFeatures);
2430	addFunctionCase(testGroup, "uniform_buffer_standard_layout_features", createDeviceWithUnsupportedFeaturesTestUniformBufferStandardLayoutFeatures);
2431	addFunctionCase(testGroup, "depth_clip_enable_features_ext", createDeviceWithUnsupportedFeaturesTestDepthClipEnableFeaturesEXT);
2432	addFunctionCase(testGroup, "buffer_device_address_features", createDeviceWithUnsupportedFeaturesTestBufferDeviceAddressFeatures);
2433	addFunctionCase(testGroup, "imageless_framebuffer_features", createDeviceWithUnsupportedFeaturesTestImagelessFramebufferFeatures);
2434	addFunctionCase(testGroup, "texture_compression_astchdr_features_ext", createDeviceWithUnsupportedFeaturesTestTextureCompressionASTCHDRFeaturesEXT);
2435	addFunctionCase(testGroup, "ycbcr_image_arrays_features_ext", createDeviceWithUnsupportedFeaturesTestYcbcrImageArraysFeaturesEXT);
2436	addFunctionCase(testGroup, "performance_query_features_khr", createDeviceWithUnsupportedFeaturesTestPerformanceQueryFeaturesKHR);
2437	addFunctionCase(testGroup, "shader_clock_features_khr", createDeviceWithUnsupportedFeaturesTestShaderClockFeaturesKHR);
2438	addFunctionCase(testGroup, "index_type_uint8_features_ext", createDeviceWithUnsupportedFeaturesTestIndexTypeUint8FeaturesEXT);
2439	addFunctionCase(testGroup, "fragment_shader_interlock_features_ext", createDeviceWithUnsupportedFeaturesTestFragmentShaderInterlockFeaturesEXT);
2440	addFunctionCase(testGroup, "separate_depth_stencil_layouts_features", createDeviceWithUnsupportedFeaturesTestSeparateDepthStencilLayoutsFeatures);
2441	addFunctionCase(testGroup, "shader_demote_to_helper_invocation_features_ext", createDeviceWithUnsupportedFeaturesTestShaderDemoteToHelperInvocationFeaturesEXT);
2442	addFunctionCase(testGroup, "texel_buffer_alignment_features_ext", createDeviceWithUnsupportedFeaturesTestTexelBufferAlignmentFeaturesEXT);
2443	addFunctionCase(testGroup, "subgroup_size_control_features_ext", createDeviceWithUnsupportedFeaturesTestSubgroupSizeControlFeaturesEXT);
2444	addFunctionCase(testGroup, "line_rasterization_features_ext", createDeviceWithUnsupportedFeaturesTestLineRasterizationFeaturesEXT);
2445	addFunctionCase(testGroup, "vulkan11_features", createDeviceWithUnsupportedFeaturesTestVulkan11Features);
2446	addFunctionCase(testGroup, "vulkan12_features", createDeviceWithUnsupportedFeaturesTestVulkan12Features);
2447	addFunctionCase(testGroup, "vulkan13_features", createDeviceWithUnsupportedFeaturesTestVulkan13Features);
2448	addFunctionCase(testGroup, "custom_border_color_features_ext", createDeviceWithUnsupportedFeaturesTestCustomBorderColorFeaturesEXT);
2449	addFunctionCase(testGroup, "extended_dynamic_state_features_ext", createDeviceWithUnsupportedFeaturesTestExtendedDynamicStateFeaturesEXT);
2450	addFunctionCase(testGroup, "extended_dynamic_state2_features_ext", createDeviceWithUnsupportedFeaturesTestExtendedDynamicState2FeaturesEXT);
2451	addFunctionCase(testGroup, "robustness2_features_ext", createDeviceWithUnsupportedFeaturesTestRobustness2FeaturesEXT);
2452	addFunctionCase(testGroup, "image_robustness_features_ext", createDeviceWithUnsupportedFeaturesTestImageRobustnessFeaturesEXT);
2453	addFunctionCase(testGroup, "4444_formats_features_ext", createDeviceWithUnsupportedFeaturesTest4444FormatsFeaturesEXT);
2454	addFunctionCase(testGroup, "shader_image_atomic_int64_features_ext", createDeviceWithUnsupportedFeaturesTestShaderImageAtomicInt64FeaturesEXT);
2455	addFunctionCase(testGroup, "fragment_shading_rate_features_khr", createDeviceWithUnsupportedFeaturesTestFragmentShadingRateFeaturesKHR);
2456	addFunctionCase(testGroup, "shader_terminate_invocation_features_khr", createDeviceWithUnsupportedFeaturesTestShaderTerminateInvocationFeaturesKHR);
2457	addFunctionCase(testGroup, "vertex_input_dynamic_state_features_ext", createDeviceWithUnsupportedFeaturesTestVertexInputDynamicStateFeaturesEXT);
2458	addFunctionCase(testGroup, "color_write_enable_features_ext", createDeviceWithUnsupportedFeaturesTestColorWriteEnableFeaturesEXT);
2459	addFunctionCase(testGroup, "synchronization2_features_khr", createDeviceWithUnsupportedFeaturesTestSynchronization2FeaturesKHR);
2460	addFunctionCase(testGroup, "vulkan_sc10_features", createDeviceWithUnsupportedFeaturesTestVulkanSC10Features);
2461	addFunctionCase(testGroup, "ycbcr2_plane444_formats_features_ext", createDeviceWithUnsupportedFeaturesTestYcbcr2Plane444FormatsFeaturesEXT);
2462	addFunctionCase(testGroup, "external_memory_screen_buffer_features_qnx", createDeviceWithUnsupportedFeaturesTestExternalMemoryScreenBufferFeaturesQNX);
2463}
2464
2465