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
6 tcu::TestStatus testPhysicalDeviceFeaturePrivateDataFeatures (Context& context)
8 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
9 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
10 const InstanceDriver& vki (instance.getDriver());
12 TestLog& log = context.getTestContext().getLog();
13 VkPhysicalDeviceFeatures2 extFeatures;
14 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
16 VkPhysicalDevicePrivateDataFeatures devicePrivateDataFeatures[count];
17 const bool isPrivateDataFeatures = checkExtension(properties, "VK_EXT_private_data") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
19 for (int ndx = 0; ndx < count; ++ndx)
21 deMemset(&devicePrivateDataFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePrivateDataFeatures));
22 devicePrivateDataFeatures[ndx].sType = isPrivateDataFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
23 devicePrivateDataFeatures[ndx].pNext = DE_NULL;
25 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
26 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
27 extFeatures.pNext = &devicePrivateDataFeatures[ndx];
29 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
32 if (isPrivateDataFeatures)
33 log << TestLog::Message << devicePrivateDataFeatures[0] << TestLog::EndMessage;
35 if (isPrivateDataFeatures &&
36 (devicePrivateDataFeatures[0].privateData != devicePrivateDataFeatures[1].privateData))
38 TCU_FAIL("Mismatch between VkPhysicalDevicePrivateDataFeatures");
40 return tcu::TestStatus::pass("Querying succeeded");
43 tcu::TestStatus testPhysicalDeviceFeatureVariablePointersFeatures (Context& context)
45 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
46 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
47 const InstanceDriver& vki (instance.getDriver());
49 TestLog& log = context.getTestContext().getLog();
50 VkPhysicalDeviceFeatures2 extFeatures;
51 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
53 VkPhysicalDeviceVariablePointersFeatures deviceVariablePointersFeatures[count];
54 const bool isVariablePointersFeatures = checkExtension(properties, "VK_KHR_variable_pointers") || context.contextSupports(vk::ApiVersion(0, 1, 1, 0));
56 for (int ndx = 0; ndx < count; ++ndx)
58 deMemset(&deviceVariablePointersFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVariablePointersFeatures));
59 deviceVariablePointersFeatures[ndx].sType = isVariablePointersFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
60 deviceVariablePointersFeatures[ndx].pNext = DE_NULL;
62 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
63 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
64 extFeatures.pNext = &deviceVariablePointersFeatures[ndx];
66 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
69 if (isVariablePointersFeatures)
70 log << TestLog::Message << deviceVariablePointersFeatures[0] << TestLog::EndMessage;
72 if (isVariablePointersFeatures &&
73 (deviceVariablePointersFeatures[0].variablePointersStorageBuffer != deviceVariablePointersFeatures[1].variablePointersStorageBuffer ||
74 deviceVariablePointersFeatures[0].variablePointers != deviceVariablePointersFeatures[1].variablePointers))
76 TCU_FAIL("Mismatch between VkPhysicalDeviceVariablePointersFeatures");
78 return tcu::TestStatus::pass("Querying succeeded");
81 tcu::TestStatus testPhysicalDeviceFeatureMultiviewFeatures (Context& context)
83 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
84 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
85 const InstanceDriver& vki (instance.getDriver());
87 TestLog& log = context.getTestContext().getLog();
88 VkPhysicalDeviceFeatures2 extFeatures;
89 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
91 VkPhysicalDeviceMultiviewFeatures deviceMultiviewFeatures[count];
92 const bool isMultiviewFeatures = checkExtension(properties, "VK_KHR_multiview") || context.contextSupports(vk::ApiVersion(0, 1, 1, 0));
94 for (int ndx = 0; ndx < count; ++ndx)
96 deMemset(&deviceMultiviewFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMultiviewFeatures));
97 deviceMultiviewFeatures[ndx].sType = isMultiviewFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
98 deviceMultiviewFeatures[ndx].pNext = DE_NULL;
100 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
101 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
102 extFeatures.pNext = &deviceMultiviewFeatures[ndx];
104 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
107 if (isMultiviewFeatures)
108 log << TestLog::Message << deviceMultiviewFeatures[0] << TestLog::EndMessage;
110 if (isMultiviewFeatures &&
111 (deviceMultiviewFeatures[0].multiview != deviceMultiviewFeatures[1].multiview ||
112 deviceMultiviewFeatures[0].multiviewGeometryShader != deviceMultiviewFeatures[1].multiviewGeometryShader ||
113 deviceMultiviewFeatures[0].multiviewTessellationShader != deviceMultiviewFeatures[1].multiviewTessellationShader))
115 TCU_FAIL("Mismatch between VkPhysicalDeviceMultiviewFeatures");
117 return tcu::TestStatus::pass("Querying succeeded");
120 tcu::TestStatus testPhysicalDeviceFeaturePresentIdFeaturesKHR (Context& context)
122 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
123 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
124 const InstanceDriver& vki (instance.getDriver());
125 const int count = 2u;
126 TestLog& log = context.getTestContext().getLog();
127 VkPhysicalDeviceFeatures2 extFeatures;
128 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
130 VkPhysicalDevicePresentIdFeaturesKHR devicePresentIdFeaturesKHR[count];
131 const bool isPresentIdFeaturesKHR = checkExtension(properties, "VK_KHR_present_id");
133 for (int ndx = 0; ndx < count; ++ndx)
135 deMemset(&devicePresentIdFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePresentIdFeaturesKHR));
136 devicePresentIdFeaturesKHR[ndx].sType = isPresentIdFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
137 devicePresentIdFeaturesKHR[ndx].pNext = DE_NULL;
139 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
140 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
141 extFeatures.pNext = &devicePresentIdFeaturesKHR[ndx];
143 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
146 if (isPresentIdFeaturesKHR)
147 log << TestLog::Message << devicePresentIdFeaturesKHR[0] << TestLog::EndMessage;
149 if (isPresentIdFeaturesKHR &&
150 (devicePresentIdFeaturesKHR[0].presentId != devicePresentIdFeaturesKHR[1].presentId))
152 TCU_FAIL("Mismatch between VkPhysicalDevicePresentIdFeaturesKHR");
154 return tcu::TestStatus::pass("Querying succeeded");
157 tcu::TestStatus testPhysicalDeviceFeaturePresentWaitFeaturesKHR (Context& context)
159 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
160 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
161 const InstanceDriver& vki (instance.getDriver());
162 const int count = 2u;
163 TestLog& log = context.getTestContext().getLog();
164 VkPhysicalDeviceFeatures2 extFeatures;
165 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
167 VkPhysicalDevicePresentWaitFeaturesKHR devicePresentWaitFeaturesKHR[count];
168 const bool isPresentWaitFeaturesKHR = checkExtension(properties, "VK_KHR_present_wait");
170 for (int ndx = 0; ndx < count; ++ndx)
172 deMemset(&devicePresentWaitFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePresentWaitFeaturesKHR));
173 devicePresentWaitFeaturesKHR[ndx].sType = isPresentWaitFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
174 devicePresentWaitFeaturesKHR[ndx].pNext = DE_NULL;
176 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
177 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
178 extFeatures.pNext = &devicePresentWaitFeaturesKHR[ndx];
180 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
183 if (isPresentWaitFeaturesKHR)
184 log << TestLog::Message << devicePresentWaitFeaturesKHR[0] << TestLog::EndMessage;
186 if (isPresentWaitFeaturesKHR &&
187 (devicePresentWaitFeaturesKHR[0].presentWait != devicePresentWaitFeaturesKHR[1].presentWait))
189 TCU_FAIL("Mismatch between VkPhysicalDevicePresentWaitFeaturesKHR");
191 return tcu::TestStatus::pass("Querying succeeded");
194 tcu::TestStatus testPhysicalDeviceFeature16BitStorageFeatures (Context& context)
196 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
197 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
198 const InstanceDriver& vki (instance.getDriver());
199 const int count = 2u;
200 TestLog& log = context.getTestContext().getLog();
201 VkPhysicalDeviceFeatures2 extFeatures;
202 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
204 VkPhysicalDevice16BitStorageFeatures device16BitStorageFeatures[count];
205 const bool is16BitStorageFeatures = checkExtension(properties, "VK_KHR_16bit_storage") || context.contextSupports(vk::ApiVersion(0, 1, 1, 0));
207 for (int ndx = 0; ndx < count; ++ndx)
209 deMemset(&device16BitStorageFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDevice16BitStorageFeatures));
210 device16BitStorageFeatures[ndx].sType = is16BitStorageFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
211 device16BitStorageFeatures[ndx].pNext = DE_NULL;
213 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
214 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
215 extFeatures.pNext = &device16BitStorageFeatures[ndx];
217 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
220 if (is16BitStorageFeatures)
221 log << TestLog::Message << device16BitStorageFeatures[0] << TestLog::EndMessage;
223 if (is16BitStorageFeatures &&
224 (device16BitStorageFeatures[0].storageBuffer16BitAccess != device16BitStorageFeatures[1].storageBuffer16BitAccess ||
225 device16BitStorageFeatures[0].uniformAndStorageBuffer16BitAccess != device16BitStorageFeatures[1].uniformAndStorageBuffer16BitAccess ||
226 device16BitStorageFeatures[0].storagePushConstant16 != device16BitStorageFeatures[1].storagePushConstant16 ||
227 device16BitStorageFeatures[0].storageInputOutput16 != device16BitStorageFeatures[1].storageInputOutput16))
229 TCU_FAIL("Mismatch between VkPhysicalDevice16BitStorageFeatures");
231 return tcu::TestStatus::pass("Querying succeeded");
234 tcu::TestStatus testPhysicalDeviceFeatureShaderSubgroupExtendedTypesFeatures (Context& context)
236 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
237 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
238 const InstanceDriver& vki (instance.getDriver());
239 const int count = 2u;
240 TestLog& log = context.getTestContext().getLog();
241 VkPhysicalDeviceFeatures2 extFeatures;
242 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
244 VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures deviceShaderSubgroupExtendedTypesFeatures[count];
245 const bool isShaderSubgroupExtendedTypesFeatures = checkExtension(properties, "VK_KHR_shader_subgroup_extended_types") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
247 for (int ndx = 0; ndx < count; ++ndx)
249 deMemset(&deviceShaderSubgroupExtendedTypesFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures));
250 deviceShaderSubgroupExtendedTypesFeatures[ndx].sType = isShaderSubgroupExtendedTypesFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
251 deviceShaderSubgroupExtendedTypesFeatures[ndx].pNext = DE_NULL;
253 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
254 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
255 extFeatures.pNext = &deviceShaderSubgroupExtendedTypesFeatures[ndx];
257 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
260 if (isShaderSubgroupExtendedTypesFeatures)
261 log << TestLog::Message << deviceShaderSubgroupExtendedTypesFeatures[0] << TestLog::EndMessage;
263 if (isShaderSubgroupExtendedTypesFeatures &&
264 (deviceShaderSubgroupExtendedTypesFeatures[0].shaderSubgroupExtendedTypes != deviceShaderSubgroupExtendedTypesFeatures[1].shaderSubgroupExtendedTypes))
266 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures");
268 return tcu::TestStatus::pass("Querying succeeded");
271 tcu::TestStatus testPhysicalDeviceFeatureSamplerYcbcrConversionFeatures (Context& context)
273 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
274 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
275 const InstanceDriver& vki (instance.getDriver());
276 const int count = 2u;
277 TestLog& log = context.getTestContext().getLog();
278 VkPhysicalDeviceFeatures2 extFeatures;
279 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
281 VkPhysicalDeviceSamplerYcbcrConversionFeatures deviceSamplerYcbcrConversionFeatures[count];
282 const bool isSamplerYcbcrConversionFeatures = checkExtension(properties, "VK_KHR_sampler_ycbcr_conversion") || context.contextSupports(vk::ApiVersion(0, 1, 1, 0));
284 for (int ndx = 0; ndx < count; ++ndx)
286 deMemset(&deviceSamplerYcbcrConversionFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceSamplerYcbcrConversionFeatures));
287 deviceSamplerYcbcrConversionFeatures[ndx].sType = isSamplerYcbcrConversionFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
288 deviceSamplerYcbcrConversionFeatures[ndx].pNext = DE_NULL;
290 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
291 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
292 extFeatures.pNext = &deviceSamplerYcbcrConversionFeatures[ndx];
294 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
297 if (isSamplerYcbcrConversionFeatures)
298 log << TestLog::Message << deviceSamplerYcbcrConversionFeatures[0] << TestLog::EndMessage;
300 if (isSamplerYcbcrConversionFeatures &&
301 (deviceSamplerYcbcrConversionFeatures[0].samplerYcbcrConversion != deviceSamplerYcbcrConversionFeatures[1].samplerYcbcrConversion))
303 TCU_FAIL("Mismatch between VkPhysicalDeviceSamplerYcbcrConversionFeatures");
305 return tcu::TestStatus::pass("Querying succeeded");
308 tcu::TestStatus testPhysicalDeviceFeatureProtectedMemoryFeatures (Context& context)
310 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
311 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
312 const InstanceDriver& vki (instance.getDriver());
313 const int count = 2u;
314 TestLog& log = context.getTestContext().getLog();
315 VkPhysicalDeviceFeatures2 extFeatures;
316 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
318 VkPhysicalDeviceProtectedMemoryFeatures deviceProtectedMemoryFeatures[count];
319 const bool isProtectedMemoryFeatures = context.contextSupports(vk::ApiVersion(0, 1, 1, 0));
321 for (int ndx = 0; ndx < count; ++ndx)
323 deMemset(&deviceProtectedMemoryFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceProtectedMemoryFeatures));
324 deviceProtectedMemoryFeatures[ndx].sType = isProtectedMemoryFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
325 deviceProtectedMemoryFeatures[ndx].pNext = DE_NULL;
327 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
328 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
329 extFeatures.pNext = &deviceProtectedMemoryFeatures[ndx];
331 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
334 if (isProtectedMemoryFeatures)
335 log << TestLog::Message << deviceProtectedMemoryFeatures[0] << TestLog::EndMessage;
337 if (isProtectedMemoryFeatures &&
338 (deviceProtectedMemoryFeatures[0].protectedMemory != deviceProtectedMemoryFeatures[1].protectedMemory))
340 TCU_FAIL("Mismatch between VkPhysicalDeviceProtectedMemoryFeatures");
342 return tcu::TestStatus::pass("Querying succeeded");
345 tcu::TestStatus testPhysicalDeviceFeatureBlendOperationAdvancedFeaturesEXT (Context& context)
347 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
348 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
349 const InstanceDriver& vki (instance.getDriver());
350 const int count = 2u;
351 TestLog& log = context.getTestContext().getLog();
352 VkPhysicalDeviceFeatures2 extFeatures;
353 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
355 VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT deviceBlendOperationAdvancedFeaturesEXT[count];
356 const bool isBlendOperationAdvancedFeaturesEXT = checkExtension(properties, "VK_EXT_blend_operation_advanced");
358 for (int ndx = 0; ndx < count; ++ndx)
360 deMemset(&deviceBlendOperationAdvancedFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT));
361 deviceBlendOperationAdvancedFeaturesEXT[ndx].sType = isBlendOperationAdvancedFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
362 deviceBlendOperationAdvancedFeaturesEXT[ndx].pNext = DE_NULL;
364 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
365 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
366 extFeatures.pNext = &deviceBlendOperationAdvancedFeaturesEXT[ndx];
368 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
371 if (isBlendOperationAdvancedFeaturesEXT)
372 log << TestLog::Message << deviceBlendOperationAdvancedFeaturesEXT[0] << TestLog::EndMessage;
374 if (isBlendOperationAdvancedFeaturesEXT &&
375 (deviceBlendOperationAdvancedFeaturesEXT[0].advancedBlendCoherentOperations != deviceBlendOperationAdvancedFeaturesEXT[1].advancedBlendCoherentOperations))
377 TCU_FAIL("Mismatch between VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT");
379 return tcu::TestStatus::pass("Querying succeeded");
382 tcu::TestStatus testPhysicalDeviceFeatureMultiDrawFeaturesEXT (Context& context)
384 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
385 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
386 const InstanceDriver& vki (instance.getDriver());
387 const int count = 2u;
388 TestLog& log = context.getTestContext().getLog();
389 VkPhysicalDeviceFeatures2 extFeatures;
390 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
392 VkPhysicalDeviceMultiDrawFeaturesEXT deviceMultiDrawFeaturesEXT[count];
393 const bool isMultiDrawFeaturesEXT = checkExtension(properties, "VK_EXT_multi_draw");
395 for (int ndx = 0; ndx < count; ++ndx)
397 deMemset(&deviceMultiDrawFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMultiDrawFeaturesEXT));
398 deviceMultiDrawFeaturesEXT[ndx].sType = isMultiDrawFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
399 deviceMultiDrawFeaturesEXT[ndx].pNext = DE_NULL;
401 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
402 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
403 extFeatures.pNext = &deviceMultiDrawFeaturesEXT[ndx];
405 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
408 if (isMultiDrawFeaturesEXT)
409 log << TestLog::Message << deviceMultiDrawFeaturesEXT[0] << TestLog::EndMessage;
411 if (isMultiDrawFeaturesEXT &&
412 (deviceMultiDrawFeaturesEXT[0].multiDraw != deviceMultiDrawFeaturesEXT[1].multiDraw))
414 TCU_FAIL("Mismatch between VkPhysicalDeviceMultiDrawFeaturesEXT");
416 return tcu::TestStatus::pass("Querying succeeded");
419 tcu::TestStatus testPhysicalDeviceFeatureInlineUniformBlockFeatures (Context& context)
421 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
422 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
423 const InstanceDriver& vki (instance.getDriver());
424 const int count = 2u;
425 TestLog& log = context.getTestContext().getLog();
426 VkPhysicalDeviceFeatures2 extFeatures;
427 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
429 VkPhysicalDeviceInlineUniformBlockFeatures deviceInlineUniformBlockFeatures[count];
430 const bool isInlineUniformBlockFeatures = checkExtension(properties, "VK_EXT_inline_uniform_block") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
432 for (int ndx = 0; ndx < count; ++ndx)
434 deMemset(&deviceInlineUniformBlockFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceInlineUniformBlockFeatures));
435 deviceInlineUniformBlockFeatures[ndx].sType = isInlineUniformBlockFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
436 deviceInlineUniformBlockFeatures[ndx].pNext = DE_NULL;
438 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
439 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
440 extFeatures.pNext = &deviceInlineUniformBlockFeatures[ndx];
442 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
445 if (isInlineUniformBlockFeatures)
446 log << TestLog::Message << deviceInlineUniformBlockFeatures[0] << TestLog::EndMessage;
448 if (isInlineUniformBlockFeatures &&
449 (deviceInlineUniformBlockFeatures[0].inlineUniformBlock != deviceInlineUniformBlockFeatures[1].inlineUniformBlock ||
450 deviceInlineUniformBlockFeatures[0].descriptorBindingInlineUniformBlockUpdateAfterBind != deviceInlineUniformBlockFeatures[1].descriptorBindingInlineUniformBlockUpdateAfterBind))
452 TCU_FAIL("Mismatch between VkPhysicalDeviceInlineUniformBlockFeatures");
454 return tcu::TestStatus::pass("Querying succeeded");
457 tcu::TestStatus testPhysicalDeviceFeatureMaintenance4Features (Context& context)
459 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
460 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
461 const InstanceDriver& vki (instance.getDriver());
462 const int count = 2u;
463 TestLog& log = context.getTestContext().getLog();
464 VkPhysicalDeviceFeatures2 extFeatures;
465 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
467 VkPhysicalDeviceMaintenance4Features deviceMaintenance4Features[count];
468 const bool isMaintenance4Features = checkExtension(properties, "VK_KHR_maintenance4") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
470 for (int ndx = 0; ndx < count; ++ndx)
472 deMemset(&deviceMaintenance4Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMaintenance4Features));
473 deviceMaintenance4Features[ndx].sType = isMaintenance4Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
474 deviceMaintenance4Features[ndx].pNext = DE_NULL;
476 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
477 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
478 extFeatures.pNext = &deviceMaintenance4Features[ndx];
480 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
483 if (isMaintenance4Features)
484 log << TestLog::Message << deviceMaintenance4Features[0] << TestLog::EndMessage;
486 if (isMaintenance4Features &&
487 (deviceMaintenance4Features[0].maintenance4 != deviceMaintenance4Features[1].maintenance4))
489 TCU_FAIL("Mismatch between VkPhysicalDeviceMaintenance4Features");
491 return tcu::TestStatus::pass("Querying succeeded");
494 tcu::TestStatus testPhysicalDeviceFeatureShaderDrawParametersFeatures (Context& context)
496 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
497 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
498 const InstanceDriver& vki (instance.getDriver());
499 const int count = 2u;
500 TestLog& log = context.getTestContext().getLog();
501 VkPhysicalDeviceFeatures2 extFeatures;
502 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
504 VkPhysicalDeviceShaderDrawParametersFeatures deviceShaderDrawParametersFeatures[count];
505 const bool isShaderDrawParametersFeatures = context.contextSupports(vk::ApiVersion(0, 1, 1, 0));
507 for (int ndx = 0; ndx < count; ++ndx)
509 deMemset(&deviceShaderDrawParametersFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderDrawParametersFeatures));
510 deviceShaderDrawParametersFeatures[ndx].sType = isShaderDrawParametersFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
511 deviceShaderDrawParametersFeatures[ndx].pNext = DE_NULL;
513 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
514 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
515 extFeatures.pNext = &deviceShaderDrawParametersFeatures[ndx];
517 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
520 if (isShaderDrawParametersFeatures)
521 log << TestLog::Message << deviceShaderDrawParametersFeatures[0] << TestLog::EndMessage;
523 if (isShaderDrawParametersFeatures &&
524 (deviceShaderDrawParametersFeatures[0].shaderDrawParameters != deviceShaderDrawParametersFeatures[1].shaderDrawParameters))
526 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderDrawParametersFeatures");
528 return tcu::TestStatus::pass("Querying succeeded");
531 tcu::TestStatus testPhysicalDeviceFeatureShaderFloat16Int8Features (Context& context)
533 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
534 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
535 const InstanceDriver& vki (instance.getDriver());
536 const int count = 2u;
537 TestLog& log = context.getTestContext().getLog();
538 VkPhysicalDeviceFeatures2 extFeatures;
539 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
541 VkPhysicalDeviceShaderFloat16Int8Features deviceShaderFloat16Int8Features[count];
542 const bool isShaderFloat16Int8Features = checkExtension(properties, "VK_KHR_shader_float16_int8") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
544 for (int ndx = 0; ndx < count; ++ndx)
546 deMemset(&deviceShaderFloat16Int8Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderFloat16Int8Features));
547 deviceShaderFloat16Int8Features[ndx].sType = isShaderFloat16Int8Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
548 deviceShaderFloat16Int8Features[ndx].pNext = DE_NULL;
550 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
551 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
552 extFeatures.pNext = &deviceShaderFloat16Int8Features[ndx];
554 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
557 if (isShaderFloat16Int8Features)
558 log << TestLog::Message << deviceShaderFloat16Int8Features[0] << TestLog::EndMessage;
560 if (isShaderFloat16Int8Features &&
561 (deviceShaderFloat16Int8Features[0].shaderFloat16 != deviceShaderFloat16Int8Features[1].shaderFloat16 ||
562 deviceShaderFloat16Int8Features[0].shaderInt8 != deviceShaderFloat16Int8Features[1].shaderInt8))
564 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderFloat16Int8Features");
566 return tcu::TestStatus::pass("Querying succeeded");
569 tcu::TestStatus testPhysicalDeviceFeatureHostQueryResetFeatures (Context& context)
571 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
572 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
573 const InstanceDriver& vki (instance.getDriver());
574 const int count = 2u;
575 TestLog& log = context.getTestContext().getLog();
576 VkPhysicalDeviceFeatures2 extFeatures;
577 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
579 VkPhysicalDeviceHostQueryResetFeatures deviceHostQueryResetFeatures[count];
580 const bool isHostQueryResetFeatures = checkExtension(properties, "VK_EXT_host_query_reset") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
582 for (int ndx = 0; ndx < count; ++ndx)
584 deMemset(&deviceHostQueryResetFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceHostQueryResetFeatures));
585 deviceHostQueryResetFeatures[ndx].sType = isHostQueryResetFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
586 deviceHostQueryResetFeatures[ndx].pNext = DE_NULL;
588 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
589 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
590 extFeatures.pNext = &deviceHostQueryResetFeatures[ndx];
592 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
595 if (isHostQueryResetFeatures)
596 log << TestLog::Message << deviceHostQueryResetFeatures[0] << TestLog::EndMessage;
598 if (isHostQueryResetFeatures &&
599 (deviceHostQueryResetFeatures[0].hostQueryReset != deviceHostQueryResetFeatures[1].hostQueryReset))
601 TCU_FAIL("Mismatch between VkPhysicalDeviceHostQueryResetFeatures");
603 return tcu::TestStatus::pass("Querying succeeded");
606 tcu::TestStatus testPhysicalDeviceFeatureGlobalPriorityQueryFeaturesKHR (Context& context)
608 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
609 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
610 const InstanceDriver& vki (instance.getDriver());
611 const int count = 2u;
612 TestLog& log = context.getTestContext().getLog();
613 VkPhysicalDeviceFeatures2 extFeatures;
614 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
616 VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR deviceGlobalPriorityQueryFeaturesKHR[count];
617 const bool isGlobalPriorityQueryFeaturesKHR = checkExtension(properties, "VK_KHR_global_priority");
619 for (int ndx = 0; ndx < count; ++ndx)
621 deMemset(&deviceGlobalPriorityQueryFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR));
622 deviceGlobalPriorityQueryFeaturesKHR[ndx].sType = isGlobalPriorityQueryFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
623 deviceGlobalPriorityQueryFeaturesKHR[ndx].pNext = DE_NULL;
625 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
626 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
627 extFeatures.pNext = &deviceGlobalPriorityQueryFeaturesKHR[ndx];
629 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
632 if (isGlobalPriorityQueryFeaturesKHR)
633 log << TestLog::Message << deviceGlobalPriorityQueryFeaturesKHR[0] << TestLog::EndMessage;
635 if (isGlobalPriorityQueryFeaturesKHR &&
636 (deviceGlobalPriorityQueryFeaturesKHR[0].globalPriorityQuery != deviceGlobalPriorityQueryFeaturesKHR[1].globalPriorityQuery))
638 TCU_FAIL("Mismatch between VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR");
640 return tcu::TestStatus::pass("Querying succeeded");
643 tcu::TestStatus testPhysicalDeviceFeatureDeviceMemoryReportFeaturesEXT (Context& context)
645 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
646 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
647 const InstanceDriver& vki (instance.getDriver());
648 const int count = 2u;
649 TestLog& log = context.getTestContext().getLog();
650 VkPhysicalDeviceFeatures2 extFeatures;
651 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
653 VkPhysicalDeviceDeviceMemoryReportFeaturesEXT deviceDeviceMemoryReportFeaturesEXT[count];
654 const bool isDeviceMemoryReportFeaturesEXT = checkExtension(properties, "VK_EXT_device_memory_report");
656 for (int ndx = 0; ndx < count; ++ndx)
658 deMemset(&deviceDeviceMemoryReportFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDeviceMemoryReportFeaturesEXT));
659 deviceDeviceMemoryReportFeaturesEXT[ndx].sType = isDeviceMemoryReportFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
660 deviceDeviceMemoryReportFeaturesEXT[ndx].pNext = DE_NULL;
662 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
663 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
664 extFeatures.pNext = &deviceDeviceMemoryReportFeaturesEXT[ndx];
666 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
669 if (isDeviceMemoryReportFeaturesEXT)
670 log << TestLog::Message << deviceDeviceMemoryReportFeaturesEXT[0] << TestLog::EndMessage;
672 if (isDeviceMemoryReportFeaturesEXT &&
673 (deviceDeviceMemoryReportFeaturesEXT[0].deviceMemoryReport != deviceDeviceMemoryReportFeaturesEXT[1].deviceMemoryReport))
675 TCU_FAIL("Mismatch between VkPhysicalDeviceDeviceMemoryReportFeaturesEXT");
677 return tcu::TestStatus::pass("Querying succeeded");
680 tcu::TestStatus testPhysicalDeviceFeatureDescriptorIndexingFeatures (Context& context)
682 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
683 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
684 const InstanceDriver& vki (instance.getDriver());
685 const int count = 2u;
686 TestLog& log = context.getTestContext().getLog();
687 VkPhysicalDeviceFeatures2 extFeatures;
688 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
690 VkPhysicalDeviceDescriptorIndexingFeatures deviceDescriptorIndexingFeatures[count];
691 const bool isDescriptorIndexingFeatures = checkExtension(properties, "VK_EXT_descriptor_indexing") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
693 for (int ndx = 0; ndx < count; ++ndx)
695 deMemset(&deviceDescriptorIndexingFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDescriptorIndexingFeatures));
696 deviceDescriptorIndexingFeatures[ndx].sType = isDescriptorIndexingFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
697 deviceDescriptorIndexingFeatures[ndx].pNext = DE_NULL;
699 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
700 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
701 extFeatures.pNext = &deviceDescriptorIndexingFeatures[ndx];
703 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
706 if (isDescriptorIndexingFeatures)
707 log << TestLog::Message << deviceDescriptorIndexingFeatures[0] << TestLog::EndMessage;
709 if (isDescriptorIndexingFeatures &&
710 (deviceDescriptorIndexingFeatures[0].shaderInputAttachmentArrayDynamicIndexing != deviceDescriptorIndexingFeatures[1].shaderInputAttachmentArrayDynamicIndexing ||
711 deviceDescriptorIndexingFeatures[0].shaderUniformTexelBufferArrayDynamicIndexing != deviceDescriptorIndexingFeatures[1].shaderUniformTexelBufferArrayDynamicIndexing ||
712 deviceDescriptorIndexingFeatures[0].shaderStorageTexelBufferArrayDynamicIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageTexelBufferArrayDynamicIndexing ||
713 deviceDescriptorIndexingFeatures[0].shaderUniformBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderUniformBufferArrayNonUniformIndexing ||
714 deviceDescriptorIndexingFeatures[0].shaderSampledImageArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderSampledImageArrayNonUniformIndexing ||
715 deviceDescriptorIndexingFeatures[0].shaderStorageBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageBufferArrayNonUniformIndexing ||
716 deviceDescriptorIndexingFeatures[0].shaderStorageImageArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageImageArrayNonUniformIndexing ||
717 deviceDescriptorIndexingFeatures[0].shaderInputAttachmentArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderInputAttachmentArrayNonUniformIndexing ||
718 deviceDescriptorIndexingFeatures[0].shaderUniformTexelBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderUniformTexelBufferArrayNonUniformIndexing ||
719 deviceDescriptorIndexingFeatures[0].shaderStorageTexelBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageTexelBufferArrayNonUniformIndexing ||
720 deviceDescriptorIndexingFeatures[0].descriptorBindingUniformBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingUniformBufferUpdateAfterBind ||
721 deviceDescriptorIndexingFeatures[0].descriptorBindingSampledImageUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingSampledImageUpdateAfterBind ||
722 deviceDescriptorIndexingFeatures[0].descriptorBindingStorageImageUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingStorageImageUpdateAfterBind ||
723 deviceDescriptorIndexingFeatures[0].descriptorBindingStorageBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingStorageBufferUpdateAfterBind ||
724 deviceDescriptorIndexingFeatures[0].descriptorBindingUniformTexelBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingUniformTexelBufferUpdateAfterBind ||
725 deviceDescriptorIndexingFeatures[0].descriptorBindingStorageTexelBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingStorageTexelBufferUpdateAfterBind ||
726 deviceDescriptorIndexingFeatures[0].descriptorBindingUpdateUnusedWhilePending != deviceDescriptorIndexingFeatures[1].descriptorBindingUpdateUnusedWhilePending ||
727 deviceDescriptorIndexingFeatures[0].descriptorBindingPartiallyBound != deviceDescriptorIndexingFeatures[1].descriptorBindingPartiallyBound ||
728 deviceDescriptorIndexingFeatures[0].descriptorBindingVariableDescriptorCount != deviceDescriptorIndexingFeatures[1].descriptorBindingVariableDescriptorCount ||
729 deviceDescriptorIndexingFeatures[0].runtimeDescriptorArray != deviceDescriptorIndexingFeatures[1].runtimeDescriptorArray))
731 TCU_FAIL("Mismatch between VkPhysicalDeviceDescriptorIndexingFeatures");
733 return tcu::TestStatus::pass("Querying succeeded");
736 tcu::TestStatus testPhysicalDeviceFeatureTimelineSemaphoreFeatures (Context& context)
738 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
739 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
740 const InstanceDriver& vki (instance.getDriver());
741 const int count = 2u;
742 TestLog& log = context.getTestContext().getLog();
743 VkPhysicalDeviceFeatures2 extFeatures;
744 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
746 VkPhysicalDeviceTimelineSemaphoreFeatures deviceTimelineSemaphoreFeatures[count];
747 const bool isTimelineSemaphoreFeatures = checkExtension(properties, "VK_KHR_timeline_semaphore") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
749 for (int ndx = 0; ndx < count; ++ndx)
751 deMemset(&deviceTimelineSemaphoreFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceTimelineSemaphoreFeatures));
752 deviceTimelineSemaphoreFeatures[ndx].sType = isTimelineSemaphoreFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
753 deviceTimelineSemaphoreFeatures[ndx].pNext = DE_NULL;
755 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
756 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
757 extFeatures.pNext = &deviceTimelineSemaphoreFeatures[ndx];
759 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
762 if (isTimelineSemaphoreFeatures)
763 log << TestLog::Message << deviceTimelineSemaphoreFeatures[0] << TestLog::EndMessage;
765 if (isTimelineSemaphoreFeatures &&
766 (deviceTimelineSemaphoreFeatures[0].timelineSemaphore != deviceTimelineSemaphoreFeatures[1].timelineSemaphore))
768 TCU_FAIL("Mismatch between VkPhysicalDeviceTimelineSemaphoreFeatures");
770 return tcu::TestStatus::pass("Querying succeeded");
773 tcu::TestStatus testPhysicalDeviceFeature8BitStorageFeatures (Context& context)
775 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
776 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
777 const InstanceDriver& vki (instance.getDriver());
778 const int count = 2u;
779 TestLog& log = context.getTestContext().getLog();
780 VkPhysicalDeviceFeatures2 extFeatures;
781 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
783 VkPhysicalDevice8BitStorageFeatures device8BitStorageFeatures[count];
784 const bool is8BitStorageFeatures = checkExtension(properties, "VK_KHR_8bit_storage") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
786 for (int ndx = 0; ndx < count; ++ndx)
788 deMemset(&device8BitStorageFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDevice8BitStorageFeatures));
789 device8BitStorageFeatures[ndx].sType = is8BitStorageFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
790 device8BitStorageFeatures[ndx].pNext = DE_NULL;
792 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
793 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
794 extFeatures.pNext = &device8BitStorageFeatures[ndx];
796 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
799 if (is8BitStorageFeatures)
800 log << TestLog::Message << device8BitStorageFeatures[0] << TestLog::EndMessage;
802 if (is8BitStorageFeatures &&
803 (device8BitStorageFeatures[0].storageBuffer8BitAccess != device8BitStorageFeatures[1].storageBuffer8BitAccess ||
804 device8BitStorageFeatures[0].uniformAndStorageBuffer8BitAccess != device8BitStorageFeatures[1].uniformAndStorageBuffer8BitAccess ||
805 device8BitStorageFeatures[0].storagePushConstant8 != device8BitStorageFeatures[1].storagePushConstant8))
807 TCU_FAIL("Mismatch between VkPhysicalDevice8BitStorageFeatures");
809 return tcu::TestStatus::pass("Querying succeeded");
812 tcu::TestStatus testPhysicalDeviceFeatureConditionalRenderingFeaturesEXT (Context& context)
814 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
815 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
816 const InstanceDriver& vki (instance.getDriver());
817 const int count = 2u;
818 TestLog& log = context.getTestContext().getLog();
819 VkPhysicalDeviceFeatures2 extFeatures;
820 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
822 VkPhysicalDeviceConditionalRenderingFeaturesEXT deviceConditionalRenderingFeaturesEXT[count];
823 const bool isConditionalRenderingFeaturesEXT = checkExtension(properties, "VK_EXT_conditional_rendering");
825 for (int ndx = 0; ndx < count; ++ndx)
827 deMemset(&deviceConditionalRenderingFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceConditionalRenderingFeaturesEXT));
828 deviceConditionalRenderingFeaturesEXT[ndx].sType = isConditionalRenderingFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
829 deviceConditionalRenderingFeaturesEXT[ndx].pNext = DE_NULL;
831 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
832 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
833 extFeatures.pNext = &deviceConditionalRenderingFeaturesEXT[ndx];
835 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
838 if (isConditionalRenderingFeaturesEXT)
839 log << TestLog::Message << deviceConditionalRenderingFeaturesEXT[0] << TestLog::EndMessage;
841 if (isConditionalRenderingFeaturesEXT &&
842 (deviceConditionalRenderingFeaturesEXT[0].conditionalRendering != deviceConditionalRenderingFeaturesEXT[1].conditionalRendering ||
843 deviceConditionalRenderingFeaturesEXT[0].inheritedConditionalRendering != deviceConditionalRenderingFeaturesEXT[1].inheritedConditionalRendering))
845 TCU_FAIL("Mismatch between VkPhysicalDeviceConditionalRenderingFeaturesEXT");
847 return tcu::TestStatus::pass("Querying succeeded");
850 tcu::TestStatus testPhysicalDeviceFeatureVulkanMemoryModelFeatures (Context& context)
852 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
853 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
854 const InstanceDriver& vki (instance.getDriver());
855 const int count = 2u;
856 TestLog& log = context.getTestContext().getLog();
857 VkPhysicalDeviceFeatures2 extFeatures;
858 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
860 VkPhysicalDeviceVulkanMemoryModelFeatures deviceVulkanMemoryModelFeatures[count];
861 const bool isVulkanMemoryModelFeatures = checkExtension(properties, "VK_KHR_vulkan_memory_model") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
863 for (int ndx = 0; ndx < count; ++ndx)
865 deMemset(&deviceVulkanMemoryModelFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVulkanMemoryModelFeatures));
866 deviceVulkanMemoryModelFeatures[ndx].sType = isVulkanMemoryModelFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
867 deviceVulkanMemoryModelFeatures[ndx].pNext = DE_NULL;
869 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
870 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
871 extFeatures.pNext = &deviceVulkanMemoryModelFeatures[ndx];
873 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
876 if (isVulkanMemoryModelFeatures)
877 log << TestLog::Message << deviceVulkanMemoryModelFeatures[0] << TestLog::EndMessage;
879 if (isVulkanMemoryModelFeatures &&
880 (deviceVulkanMemoryModelFeatures[0].vulkanMemoryModel != deviceVulkanMemoryModelFeatures[1].vulkanMemoryModel ||
881 deviceVulkanMemoryModelFeatures[0].vulkanMemoryModelDeviceScope != deviceVulkanMemoryModelFeatures[1].vulkanMemoryModelDeviceScope ||
882 deviceVulkanMemoryModelFeatures[0].vulkanMemoryModelAvailabilityVisibilityChains != deviceVulkanMemoryModelFeatures[1].vulkanMemoryModelAvailabilityVisibilityChains))
884 TCU_FAIL("Mismatch between VkPhysicalDeviceVulkanMemoryModelFeatures");
886 return tcu::TestStatus::pass("Querying succeeded");
889 tcu::TestStatus testPhysicalDeviceFeatureShaderAtomicInt64Features (Context& context)
891 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
892 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
893 const InstanceDriver& vki (instance.getDriver());
894 const int count = 2u;
895 TestLog& log = context.getTestContext().getLog();
896 VkPhysicalDeviceFeatures2 extFeatures;
897 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
899 VkPhysicalDeviceShaderAtomicInt64Features deviceShaderAtomicInt64Features[count];
900 const bool isShaderAtomicInt64Features = checkExtension(properties, "VK_KHR_shader_atomic_int64") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
902 for (int ndx = 0; ndx < count; ++ndx)
904 deMemset(&deviceShaderAtomicInt64Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderAtomicInt64Features));
905 deviceShaderAtomicInt64Features[ndx].sType = isShaderAtomicInt64Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
906 deviceShaderAtomicInt64Features[ndx].pNext = DE_NULL;
908 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
909 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
910 extFeatures.pNext = &deviceShaderAtomicInt64Features[ndx];
912 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
915 if (isShaderAtomicInt64Features)
916 log << TestLog::Message << deviceShaderAtomicInt64Features[0] << TestLog::EndMessage;
918 if (isShaderAtomicInt64Features &&
919 (deviceShaderAtomicInt64Features[0].shaderBufferInt64Atomics != deviceShaderAtomicInt64Features[1].shaderBufferInt64Atomics ||
920 deviceShaderAtomicInt64Features[0].shaderSharedInt64Atomics != deviceShaderAtomicInt64Features[1].shaderSharedInt64Atomics))
922 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderAtomicInt64Features");
924 return tcu::TestStatus::pass("Querying succeeded");
927 tcu::TestStatus testPhysicalDeviceFeatureShaderAtomicFloatFeaturesEXT (Context& context)
929 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
930 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
931 const InstanceDriver& vki (instance.getDriver());
932 const int count = 2u;
933 TestLog& log = context.getTestContext().getLog();
934 VkPhysicalDeviceFeatures2 extFeatures;
935 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
937 VkPhysicalDeviceShaderAtomicFloatFeaturesEXT deviceShaderAtomicFloatFeaturesEXT[count];
938 const bool isShaderAtomicFloatFeaturesEXT = checkExtension(properties, "VK_EXT_shader_atomic_float");
940 for (int ndx = 0; ndx < count; ++ndx)
942 deMemset(&deviceShaderAtomicFloatFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT));
943 deviceShaderAtomicFloatFeaturesEXT[ndx].sType = isShaderAtomicFloatFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
944 deviceShaderAtomicFloatFeaturesEXT[ndx].pNext = DE_NULL;
946 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
947 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
948 extFeatures.pNext = &deviceShaderAtomicFloatFeaturesEXT[ndx];
950 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
953 if (isShaderAtomicFloatFeaturesEXT)
954 log << TestLog::Message << deviceShaderAtomicFloatFeaturesEXT[0] << TestLog::EndMessage;
956 if (isShaderAtomicFloatFeaturesEXT &&
957 (deviceShaderAtomicFloatFeaturesEXT[0].shaderBufferFloat32Atomics != deviceShaderAtomicFloatFeaturesEXT[1].shaderBufferFloat32Atomics ||
958 deviceShaderAtomicFloatFeaturesEXT[0].shaderBufferFloat32AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].shaderBufferFloat32AtomicAdd ||
959 deviceShaderAtomicFloatFeaturesEXT[0].shaderBufferFloat64Atomics != deviceShaderAtomicFloatFeaturesEXT[1].shaderBufferFloat64Atomics ||
960 deviceShaderAtomicFloatFeaturesEXT[0].shaderBufferFloat64AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].shaderBufferFloat64AtomicAdd ||
961 deviceShaderAtomicFloatFeaturesEXT[0].shaderSharedFloat32Atomics != deviceShaderAtomicFloatFeaturesEXT[1].shaderSharedFloat32Atomics ||
962 deviceShaderAtomicFloatFeaturesEXT[0].shaderSharedFloat32AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].shaderSharedFloat32AtomicAdd ||
963 deviceShaderAtomicFloatFeaturesEXT[0].shaderSharedFloat64Atomics != deviceShaderAtomicFloatFeaturesEXT[1].shaderSharedFloat64Atomics ||
964 deviceShaderAtomicFloatFeaturesEXT[0].shaderSharedFloat64AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].shaderSharedFloat64AtomicAdd ||
965 deviceShaderAtomicFloatFeaturesEXT[0].shaderImageFloat32Atomics != deviceShaderAtomicFloatFeaturesEXT[1].shaderImageFloat32Atomics ||
966 deviceShaderAtomicFloatFeaturesEXT[0].shaderImageFloat32AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].shaderImageFloat32AtomicAdd ||
967 deviceShaderAtomicFloatFeaturesEXT[0].sparseImageFloat32Atomics != deviceShaderAtomicFloatFeaturesEXT[1].sparseImageFloat32Atomics ||
968 deviceShaderAtomicFloatFeaturesEXT[0].sparseImageFloat32AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].sparseImageFloat32AtomicAdd))
970 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderAtomicFloatFeaturesEXT");
972 return tcu::TestStatus::pass("Querying succeeded");
975 tcu::TestStatus testPhysicalDeviceFeatureShaderAtomicFloat2FeaturesEXT (Context& context)
977 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
978 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
979 const InstanceDriver& vki (instance.getDriver());
980 const int count = 2u;
981 TestLog& log = context.getTestContext().getLog();
982 VkPhysicalDeviceFeatures2 extFeatures;
983 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
985 VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT deviceShaderAtomicFloat2FeaturesEXT[count];
986 const bool isShaderAtomicFloat2FeaturesEXT = checkExtension(properties, "VK_EXT_shader_atomic_float2");
988 for (int ndx = 0; ndx < count; ++ndx)
990 deMemset(&deviceShaderAtomicFloat2FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT));
991 deviceShaderAtomicFloat2FeaturesEXT[ndx].sType = isShaderAtomicFloat2FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
992 deviceShaderAtomicFloat2FeaturesEXT[ndx].pNext = DE_NULL;
994 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
995 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
996 extFeatures.pNext = &deviceShaderAtomicFloat2FeaturesEXT[ndx];
998 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1001 if (isShaderAtomicFloat2FeaturesEXT)
1002 log << TestLog::Message << deviceShaderAtomicFloat2FeaturesEXT[0] << TestLog::EndMessage;
1004 if (isShaderAtomicFloat2FeaturesEXT &&
1005 (deviceShaderAtomicFloat2FeaturesEXT[0].shaderBufferFloat16Atomics != deviceShaderAtomicFloat2FeaturesEXT[1].shaderBufferFloat16Atomics ||
1006 deviceShaderAtomicFloat2FeaturesEXT[0].shaderBufferFloat16AtomicAdd != deviceShaderAtomicFloat2FeaturesEXT[1].shaderBufferFloat16AtomicAdd ||
1007 deviceShaderAtomicFloat2FeaturesEXT[0].shaderBufferFloat16AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderBufferFloat16AtomicMinMax ||
1008 deviceShaderAtomicFloat2FeaturesEXT[0].shaderBufferFloat32AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderBufferFloat32AtomicMinMax ||
1009 deviceShaderAtomicFloat2FeaturesEXT[0].shaderBufferFloat64AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderBufferFloat64AtomicMinMax ||
1010 deviceShaderAtomicFloat2FeaturesEXT[0].shaderSharedFloat16Atomics != deviceShaderAtomicFloat2FeaturesEXT[1].shaderSharedFloat16Atomics ||
1011 deviceShaderAtomicFloat2FeaturesEXT[0].shaderSharedFloat16AtomicAdd != deviceShaderAtomicFloat2FeaturesEXT[1].shaderSharedFloat16AtomicAdd ||
1012 deviceShaderAtomicFloat2FeaturesEXT[0].shaderSharedFloat16AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderSharedFloat16AtomicMinMax ||
1013 deviceShaderAtomicFloat2FeaturesEXT[0].shaderSharedFloat32AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderSharedFloat32AtomicMinMax ||
1014 deviceShaderAtomicFloat2FeaturesEXT[0].shaderSharedFloat64AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderSharedFloat64AtomicMinMax ||
1015 deviceShaderAtomicFloat2FeaturesEXT[0].shaderImageFloat32AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderImageFloat32AtomicMinMax ||
1016 deviceShaderAtomicFloat2FeaturesEXT[0].sparseImageFloat32AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].sparseImageFloat32AtomicMinMax))
1018 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT");
1020 return tcu::TestStatus::pass("Querying succeeded");
1023 tcu::TestStatus testPhysicalDeviceFeatureVertexAttributeDivisorFeaturesEXT (Context& context)
1025 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1026 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1027 const InstanceDriver& vki (instance.getDriver());
1028 const int count = 2u;
1029 TestLog& log = context.getTestContext().getLog();
1030 VkPhysicalDeviceFeatures2 extFeatures;
1031 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1033 VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT deviceVertexAttributeDivisorFeaturesEXT[count];
1034 const bool isVertexAttributeDivisorFeaturesEXT = checkExtension(properties, "VK_EXT_vertex_attribute_divisor");
1036 for (int ndx = 0; ndx < count; ++ndx)
1038 deMemset(&deviceVertexAttributeDivisorFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT));
1039 deviceVertexAttributeDivisorFeaturesEXT[ndx].sType = isVertexAttributeDivisorFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1040 deviceVertexAttributeDivisorFeaturesEXT[ndx].pNext = DE_NULL;
1042 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1043 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1044 extFeatures.pNext = &deviceVertexAttributeDivisorFeaturesEXT[ndx];
1046 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1049 if (isVertexAttributeDivisorFeaturesEXT)
1050 log << TestLog::Message << deviceVertexAttributeDivisorFeaturesEXT[0] << TestLog::EndMessage;
1052 if (isVertexAttributeDivisorFeaturesEXT &&
1053 (deviceVertexAttributeDivisorFeaturesEXT[0].vertexAttributeInstanceRateDivisor != deviceVertexAttributeDivisorFeaturesEXT[1].vertexAttributeInstanceRateDivisor ||
1054 deviceVertexAttributeDivisorFeaturesEXT[0].vertexAttributeInstanceRateZeroDivisor != deviceVertexAttributeDivisorFeaturesEXT[1].vertexAttributeInstanceRateZeroDivisor))
1056 TCU_FAIL("Mismatch between VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT");
1058 return tcu::TestStatus::pass("Querying succeeded");
1061 tcu::TestStatus testPhysicalDeviceFeatureASTCDecodeFeaturesEXT (Context& context)
1063 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1064 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1065 const InstanceDriver& vki (instance.getDriver());
1066 const int count = 2u;
1067 TestLog& log = context.getTestContext().getLog();
1068 VkPhysicalDeviceFeatures2 extFeatures;
1069 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1071 VkPhysicalDeviceASTCDecodeFeaturesEXT deviceASTCDecodeFeaturesEXT[count];
1072 const bool isASTCDecodeFeaturesEXT = checkExtension(properties, "VK_EXT_astc_decode_mode");
1074 for (int ndx = 0; ndx < count; ++ndx)
1076 deMemset(&deviceASTCDecodeFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceASTCDecodeFeaturesEXT));
1077 deviceASTCDecodeFeaturesEXT[ndx].sType = isASTCDecodeFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1078 deviceASTCDecodeFeaturesEXT[ndx].pNext = DE_NULL;
1080 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1081 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1082 extFeatures.pNext = &deviceASTCDecodeFeaturesEXT[ndx];
1084 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1087 if (isASTCDecodeFeaturesEXT)
1088 log << TestLog::Message << deviceASTCDecodeFeaturesEXT[0] << TestLog::EndMessage;
1090 if (isASTCDecodeFeaturesEXT &&
1091 (deviceASTCDecodeFeaturesEXT[0].decodeModeSharedExponent != deviceASTCDecodeFeaturesEXT[1].decodeModeSharedExponent))
1093 TCU_FAIL("Mismatch between VkPhysicalDeviceASTCDecodeFeaturesEXT");
1095 return tcu::TestStatus::pass("Querying succeeded");
1098 tcu::TestStatus testPhysicalDeviceFeatureTransformFeedbackFeaturesEXT (Context& context)
1100 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1101 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1102 const InstanceDriver& vki (instance.getDriver());
1103 const int count = 2u;
1104 TestLog& log = context.getTestContext().getLog();
1105 VkPhysicalDeviceFeatures2 extFeatures;
1106 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1108 VkPhysicalDeviceTransformFeedbackFeaturesEXT deviceTransformFeedbackFeaturesEXT[count];
1109 const bool isTransformFeedbackFeaturesEXT = checkExtension(properties, "VK_EXT_transform_feedback");
1111 for (int ndx = 0; ndx < count; ++ndx)
1113 deMemset(&deviceTransformFeedbackFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceTransformFeedbackFeaturesEXT));
1114 deviceTransformFeedbackFeaturesEXT[ndx].sType = isTransformFeedbackFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1115 deviceTransformFeedbackFeaturesEXT[ndx].pNext = DE_NULL;
1117 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1118 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1119 extFeatures.pNext = &deviceTransformFeedbackFeaturesEXT[ndx];
1121 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1124 if (isTransformFeedbackFeaturesEXT)
1125 log << TestLog::Message << deviceTransformFeedbackFeaturesEXT[0] << TestLog::EndMessage;
1127 if (isTransformFeedbackFeaturesEXT &&
1128 (deviceTransformFeedbackFeaturesEXT[0].transformFeedback != deviceTransformFeedbackFeaturesEXT[1].transformFeedback ||
1129 deviceTransformFeedbackFeaturesEXT[0].geometryStreams != deviceTransformFeedbackFeaturesEXT[1].geometryStreams))
1131 TCU_FAIL("Mismatch between VkPhysicalDeviceTransformFeedbackFeaturesEXT");
1133 return tcu::TestStatus::pass("Querying succeeded");
1136 tcu::TestStatus testPhysicalDeviceFeatureMeshShaderFeaturesEXT (Context& context)
1138 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1139 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1140 const InstanceDriver& vki (instance.getDriver());
1141 const int count = 2u;
1142 TestLog& log = context.getTestContext().getLog();
1143 VkPhysicalDeviceFeatures2 extFeatures;
1144 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1146 VkPhysicalDeviceMeshShaderFeaturesEXT deviceMeshShaderFeaturesEXT[count];
1147 const bool isMeshShaderFeaturesEXT = checkExtension(properties, "VK_EXT_mesh_shader");
1149 for (int ndx = 0; ndx < count; ++ndx)
1151 deMemset(&deviceMeshShaderFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMeshShaderFeaturesEXT));
1152 deviceMeshShaderFeaturesEXT[ndx].sType = isMeshShaderFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1153 deviceMeshShaderFeaturesEXT[ndx].pNext = DE_NULL;
1155 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1156 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1157 extFeatures.pNext = &deviceMeshShaderFeaturesEXT[ndx];
1159 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1162 if (isMeshShaderFeaturesEXT)
1163 log << TestLog::Message << deviceMeshShaderFeaturesEXT[0] << TestLog::EndMessage;
1165 if (isMeshShaderFeaturesEXT &&
1166 (deviceMeshShaderFeaturesEXT[0].taskShader != deviceMeshShaderFeaturesEXT[1].taskShader ||
1167 deviceMeshShaderFeaturesEXT[0].meshShader != deviceMeshShaderFeaturesEXT[1].meshShader ||
1168 deviceMeshShaderFeaturesEXT[0].multiviewMeshShader != deviceMeshShaderFeaturesEXT[1].multiviewMeshShader ||
1169 deviceMeshShaderFeaturesEXT[0].primitiveFragmentShadingRateMeshShader != deviceMeshShaderFeaturesEXT[1].primitiveFragmentShadingRateMeshShader ||
1170 deviceMeshShaderFeaturesEXT[0].meshShaderQueries != deviceMeshShaderFeaturesEXT[1].meshShaderQueries))
1172 TCU_FAIL("Mismatch between VkPhysicalDeviceMeshShaderFeaturesEXT");
1174 return tcu::TestStatus::pass("Querying succeeded");
1177 tcu::TestStatus testPhysicalDeviceFeatureAccelerationStructureFeaturesKHR (Context& context)
1179 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1180 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1181 const InstanceDriver& vki (instance.getDriver());
1182 const int count = 2u;
1183 TestLog& log = context.getTestContext().getLog();
1184 VkPhysicalDeviceFeatures2 extFeatures;
1185 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1187 VkPhysicalDeviceAccelerationStructureFeaturesKHR deviceAccelerationStructureFeaturesKHR[count];
1188 const bool isAccelerationStructureFeaturesKHR = checkExtension(properties, "VK_KHR_acceleration_structure");
1190 for (int ndx = 0; ndx < count; ++ndx)
1192 deMemset(&deviceAccelerationStructureFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceAccelerationStructureFeaturesKHR));
1193 deviceAccelerationStructureFeaturesKHR[ndx].sType = isAccelerationStructureFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
1194 deviceAccelerationStructureFeaturesKHR[ndx].pNext = DE_NULL;
1196 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1197 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1198 extFeatures.pNext = &deviceAccelerationStructureFeaturesKHR[ndx];
1200 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1203 if (isAccelerationStructureFeaturesKHR)
1204 log << TestLog::Message << deviceAccelerationStructureFeaturesKHR[0] << TestLog::EndMessage;
1206 if (isAccelerationStructureFeaturesKHR &&
1207 (deviceAccelerationStructureFeaturesKHR[0].accelerationStructure != deviceAccelerationStructureFeaturesKHR[1].accelerationStructure ||
1208 deviceAccelerationStructureFeaturesKHR[0].accelerationStructureCaptureReplay != deviceAccelerationStructureFeaturesKHR[1].accelerationStructureCaptureReplay ||
1209 deviceAccelerationStructureFeaturesKHR[0].accelerationStructureIndirectBuild != deviceAccelerationStructureFeaturesKHR[1].accelerationStructureIndirectBuild ||
1210 deviceAccelerationStructureFeaturesKHR[0].accelerationStructureHostCommands != deviceAccelerationStructureFeaturesKHR[1].accelerationStructureHostCommands ||
1211 deviceAccelerationStructureFeaturesKHR[0].descriptorBindingAccelerationStructureUpdateAfterBind != deviceAccelerationStructureFeaturesKHR[1].descriptorBindingAccelerationStructureUpdateAfterBind))
1213 TCU_FAIL("Mismatch between VkPhysicalDeviceAccelerationStructureFeaturesKHR");
1215 return tcu::TestStatus::pass("Querying succeeded");
1218 tcu::TestStatus testPhysicalDeviceFeatureRayTracingPipelineFeaturesKHR (Context& context)
1220 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1221 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1222 const InstanceDriver& vki (instance.getDriver());
1223 const int count = 2u;
1224 TestLog& log = context.getTestContext().getLog();
1225 VkPhysicalDeviceFeatures2 extFeatures;
1226 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1228 VkPhysicalDeviceRayTracingPipelineFeaturesKHR deviceRayTracingPipelineFeaturesKHR[count];
1229 const bool isRayTracingPipelineFeaturesKHR = checkExtension(properties, "VK_KHR_ray_tracing_pipeline");
1231 for (int ndx = 0; ndx < count; ++ndx)
1233 deMemset(&deviceRayTracingPipelineFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRayTracingPipelineFeaturesKHR));
1234 deviceRayTracingPipelineFeaturesKHR[ndx].sType = isRayTracingPipelineFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
1235 deviceRayTracingPipelineFeaturesKHR[ndx].pNext = DE_NULL;
1237 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1238 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1239 extFeatures.pNext = &deviceRayTracingPipelineFeaturesKHR[ndx];
1241 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1244 if (isRayTracingPipelineFeaturesKHR)
1245 log << TestLog::Message << deviceRayTracingPipelineFeaturesKHR[0] << TestLog::EndMessage;
1247 if (isRayTracingPipelineFeaturesKHR &&
1248 (deviceRayTracingPipelineFeaturesKHR[0].rayTracingPipeline != deviceRayTracingPipelineFeaturesKHR[1].rayTracingPipeline ||
1249 deviceRayTracingPipelineFeaturesKHR[0].rayTracingPipelineShaderGroupHandleCaptureReplay != deviceRayTracingPipelineFeaturesKHR[1].rayTracingPipelineShaderGroupHandleCaptureReplay ||
1250 deviceRayTracingPipelineFeaturesKHR[0].rayTracingPipelineShaderGroupHandleCaptureReplayMixed != deviceRayTracingPipelineFeaturesKHR[1].rayTracingPipelineShaderGroupHandleCaptureReplayMixed ||
1251 deviceRayTracingPipelineFeaturesKHR[0].rayTracingPipelineTraceRaysIndirect != deviceRayTracingPipelineFeaturesKHR[1].rayTracingPipelineTraceRaysIndirect ||
1252 deviceRayTracingPipelineFeaturesKHR[0].rayTraversalPrimitiveCulling != deviceRayTracingPipelineFeaturesKHR[1].rayTraversalPrimitiveCulling))
1254 TCU_FAIL("Mismatch between VkPhysicalDeviceRayTracingPipelineFeaturesKHR");
1256 return tcu::TestStatus::pass("Querying succeeded");
1259 tcu::TestStatus testPhysicalDeviceFeatureRayQueryFeaturesKHR (Context& context)
1261 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1262 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1263 const InstanceDriver& vki (instance.getDriver());
1264 const int count = 2u;
1265 TestLog& log = context.getTestContext().getLog();
1266 VkPhysicalDeviceFeatures2 extFeatures;
1267 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1269 VkPhysicalDeviceRayQueryFeaturesKHR deviceRayQueryFeaturesKHR[count];
1270 const bool isRayQueryFeaturesKHR = checkExtension(properties, "VK_KHR_ray_query");
1272 for (int ndx = 0; ndx < count; ++ndx)
1274 deMemset(&deviceRayQueryFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRayQueryFeaturesKHR));
1275 deviceRayQueryFeaturesKHR[ndx].sType = isRayQueryFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
1276 deviceRayQueryFeaturesKHR[ndx].pNext = DE_NULL;
1278 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1279 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1280 extFeatures.pNext = &deviceRayQueryFeaturesKHR[ndx];
1282 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1285 if (isRayQueryFeaturesKHR)
1286 log << TestLog::Message << deviceRayQueryFeaturesKHR[0] << TestLog::EndMessage;
1288 if (isRayQueryFeaturesKHR &&
1289 (deviceRayQueryFeaturesKHR[0].rayQuery != deviceRayQueryFeaturesKHR[1].rayQuery))
1291 TCU_FAIL("Mismatch between VkPhysicalDeviceRayQueryFeaturesKHR");
1293 return tcu::TestStatus::pass("Querying succeeded");
1296 tcu::TestStatus testPhysicalDeviceFeatureRayTracingMaintenance1FeaturesKHR (Context& context)
1298 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1299 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1300 const InstanceDriver& vki (instance.getDriver());
1301 const int count = 2u;
1302 TestLog& log = context.getTestContext().getLog();
1303 VkPhysicalDeviceFeatures2 extFeatures;
1304 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1306 VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR deviceRayTracingMaintenance1FeaturesKHR[count];
1307 const bool isRayTracingMaintenance1FeaturesKHR = checkExtension(properties, "VK_KHR_ray_tracing_maintenance1");
1309 for (int ndx = 0; ndx < count; ++ndx)
1311 deMemset(&deviceRayTracingMaintenance1FeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR));
1312 deviceRayTracingMaintenance1FeaturesKHR[ndx].sType = isRayTracingMaintenance1FeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
1313 deviceRayTracingMaintenance1FeaturesKHR[ndx].pNext = DE_NULL;
1315 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1316 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1317 extFeatures.pNext = &deviceRayTracingMaintenance1FeaturesKHR[ndx];
1319 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1322 if (isRayTracingMaintenance1FeaturesKHR)
1323 log << TestLog::Message << deviceRayTracingMaintenance1FeaturesKHR[0] << TestLog::EndMessage;
1325 if (isRayTracingMaintenance1FeaturesKHR &&
1326 (deviceRayTracingMaintenance1FeaturesKHR[0].rayTracingMaintenance1 != deviceRayTracingMaintenance1FeaturesKHR[1].rayTracingMaintenance1 ||
1327 deviceRayTracingMaintenance1FeaturesKHR[0].rayTracingPipelineTraceRaysIndirect2 != deviceRayTracingMaintenance1FeaturesKHR[1].rayTracingPipelineTraceRaysIndirect2))
1329 TCU_FAIL("Mismatch between VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR");
1331 return tcu::TestStatus::pass("Querying succeeded");
1334 tcu::TestStatus testPhysicalDeviceFeatureFragmentDensityMapFeaturesEXT (Context& context)
1336 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1337 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1338 const InstanceDriver& vki (instance.getDriver());
1339 const int count = 2u;
1340 TestLog& log = context.getTestContext().getLog();
1341 VkPhysicalDeviceFeatures2 extFeatures;
1342 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1344 VkPhysicalDeviceFragmentDensityMapFeaturesEXT deviceFragmentDensityMapFeaturesEXT[count];
1345 const bool isFragmentDensityMapFeaturesEXT = checkExtension(properties, "VK_EXT_fragment_density_map");
1347 for (int ndx = 0; ndx < count; ++ndx)
1349 deMemset(&deviceFragmentDensityMapFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT));
1350 deviceFragmentDensityMapFeaturesEXT[ndx].sType = isFragmentDensityMapFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1351 deviceFragmentDensityMapFeaturesEXT[ndx].pNext = DE_NULL;
1353 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1354 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1355 extFeatures.pNext = &deviceFragmentDensityMapFeaturesEXT[ndx];
1357 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1360 if (isFragmentDensityMapFeaturesEXT)
1361 log << TestLog::Message << deviceFragmentDensityMapFeaturesEXT[0] << TestLog::EndMessage;
1363 if (isFragmentDensityMapFeaturesEXT &&
1364 (deviceFragmentDensityMapFeaturesEXT[0].fragmentDensityMap != deviceFragmentDensityMapFeaturesEXT[1].fragmentDensityMap ||
1365 deviceFragmentDensityMapFeaturesEXT[0].fragmentDensityMapDynamic != deviceFragmentDensityMapFeaturesEXT[1].fragmentDensityMapDynamic ||
1366 deviceFragmentDensityMapFeaturesEXT[0].fragmentDensityMapNonSubsampledImages != deviceFragmentDensityMapFeaturesEXT[1].fragmentDensityMapNonSubsampledImages))
1368 TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentDensityMapFeaturesEXT");
1370 return tcu::TestStatus::pass("Querying succeeded");
1373 tcu::TestStatus testPhysicalDeviceFeatureFragmentDensityMap2FeaturesEXT (Context& context)
1375 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1376 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1377 const InstanceDriver& vki (instance.getDriver());
1378 const int count = 2u;
1379 TestLog& log = context.getTestContext().getLog();
1380 VkPhysicalDeviceFeatures2 extFeatures;
1381 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1383 VkPhysicalDeviceFragmentDensityMap2FeaturesEXT deviceFragmentDensityMap2FeaturesEXT[count];
1384 const bool isFragmentDensityMap2FeaturesEXT = checkExtension(properties, "VK_EXT_fragment_density_map2");
1386 for (int ndx = 0; ndx < count; ++ndx)
1388 deMemset(&deviceFragmentDensityMap2FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT));
1389 deviceFragmentDensityMap2FeaturesEXT[ndx].sType = isFragmentDensityMap2FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1390 deviceFragmentDensityMap2FeaturesEXT[ndx].pNext = DE_NULL;
1392 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1393 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1394 extFeatures.pNext = &deviceFragmentDensityMap2FeaturesEXT[ndx];
1396 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1399 if (isFragmentDensityMap2FeaturesEXT)
1400 log << TestLog::Message << deviceFragmentDensityMap2FeaturesEXT[0] << TestLog::EndMessage;
1402 if (isFragmentDensityMap2FeaturesEXT &&
1403 (deviceFragmentDensityMap2FeaturesEXT[0].fragmentDensityMapDeferred != deviceFragmentDensityMap2FeaturesEXT[1].fragmentDensityMapDeferred))
1405 TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentDensityMap2FeaturesEXT");
1407 return tcu::TestStatus::pass("Querying succeeded");
1410 tcu::TestStatus testPhysicalDeviceFeatureScalarBlockLayoutFeatures (Context& context)
1412 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1413 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1414 const InstanceDriver& vki (instance.getDriver());
1415 const int count = 2u;
1416 TestLog& log = context.getTestContext().getLog();
1417 VkPhysicalDeviceFeatures2 extFeatures;
1418 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1420 VkPhysicalDeviceScalarBlockLayoutFeatures deviceScalarBlockLayoutFeatures[count];
1421 const bool isScalarBlockLayoutFeatures = checkExtension(properties, "VK_EXT_scalar_block_layout") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
1423 for (int ndx = 0; ndx < count; ++ndx)
1425 deMemset(&deviceScalarBlockLayoutFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceScalarBlockLayoutFeatures));
1426 deviceScalarBlockLayoutFeatures[ndx].sType = isScalarBlockLayoutFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
1427 deviceScalarBlockLayoutFeatures[ndx].pNext = DE_NULL;
1429 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1430 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1431 extFeatures.pNext = &deviceScalarBlockLayoutFeatures[ndx];
1433 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1436 if (isScalarBlockLayoutFeatures)
1437 log << TestLog::Message << deviceScalarBlockLayoutFeatures[0] << TestLog::EndMessage;
1439 if (isScalarBlockLayoutFeatures &&
1440 (deviceScalarBlockLayoutFeatures[0].scalarBlockLayout != deviceScalarBlockLayoutFeatures[1].scalarBlockLayout))
1442 TCU_FAIL("Mismatch between VkPhysicalDeviceScalarBlockLayoutFeatures");
1444 return tcu::TestStatus::pass("Querying succeeded");
1447 tcu::TestStatus testPhysicalDeviceFeatureUniformBufferStandardLayoutFeatures (Context& context)
1449 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1450 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1451 const InstanceDriver& vki (instance.getDriver());
1452 const int count = 2u;
1453 TestLog& log = context.getTestContext().getLog();
1454 VkPhysicalDeviceFeatures2 extFeatures;
1455 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1457 VkPhysicalDeviceUniformBufferStandardLayoutFeatures deviceUniformBufferStandardLayoutFeatures[count];
1458 const bool isUniformBufferStandardLayoutFeatures = checkExtension(properties, "VK_KHR_uniform_buffer_standard_layout") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
1460 for (int ndx = 0; ndx < count; ++ndx)
1462 deMemset(&deviceUniformBufferStandardLayoutFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceUniformBufferStandardLayoutFeatures));
1463 deviceUniformBufferStandardLayoutFeatures[ndx].sType = isUniformBufferStandardLayoutFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
1464 deviceUniformBufferStandardLayoutFeatures[ndx].pNext = DE_NULL;
1466 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1467 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1468 extFeatures.pNext = &deviceUniformBufferStandardLayoutFeatures[ndx];
1470 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1473 if (isUniformBufferStandardLayoutFeatures)
1474 log << TestLog::Message << deviceUniformBufferStandardLayoutFeatures[0] << TestLog::EndMessage;
1476 if (isUniformBufferStandardLayoutFeatures &&
1477 (deviceUniformBufferStandardLayoutFeatures[0].uniformBufferStandardLayout != deviceUniformBufferStandardLayoutFeatures[1].uniformBufferStandardLayout))
1479 TCU_FAIL("Mismatch between VkPhysicalDeviceUniformBufferStandardLayoutFeatures");
1481 return tcu::TestStatus::pass("Querying succeeded");
1484 tcu::TestStatus testPhysicalDeviceFeatureDepthClipEnableFeaturesEXT (Context& context)
1486 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1487 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1488 const InstanceDriver& vki (instance.getDriver());
1489 const int count = 2u;
1490 TestLog& log = context.getTestContext().getLog();
1491 VkPhysicalDeviceFeatures2 extFeatures;
1492 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1494 VkPhysicalDeviceDepthClipEnableFeaturesEXT deviceDepthClipEnableFeaturesEXT[count];
1495 const bool isDepthClipEnableFeaturesEXT = checkExtension(properties, "VK_EXT_depth_clip_enable");
1497 for (int ndx = 0; ndx < count; ++ndx)
1499 deMemset(&deviceDepthClipEnableFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDepthClipEnableFeaturesEXT));
1500 deviceDepthClipEnableFeaturesEXT[ndx].sType = isDepthClipEnableFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1501 deviceDepthClipEnableFeaturesEXT[ndx].pNext = DE_NULL;
1503 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1504 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1505 extFeatures.pNext = &deviceDepthClipEnableFeaturesEXT[ndx];
1507 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1510 if (isDepthClipEnableFeaturesEXT)
1511 log << TestLog::Message << deviceDepthClipEnableFeaturesEXT[0] << TestLog::EndMessage;
1513 if (isDepthClipEnableFeaturesEXT &&
1514 (deviceDepthClipEnableFeaturesEXT[0].depthClipEnable != deviceDepthClipEnableFeaturesEXT[1].depthClipEnable))
1516 TCU_FAIL("Mismatch between VkPhysicalDeviceDepthClipEnableFeaturesEXT");
1518 return tcu::TestStatus::pass("Querying succeeded");
1521 tcu::TestStatus testPhysicalDeviceFeatureMemoryPriorityFeaturesEXT (Context& context)
1523 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1524 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1525 const InstanceDriver& vki (instance.getDriver());
1526 const int count = 2u;
1527 TestLog& log = context.getTestContext().getLog();
1528 VkPhysicalDeviceFeatures2 extFeatures;
1529 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1531 VkPhysicalDeviceMemoryPriorityFeaturesEXT deviceMemoryPriorityFeaturesEXT[count];
1532 const bool isMemoryPriorityFeaturesEXT = checkExtension(properties, "VK_EXT_memory_priority");
1534 for (int ndx = 0; ndx < count; ++ndx)
1536 deMemset(&deviceMemoryPriorityFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMemoryPriorityFeaturesEXT));
1537 deviceMemoryPriorityFeaturesEXT[ndx].sType = isMemoryPriorityFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1538 deviceMemoryPriorityFeaturesEXT[ndx].pNext = DE_NULL;
1540 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1541 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1542 extFeatures.pNext = &deviceMemoryPriorityFeaturesEXT[ndx];
1544 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1547 if (isMemoryPriorityFeaturesEXT)
1548 log << TestLog::Message << deviceMemoryPriorityFeaturesEXT[0] << TestLog::EndMessage;
1550 if (isMemoryPriorityFeaturesEXT &&
1551 (deviceMemoryPriorityFeaturesEXT[0].memoryPriority != deviceMemoryPriorityFeaturesEXT[1].memoryPriority))
1553 TCU_FAIL("Mismatch between VkPhysicalDeviceMemoryPriorityFeaturesEXT");
1555 return tcu::TestStatus::pass("Querying succeeded");
1558 tcu::TestStatus testPhysicalDeviceFeaturePageableDeviceLocalMemoryFeaturesEXT (Context& context)
1560 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1561 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1562 const InstanceDriver& vki (instance.getDriver());
1563 const int count = 2u;
1564 TestLog& log = context.getTestContext().getLog();
1565 VkPhysicalDeviceFeatures2 extFeatures;
1566 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1568 VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT devicePageableDeviceLocalMemoryFeaturesEXT[count];
1569 const bool isPageableDeviceLocalMemoryFeaturesEXT = checkExtension(properties, "VK_EXT_pageable_device_local_memory");
1571 for (int ndx = 0; ndx < count; ++ndx)
1573 deMemset(&devicePageableDeviceLocalMemoryFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT));
1574 devicePageableDeviceLocalMemoryFeaturesEXT[ndx].sType = isPageableDeviceLocalMemoryFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1575 devicePageableDeviceLocalMemoryFeaturesEXT[ndx].pNext = DE_NULL;
1577 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1578 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1579 extFeatures.pNext = &devicePageableDeviceLocalMemoryFeaturesEXT[ndx];
1581 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1584 if (isPageableDeviceLocalMemoryFeaturesEXT)
1585 log << TestLog::Message << devicePageableDeviceLocalMemoryFeaturesEXT[0] << TestLog::EndMessage;
1587 if (isPageableDeviceLocalMemoryFeaturesEXT &&
1588 (devicePageableDeviceLocalMemoryFeaturesEXT[0].pageableDeviceLocalMemory != devicePageableDeviceLocalMemoryFeaturesEXT[1].pageableDeviceLocalMemory))
1590 TCU_FAIL("Mismatch between VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT");
1592 return tcu::TestStatus::pass("Querying succeeded");
1595 tcu::TestStatus testPhysicalDeviceFeatureBufferDeviceAddressFeatures (Context& context)
1597 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1598 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1599 const InstanceDriver& vki (instance.getDriver());
1600 const int count = 2u;
1601 TestLog& log = context.getTestContext().getLog();
1602 VkPhysicalDeviceFeatures2 extFeatures;
1603 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1605 VkPhysicalDeviceBufferDeviceAddressFeatures deviceBufferDeviceAddressFeatures[count];
1606 const bool isBufferDeviceAddressFeatures = checkExtension(properties, "VK_KHR_buffer_device_address") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
1608 for (int ndx = 0; ndx < count; ++ndx)
1610 deMemset(&deviceBufferDeviceAddressFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceBufferDeviceAddressFeatures));
1611 deviceBufferDeviceAddressFeatures[ndx].sType = isBufferDeviceAddressFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
1612 deviceBufferDeviceAddressFeatures[ndx].pNext = DE_NULL;
1614 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1615 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1616 extFeatures.pNext = &deviceBufferDeviceAddressFeatures[ndx];
1618 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1621 if (isBufferDeviceAddressFeatures)
1622 log << TestLog::Message << deviceBufferDeviceAddressFeatures[0] << TestLog::EndMessage;
1624 if (isBufferDeviceAddressFeatures &&
1625 (deviceBufferDeviceAddressFeatures[0].bufferDeviceAddress != deviceBufferDeviceAddressFeatures[1].bufferDeviceAddress ||
1626 deviceBufferDeviceAddressFeatures[0].bufferDeviceAddressCaptureReplay != deviceBufferDeviceAddressFeatures[1].bufferDeviceAddressCaptureReplay ||
1627 deviceBufferDeviceAddressFeatures[0].bufferDeviceAddressMultiDevice != deviceBufferDeviceAddressFeatures[1].bufferDeviceAddressMultiDevice))
1629 TCU_FAIL("Mismatch between VkPhysicalDeviceBufferDeviceAddressFeatures");
1631 return tcu::TestStatus::pass("Querying succeeded");
1634 tcu::TestStatus testPhysicalDeviceFeatureBufferDeviceAddressFeaturesEXT (Context& context)
1636 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1637 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1638 const InstanceDriver& vki (instance.getDriver());
1639 const int count = 2u;
1640 TestLog& log = context.getTestContext().getLog();
1641 VkPhysicalDeviceFeatures2 extFeatures;
1642 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1644 VkPhysicalDeviceBufferDeviceAddressFeaturesEXT deviceBufferDeviceAddressFeaturesEXT[count];
1645 const bool isBufferDeviceAddressFeaturesEXT = checkExtension(properties, "VK_EXT_buffer_device_address");
1647 for (int ndx = 0; ndx < count; ++ndx)
1649 deMemset(&deviceBufferDeviceAddressFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT));
1650 deviceBufferDeviceAddressFeaturesEXT[ndx].sType = isBufferDeviceAddressFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1651 deviceBufferDeviceAddressFeaturesEXT[ndx].pNext = DE_NULL;
1653 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1654 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1655 extFeatures.pNext = &deviceBufferDeviceAddressFeaturesEXT[ndx];
1657 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1660 if (isBufferDeviceAddressFeaturesEXT)
1661 log << TestLog::Message << deviceBufferDeviceAddressFeaturesEXT[0] << TestLog::EndMessage;
1663 if (isBufferDeviceAddressFeaturesEXT &&
1664 (deviceBufferDeviceAddressFeaturesEXT[0].bufferDeviceAddress != deviceBufferDeviceAddressFeaturesEXT[1].bufferDeviceAddress ||
1665 deviceBufferDeviceAddressFeaturesEXT[0].bufferDeviceAddressCaptureReplay != deviceBufferDeviceAddressFeaturesEXT[1].bufferDeviceAddressCaptureReplay ||
1666 deviceBufferDeviceAddressFeaturesEXT[0].bufferDeviceAddressMultiDevice != deviceBufferDeviceAddressFeaturesEXT[1].bufferDeviceAddressMultiDevice))
1668 TCU_FAIL("Mismatch between VkPhysicalDeviceBufferDeviceAddressFeaturesEXT");
1670 return tcu::TestStatus::pass("Querying succeeded");
1673 tcu::TestStatus testPhysicalDeviceFeatureImagelessFramebufferFeatures (Context& context)
1675 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1676 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1677 const InstanceDriver& vki (instance.getDriver());
1678 const int count = 2u;
1679 TestLog& log = context.getTestContext().getLog();
1680 VkPhysicalDeviceFeatures2 extFeatures;
1681 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1683 VkPhysicalDeviceImagelessFramebufferFeatures deviceImagelessFramebufferFeatures[count];
1684 const bool isImagelessFramebufferFeatures = checkExtension(properties, "VK_KHR_imageless_framebuffer") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
1686 for (int ndx = 0; ndx < count; ++ndx)
1688 deMemset(&deviceImagelessFramebufferFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImagelessFramebufferFeatures));
1689 deviceImagelessFramebufferFeatures[ndx].sType = isImagelessFramebufferFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
1690 deviceImagelessFramebufferFeatures[ndx].pNext = DE_NULL;
1692 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1693 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1694 extFeatures.pNext = &deviceImagelessFramebufferFeatures[ndx];
1696 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1699 if (isImagelessFramebufferFeatures)
1700 log << TestLog::Message << deviceImagelessFramebufferFeatures[0] << TestLog::EndMessage;
1702 if (isImagelessFramebufferFeatures &&
1703 (deviceImagelessFramebufferFeatures[0].imagelessFramebuffer != deviceImagelessFramebufferFeatures[1].imagelessFramebuffer))
1705 TCU_FAIL("Mismatch between VkPhysicalDeviceImagelessFramebufferFeatures");
1707 return tcu::TestStatus::pass("Querying succeeded");
1710 tcu::TestStatus testPhysicalDeviceFeatureTextureCompressionASTCHDRFeatures (Context& context)
1712 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1713 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1714 const InstanceDriver& vki (instance.getDriver());
1715 const int count = 2u;
1716 TestLog& log = context.getTestContext().getLog();
1717 VkPhysicalDeviceFeatures2 extFeatures;
1718 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1720 VkPhysicalDeviceTextureCompressionASTCHDRFeatures deviceTextureCompressionASTCHDRFeatures[count];
1721 const bool isTextureCompressionASTCHDRFeatures = checkExtension(properties, "VK_EXT_texture_compression_astc_hdr") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
1723 for (int ndx = 0; ndx < count; ++ndx)
1725 deMemset(&deviceTextureCompressionASTCHDRFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceTextureCompressionASTCHDRFeatures));
1726 deviceTextureCompressionASTCHDRFeatures[ndx].sType = isTextureCompressionASTCHDRFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
1727 deviceTextureCompressionASTCHDRFeatures[ndx].pNext = DE_NULL;
1729 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1730 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1731 extFeatures.pNext = &deviceTextureCompressionASTCHDRFeatures[ndx];
1733 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1736 if (isTextureCompressionASTCHDRFeatures)
1737 log << TestLog::Message << deviceTextureCompressionASTCHDRFeatures[0] << TestLog::EndMessage;
1739 if (isTextureCompressionASTCHDRFeatures &&
1740 (deviceTextureCompressionASTCHDRFeatures[0].textureCompressionASTC_HDR != deviceTextureCompressionASTCHDRFeatures[1].textureCompressionASTC_HDR))
1742 TCU_FAIL("Mismatch between VkPhysicalDeviceTextureCompressionASTCHDRFeatures");
1744 return tcu::TestStatus::pass("Querying succeeded");
1747 tcu::TestStatus testPhysicalDeviceFeatureYcbcrImageArraysFeaturesEXT (Context& context)
1749 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1750 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1751 const InstanceDriver& vki (instance.getDriver());
1752 const int count = 2u;
1753 TestLog& log = context.getTestContext().getLog();
1754 VkPhysicalDeviceFeatures2 extFeatures;
1755 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1757 VkPhysicalDeviceYcbcrImageArraysFeaturesEXT deviceYcbcrImageArraysFeaturesEXT[count];
1758 const bool isYcbcrImageArraysFeaturesEXT = checkExtension(properties, "VK_EXT_ycbcr_image_arrays");
1760 for (int ndx = 0; ndx < count; ++ndx)
1762 deMemset(&deviceYcbcrImageArraysFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT));
1763 deviceYcbcrImageArraysFeaturesEXT[ndx].sType = isYcbcrImageArraysFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1764 deviceYcbcrImageArraysFeaturesEXT[ndx].pNext = DE_NULL;
1766 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1767 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1768 extFeatures.pNext = &deviceYcbcrImageArraysFeaturesEXT[ndx];
1770 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1773 if (isYcbcrImageArraysFeaturesEXT)
1774 log << TestLog::Message << deviceYcbcrImageArraysFeaturesEXT[0] << TestLog::EndMessage;
1776 if (isYcbcrImageArraysFeaturesEXT &&
1777 (deviceYcbcrImageArraysFeaturesEXT[0].ycbcrImageArrays != deviceYcbcrImageArraysFeaturesEXT[1].ycbcrImageArrays))
1779 TCU_FAIL("Mismatch between VkPhysicalDeviceYcbcrImageArraysFeaturesEXT");
1781 return tcu::TestStatus::pass("Querying succeeded");
1784 tcu::TestStatus testPhysicalDeviceFeaturePerformanceQueryFeaturesKHR (Context& context)
1786 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1787 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1788 const InstanceDriver& vki (instance.getDriver());
1789 const int count = 2u;
1790 TestLog& log = context.getTestContext().getLog();
1791 VkPhysicalDeviceFeatures2 extFeatures;
1792 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1794 VkPhysicalDevicePerformanceQueryFeaturesKHR devicePerformanceQueryFeaturesKHR[count];
1795 const bool isPerformanceQueryFeaturesKHR = checkExtension(properties, "VK_KHR_performance_query");
1797 for (int ndx = 0; ndx < count; ++ndx)
1799 deMemset(&devicePerformanceQueryFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePerformanceQueryFeaturesKHR));
1800 devicePerformanceQueryFeaturesKHR[ndx].sType = isPerformanceQueryFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
1801 devicePerformanceQueryFeaturesKHR[ndx].pNext = DE_NULL;
1803 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1804 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1805 extFeatures.pNext = &devicePerformanceQueryFeaturesKHR[ndx];
1807 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1810 if (isPerformanceQueryFeaturesKHR)
1811 log << TestLog::Message << devicePerformanceQueryFeaturesKHR[0] << TestLog::EndMessage;
1813 if (isPerformanceQueryFeaturesKHR &&
1814 (devicePerformanceQueryFeaturesKHR[0].performanceCounterQueryPools != devicePerformanceQueryFeaturesKHR[1].performanceCounterQueryPools ||
1815 devicePerformanceQueryFeaturesKHR[0].performanceCounterMultipleQueryPools != devicePerformanceQueryFeaturesKHR[1].performanceCounterMultipleQueryPools))
1817 TCU_FAIL("Mismatch between VkPhysicalDevicePerformanceQueryFeaturesKHR");
1819 return tcu::TestStatus::pass("Querying succeeded");
1822 tcu::TestStatus testPhysicalDeviceFeatureShaderClockFeaturesKHR (Context& context)
1824 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1825 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1826 const InstanceDriver& vki (instance.getDriver());
1827 const int count = 2u;
1828 TestLog& log = context.getTestContext().getLog();
1829 VkPhysicalDeviceFeatures2 extFeatures;
1830 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1832 VkPhysicalDeviceShaderClockFeaturesKHR deviceShaderClockFeaturesKHR[count];
1833 const bool isShaderClockFeaturesKHR = checkExtension(properties, "VK_KHR_shader_clock");
1835 for (int ndx = 0; ndx < count; ++ndx)
1837 deMemset(&deviceShaderClockFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderClockFeaturesKHR));
1838 deviceShaderClockFeaturesKHR[ndx].sType = isShaderClockFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
1839 deviceShaderClockFeaturesKHR[ndx].pNext = DE_NULL;
1841 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1842 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1843 extFeatures.pNext = &deviceShaderClockFeaturesKHR[ndx];
1845 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1848 if (isShaderClockFeaturesKHR)
1849 log << TestLog::Message << deviceShaderClockFeaturesKHR[0] << TestLog::EndMessage;
1851 if (isShaderClockFeaturesKHR &&
1852 (deviceShaderClockFeaturesKHR[0].shaderSubgroupClock != deviceShaderClockFeaturesKHR[1].shaderSubgroupClock ||
1853 deviceShaderClockFeaturesKHR[0].shaderDeviceClock != deviceShaderClockFeaturesKHR[1].shaderDeviceClock))
1855 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderClockFeaturesKHR");
1857 return tcu::TestStatus::pass("Querying succeeded");
1860 tcu::TestStatus testPhysicalDeviceFeatureIndexTypeUint8FeaturesEXT (Context& context)
1862 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1863 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1864 const InstanceDriver& vki (instance.getDriver());
1865 const int count = 2u;
1866 TestLog& log = context.getTestContext().getLog();
1867 VkPhysicalDeviceFeatures2 extFeatures;
1868 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1870 VkPhysicalDeviceIndexTypeUint8FeaturesEXT deviceIndexTypeUint8FeaturesEXT[count];
1871 const bool isIndexTypeUint8FeaturesEXT = checkExtension(properties, "VK_EXT_index_type_uint8");
1873 for (int ndx = 0; ndx < count; ++ndx)
1875 deMemset(&deviceIndexTypeUint8FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceIndexTypeUint8FeaturesEXT));
1876 deviceIndexTypeUint8FeaturesEXT[ndx].sType = isIndexTypeUint8FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1877 deviceIndexTypeUint8FeaturesEXT[ndx].pNext = DE_NULL;
1879 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1880 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1881 extFeatures.pNext = &deviceIndexTypeUint8FeaturesEXT[ndx];
1883 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1886 if (isIndexTypeUint8FeaturesEXT)
1887 log << TestLog::Message << deviceIndexTypeUint8FeaturesEXT[0] << TestLog::EndMessage;
1889 if (isIndexTypeUint8FeaturesEXT &&
1890 (deviceIndexTypeUint8FeaturesEXT[0].indexTypeUint8 != deviceIndexTypeUint8FeaturesEXT[1].indexTypeUint8))
1892 TCU_FAIL("Mismatch between VkPhysicalDeviceIndexTypeUint8FeaturesEXT");
1894 return tcu::TestStatus::pass("Querying succeeded");
1897 tcu::TestStatus testPhysicalDeviceFeatureFragmentShaderInterlockFeaturesEXT (Context& context)
1899 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1900 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1901 const InstanceDriver& vki (instance.getDriver());
1902 const int count = 2u;
1903 TestLog& log = context.getTestContext().getLog();
1904 VkPhysicalDeviceFeatures2 extFeatures;
1905 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1907 VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT deviceFragmentShaderInterlockFeaturesEXT[count];
1908 const bool isFragmentShaderInterlockFeaturesEXT = checkExtension(properties, "VK_EXT_fragment_shader_interlock");
1910 for (int ndx = 0; ndx < count; ++ndx)
1912 deMemset(&deviceFragmentShaderInterlockFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT));
1913 deviceFragmentShaderInterlockFeaturesEXT[ndx].sType = isFragmentShaderInterlockFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1914 deviceFragmentShaderInterlockFeaturesEXT[ndx].pNext = DE_NULL;
1916 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1917 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1918 extFeatures.pNext = &deviceFragmentShaderInterlockFeaturesEXT[ndx];
1920 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1923 if (isFragmentShaderInterlockFeaturesEXT)
1924 log << TestLog::Message << deviceFragmentShaderInterlockFeaturesEXT[0] << TestLog::EndMessage;
1926 if (isFragmentShaderInterlockFeaturesEXT &&
1927 (deviceFragmentShaderInterlockFeaturesEXT[0].fragmentShaderSampleInterlock != deviceFragmentShaderInterlockFeaturesEXT[1].fragmentShaderSampleInterlock ||
1928 deviceFragmentShaderInterlockFeaturesEXT[0].fragmentShaderPixelInterlock != deviceFragmentShaderInterlockFeaturesEXT[1].fragmentShaderPixelInterlock ||
1929 deviceFragmentShaderInterlockFeaturesEXT[0].fragmentShaderShadingRateInterlock != deviceFragmentShaderInterlockFeaturesEXT[1].fragmentShaderShadingRateInterlock))
1931 TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT");
1933 return tcu::TestStatus::pass("Querying succeeded");
1936 tcu::TestStatus testPhysicalDeviceFeatureSeparateDepthStencilLayoutsFeatures (Context& context)
1938 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1939 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1940 const InstanceDriver& vki (instance.getDriver());
1941 const int count = 2u;
1942 TestLog& log = context.getTestContext().getLog();
1943 VkPhysicalDeviceFeatures2 extFeatures;
1944 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1946 VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures deviceSeparateDepthStencilLayoutsFeatures[count];
1947 const bool isSeparateDepthStencilLayoutsFeatures = checkExtension(properties, "VK_KHR_separate_depth_stencil_layouts") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
1949 for (int ndx = 0; ndx < count; ++ndx)
1951 deMemset(&deviceSeparateDepthStencilLayoutsFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures));
1952 deviceSeparateDepthStencilLayoutsFeatures[ndx].sType = isSeparateDepthStencilLayoutsFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
1953 deviceSeparateDepthStencilLayoutsFeatures[ndx].pNext = DE_NULL;
1955 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1956 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1957 extFeatures.pNext = &deviceSeparateDepthStencilLayoutsFeatures[ndx];
1959 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1962 if (isSeparateDepthStencilLayoutsFeatures)
1963 log << TestLog::Message << deviceSeparateDepthStencilLayoutsFeatures[0] << TestLog::EndMessage;
1965 if (isSeparateDepthStencilLayoutsFeatures &&
1966 (deviceSeparateDepthStencilLayoutsFeatures[0].separateDepthStencilLayouts != deviceSeparateDepthStencilLayoutsFeatures[1].separateDepthStencilLayouts))
1968 TCU_FAIL("Mismatch between VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures");
1970 return tcu::TestStatus::pass("Querying succeeded");
1973 tcu::TestStatus testPhysicalDeviceFeaturePrimitiveTopologyListRestartFeaturesEXT (Context& context)
1975 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
1976 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
1977 const InstanceDriver& vki (instance.getDriver());
1978 const int count = 2u;
1979 TestLog& log = context.getTestContext().getLog();
1980 VkPhysicalDeviceFeatures2 extFeatures;
1981 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
1983 VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT devicePrimitiveTopologyListRestartFeaturesEXT[count];
1984 const bool isPrimitiveTopologyListRestartFeaturesEXT = checkExtension(properties, "VK_EXT_primitive_topology_list_restart");
1986 for (int ndx = 0; ndx < count; ++ndx)
1988 deMemset(&devicePrimitiveTopologyListRestartFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT));
1989 devicePrimitiveTopologyListRestartFeaturesEXT[ndx].sType = isPrimitiveTopologyListRestartFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
1990 devicePrimitiveTopologyListRestartFeaturesEXT[ndx].pNext = DE_NULL;
1992 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
1993 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
1994 extFeatures.pNext = &devicePrimitiveTopologyListRestartFeaturesEXT[ndx];
1996 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
1999 if (isPrimitiveTopologyListRestartFeaturesEXT)
2000 log << TestLog::Message << devicePrimitiveTopologyListRestartFeaturesEXT[0] << TestLog::EndMessage;
2002 if (isPrimitiveTopologyListRestartFeaturesEXT &&
2003 (devicePrimitiveTopologyListRestartFeaturesEXT[0].primitiveTopologyListRestart != devicePrimitiveTopologyListRestartFeaturesEXT[1].primitiveTopologyListRestart ||
2004 devicePrimitiveTopologyListRestartFeaturesEXT[0].primitiveTopologyPatchListRestart != devicePrimitiveTopologyListRestartFeaturesEXT[1].primitiveTopologyPatchListRestart))
2006 TCU_FAIL("Mismatch between VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT");
2008 return tcu::TestStatus::pass("Querying succeeded");
2011 tcu::TestStatus testPhysicalDeviceFeaturePipelineExecutablePropertiesFeaturesKHR (Context& context)
2013 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2014 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2015 const InstanceDriver& vki (instance.getDriver());
2016 const int count = 2u;
2017 TestLog& log = context.getTestContext().getLog();
2018 VkPhysicalDeviceFeatures2 extFeatures;
2019 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2021 VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR devicePipelineExecutablePropertiesFeaturesKHR[count];
2022 const bool isPipelineExecutablePropertiesFeaturesKHR = checkExtension(properties, "VK_KHR_pipeline_executable_properties");
2024 for (int ndx = 0; ndx < count; ++ndx)
2026 deMemset(&devicePipelineExecutablePropertiesFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR));
2027 devicePipelineExecutablePropertiesFeaturesKHR[ndx].sType = isPipelineExecutablePropertiesFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
2028 devicePipelineExecutablePropertiesFeaturesKHR[ndx].pNext = DE_NULL;
2030 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2031 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2032 extFeatures.pNext = &devicePipelineExecutablePropertiesFeaturesKHR[ndx];
2034 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2037 if (isPipelineExecutablePropertiesFeaturesKHR)
2038 log << TestLog::Message << devicePipelineExecutablePropertiesFeaturesKHR[0] << TestLog::EndMessage;
2040 if (isPipelineExecutablePropertiesFeaturesKHR &&
2041 (devicePipelineExecutablePropertiesFeaturesKHR[0].pipelineExecutableInfo != devicePipelineExecutablePropertiesFeaturesKHR[1].pipelineExecutableInfo))
2043 TCU_FAIL("Mismatch between VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR");
2045 return tcu::TestStatus::pass("Querying succeeded");
2048 tcu::TestStatus testPhysicalDeviceFeatureShaderDemoteToHelperInvocationFeatures (Context& context)
2050 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2051 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2052 const InstanceDriver& vki (instance.getDriver());
2053 const int count = 2u;
2054 TestLog& log = context.getTestContext().getLog();
2055 VkPhysicalDeviceFeatures2 extFeatures;
2056 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2058 VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures deviceShaderDemoteToHelperInvocationFeatures[count];
2059 const bool isShaderDemoteToHelperInvocationFeatures = checkExtension(properties, "VK_EXT_shader_demote_to_helper_invocation") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
2061 for (int ndx = 0; ndx < count; ++ndx)
2063 deMemset(&deviceShaderDemoteToHelperInvocationFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures));
2064 deviceShaderDemoteToHelperInvocationFeatures[ndx].sType = isShaderDemoteToHelperInvocationFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
2065 deviceShaderDemoteToHelperInvocationFeatures[ndx].pNext = DE_NULL;
2067 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2068 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2069 extFeatures.pNext = &deviceShaderDemoteToHelperInvocationFeatures[ndx];
2071 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2074 if (isShaderDemoteToHelperInvocationFeatures)
2075 log << TestLog::Message << deviceShaderDemoteToHelperInvocationFeatures[0] << TestLog::EndMessage;
2077 if (isShaderDemoteToHelperInvocationFeatures &&
2078 (deviceShaderDemoteToHelperInvocationFeatures[0].shaderDemoteToHelperInvocation != deviceShaderDemoteToHelperInvocationFeatures[1].shaderDemoteToHelperInvocation))
2080 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures");
2082 return tcu::TestStatus::pass("Querying succeeded");
2085 tcu::TestStatus testPhysicalDeviceFeatureTexelBufferAlignmentFeaturesEXT (Context& context)
2087 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2088 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2089 const InstanceDriver& vki (instance.getDriver());
2090 const int count = 2u;
2091 TestLog& log = context.getTestContext().getLog();
2092 VkPhysicalDeviceFeatures2 extFeatures;
2093 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2095 VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT deviceTexelBufferAlignmentFeaturesEXT[count];
2096 const bool isTexelBufferAlignmentFeaturesEXT = checkExtension(properties, "VK_EXT_texel_buffer_alignment");
2098 for (int ndx = 0; ndx < count; ++ndx)
2100 deMemset(&deviceTexelBufferAlignmentFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT));
2101 deviceTexelBufferAlignmentFeaturesEXT[ndx].sType = isTexelBufferAlignmentFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
2102 deviceTexelBufferAlignmentFeaturesEXT[ndx].pNext = DE_NULL;
2104 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2105 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2106 extFeatures.pNext = &deviceTexelBufferAlignmentFeaturesEXT[ndx];
2108 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2111 if (isTexelBufferAlignmentFeaturesEXT)
2112 log << TestLog::Message << deviceTexelBufferAlignmentFeaturesEXT[0] << TestLog::EndMessage;
2114 if (isTexelBufferAlignmentFeaturesEXT &&
2115 (deviceTexelBufferAlignmentFeaturesEXT[0].texelBufferAlignment != deviceTexelBufferAlignmentFeaturesEXT[1].texelBufferAlignment))
2117 TCU_FAIL("Mismatch between VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT");
2119 return tcu::TestStatus::pass("Querying succeeded");
2122 tcu::TestStatus testPhysicalDeviceFeatureSubgroupSizeControlFeatures (Context& context)
2124 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2125 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2126 const InstanceDriver& vki (instance.getDriver());
2127 const int count = 2u;
2128 TestLog& log = context.getTestContext().getLog();
2129 VkPhysicalDeviceFeatures2 extFeatures;
2130 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2132 VkPhysicalDeviceSubgroupSizeControlFeatures deviceSubgroupSizeControlFeatures[count];
2133 const bool isSubgroupSizeControlFeatures = checkExtension(properties, "VK_EXT_subgroup_size_control") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
2135 for (int ndx = 0; ndx < count; ++ndx)
2137 deMemset(&deviceSubgroupSizeControlFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceSubgroupSizeControlFeatures));
2138 deviceSubgroupSizeControlFeatures[ndx].sType = isSubgroupSizeControlFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
2139 deviceSubgroupSizeControlFeatures[ndx].pNext = DE_NULL;
2141 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2142 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2143 extFeatures.pNext = &deviceSubgroupSizeControlFeatures[ndx];
2145 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2148 if (isSubgroupSizeControlFeatures)
2149 log << TestLog::Message << deviceSubgroupSizeControlFeatures[0] << TestLog::EndMessage;
2151 if (isSubgroupSizeControlFeatures &&
2152 (deviceSubgroupSizeControlFeatures[0].subgroupSizeControl != deviceSubgroupSizeControlFeatures[1].subgroupSizeControl ||
2153 deviceSubgroupSizeControlFeatures[0].computeFullSubgroups != deviceSubgroupSizeControlFeatures[1].computeFullSubgroups))
2155 TCU_FAIL("Mismatch between VkPhysicalDeviceSubgroupSizeControlFeatures");
2157 return tcu::TestStatus::pass("Querying succeeded");
2160 tcu::TestStatus testPhysicalDeviceFeatureLineRasterizationFeaturesEXT (Context& context)
2162 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2163 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2164 const InstanceDriver& vki (instance.getDriver());
2165 const int count = 2u;
2166 TestLog& log = context.getTestContext().getLog();
2167 VkPhysicalDeviceFeatures2 extFeatures;
2168 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2170 VkPhysicalDeviceLineRasterizationFeaturesEXT deviceLineRasterizationFeaturesEXT[count];
2171 const bool isLineRasterizationFeaturesEXT = checkExtension(properties, "VK_EXT_line_rasterization");
2173 for (int ndx = 0; ndx < count; ++ndx)
2175 deMemset(&deviceLineRasterizationFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceLineRasterizationFeaturesEXT));
2176 deviceLineRasterizationFeaturesEXT[ndx].sType = isLineRasterizationFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
2177 deviceLineRasterizationFeaturesEXT[ndx].pNext = DE_NULL;
2179 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2180 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2181 extFeatures.pNext = &deviceLineRasterizationFeaturesEXT[ndx];
2183 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2186 if (isLineRasterizationFeaturesEXT)
2187 log << TestLog::Message << deviceLineRasterizationFeaturesEXT[0] << TestLog::EndMessage;
2189 if (isLineRasterizationFeaturesEXT &&
2190 (deviceLineRasterizationFeaturesEXT[0].rectangularLines != deviceLineRasterizationFeaturesEXT[1].rectangularLines ||
2191 deviceLineRasterizationFeaturesEXT[0].bresenhamLines != deviceLineRasterizationFeaturesEXT[1].bresenhamLines ||
2192 deviceLineRasterizationFeaturesEXT[0].smoothLines != deviceLineRasterizationFeaturesEXT[1].smoothLines ||
2193 deviceLineRasterizationFeaturesEXT[0].stippledRectangularLines != deviceLineRasterizationFeaturesEXT[1].stippledRectangularLines ||
2194 deviceLineRasterizationFeaturesEXT[0].stippledBresenhamLines != deviceLineRasterizationFeaturesEXT[1].stippledBresenhamLines ||
2195 deviceLineRasterizationFeaturesEXT[0].stippledSmoothLines != deviceLineRasterizationFeaturesEXT[1].stippledSmoothLines))
2197 TCU_FAIL("Mismatch between VkPhysicalDeviceLineRasterizationFeaturesEXT");
2199 return tcu::TestStatus::pass("Querying succeeded");
2202 tcu::TestStatus testPhysicalDeviceFeaturePipelineCreationCacheControlFeatures (Context& context)
2204 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2205 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2206 const InstanceDriver& vki (instance.getDriver());
2207 const int count = 2u;
2208 TestLog& log = context.getTestContext().getLog();
2209 VkPhysicalDeviceFeatures2 extFeatures;
2210 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2212 VkPhysicalDevicePipelineCreationCacheControlFeatures devicePipelineCreationCacheControlFeatures[count];
2213 const bool isPipelineCreationCacheControlFeatures = checkExtension(properties, "VK_EXT_pipeline_creation_cache_control") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
2215 for (int ndx = 0; ndx < count; ++ndx)
2217 deMemset(&devicePipelineCreationCacheControlFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePipelineCreationCacheControlFeatures));
2218 devicePipelineCreationCacheControlFeatures[ndx].sType = isPipelineCreationCacheControlFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
2219 devicePipelineCreationCacheControlFeatures[ndx].pNext = DE_NULL;
2221 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2222 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2223 extFeatures.pNext = &devicePipelineCreationCacheControlFeatures[ndx];
2225 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2228 if (isPipelineCreationCacheControlFeatures)
2229 log << TestLog::Message << devicePipelineCreationCacheControlFeatures[0] << TestLog::EndMessage;
2231 if (isPipelineCreationCacheControlFeatures &&
2232 (devicePipelineCreationCacheControlFeatures[0].pipelineCreationCacheControl != devicePipelineCreationCacheControlFeatures[1].pipelineCreationCacheControl))
2234 TCU_FAIL("Mismatch between VkPhysicalDevicePipelineCreationCacheControlFeatures");
2236 return tcu::TestStatus::pass("Querying succeeded");
2239 tcu::TestStatus testPhysicalDeviceFeatureVulkan11Features (Context& context)
2241 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2242 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2243 const InstanceDriver& vki (instance.getDriver());
2244 const int count = 2u;
2245 TestLog& log = context.getTestContext().getLog();
2246 VkPhysicalDeviceFeatures2 extFeatures;
2247 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2249 VkPhysicalDeviceVulkan11Features deviceVulkan11Features[count];
2250 const bool isVulkan11Features = context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
2252 for (int ndx = 0; ndx < count; ++ndx)
2254 deMemset(&deviceVulkan11Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVulkan11Features));
2255 deviceVulkan11Features[ndx].sType = isVulkan11Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
2256 deviceVulkan11Features[ndx].pNext = DE_NULL;
2258 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2259 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2260 extFeatures.pNext = &deviceVulkan11Features[ndx];
2262 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2265 if (isVulkan11Features)
2266 log << TestLog::Message << deviceVulkan11Features[0] << TestLog::EndMessage;
2268 if (isVulkan11Features &&
2269 (deviceVulkan11Features[0].storageBuffer16BitAccess != deviceVulkan11Features[1].storageBuffer16BitAccess ||
2270 deviceVulkan11Features[0].uniformAndStorageBuffer16BitAccess != deviceVulkan11Features[1].uniformAndStorageBuffer16BitAccess ||
2271 deviceVulkan11Features[0].storagePushConstant16 != deviceVulkan11Features[1].storagePushConstant16 ||
2272 deviceVulkan11Features[0].storageInputOutput16 != deviceVulkan11Features[1].storageInputOutput16 ||
2273 deviceVulkan11Features[0].multiview != deviceVulkan11Features[1].multiview ||
2274 deviceVulkan11Features[0].multiviewGeometryShader != deviceVulkan11Features[1].multiviewGeometryShader ||
2275 deviceVulkan11Features[0].multiviewTessellationShader != deviceVulkan11Features[1].multiviewTessellationShader ||
2276 deviceVulkan11Features[0].variablePointersStorageBuffer != deviceVulkan11Features[1].variablePointersStorageBuffer ||
2277 deviceVulkan11Features[0].variablePointers != deviceVulkan11Features[1].variablePointers ||
2278 deviceVulkan11Features[0].protectedMemory != deviceVulkan11Features[1].protectedMemory ||
2279 deviceVulkan11Features[0].samplerYcbcrConversion != deviceVulkan11Features[1].samplerYcbcrConversion ||
2280 deviceVulkan11Features[0].shaderDrawParameters != deviceVulkan11Features[1].shaderDrawParameters))
2282 TCU_FAIL("Mismatch between VkPhysicalDeviceVulkan11Features");
2284 return tcu::TestStatus::pass("Querying succeeded");
2287 tcu::TestStatus testPhysicalDeviceFeatureVulkan12Features (Context& context)
2289 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2290 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2291 const InstanceDriver& vki (instance.getDriver());
2292 const int count = 2u;
2293 TestLog& log = context.getTestContext().getLog();
2294 VkPhysicalDeviceFeatures2 extFeatures;
2295 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2297 VkPhysicalDeviceVulkan12Features deviceVulkan12Features[count];
2298 const bool isVulkan12Features = context.contextSupports(vk::ApiVersion(0, 1, 2, 0));
2300 for (int ndx = 0; ndx < count; ++ndx)
2302 deMemset(&deviceVulkan12Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVulkan12Features));
2303 deviceVulkan12Features[ndx].sType = isVulkan12Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
2304 deviceVulkan12Features[ndx].pNext = DE_NULL;
2306 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2307 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2308 extFeatures.pNext = &deviceVulkan12Features[ndx];
2310 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2313 if (isVulkan12Features)
2314 log << TestLog::Message << deviceVulkan12Features[0] << TestLog::EndMessage;
2316 if (isVulkan12Features &&
2317 (deviceVulkan12Features[0].samplerMirrorClampToEdge != deviceVulkan12Features[1].samplerMirrorClampToEdge ||
2318 deviceVulkan12Features[0].drawIndirectCount != deviceVulkan12Features[1].drawIndirectCount ||
2319 deviceVulkan12Features[0].storageBuffer8BitAccess != deviceVulkan12Features[1].storageBuffer8BitAccess ||
2320 deviceVulkan12Features[0].uniformAndStorageBuffer8BitAccess != deviceVulkan12Features[1].uniformAndStorageBuffer8BitAccess ||
2321 deviceVulkan12Features[0].storagePushConstant8 != deviceVulkan12Features[1].storagePushConstant8 ||
2322 deviceVulkan12Features[0].shaderBufferInt64Atomics != deviceVulkan12Features[1].shaderBufferInt64Atomics ||
2323 deviceVulkan12Features[0].shaderSharedInt64Atomics != deviceVulkan12Features[1].shaderSharedInt64Atomics ||
2324 deviceVulkan12Features[0].shaderFloat16 != deviceVulkan12Features[1].shaderFloat16 ||
2325 deviceVulkan12Features[0].shaderInt8 != deviceVulkan12Features[1].shaderInt8 ||
2326 deviceVulkan12Features[0].descriptorIndexing != deviceVulkan12Features[1].descriptorIndexing ||
2327 deviceVulkan12Features[0].shaderInputAttachmentArrayDynamicIndexing != deviceVulkan12Features[1].shaderInputAttachmentArrayDynamicIndexing ||
2328 deviceVulkan12Features[0].shaderUniformTexelBufferArrayDynamicIndexing != deviceVulkan12Features[1].shaderUniformTexelBufferArrayDynamicIndexing ||
2329 deviceVulkan12Features[0].shaderStorageTexelBufferArrayDynamicIndexing != deviceVulkan12Features[1].shaderStorageTexelBufferArrayDynamicIndexing ||
2330 deviceVulkan12Features[0].shaderUniformBufferArrayNonUniformIndexing != deviceVulkan12Features[1].shaderUniformBufferArrayNonUniformIndexing ||
2331 deviceVulkan12Features[0].shaderSampledImageArrayNonUniformIndexing != deviceVulkan12Features[1].shaderSampledImageArrayNonUniformIndexing ||
2332 deviceVulkan12Features[0].shaderStorageBufferArrayNonUniformIndexing != deviceVulkan12Features[1].shaderStorageBufferArrayNonUniformIndexing ||
2333 deviceVulkan12Features[0].shaderStorageImageArrayNonUniformIndexing != deviceVulkan12Features[1].shaderStorageImageArrayNonUniformIndexing ||
2334 deviceVulkan12Features[0].shaderInputAttachmentArrayNonUniformIndexing != deviceVulkan12Features[1].shaderInputAttachmentArrayNonUniformIndexing ||
2335 deviceVulkan12Features[0].shaderUniformTexelBufferArrayNonUniformIndexing != deviceVulkan12Features[1].shaderUniformTexelBufferArrayNonUniformIndexing ||
2336 deviceVulkan12Features[0].shaderStorageTexelBufferArrayNonUniformIndexing != deviceVulkan12Features[1].shaderStorageTexelBufferArrayNonUniformIndexing ||
2337 deviceVulkan12Features[0].descriptorBindingUniformBufferUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingUniformBufferUpdateAfterBind ||
2338 deviceVulkan12Features[0].descriptorBindingSampledImageUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingSampledImageUpdateAfterBind ||
2339 deviceVulkan12Features[0].descriptorBindingStorageImageUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingStorageImageUpdateAfterBind ||
2340 deviceVulkan12Features[0].descriptorBindingStorageBufferUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingStorageBufferUpdateAfterBind ||
2341 deviceVulkan12Features[0].descriptorBindingUniformTexelBufferUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingUniformTexelBufferUpdateAfterBind ||
2342 deviceVulkan12Features[0].descriptorBindingStorageTexelBufferUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingStorageTexelBufferUpdateAfterBind ||
2343 deviceVulkan12Features[0].descriptorBindingUpdateUnusedWhilePending != deviceVulkan12Features[1].descriptorBindingUpdateUnusedWhilePending ||
2344 deviceVulkan12Features[0].descriptorBindingPartiallyBound != deviceVulkan12Features[1].descriptorBindingPartiallyBound ||
2345 deviceVulkan12Features[0].descriptorBindingVariableDescriptorCount != deviceVulkan12Features[1].descriptorBindingVariableDescriptorCount ||
2346 deviceVulkan12Features[0].runtimeDescriptorArray != deviceVulkan12Features[1].runtimeDescriptorArray ||
2347 deviceVulkan12Features[0].samplerFilterMinmax != deviceVulkan12Features[1].samplerFilterMinmax ||
2348 deviceVulkan12Features[0].scalarBlockLayout != deviceVulkan12Features[1].scalarBlockLayout ||
2349 deviceVulkan12Features[0].imagelessFramebuffer != deviceVulkan12Features[1].imagelessFramebuffer ||
2350 deviceVulkan12Features[0].uniformBufferStandardLayout != deviceVulkan12Features[1].uniformBufferStandardLayout ||
2351 deviceVulkan12Features[0].shaderSubgroupExtendedTypes != deviceVulkan12Features[1].shaderSubgroupExtendedTypes ||
2352 deviceVulkan12Features[0].separateDepthStencilLayouts != deviceVulkan12Features[1].separateDepthStencilLayouts ||
2353 deviceVulkan12Features[0].hostQueryReset != deviceVulkan12Features[1].hostQueryReset ||
2354 deviceVulkan12Features[0].timelineSemaphore != deviceVulkan12Features[1].timelineSemaphore ||
2355 deviceVulkan12Features[0].bufferDeviceAddress != deviceVulkan12Features[1].bufferDeviceAddress ||
2356 deviceVulkan12Features[0].bufferDeviceAddressCaptureReplay != deviceVulkan12Features[1].bufferDeviceAddressCaptureReplay ||
2357 deviceVulkan12Features[0].bufferDeviceAddressMultiDevice != deviceVulkan12Features[1].bufferDeviceAddressMultiDevice ||
2358 deviceVulkan12Features[0].vulkanMemoryModel != deviceVulkan12Features[1].vulkanMemoryModel ||
2359 deviceVulkan12Features[0].vulkanMemoryModelDeviceScope != deviceVulkan12Features[1].vulkanMemoryModelDeviceScope ||
2360 deviceVulkan12Features[0].vulkanMemoryModelAvailabilityVisibilityChains != deviceVulkan12Features[1].vulkanMemoryModelAvailabilityVisibilityChains ||
2361 deviceVulkan12Features[0].shaderOutputViewportIndex != deviceVulkan12Features[1].shaderOutputViewportIndex ||
2362 deviceVulkan12Features[0].shaderOutputLayer != deviceVulkan12Features[1].shaderOutputLayer ||
2363 deviceVulkan12Features[0].subgroupBroadcastDynamicId != deviceVulkan12Features[1].subgroupBroadcastDynamicId))
2365 TCU_FAIL("Mismatch between VkPhysicalDeviceVulkan12Features");
2367 return tcu::TestStatus::pass("Querying succeeded");
2370 tcu::TestStatus testPhysicalDeviceFeatureVulkan13Features (Context& context)
2372 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2373 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2374 const InstanceDriver& vki (instance.getDriver());
2375 const int count = 2u;
2376 TestLog& log = context.getTestContext().getLog();
2377 VkPhysicalDeviceFeatures2 extFeatures;
2378 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2380 VkPhysicalDeviceVulkan13Features deviceVulkan13Features[count];
2381 const bool isVulkan13Features = context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
2383 for (int ndx = 0; ndx < count; ++ndx)
2385 deMemset(&deviceVulkan13Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVulkan13Features));
2386 deviceVulkan13Features[ndx].sType = isVulkan13Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
2387 deviceVulkan13Features[ndx].pNext = DE_NULL;
2389 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2390 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2391 extFeatures.pNext = &deviceVulkan13Features[ndx];
2393 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2396 if (isVulkan13Features)
2397 log << TestLog::Message << deviceVulkan13Features[0] << TestLog::EndMessage;
2399 if (isVulkan13Features &&
2400 (deviceVulkan13Features[0].robustImageAccess != deviceVulkan13Features[1].robustImageAccess ||
2401 deviceVulkan13Features[0].inlineUniformBlock != deviceVulkan13Features[1].inlineUniformBlock ||
2402 deviceVulkan13Features[0].descriptorBindingInlineUniformBlockUpdateAfterBind != deviceVulkan13Features[1].descriptorBindingInlineUniformBlockUpdateAfterBind ||
2403 deviceVulkan13Features[0].pipelineCreationCacheControl != deviceVulkan13Features[1].pipelineCreationCacheControl ||
2404 deviceVulkan13Features[0].privateData != deviceVulkan13Features[1].privateData ||
2405 deviceVulkan13Features[0].shaderDemoteToHelperInvocation != deviceVulkan13Features[1].shaderDemoteToHelperInvocation ||
2406 deviceVulkan13Features[0].shaderTerminateInvocation != deviceVulkan13Features[1].shaderTerminateInvocation ||
2407 deviceVulkan13Features[0].subgroupSizeControl != deviceVulkan13Features[1].subgroupSizeControl ||
2408 deviceVulkan13Features[0].computeFullSubgroups != deviceVulkan13Features[1].computeFullSubgroups ||
2409 deviceVulkan13Features[0].synchronization2 != deviceVulkan13Features[1].synchronization2 ||
2410 deviceVulkan13Features[0].textureCompressionASTC_HDR != deviceVulkan13Features[1].textureCompressionASTC_HDR ||
2411 deviceVulkan13Features[0].shaderZeroInitializeWorkgroupMemory != deviceVulkan13Features[1].shaderZeroInitializeWorkgroupMemory ||
2412 deviceVulkan13Features[0].dynamicRendering != deviceVulkan13Features[1].dynamicRendering ||
2413 deviceVulkan13Features[0].shaderIntegerDotProduct != deviceVulkan13Features[1].shaderIntegerDotProduct ||
2414 deviceVulkan13Features[0].maintenance4 != deviceVulkan13Features[1].maintenance4))
2416 TCU_FAIL("Mismatch between VkPhysicalDeviceVulkan13Features");
2418 return tcu::TestStatus::pass("Querying succeeded");
2421 tcu::TestStatus testPhysicalDeviceFeatureCustomBorderColorFeaturesEXT (Context& context)
2423 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2424 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2425 const InstanceDriver& vki (instance.getDriver());
2426 const int count = 2u;
2427 TestLog& log = context.getTestContext().getLog();
2428 VkPhysicalDeviceFeatures2 extFeatures;
2429 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2431 VkPhysicalDeviceCustomBorderColorFeaturesEXT deviceCustomBorderColorFeaturesEXT[count];
2432 const bool isCustomBorderColorFeaturesEXT = checkExtension(properties, "VK_EXT_custom_border_color");
2434 for (int ndx = 0; ndx < count; ++ndx)
2436 deMemset(&deviceCustomBorderColorFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceCustomBorderColorFeaturesEXT));
2437 deviceCustomBorderColorFeaturesEXT[ndx].sType = isCustomBorderColorFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
2438 deviceCustomBorderColorFeaturesEXT[ndx].pNext = DE_NULL;
2440 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2441 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2442 extFeatures.pNext = &deviceCustomBorderColorFeaturesEXT[ndx];
2444 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2447 if (isCustomBorderColorFeaturesEXT)
2448 log << TestLog::Message << deviceCustomBorderColorFeaturesEXT[0] << TestLog::EndMessage;
2450 if (isCustomBorderColorFeaturesEXT &&
2451 (deviceCustomBorderColorFeaturesEXT[0].customBorderColors != deviceCustomBorderColorFeaturesEXT[1].customBorderColors ||
2452 deviceCustomBorderColorFeaturesEXT[0].customBorderColorWithoutFormat != deviceCustomBorderColorFeaturesEXT[1].customBorderColorWithoutFormat))
2454 TCU_FAIL("Mismatch between VkPhysicalDeviceCustomBorderColorFeaturesEXT");
2456 return tcu::TestStatus::pass("Querying succeeded");
2459 tcu::TestStatus testPhysicalDeviceFeatureBorderColorSwizzleFeaturesEXT (Context& context)
2461 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2462 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2463 const InstanceDriver& vki (instance.getDriver());
2464 const int count = 2u;
2465 TestLog& log = context.getTestContext().getLog();
2466 VkPhysicalDeviceFeatures2 extFeatures;
2467 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2469 VkPhysicalDeviceBorderColorSwizzleFeaturesEXT deviceBorderColorSwizzleFeaturesEXT[count];
2470 const bool isBorderColorSwizzleFeaturesEXT = checkExtension(properties, "VK_EXT_border_color_swizzle");
2472 for (int ndx = 0; ndx < count; ++ndx)
2474 deMemset(&deviceBorderColorSwizzleFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT));
2475 deviceBorderColorSwizzleFeaturesEXT[ndx].sType = isBorderColorSwizzleFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
2476 deviceBorderColorSwizzleFeaturesEXT[ndx].pNext = DE_NULL;
2478 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2479 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2480 extFeatures.pNext = &deviceBorderColorSwizzleFeaturesEXT[ndx];
2482 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2485 if (isBorderColorSwizzleFeaturesEXT)
2486 log << TestLog::Message << deviceBorderColorSwizzleFeaturesEXT[0] << TestLog::EndMessage;
2488 if (isBorderColorSwizzleFeaturesEXT &&
2489 (deviceBorderColorSwizzleFeaturesEXT[0].borderColorSwizzle != deviceBorderColorSwizzleFeaturesEXT[1].borderColorSwizzle ||
2490 deviceBorderColorSwizzleFeaturesEXT[0].borderColorSwizzleFromImage != deviceBorderColorSwizzleFeaturesEXT[1].borderColorSwizzleFromImage))
2492 TCU_FAIL("Mismatch between VkPhysicalDeviceBorderColorSwizzleFeaturesEXT");
2494 return tcu::TestStatus::pass("Querying succeeded");
2497 tcu::TestStatus testPhysicalDeviceFeatureExtendedDynamicStateFeaturesEXT (Context& context)
2499 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2500 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2501 const InstanceDriver& vki (instance.getDriver());
2502 const int count = 2u;
2503 TestLog& log = context.getTestContext().getLog();
2504 VkPhysicalDeviceFeatures2 extFeatures;
2505 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2507 VkPhysicalDeviceExtendedDynamicStateFeaturesEXT deviceExtendedDynamicStateFeaturesEXT[count];
2508 const bool isExtendedDynamicStateFeaturesEXT = checkExtension(properties, "VK_EXT_extended_dynamic_state");
2510 for (int ndx = 0; ndx < count; ++ndx)
2512 deMemset(&deviceExtendedDynamicStateFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT));
2513 deviceExtendedDynamicStateFeaturesEXT[ndx].sType = isExtendedDynamicStateFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
2514 deviceExtendedDynamicStateFeaturesEXT[ndx].pNext = DE_NULL;
2516 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2517 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2518 extFeatures.pNext = &deviceExtendedDynamicStateFeaturesEXT[ndx];
2520 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2523 if (isExtendedDynamicStateFeaturesEXT)
2524 log << TestLog::Message << deviceExtendedDynamicStateFeaturesEXT[0] << TestLog::EndMessage;
2526 if (isExtendedDynamicStateFeaturesEXT &&
2527 (deviceExtendedDynamicStateFeaturesEXT[0].extendedDynamicState != deviceExtendedDynamicStateFeaturesEXT[1].extendedDynamicState))
2529 TCU_FAIL("Mismatch between VkPhysicalDeviceExtendedDynamicStateFeaturesEXT");
2531 return tcu::TestStatus::pass("Querying succeeded");
2534 tcu::TestStatus testPhysicalDeviceFeatureExtendedDynamicState2FeaturesEXT (Context& context)
2536 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2537 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2538 const InstanceDriver& vki (instance.getDriver());
2539 const int count = 2u;
2540 TestLog& log = context.getTestContext().getLog();
2541 VkPhysicalDeviceFeatures2 extFeatures;
2542 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2544 VkPhysicalDeviceExtendedDynamicState2FeaturesEXT deviceExtendedDynamicState2FeaturesEXT[count];
2545 const bool isExtendedDynamicState2FeaturesEXT = checkExtension(properties, "VK_EXT_extended_dynamic_state2");
2547 for (int ndx = 0; ndx < count; ++ndx)
2549 deMemset(&deviceExtendedDynamicState2FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT));
2550 deviceExtendedDynamicState2FeaturesEXT[ndx].sType = isExtendedDynamicState2FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
2551 deviceExtendedDynamicState2FeaturesEXT[ndx].pNext = DE_NULL;
2553 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2554 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2555 extFeatures.pNext = &deviceExtendedDynamicState2FeaturesEXT[ndx];
2557 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2560 if (isExtendedDynamicState2FeaturesEXT)
2561 log << TestLog::Message << deviceExtendedDynamicState2FeaturesEXT[0] << TestLog::EndMessage;
2563 if (isExtendedDynamicState2FeaturesEXT &&
2564 (deviceExtendedDynamicState2FeaturesEXT[0].extendedDynamicState2 != deviceExtendedDynamicState2FeaturesEXT[1].extendedDynamicState2 ||
2565 deviceExtendedDynamicState2FeaturesEXT[0].extendedDynamicState2LogicOp != deviceExtendedDynamicState2FeaturesEXT[1].extendedDynamicState2LogicOp ||
2566 deviceExtendedDynamicState2FeaturesEXT[0].extendedDynamicState2PatchControlPoints != deviceExtendedDynamicState2FeaturesEXT[1].extendedDynamicState2PatchControlPoints))
2568 TCU_FAIL("Mismatch between VkPhysicalDeviceExtendedDynamicState2FeaturesEXT");
2570 return tcu::TestStatus::pass("Querying succeeded");
2573 tcu::TestStatus testPhysicalDeviceFeatureZeroInitializeWorkgroupMemoryFeatures (Context& context)
2575 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2576 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2577 const InstanceDriver& vki (instance.getDriver());
2578 const int count = 2u;
2579 TestLog& log = context.getTestContext().getLog();
2580 VkPhysicalDeviceFeatures2 extFeatures;
2581 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2583 VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures deviceZeroInitializeWorkgroupMemoryFeatures[count];
2584 const bool isZeroInitializeWorkgroupMemoryFeatures = checkExtension(properties, "VK_KHR_zero_initialize_workgroup_memory") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
2586 for (int ndx = 0; ndx < count; ++ndx)
2588 deMemset(&deviceZeroInitializeWorkgroupMemoryFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures));
2589 deviceZeroInitializeWorkgroupMemoryFeatures[ndx].sType = isZeroInitializeWorkgroupMemoryFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
2590 deviceZeroInitializeWorkgroupMemoryFeatures[ndx].pNext = DE_NULL;
2592 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2593 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2594 extFeatures.pNext = &deviceZeroInitializeWorkgroupMemoryFeatures[ndx];
2596 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2599 if (isZeroInitializeWorkgroupMemoryFeatures)
2600 log << TestLog::Message << deviceZeroInitializeWorkgroupMemoryFeatures[0] << TestLog::EndMessage;
2602 if (isZeroInitializeWorkgroupMemoryFeatures &&
2603 (deviceZeroInitializeWorkgroupMemoryFeatures[0].shaderZeroInitializeWorkgroupMemory != deviceZeroInitializeWorkgroupMemoryFeatures[1].shaderZeroInitializeWorkgroupMemory))
2605 TCU_FAIL("Mismatch between VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures");
2607 return tcu::TestStatus::pass("Querying succeeded");
2610 tcu::TestStatus testPhysicalDeviceFeatureShaderSubgroupUniformControlFlowFeaturesKHR (Context& context)
2612 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2613 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2614 const InstanceDriver& vki (instance.getDriver());
2615 const int count = 2u;
2616 TestLog& log = context.getTestContext().getLog();
2617 VkPhysicalDeviceFeatures2 extFeatures;
2618 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2620 VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR deviceShaderSubgroupUniformControlFlowFeaturesKHR[count];
2621 const bool isShaderSubgroupUniformControlFlowFeaturesKHR = checkExtension(properties, "VK_KHR_shader_subgroup_uniform_control_flow");
2623 for (int ndx = 0; ndx < count; ++ndx)
2625 deMemset(&deviceShaderSubgroupUniformControlFlowFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR));
2626 deviceShaderSubgroupUniformControlFlowFeaturesKHR[ndx].sType = isShaderSubgroupUniformControlFlowFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
2627 deviceShaderSubgroupUniformControlFlowFeaturesKHR[ndx].pNext = DE_NULL;
2629 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2630 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2631 extFeatures.pNext = &deviceShaderSubgroupUniformControlFlowFeaturesKHR[ndx];
2633 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2636 if (isShaderSubgroupUniformControlFlowFeaturesKHR)
2637 log << TestLog::Message << deviceShaderSubgroupUniformControlFlowFeaturesKHR[0] << TestLog::EndMessage;
2639 if (isShaderSubgroupUniformControlFlowFeaturesKHR &&
2640 (deviceShaderSubgroupUniformControlFlowFeaturesKHR[0].shaderSubgroupUniformControlFlow != deviceShaderSubgroupUniformControlFlowFeaturesKHR[1].shaderSubgroupUniformControlFlow))
2642 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR");
2644 return tcu::TestStatus::pass("Querying succeeded");
2647 tcu::TestStatus testPhysicalDeviceFeatureRobustness2FeaturesEXT (Context& context)
2649 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2650 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2651 const InstanceDriver& vki (instance.getDriver());
2652 const int count = 2u;
2653 TestLog& log = context.getTestContext().getLog();
2654 VkPhysicalDeviceFeatures2 extFeatures;
2655 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2657 VkPhysicalDeviceRobustness2FeaturesEXT deviceRobustness2FeaturesEXT[count];
2658 const bool isRobustness2FeaturesEXT = checkExtension(properties, "VK_EXT_robustness2");
2660 for (int ndx = 0; ndx < count; ++ndx)
2662 deMemset(&deviceRobustness2FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRobustness2FeaturesEXT));
2663 deviceRobustness2FeaturesEXT[ndx].sType = isRobustness2FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
2664 deviceRobustness2FeaturesEXT[ndx].pNext = DE_NULL;
2666 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2667 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2668 extFeatures.pNext = &deviceRobustness2FeaturesEXT[ndx];
2670 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2673 if (isRobustness2FeaturesEXT)
2674 log << TestLog::Message << deviceRobustness2FeaturesEXT[0] << TestLog::EndMessage;
2676 if (isRobustness2FeaturesEXT &&
2677 (deviceRobustness2FeaturesEXT[0].robustBufferAccess2 != deviceRobustness2FeaturesEXT[1].robustBufferAccess2 ||
2678 deviceRobustness2FeaturesEXT[0].robustImageAccess2 != deviceRobustness2FeaturesEXT[1].robustImageAccess2 ||
2679 deviceRobustness2FeaturesEXT[0].nullDescriptor != deviceRobustness2FeaturesEXT[1].nullDescriptor))
2681 TCU_FAIL("Mismatch between VkPhysicalDeviceRobustness2FeaturesEXT");
2683 return tcu::TestStatus::pass("Querying succeeded");
2686 tcu::TestStatus testPhysicalDeviceFeatureImageRobustnessFeatures (Context& context)
2688 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2689 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2690 const InstanceDriver& vki (instance.getDriver());
2691 const int count = 2u;
2692 TestLog& log = context.getTestContext().getLog();
2693 VkPhysicalDeviceFeatures2 extFeatures;
2694 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2696 VkPhysicalDeviceImageRobustnessFeatures deviceImageRobustnessFeatures[count];
2697 const bool isImageRobustnessFeatures = checkExtension(properties, "VK_EXT_image_robustness") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
2699 for (int ndx = 0; ndx < count; ++ndx)
2701 deMemset(&deviceImageRobustnessFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImageRobustnessFeatures));
2702 deviceImageRobustnessFeatures[ndx].sType = isImageRobustnessFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
2703 deviceImageRobustnessFeatures[ndx].pNext = DE_NULL;
2705 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2706 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2707 extFeatures.pNext = &deviceImageRobustnessFeatures[ndx];
2709 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2712 if (isImageRobustnessFeatures)
2713 log << TestLog::Message << deviceImageRobustnessFeatures[0] << TestLog::EndMessage;
2715 if (isImageRobustnessFeatures &&
2716 (deviceImageRobustnessFeatures[0].robustImageAccess != deviceImageRobustnessFeatures[1].robustImageAccess))
2718 TCU_FAIL("Mismatch between VkPhysicalDeviceImageRobustnessFeatures");
2720 return tcu::TestStatus::pass("Querying succeeded");
2723 tcu::TestStatus testPhysicalDeviceFeatureWorkgroupMemoryExplicitLayoutFeaturesKHR (Context& context)
2725 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2726 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2727 const InstanceDriver& vki (instance.getDriver());
2728 const int count = 2u;
2729 TestLog& log = context.getTestContext().getLog();
2730 VkPhysicalDeviceFeatures2 extFeatures;
2731 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2733 VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[count];
2734 const bool isWorkgroupMemoryExplicitLayoutFeaturesKHR = checkExtension(properties, "VK_KHR_workgroup_memory_explicit_layout");
2736 for (int ndx = 0; ndx < count; ++ndx)
2738 deMemset(&deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR));
2739 deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[ndx].sType = isWorkgroupMemoryExplicitLayoutFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
2740 deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[ndx].pNext = DE_NULL;
2742 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2743 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2744 extFeatures.pNext = &deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[ndx];
2746 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2749 if (isWorkgroupMemoryExplicitLayoutFeaturesKHR)
2750 log << TestLog::Message << deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[0] << TestLog::EndMessage;
2752 if (isWorkgroupMemoryExplicitLayoutFeaturesKHR &&
2753 (deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[0].workgroupMemoryExplicitLayout != deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[1].workgroupMemoryExplicitLayout ||
2754 deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[0].workgroupMemoryExplicitLayoutScalarBlockLayout != deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[1].workgroupMemoryExplicitLayoutScalarBlockLayout ||
2755 deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[0].workgroupMemoryExplicitLayout8BitAccess != deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[1].workgroupMemoryExplicitLayout8BitAccess ||
2756 deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[0].workgroupMemoryExplicitLayout16BitAccess != deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[1].workgroupMemoryExplicitLayout16BitAccess))
2758 TCU_FAIL("Mismatch between VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR");
2760 return tcu::TestStatus::pass("Querying succeeded");
2763 tcu::TestStatus testPhysicalDeviceFeaturePortabilitySubsetFeaturesKHR (Context& context)
2765 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2766 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2767 const InstanceDriver& vki (instance.getDriver());
2768 const int count = 2u;
2769 TestLog& log = context.getTestContext().getLog();
2770 VkPhysicalDeviceFeatures2 extFeatures;
2771 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2773 VkPhysicalDevicePortabilitySubsetFeaturesKHR devicePortabilitySubsetFeaturesKHR[count];
2774 const bool isPortabilitySubsetFeaturesKHR = checkExtension(properties, "VK_KHR_portability_subset");
2776 for (int ndx = 0; ndx < count; ++ndx)
2778 deMemset(&devicePortabilitySubsetFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePortabilitySubsetFeaturesKHR));
2779 devicePortabilitySubsetFeaturesKHR[ndx].sType = isPortabilitySubsetFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
2780 devicePortabilitySubsetFeaturesKHR[ndx].pNext = DE_NULL;
2782 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2783 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2784 extFeatures.pNext = &devicePortabilitySubsetFeaturesKHR[ndx];
2786 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2789 if (isPortabilitySubsetFeaturesKHR)
2790 log << TestLog::Message << devicePortabilitySubsetFeaturesKHR[0] << TestLog::EndMessage;
2792 if (isPortabilitySubsetFeaturesKHR &&
2793 (devicePortabilitySubsetFeaturesKHR[0].constantAlphaColorBlendFactors != devicePortabilitySubsetFeaturesKHR[1].constantAlphaColorBlendFactors ||
2794 devicePortabilitySubsetFeaturesKHR[0].events != devicePortabilitySubsetFeaturesKHR[1].events ||
2795 devicePortabilitySubsetFeaturesKHR[0].imageViewFormatReinterpretation != devicePortabilitySubsetFeaturesKHR[1].imageViewFormatReinterpretation ||
2796 devicePortabilitySubsetFeaturesKHR[0].imageViewFormatSwizzle != devicePortabilitySubsetFeaturesKHR[1].imageViewFormatSwizzle ||
2797 devicePortabilitySubsetFeaturesKHR[0].imageView2DOn3DImage != devicePortabilitySubsetFeaturesKHR[1].imageView2DOn3DImage ||
2798 devicePortabilitySubsetFeaturesKHR[0].multisampleArrayImage != devicePortabilitySubsetFeaturesKHR[1].multisampleArrayImage ||
2799 devicePortabilitySubsetFeaturesKHR[0].mutableComparisonSamplers != devicePortabilitySubsetFeaturesKHR[1].mutableComparisonSamplers ||
2800 devicePortabilitySubsetFeaturesKHR[0].pointPolygons != devicePortabilitySubsetFeaturesKHR[1].pointPolygons ||
2801 devicePortabilitySubsetFeaturesKHR[0].samplerMipLodBias != devicePortabilitySubsetFeaturesKHR[1].samplerMipLodBias ||
2802 devicePortabilitySubsetFeaturesKHR[0].separateStencilMaskRef != devicePortabilitySubsetFeaturesKHR[1].separateStencilMaskRef ||
2803 devicePortabilitySubsetFeaturesKHR[0].shaderSampleRateInterpolationFunctions != devicePortabilitySubsetFeaturesKHR[1].shaderSampleRateInterpolationFunctions ||
2804 devicePortabilitySubsetFeaturesKHR[0].tessellationIsolines != devicePortabilitySubsetFeaturesKHR[1].tessellationIsolines ||
2805 devicePortabilitySubsetFeaturesKHR[0].tessellationPointMode != devicePortabilitySubsetFeaturesKHR[1].tessellationPointMode ||
2806 devicePortabilitySubsetFeaturesKHR[0].triangleFans != devicePortabilitySubsetFeaturesKHR[1].triangleFans ||
2807 devicePortabilitySubsetFeaturesKHR[0].vertexAttributeAccessBeyondStride != devicePortabilitySubsetFeaturesKHR[1].vertexAttributeAccessBeyondStride))
2809 TCU_FAIL("Mismatch between VkPhysicalDevicePortabilitySubsetFeaturesKHR");
2811 return tcu::TestStatus::pass("Querying succeeded");
2814 tcu::TestStatus testPhysicalDeviceFeature4444FormatsFeaturesEXT (Context& context)
2816 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2817 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2818 const InstanceDriver& vki (instance.getDriver());
2819 const int count = 2u;
2820 TestLog& log = context.getTestContext().getLog();
2821 VkPhysicalDeviceFeatures2 extFeatures;
2822 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2824 VkPhysicalDevice4444FormatsFeaturesEXT device4444FormatsFeaturesEXT[count];
2825 const bool is4444FormatsFeaturesEXT = checkExtension(properties, "VK_EXT_4444_formats");
2827 for (int ndx = 0; ndx < count; ++ndx)
2829 deMemset(&device4444FormatsFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevice4444FormatsFeaturesEXT));
2830 device4444FormatsFeaturesEXT[ndx].sType = is4444FormatsFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
2831 device4444FormatsFeaturesEXT[ndx].pNext = DE_NULL;
2833 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2834 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2835 extFeatures.pNext = &device4444FormatsFeaturesEXT[ndx];
2837 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2840 if (is4444FormatsFeaturesEXT)
2841 log << TestLog::Message << device4444FormatsFeaturesEXT[0] << TestLog::EndMessage;
2843 if (is4444FormatsFeaturesEXT &&
2844 (device4444FormatsFeaturesEXT[0].formatA4R4G4B4 != device4444FormatsFeaturesEXT[1].formatA4R4G4B4 ||
2845 device4444FormatsFeaturesEXT[0].formatA4B4G4R4 != device4444FormatsFeaturesEXT[1].formatA4B4G4R4))
2847 TCU_FAIL("Mismatch between VkPhysicalDevice4444FormatsFeaturesEXT");
2849 return tcu::TestStatus::pass("Querying succeeded");
2852 tcu::TestStatus testPhysicalDeviceFeatureShaderImageAtomicInt64FeaturesEXT (Context& context)
2854 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2855 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2856 const InstanceDriver& vki (instance.getDriver());
2857 const int count = 2u;
2858 TestLog& log = context.getTestContext().getLog();
2859 VkPhysicalDeviceFeatures2 extFeatures;
2860 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2862 VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT deviceShaderImageAtomicInt64FeaturesEXT[count];
2863 const bool isShaderImageAtomicInt64FeaturesEXT = checkExtension(properties, "VK_EXT_shader_image_atomic_int64");
2865 for (int ndx = 0; ndx < count; ++ndx)
2867 deMemset(&deviceShaderImageAtomicInt64FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT));
2868 deviceShaderImageAtomicInt64FeaturesEXT[ndx].sType = isShaderImageAtomicInt64FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
2869 deviceShaderImageAtomicInt64FeaturesEXT[ndx].pNext = DE_NULL;
2871 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2872 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2873 extFeatures.pNext = &deviceShaderImageAtomicInt64FeaturesEXT[ndx];
2875 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2878 if (isShaderImageAtomicInt64FeaturesEXT)
2879 log << TestLog::Message << deviceShaderImageAtomicInt64FeaturesEXT[0] << TestLog::EndMessage;
2881 if (isShaderImageAtomicInt64FeaturesEXT &&
2882 (deviceShaderImageAtomicInt64FeaturesEXT[0].shaderImageInt64Atomics != deviceShaderImageAtomicInt64FeaturesEXT[1].shaderImageInt64Atomics ||
2883 deviceShaderImageAtomicInt64FeaturesEXT[0].sparseImageInt64Atomics != deviceShaderImageAtomicInt64FeaturesEXT[1].sparseImageInt64Atomics))
2885 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT");
2887 return tcu::TestStatus::pass("Querying succeeded");
2890 tcu::TestStatus testPhysicalDeviceFeatureFragmentShadingRateFeaturesKHR (Context& context)
2892 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2893 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2894 const InstanceDriver& vki (instance.getDriver());
2895 const int count = 2u;
2896 TestLog& log = context.getTestContext().getLog();
2897 VkPhysicalDeviceFeatures2 extFeatures;
2898 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2900 VkPhysicalDeviceFragmentShadingRateFeaturesKHR deviceFragmentShadingRateFeaturesKHR[count];
2901 const bool isFragmentShadingRateFeaturesKHR = checkExtension(properties, "VK_KHR_fragment_shading_rate");
2903 for (int ndx = 0; ndx < count; ++ndx)
2905 deMemset(&deviceFragmentShadingRateFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFragmentShadingRateFeaturesKHR));
2906 deviceFragmentShadingRateFeaturesKHR[ndx].sType = isFragmentShadingRateFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
2907 deviceFragmentShadingRateFeaturesKHR[ndx].pNext = DE_NULL;
2909 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2910 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2911 extFeatures.pNext = &deviceFragmentShadingRateFeaturesKHR[ndx];
2913 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2916 if (isFragmentShadingRateFeaturesKHR)
2917 log << TestLog::Message << deviceFragmentShadingRateFeaturesKHR[0] << TestLog::EndMessage;
2919 if (isFragmentShadingRateFeaturesKHR &&
2920 (deviceFragmentShadingRateFeaturesKHR[0].pipelineFragmentShadingRate != deviceFragmentShadingRateFeaturesKHR[1].pipelineFragmentShadingRate ||
2921 deviceFragmentShadingRateFeaturesKHR[0].primitiveFragmentShadingRate != deviceFragmentShadingRateFeaturesKHR[1].primitiveFragmentShadingRate ||
2922 deviceFragmentShadingRateFeaturesKHR[0].attachmentFragmentShadingRate != deviceFragmentShadingRateFeaturesKHR[1].attachmentFragmentShadingRate))
2924 TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentShadingRateFeaturesKHR");
2926 return tcu::TestStatus::pass("Querying succeeded");
2929 tcu::TestStatus testPhysicalDeviceFeatureShaderTerminateInvocationFeatures (Context& context)
2931 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2932 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2933 const InstanceDriver& vki (instance.getDriver());
2934 const int count = 2u;
2935 TestLog& log = context.getTestContext().getLog();
2936 VkPhysicalDeviceFeatures2 extFeatures;
2937 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2939 VkPhysicalDeviceShaderTerminateInvocationFeatures deviceShaderTerminateInvocationFeatures[count];
2940 const bool isShaderTerminateInvocationFeatures = checkExtension(properties, "VK_KHR_shader_terminate_invocation") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
2942 for (int ndx = 0; ndx < count; ++ndx)
2944 deMemset(&deviceShaderTerminateInvocationFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderTerminateInvocationFeatures));
2945 deviceShaderTerminateInvocationFeatures[ndx].sType = isShaderTerminateInvocationFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
2946 deviceShaderTerminateInvocationFeatures[ndx].pNext = DE_NULL;
2948 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2949 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2950 extFeatures.pNext = &deviceShaderTerminateInvocationFeatures[ndx];
2952 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2955 if (isShaderTerminateInvocationFeatures)
2956 log << TestLog::Message << deviceShaderTerminateInvocationFeatures[0] << TestLog::EndMessage;
2958 if (isShaderTerminateInvocationFeatures &&
2959 (deviceShaderTerminateInvocationFeatures[0].shaderTerminateInvocation != deviceShaderTerminateInvocationFeatures[1].shaderTerminateInvocation))
2961 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderTerminateInvocationFeatures");
2963 return tcu::TestStatus::pass("Querying succeeded");
2966 tcu::TestStatus testPhysicalDeviceFeatureImage2DViewOf3DFeaturesEXT (Context& context)
2968 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
2969 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
2970 const InstanceDriver& vki (instance.getDriver());
2971 const int count = 2u;
2972 TestLog& log = context.getTestContext().getLog();
2973 VkPhysicalDeviceFeatures2 extFeatures;
2974 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
2976 VkPhysicalDeviceImage2DViewOf3DFeaturesEXT deviceImage2DViewOf3DFeaturesEXT[count];
2977 const bool isImage2DViewOf3DFeaturesEXT = checkExtension(properties, "VK_EXT_image_2d_view_of_3d");
2979 for (int ndx = 0; ndx < count; ++ndx)
2981 deMemset(&deviceImage2DViewOf3DFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT));
2982 deviceImage2DViewOf3DFeaturesEXT[ndx].sType = isImage2DViewOf3DFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
2983 deviceImage2DViewOf3DFeaturesEXT[ndx].pNext = DE_NULL;
2985 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
2986 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
2987 extFeatures.pNext = &deviceImage2DViewOf3DFeaturesEXT[ndx];
2989 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
2992 if (isImage2DViewOf3DFeaturesEXT)
2993 log << TestLog::Message << deviceImage2DViewOf3DFeaturesEXT[0] << TestLog::EndMessage;
2995 if (isImage2DViewOf3DFeaturesEXT &&
2996 (deviceImage2DViewOf3DFeaturesEXT[0].image2DViewOf3D != deviceImage2DViewOf3DFeaturesEXT[1].image2DViewOf3D ||
2997 deviceImage2DViewOf3DFeaturesEXT[0].sampler2DViewOf3D != deviceImage2DViewOf3DFeaturesEXT[1].sampler2DViewOf3D))
2999 TCU_FAIL("Mismatch between VkPhysicalDeviceImage2DViewOf3DFeaturesEXT");
3001 return tcu::TestStatus::pass("Querying succeeded");
3004 tcu::TestStatus testPhysicalDeviceFeatureDepthClipControlFeaturesEXT (Context& context)
3006 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3007 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3008 const InstanceDriver& vki (instance.getDriver());
3009 const int count = 2u;
3010 TestLog& log = context.getTestContext().getLog();
3011 VkPhysicalDeviceFeatures2 extFeatures;
3012 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3014 VkPhysicalDeviceDepthClipControlFeaturesEXT deviceDepthClipControlFeaturesEXT[count];
3015 const bool isDepthClipControlFeaturesEXT = checkExtension(properties, "VK_EXT_depth_clip_control");
3017 for (int ndx = 0; ndx < count; ++ndx)
3019 deMemset(&deviceDepthClipControlFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDepthClipControlFeaturesEXT));
3020 deviceDepthClipControlFeaturesEXT[ndx].sType = isDepthClipControlFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3021 deviceDepthClipControlFeaturesEXT[ndx].pNext = DE_NULL;
3023 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3024 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3025 extFeatures.pNext = &deviceDepthClipControlFeaturesEXT[ndx];
3027 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3030 if (isDepthClipControlFeaturesEXT)
3031 log << TestLog::Message << deviceDepthClipControlFeaturesEXT[0] << TestLog::EndMessage;
3033 if (isDepthClipControlFeaturesEXT &&
3034 (deviceDepthClipControlFeaturesEXT[0].depthClipControl != deviceDepthClipControlFeaturesEXT[1].depthClipControl))
3036 TCU_FAIL("Mismatch between VkPhysicalDeviceDepthClipControlFeaturesEXT");
3038 return tcu::TestStatus::pass("Querying succeeded");
3041 tcu::TestStatus testPhysicalDeviceFeatureVertexInputDynamicStateFeaturesEXT (Context& context)
3043 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3044 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3045 const InstanceDriver& vki (instance.getDriver());
3046 const int count = 2u;
3047 TestLog& log = context.getTestContext().getLog();
3048 VkPhysicalDeviceFeatures2 extFeatures;
3049 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3051 VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT deviceVertexInputDynamicStateFeaturesEXT[count];
3052 const bool isVertexInputDynamicStateFeaturesEXT = checkExtension(properties, "VK_EXT_vertex_input_dynamic_state");
3054 for (int ndx = 0; ndx < count; ++ndx)
3056 deMemset(&deviceVertexInputDynamicStateFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT));
3057 deviceVertexInputDynamicStateFeaturesEXT[ndx].sType = isVertexInputDynamicStateFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3058 deviceVertexInputDynamicStateFeaturesEXT[ndx].pNext = DE_NULL;
3060 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3061 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3062 extFeatures.pNext = &deviceVertexInputDynamicStateFeaturesEXT[ndx];
3064 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3067 if (isVertexInputDynamicStateFeaturesEXT)
3068 log << TestLog::Message << deviceVertexInputDynamicStateFeaturesEXT[0] << TestLog::EndMessage;
3070 if (isVertexInputDynamicStateFeaturesEXT &&
3071 (deviceVertexInputDynamicStateFeaturesEXT[0].vertexInputDynamicState != deviceVertexInputDynamicStateFeaturesEXT[1].vertexInputDynamicState))
3073 TCU_FAIL("Mismatch between VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT");
3075 return tcu::TestStatus::pass("Querying succeeded");
3078 tcu::TestStatus testPhysicalDeviceFeatureColorWriteEnableFeaturesEXT (Context& context)
3080 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3081 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3082 const InstanceDriver& vki (instance.getDriver());
3083 const int count = 2u;
3084 TestLog& log = context.getTestContext().getLog();
3085 VkPhysicalDeviceFeatures2 extFeatures;
3086 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3088 VkPhysicalDeviceColorWriteEnableFeaturesEXT deviceColorWriteEnableFeaturesEXT[count];
3089 const bool isColorWriteEnableFeaturesEXT = checkExtension(properties, "VK_EXT_color_write_enable");
3091 for (int ndx = 0; ndx < count; ++ndx)
3093 deMemset(&deviceColorWriteEnableFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceColorWriteEnableFeaturesEXT));
3094 deviceColorWriteEnableFeaturesEXT[ndx].sType = isColorWriteEnableFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3095 deviceColorWriteEnableFeaturesEXT[ndx].pNext = DE_NULL;
3097 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3098 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3099 extFeatures.pNext = &deviceColorWriteEnableFeaturesEXT[ndx];
3101 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3104 if (isColorWriteEnableFeaturesEXT)
3105 log << TestLog::Message << deviceColorWriteEnableFeaturesEXT[0] << TestLog::EndMessage;
3107 if (isColorWriteEnableFeaturesEXT &&
3108 (deviceColorWriteEnableFeaturesEXT[0].colorWriteEnable != deviceColorWriteEnableFeaturesEXT[1].colorWriteEnable))
3110 TCU_FAIL("Mismatch between VkPhysicalDeviceColorWriteEnableFeaturesEXT");
3112 return tcu::TestStatus::pass("Querying succeeded");
3115 tcu::TestStatus testPhysicalDeviceFeatureSynchronization2Features (Context& context)
3117 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3118 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3119 const InstanceDriver& vki (instance.getDriver());
3120 const int count = 2u;
3121 TestLog& log = context.getTestContext().getLog();
3122 VkPhysicalDeviceFeatures2 extFeatures;
3123 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3125 VkPhysicalDeviceSynchronization2Features deviceSynchronization2Features[count];
3126 const bool isSynchronization2Features = checkExtension(properties, "VK_KHR_synchronization2") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
3128 for (int ndx = 0; ndx < count; ++ndx)
3130 deMemset(&deviceSynchronization2Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceSynchronization2Features));
3131 deviceSynchronization2Features[ndx].sType = isSynchronization2Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
3132 deviceSynchronization2Features[ndx].pNext = DE_NULL;
3134 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3135 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3136 extFeatures.pNext = &deviceSynchronization2Features[ndx];
3138 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3141 if (isSynchronization2Features)
3142 log << TestLog::Message << deviceSynchronization2Features[0] << TestLog::EndMessage;
3144 if (isSynchronization2Features &&
3145 (deviceSynchronization2Features[0].synchronization2 != deviceSynchronization2Features[1].synchronization2))
3147 TCU_FAIL("Mismatch between VkPhysicalDeviceSynchronization2Features");
3149 return tcu::TestStatus::pass("Querying succeeded");
3152 tcu::TestStatus testPhysicalDeviceFeaturePrimitivesGeneratedQueryFeaturesEXT (Context& context)
3154 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3155 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3156 const InstanceDriver& vki (instance.getDriver());
3157 const int count = 2u;
3158 TestLog& log = context.getTestContext().getLog();
3159 VkPhysicalDeviceFeatures2 extFeatures;
3160 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3162 VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT devicePrimitivesGeneratedQueryFeaturesEXT[count];
3163 const bool isPrimitivesGeneratedQueryFeaturesEXT = checkExtension(properties, "VK_EXT_primitives_generated_query");
3165 for (int ndx = 0; ndx < count; ++ndx)
3167 deMemset(&devicePrimitivesGeneratedQueryFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT));
3168 devicePrimitivesGeneratedQueryFeaturesEXT[ndx].sType = isPrimitivesGeneratedQueryFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3169 devicePrimitivesGeneratedQueryFeaturesEXT[ndx].pNext = DE_NULL;
3171 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3172 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3173 extFeatures.pNext = &devicePrimitivesGeneratedQueryFeaturesEXT[ndx];
3175 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3178 if (isPrimitivesGeneratedQueryFeaturesEXT)
3179 log << TestLog::Message << devicePrimitivesGeneratedQueryFeaturesEXT[0] << TestLog::EndMessage;
3181 if (isPrimitivesGeneratedQueryFeaturesEXT &&
3182 (devicePrimitivesGeneratedQueryFeaturesEXT[0].primitivesGeneratedQuery != devicePrimitivesGeneratedQueryFeaturesEXT[1].primitivesGeneratedQuery ||
3183 devicePrimitivesGeneratedQueryFeaturesEXT[0].primitivesGeneratedQueryWithRasterizerDiscard != devicePrimitivesGeneratedQueryFeaturesEXT[1].primitivesGeneratedQueryWithRasterizerDiscard ||
3184 devicePrimitivesGeneratedQueryFeaturesEXT[0].primitivesGeneratedQueryWithNonZeroStreams != devicePrimitivesGeneratedQueryFeaturesEXT[1].primitivesGeneratedQueryWithNonZeroStreams))
3186 TCU_FAIL("Mismatch between VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT");
3188 return tcu::TestStatus::pass("Querying succeeded");
3191 tcu::TestStatus testPhysicalDeviceFeatureLegacyDitheringFeaturesEXT (Context& context)
3193 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3194 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3195 const InstanceDriver& vki (instance.getDriver());
3196 const int count = 2u;
3197 TestLog& log = context.getTestContext().getLog();
3198 VkPhysicalDeviceFeatures2 extFeatures;
3199 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3201 VkPhysicalDeviceLegacyDitheringFeaturesEXT deviceLegacyDitheringFeaturesEXT[count];
3202 const bool isLegacyDitheringFeaturesEXT = checkExtension(properties, "VK_EXT_legacy_dithering");
3204 for (int ndx = 0; ndx < count; ++ndx)
3206 deMemset(&deviceLegacyDitheringFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceLegacyDitheringFeaturesEXT));
3207 deviceLegacyDitheringFeaturesEXT[ndx].sType = isLegacyDitheringFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3208 deviceLegacyDitheringFeaturesEXT[ndx].pNext = DE_NULL;
3210 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3211 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3212 extFeatures.pNext = &deviceLegacyDitheringFeaturesEXT[ndx];
3214 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3217 if (isLegacyDitheringFeaturesEXT)
3218 log << TestLog::Message << deviceLegacyDitheringFeaturesEXT[0] << TestLog::EndMessage;
3220 if (isLegacyDitheringFeaturesEXT &&
3221 (deviceLegacyDitheringFeaturesEXT[0].legacyDithering != deviceLegacyDitheringFeaturesEXT[1].legacyDithering))
3223 TCU_FAIL("Mismatch between VkPhysicalDeviceLegacyDitheringFeaturesEXT");
3225 return tcu::TestStatus::pass("Querying succeeded");
3228 tcu::TestStatus testPhysicalDeviceFeatureMultisampledRenderToSingleSampledFeaturesEXT (Context& context)
3230 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3231 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3232 const InstanceDriver& vki (instance.getDriver());
3233 const int count = 2u;
3234 TestLog& log = context.getTestContext().getLog();
3235 VkPhysicalDeviceFeatures2 extFeatures;
3236 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3238 VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT deviceMultisampledRenderToSingleSampledFeaturesEXT[count];
3239 const bool isMultisampledRenderToSingleSampledFeaturesEXT = checkExtension(properties, "VK_EXT_multisampled_render_to_single_sampled");
3241 for (int ndx = 0; ndx < count; ++ndx)
3243 deMemset(&deviceMultisampledRenderToSingleSampledFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT));
3244 deviceMultisampledRenderToSingleSampledFeaturesEXT[ndx].sType = isMultisampledRenderToSingleSampledFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3245 deviceMultisampledRenderToSingleSampledFeaturesEXT[ndx].pNext = DE_NULL;
3247 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3248 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3249 extFeatures.pNext = &deviceMultisampledRenderToSingleSampledFeaturesEXT[ndx];
3251 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3254 if (isMultisampledRenderToSingleSampledFeaturesEXT)
3255 log << TestLog::Message << deviceMultisampledRenderToSingleSampledFeaturesEXT[0] << TestLog::EndMessage;
3257 if (isMultisampledRenderToSingleSampledFeaturesEXT &&
3258 (deviceMultisampledRenderToSingleSampledFeaturesEXT[0].multisampledRenderToSingleSampled != deviceMultisampledRenderToSingleSampledFeaturesEXT[1].multisampledRenderToSingleSampled))
3260 TCU_FAIL("Mismatch between VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT");
3262 return tcu::TestStatus::pass("Querying succeeded");
3265 tcu::TestStatus testPhysicalDeviceFeatureYcbcr2Plane444FormatsFeaturesEXT (Context& context)
3267 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3268 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3269 const InstanceDriver& vki (instance.getDriver());
3270 const int count = 2u;
3271 TestLog& log = context.getTestContext().getLog();
3272 VkPhysicalDeviceFeatures2 extFeatures;
3273 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3275 VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT deviceYcbcr2Plane444FormatsFeaturesEXT[count];
3276 const bool isYcbcr2Plane444FormatsFeaturesEXT = checkExtension(properties, "VK_EXT_ycbcr_2plane_444_formats");
3278 for (int ndx = 0; ndx < count; ++ndx)
3280 deMemset(&deviceYcbcr2Plane444FormatsFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT));
3281 deviceYcbcr2Plane444FormatsFeaturesEXT[ndx].sType = isYcbcr2Plane444FormatsFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3282 deviceYcbcr2Plane444FormatsFeaturesEXT[ndx].pNext = DE_NULL;
3284 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3285 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3286 extFeatures.pNext = &deviceYcbcr2Plane444FormatsFeaturesEXT[ndx];
3288 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3291 if (isYcbcr2Plane444FormatsFeaturesEXT)
3292 log << TestLog::Message << deviceYcbcr2Plane444FormatsFeaturesEXT[0] << TestLog::EndMessage;
3294 if (isYcbcr2Plane444FormatsFeaturesEXT &&
3295 (deviceYcbcr2Plane444FormatsFeaturesEXT[0].ycbcr2plane444Formats != deviceYcbcr2Plane444FormatsFeaturesEXT[1].ycbcr2plane444Formats))
3297 TCU_FAIL("Mismatch between VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT");
3299 return tcu::TestStatus::pass("Querying succeeded");
3302 tcu::TestStatus testPhysicalDeviceFeatureProvokingVertexFeaturesEXT (Context& context)
3304 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3305 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3306 const InstanceDriver& vki (instance.getDriver());
3307 const int count = 2u;
3308 TestLog& log = context.getTestContext().getLog();
3309 VkPhysicalDeviceFeatures2 extFeatures;
3310 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3312 VkPhysicalDeviceProvokingVertexFeaturesEXT deviceProvokingVertexFeaturesEXT[count];
3313 const bool isProvokingVertexFeaturesEXT = checkExtension(properties, "VK_EXT_provoking_vertex");
3315 for (int ndx = 0; ndx < count; ++ndx)
3317 deMemset(&deviceProvokingVertexFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT));
3318 deviceProvokingVertexFeaturesEXT[ndx].sType = isProvokingVertexFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3319 deviceProvokingVertexFeaturesEXT[ndx].pNext = DE_NULL;
3321 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3322 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3323 extFeatures.pNext = &deviceProvokingVertexFeaturesEXT[ndx];
3325 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3328 if (isProvokingVertexFeaturesEXT)
3329 log << TestLog::Message << deviceProvokingVertexFeaturesEXT[0] << TestLog::EndMessage;
3331 if (isProvokingVertexFeaturesEXT &&
3332 (deviceProvokingVertexFeaturesEXT[0].provokingVertexLast != deviceProvokingVertexFeaturesEXT[1].provokingVertexLast ||
3333 deviceProvokingVertexFeaturesEXT[0].transformFeedbackPreservesProvokingVertex != deviceProvokingVertexFeaturesEXT[1].transformFeedbackPreservesProvokingVertex))
3335 TCU_FAIL("Mismatch between VkPhysicalDeviceProvokingVertexFeaturesEXT");
3337 return tcu::TestStatus::pass("Querying succeeded");
3340 tcu::TestStatus testPhysicalDeviceFeatureShaderIntegerDotProductFeatures (Context& context)
3342 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3343 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3344 const InstanceDriver& vki (instance.getDriver());
3345 const int count = 2u;
3346 TestLog& log = context.getTestContext().getLog();
3347 VkPhysicalDeviceFeatures2 extFeatures;
3348 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3350 VkPhysicalDeviceShaderIntegerDotProductFeatures deviceShaderIntegerDotProductFeatures[count];
3351 const bool isShaderIntegerDotProductFeatures = checkExtension(properties, "VK_KHR_shader_integer_dot_product") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
3353 for (int ndx = 0; ndx < count; ++ndx)
3355 deMemset(&deviceShaderIntegerDotProductFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderIntegerDotProductFeatures));
3356 deviceShaderIntegerDotProductFeatures[ndx].sType = isShaderIntegerDotProductFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
3357 deviceShaderIntegerDotProductFeatures[ndx].pNext = DE_NULL;
3359 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3360 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3361 extFeatures.pNext = &deviceShaderIntegerDotProductFeatures[ndx];
3363 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3366 if (isShaderIntegerDotProductFeatures)
3367 log << TestLog::Message << deviceShaderIntegerDotProductFeatures[0] << TestLog::EndMessage;
3369 if (isShaderIntegerDotProductFeatures &&
3370 (deviceShaderIntegerDotProductFeatures[0].shaderIntegerDotProduct != deviceShaderIntegerDotProductFeatures[1].shaderIntegerDotProduct))
3372 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderIntegerDotProductFeatures");
3374 return tcu::TestStatus::pass("Querying succeeded");
3377 tcu::TestStatus testPhysicalDeviceFeatureFragmentShaderBarycentricFeaturesKHR (Context& context)
3379 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3380 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3381 const InstanceDriver& vki (instance.getDriver());
3382 const int count = 2u;
3383 TestLog& log = context.getTestContext().getLog();
3384 VkPhysicalDeviceFeatures2 extFeatures;
3385 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3387 VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR deviceFragmentShaderBarycentricFeaturesKHR[count];
3388 const bool isFragmentShaderBarycentricFeaturesKHR = checkExtension(properties, "VK_KHR_fragment_shader_barycentric");
3390 for (int ndx = 0; ndx < count; ++ndx)
3392 deMemset(&deviceFragmentShaderBarycentricFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR));
3393 deviceFragmentShaderBarycentricFeaturesKHR[ndx].sType = isFragmentShaderBarycentricFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM;
3394 deviceFragmentShaderBarycentricFeaturesKHR[ndx].pNext = DE_NULL;
3396 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3397 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3398 extFeatures.pNext = &deviceFragmentShaderBarycentricFeaturesKHR[ndx];
3400 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3403 if (isFragmentShaderBarycentricFeaturesKHR)
3404 log << TestLog::Message << deviceFragmentShaderBarycentricFeaturesKHR[0] << TestLog::EndMessage;
3406 if (isFragmentShaderBarycentricFeaturesKHR &&
3407 (deviceFragmentShaderBarycentricFeaturesKHR[0].fragmentShaderBarycentric != deviceFragmentShaderBarycentricFeaturesKHR[1].fragmentShaderBarycentric))
3409 TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR");
3411 return tcu::TestStatus::pass("Querying succeeded");
3414 tcu::TestStatus testPhysicalDeviceFeatureRGBA10X6FormatsFeaturesEXT (Context& context)
3416 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3417 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3418 const InstanceDriver& vki (instance.getDriver());
3419 const int count = 2u;
3420 TestLog& log = context.getTestContext().getLog();
3421 VkPhysicalDeviceFeatures2 extFeatures;
3422 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3424 VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT deviceRGBA10X6FormatsFeaturesEXT[count];
3425 const bool isRGBA10X6FormatsFeaturesEXT = checkExtension(properties, "VK_EXT_rgba10x6_formats");
3427 for (int ndx = 0; ndx < count; ++ndx)
3429 deMemset(&deviceRGBA10X6FormatsFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT));
3430 deviceRGBA10X6FormatsFeaturesEXT[ndx].sType = isRGBA10X6FormatsFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3431 deviceRGBA10X6FormatsFeaturesEXT[ndx].pNext = DE_NULL;
3433 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3434 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3435 extFeatures.pNext = &deviceRGBA10X6FormatsFeaturesEXT[ndx];
3437 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3440 if (isRGBA10X6FormatsFeaturesEXT)
3441 log << TestLog::Message << deviceRGBA10X6FormatsFeaturesEXT[0] << TestLog::EndMessage;
3443 if (isRGBA10X6FormatsFeaturesEXT &&
3444 (deviceRGBA10X6FormatsFeaturesEXT[0].formatRgba10x6WithoutYCbCrSampler != deviceRGBA10X6FormatsFeaturesEXT[1].formatRgba10x6WithoutYCbCrSampler))
3446 TCU_FAIL("Mismatch between VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT");
3448 return tcu::TestStatus::pass("Querying succeeded");
3451 tcu::TestStatus testPhysicalDeviceFeatureDynamicRenderingFeatures (Context& context)
3453 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3454 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3455 const InstanceDriver& vki (instance.getDriver());
3456 const int count = 2u;
3457 TestLog& log = context.getTestContext().getLog();
3458 VkPhysicalDeviceFeatures2 extFeatures;
3459 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3461 VkPhysicalDeviceDynamicRenderingFeatures deviceDynamicRenderingFeatures[count];
3462 const bool isDynamicRenderingFeatures = checkExtension(properties, "VK_KHR_dynamic_rendering") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0));
3464 for (int ndx = 0; ndx < count; ++ndx)
3466 deMemset(&deviceDynamicRenderingFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDynamicRenderingFeatures));
3467 deviceDynamicRenderingFeatures[ndx].sType = isDynamicRenderingFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM;
3468 deviceDynamicRenderingFeatures[ndx].pNext = DE_NULL;
3470 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3471 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3472 extFeatures.pNext = &deviceDynamicRenderingFeatures[ndx];
3474 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3477 if (isDynamicRenderingFeatures)
3478 log << TestLog::Message << deviceDynamicRenderingFeatures[0] << TestLog::EndMessage;
3480 if (isDynamicRenderingFeatures &&
3481 (deviceDynamicRenderingFeatures[0].dynamicRendering != deviceDynamicRenderingFeatures[1].dynamicRendering))
3483 TCU_FAIL("Mismatch between VkPhysicalDeviceDynamicRenderingFeatures");
3485 return tcu::TestStatus::pass("Querying succeeded");
3488 tcu::TestStatus testPhysicalDeviceFeatureImageViewMinLodFeaturesEXT (Context& context)
3490 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3491 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3492 const InstanceDriver& vki (instance.getDriver());
3493 const int count = 2u;
3494 TestLog& log = context.getTestContext().getLog();
3495 VkPhysicalDeviceFeatures2 extFeatures;
3496 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3498 VkPhysicalDeviceImageViewMinLodFeaturesEXT deviceImageViewMinLodFeaturesEXT[count];
3499 const bool isImageViewMinLodFeaturesEXT = checkExtension(properties, "VK_EXT_image_view_min_lod");
3501 for (int ndx = 0; ndx < count; ++ndx)
3503 deMemset(&deviceImageViewMinLodFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImageViewMinLodFeaturesEXT));
3504 deviceImageViewMinLodFeaturesEXT[ndx].sType = isImageViewMinLodFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3505 deviceImageViewMinLodFeaturesEXT[ndx].pNext = DE_NULL;
3507 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3508 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3509 extFeatures.pNext = &deviceImageViewMinLodFeaturesEXT[ndx];
3511 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3514 if (isImageViewMinLodFeaturesEXT)
3515 log << TestLog::Message << deviceImageViewMinLodFeaturesEXT[0] << TestLog::EndMessage;
3517 if (isImageViewMinLodFeaturesEXT &&
3518 (deviceImageViewMinLodFeaturesEXT[0].minLod != deviceImageViewMinLodFeaturesEXT[1].minLod))
3520 TCU_FAIL("Mismatch between VkPhysicalDeviceImageViewMinLodFeaturesEXT");
3522 return tcu::TestStatus::pass("Querying succeeded");
3525 tcu::TestStatus testPhysicalDeviceFeatureRasterizationOrderAttachmentAccessFeaturesEXT (Context& context)
3527 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3528 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3529 const InstanceDriver& vki (instance.getDriver());
3530 const int count = 2u;
3531 TestLog& log = context.getTestContext().getLog();
3532 VkPhysicalDeviceFeatures2 extFeatures;
3533 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3535 VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT deviceRasterizationOrderAttachmentAccessFeaturesEXT[count];
3536 const bool isRasterizationOrderAttachmentAccessFeaturesEXT = checkExtension(properties, "VK_EXT_rasterization_order_attachment_access");
3538 for (int ndx = 0; ndx < count; ++ndx)
3540 deMemset(&deviceRasterizationOrderAttachmentAccessFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT));
3541 deviceRasterizationOrderAttachmentAccessFeaturesEXT[ndx].sType = isRasterizationOrderAttachmentAccessFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3542 deviceRasterizationOrderAttachmentAccessFeaturesEXT[ndx].pNext = DE_NULL;
3544 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3545 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3546 extFeatures.pNext = &deviceRasterizationOrderAttachmentAccessFeaturesEXT[ndx];
3548 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3551 if (isRasterizationOrderAttachmentAccessFeaturesEXT)
3552 log << TestLog::Message << deviceRasterizationOrderAttachmentAccessFeaturesEXT[0] << TestLog::EndMessage;
3554 if (isRasterizationOrderAttachmentAccessFeaturesEXT &&
3555 (deviceRasterizationOrderAttachmentAccessFeaturesEXT[0].rasterizationOrderColorAttachmentAccess != deviceRasterizationOrderAttachmentAccessFeaturesEXT[1].rasterizationOrderColorAttachmentAccess ||
3556 deviceRasterizationOrderAttachmentAccessFeaturesEXT[0].rasterizationOrderDepthAttachmentAccess != deviceRasterizationOrderAttachmentAccessFeaturesEXT[1].rasterizationOrderDepthAttachmentAccess ||
3557 deviceRasterizationOrderAttachmentAccessFeaturesEXT[0].rasterizationOrderStencilAttachmentAccess != deviceRasterizationOrderAttachmentAccessFeaturesEXT[1].rasterizationOrderStencilAttachmentAccess))
3559 TCU_FAIL("Mismatch between VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT");
3561 return tcu::TestStatus::pass("Querying succeeded");
3564 tcu::TestStatus testPhysicalDeviceFeatureGraphicsPipelineLibraryFeaturesEXT (Context& context)
3566 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3567 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3568 const InstanceDriver& vki (instance.getDriver());
3569 const int count = 2u;
3570 TestLog& log = context.getTestContext().getLog();
3571 VkPhysicalDeviceFeatures2 extFeatures;
3572 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3574 VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT deviceGraphicsPipelineLibraryFeaturesEXT[count];
3575 const bool isGraphicsPipelineLibraryFeaturesEXT = checkExtension(properties, "VK_EXT_graphics_pipeline_library");
3577 for (int ndx = 0; ndx < count; ++ndx)
3579 deMemset(&deviceGraphicsPipelineLibraryFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT));
3580 deviceGraphicsPipelineLibraryFeaturesEXT[ndx].sType = isGraphicsPipelineLibraryFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3581 deviceGraphicsPipelineLibraryFeaturesEXT[ndx].pNext = DE_NULL;
3583 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3584 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3585 extFeatures.pNext = &deviceGraphicsPipelineLibraryFeaturesEXT[ndx];
3587 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3590 if (isGraphicsPipelineLibraryFeaturesEXT)
3591 log << TestLog::Message << deviceGraphicsPipelineLibraryFeaturesEXT[0] << TestLog::EndMessage;
3593 if (isGraphicsPipelineLibraryFeaturesEXT &&
3594 (deviceGraphicsPipelineLibraryFeaturesEXT[0].graphicsPipelineLibrary != deviceGraphicsPipelineLibraryFeaturesEXT[1].graphicsPipelineLibrary))
3596 TCU_FAIL("Mismatch between VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT");
3598 return tcu::TestStatus::pass("Querying succeeded");
3601 tcu::TestStatus testPhysicalDeviceFeatureShaderModuleIdentifierFeaturesEXT (Context& context)
3603 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3604 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3605 const InstanceDriver& vki (instance.getDriver());
3606 const int count = 2u;
3607 TestLog& log = context.getTestContext().getLog();
3608 VkPhysicalDeviceFeatures2 extFeatures;
3609 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3611 VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT deviceShaderModuleIdentifierFeaturesEXT[count];
3612 const bool isShaderModuleIdentifierFeaturesEXT = checkExtension(properties, "VK_EXT_shader_module_identifier");
3614 for (int ndx = 0; ndx < count; ++ndx)
3616 deMemset(&deviceShaderModuleIdentifierFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT));
3617 deviceShaderModuleIdentifierFeaturesEXT[ndx].sType = isShaderModuleIdentifierFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3618 deviceShaderModuleIdentifierFeaturesEXT[ndx].pNext = DE_NULL;
3620 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3621 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3622 extFeatures.pNext = &deviceShaderModuleIdentifierFeaturesEXT[ndx];
3624 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3627 if (isShaderModuleIdentifierFeaturesEXT)
3628 log << TestLog::Message << deviceShaderModuleIdentifierFeaturesEXT[0] << TestLog::EndMessage;
3630 if (isShaderModuleIdentifierFeaturesEXT &&
3631 (deviceShaderModuleIdentifierFeaturesEXT[0].shaderModuleIdentifier != deviceShaderModuleIdentifierFeaturesEXT[1].shaderModuleIdentifier))
3633 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT");
3635 return tcu::TestStatus::pass("Querying succeeded");
3638 tcu::TestStatus testPhysicalDeviceFeatureImageCompressionControlFeaturesEXT (Context& context)
3640 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3641 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3642 const InstanceDriver& vki (instance.getDriver());
3643 const int count = 2u;
3644 TestLog& log = context.getTestContext().getLog();
3645 VkPhysicalDeviceFeatures2 extFeatures;
3646 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3648 VkPhysicalDeviceImageCompressionControlFeaturesEXT deviceImageCompressionControlFeaturesEXT[count];
3649 const bool isImageCompressionControlFeaturesEXT = checkExtension(properties, "VK_EXT_image_compression_control");
3651 for (int ndx = 0; ndx < count; ++ndx)
3653 deMemset(&deviceImageCompressionControlFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImageCompressionControlFeaturesEXT));
3654 deviceImageCompressionControlFeaturesEXT[ndx].sType = isImageCompressionControlFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3655 deviceImageCompressionControlFeaturesEXT[ndx].pNext = DE_NULL;
3657 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3658 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3659 extFeatures.pNext = &deviceImageCompressionControlFeaturesEXT[ndx];
3661 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3664 if (isImageCompressionControlFeaturesEXT)
3665 log << TestLog::Message << deviceImageCompressionControlFeaturesEXT[0] << TestLog::EndMessage;
3667 if (isImageCompressionControlFeaturesEXT &&
3668 (deviceImageCompressionControlFeaturesEXT[0].imageCompressionControl != deviceImageCompressionControlFeaturesEXT[1].imageCompressionControl))
3670 TCU_FAIL("Mismatch between VkPhysicalDeviceImageCompressionControlFeaturesEXT");
3672 return tcu::TestStatus::pass("Querying succeeded");
3675 tcu::TestStatus testPhysicalDeviceFeatureImageCompressionControlSwapchainFeaturesEXT (Context& context)
3677 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3678 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3679 const InstanceDriver& vki (instance.getDriver());
3680 const int count = 2u;
3681 TestLog& log = context.getTestContext().getLog();
3682 VkPhysicalDeviceFeatures2 extFeatures;
3683 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3685 VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT deviceImageCompressionControlSwapchainFeaturesEXT[count];
3686 const bool isImageCompressionControlSwapchainFeaturesEXT = checkExtension(properties, "VK_EXT_image_compression_control_swapchain");
3688 for (int ndx = 0; ndx < count; ++ndx)
3690 deMemset(&deviceImageCompressionControlSwapchainFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT));
3691 deviceImageCompressionControlSwapchainFeaturesEXT[ndx].sType = isImageCompressionControlSwapchainFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3692 deviceImageCompressionControlSwapchainFeaturesEXT[ndx].pNext = DE_NULL;
3694 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3695 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3696 extFeatures.pNext = &deviceImageCompressionControlSwapchainFeaturesEXT[ndx];
3698 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3701 if (isImageCompressionControlSwapchainFeaturesEXT)
3702 log << TestLog::Message << deviceImageCompressionControlSwapchainFeaturesEXT[0] << TestLog::EndMessage;
3704 if (isImageCompressionControlSwapchainFeaturesEXT &&
3705 (deviceImageCompressionControlSwapchainFeaturesEXT[0].imageCompressionControlSwapchain != deviceImageCompressionControlSwapchainFeaturesEXT[1].imageCompressionControlSwapchain))
3707 TCU_FAIL("Mismatch between VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT");
3709 return tcu::TestStatus::pass("Querying succeeded");
3712 tcu::TestStatus testPhysicalDeviceFeatureSubpassMergeFeedbackFeaturesEXT (Context& context)
3714 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3715 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3716 const InstanceDriver& vki (instance.getDriver());
3717 const int count = 2u;
3718 TestLog& log = context.getTestContext().getLog();
3719 VkPhysicalDeviceFeatures2 extFeatures;
3720 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3722 VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT deviceSubpassMergeFeedbackFeaturesEXT[count];
3723 const bool isSubpassMergeFeedbackFeaturesEXT = checkExtension(properties, "VK_EXT_subpass_merge_feedback");
3725 for (int ndx = 0; ndx < count; ++ndx)
3727 deMemset(&deviceSubpassMergeFeedbackFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT));
3728 deviceSubpassMergeFeedbackFeaturesEXT[ndx].sType = isSubpassMergeFeedbackFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3729 deviceSubpassMergeFeedbackFeaturesEXT[ndx].pNext = DE_NULL;
3731 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3732 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3733 extFeatures.pNext = &deviceSubpassMergeFeedbackFeaturesEXT[ndx];
3735 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3738 if (isSubpassMergeFeedbackFeaturesEXT)
3739 log << TestLog::Message << deviceSubpassMergeFeedbackFeaturesEXT[0] << TestLog::EndMessage;
3741 if (isSubpassMergeFeedbackFeaturesEXT &&
3742 (deviceSubpassMergeFeedbackFeaturesEXT[0].subpassMergeFeedback != deviceSubpassMergeFeedbackFeaturesEXT[1].subpassMergeFeedback))
3744 TCU_FAIL("Mismatch between VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT");
3746 return tcu::TestStatus::pass("Querying succeeded");
3749 tcu::TestStatus testPhysicalDeviceFeaturePipelinePropertiesFeaturesEXT (Context& context)
3751 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3752 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3753 const InstanceDriver& vki (instance.getDriver());
3754 const int count = 2u;
3755 TestLog& log = context.getTestContext().getLog();
3756 VkPhysicalDeviceFeatures2 extFeatures;
3757 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3759 VkPhysicalDevicePipelinePropertiesFeaturesEXT devicePipelinePropertiesFeaturesEXT[count];
3760 const bool isPipelinePropertiesFeaturesEXT = checkExtension(properties, "VK_EXT_pipeline_properties");
3762 for (int ndx = 0; ndx < count; ++ndx)
3764 deMemset(&devicePipelinePropertiesFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePipelinePropertiesFeaturesEXT));
3765 devicePipelinePropertiesFeaturesEXT[ndx].sType = isPipelinePropertiesFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3766 devicePipelinePropertiesFeaturesEXT[ndx].pNext = DE_NULL;
3768 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3769 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3770 extFeatures.pNext = &devicePipelinePropertiesFeaturesEXT[ndx];
3772 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3775 if (isPipelinePropertiesFeaturesEXT)
3776 log << TestLog::Message << devicePipelinePropertiesFeaturesEXT[0] << TestLog::EndMessage;
3778 if (isPipelinePropertiesFeaturesEXT &&
3779 (devicePipelinePropertiesFeaturesEXT[0].pipelinePropertiesIdentifier != devicePipelinePropertiesFeaturesEXT[1].pipelinePropertiesIdentifier))
3781 TCU_FAIL("Mismatch between VkPhysicalDevicePipelinePropertiesFeaturesEXT");
3783 return tcu::TestStatus::pass("Querying succeeded");
3786 tcu::TestStatus testPhysicalDeviceFeatureNonSeamlessCubeMapFeaturesEXT (Context& context)
3788 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3789 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3790 const InstanceDriver& vki (instance.getDriver());
3791 const int count = 2u;
3792 TestLog& log = context.getTestContext().getLog();
3793 VkPhysicalDeviceFeatures2 extFeatures;
3794 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3796 VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT deviceNonSeamlessCubeMapFeaturesEXT[count];
3797 const bool isNonSeamlessCubeMapFeaturesEXT = checkExtension(properties, "VK_EXT_non_seamless_cube_map");
3799 for (int ndx = 0; ndx < count; ++ndx)
3801 deMemset(&deviceNonSeamlessCubeMapFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT));
3802 deviceNonSeamlessCubeMapFeaturesEXT[ndx].sType = isNonSeamlessCubeMapFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3803 deviceNonSeamlessCubeMapFeaturesEXT[ndx].pNext = DE_NULL;
3805 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3806 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3807 extFeatures.pNext = &deviceNonSeamlessCubeMapFeaturesEXT[ndx];
3809 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3812 if (isNonSeamlessCubeMapFeaturesEXT)
3813 log << TestLog::Message << deviceNonSeamlessCubeMapFeaturesEXT[0] << TestLog::EndMessage;
3815 if (isNonSeamlessCubeMapFeaturesEXT &&
3816 (deviceNonSeamlessCubeMapFeaturesEXT[0].nonSeamlessCubeMap != deviceNonSeamlessCubeMapFeaturesEXT[1].nonSeamlessCubeMap))
3818 TCU_FAIL("Mismatch between VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT");
3820 return tcu::TestStatus::pass("Querying succeeded");
3823 tcu::TestStatus testPhysicalDeviceFeaturePipelineRobustnessFeaturesEXT (Context& context)
3825 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3826 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3827 const InstanceDriver& vki (instance.getDriver());
3828 const int count = 2u;
3829 TestLog& log = context.getTestContext().getLog();
3830 VkPhysicalDeviceFeatures2 extFeatures;
3831 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3833 VkPhysicalDevicePipelineRobustnessFeaturesEXT devicePipelineRobustnessFeaturesEXT[count];
3834 const bool isPipelineRobustnessFeaturesEXT = checkExtension(properties, "VK_EXT_pipeline_robustness");
3836 for (int ndx = 0; ndx < count; ++ndx)
3838 deMemset(&devicePipelineRobustnessFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePipelineRobustnessFeaturesEXT));
3839 devicePipelineRobustnessFeaturesEXT[ndx].sType = isPipelineRobustnessFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3840 devicePipelineRobustnessFeaturesEXT[ndx].pNext = DE_NULL;
3842 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3843 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3844 extFeatures.pNext = &devicePipelineRobustnessFeaturesEXT[ndx];
3846 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3849 if (isPipelineRobustnessFeaturesEXT)
3850 log << TestLog::Message << devicePipelineRobustnessFeaturesEXT[0] << TestLog::EndMessage;
3852 if (isPipelineRobustnessFeaturesEXT &&
3853 (devicePipelineRobustnessFeaturesEXT[0].pipelineRobustness != devicePipelineRobustnessFeaturesEXT[1].pipelineRobustness))
3855 TCU_FAIL("Mismatch between VkPhysicalDevicePipelineRobustnessFeaturesEXT");
3857 return tcu::TestStatus::pass("Querying succeeded");
3860 tcu::TestStatus testPhysicalDeviceFeatureAmigoProfilingFeaturesSEC (Context& context)
3862 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3863 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3864 const InstanceDriver& vki (instance.getDriver());
3865 const int count = 2u;
3866 TestLog& log = context.getTestContext().getLog();
3867 VkPhysicalDeviceFeatures2 extFeatures;
3868 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3870 VkPhysicalDeviceAmigoProfilingFeaturesSEC deviceAmigoProfilingFeaturesSEC[count];
3871 const bool isAmigoProfilingFeaturesSEC = checkExtension(properties, "VK_SEC_amigo_profiling");
3873 for (int ndx = 0; ndx < count; ++ndx)
3875 deMemset(&deviceAmigoProfilingFeaturesSEC[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceAmigoProfilingFeaturesSEC));
3876 deviceAmigoProfilingFeaturesSEC[ndx].sType = isAmigoProfilingFeaturesSEC ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC : VK_STRUCTURE_TYPE_MAX_ENUM;
3877 deviceAmigoProfilingFeaturesSEC[ndx].pNext = DE_NULL;
3879 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3880 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3881 extFeatures.pNext = &deviceAmigoProfilingFeaturesSEC[ndx];
3883 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3886 if (isAmigoProfilingFeaturesSEC)
3887 log << TestLog::Message << deviceAmigoProfilingFeaturesSEC[0] << TestLog::EndMessage;
3889 if (isAmigoProfilingFeaturesSEC &&
3890 (deviceAmigoProfilingFeaturesSEC[0].amigoProfiling != deviceAmigoProfilingFeaturesSEC[1].amigoProfiling))
3892 TCU_FAIL("Mismatch between VkPhysicalDeviceAmigoProfilingFeaturesSEC");
3894 return tcu::TestStatus::pass("Querying succeeded");
3897 tcu::TestStatus testPhysicalDeviceFeatureAttachmentFeedbackLoopLayoutFeaturesEXT (Context& context)
3899 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3900 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3901 const InstanceDriver& vki (instance.getDriver());
3902 const int count = 2u;
3903 TestLog& log = context.getTestContext().getLog();
3904 VkPhysicalDeviceFeatures2 extFeatures;
3905 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3907 VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT deviceAttachmentFeedbackLoopLayoutFeaturesEXT[count];
3908 const bool isAttachmentFeedbackLoopLayoutFeaturesEXT = checkExtension(properties, "VK_EXT_attachment_feedback_loop_layout");
3910 for (int ndx = 0; ndx < count; ++ndx)
3912 deMemset(&deviceAttachmentFeedbackLoopLayoutFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT));
3913 deviceAttachmentFeedbackLoopLayoutFeaturesEXT[ndx].sType = isAttachmentFeedbackLoopLayoutFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3914 deviceAttachmentFeedbackLoopLayoutFeaturesEXT[ndx].pNext = DE_NULL;
3916 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3917 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3918 extFeatures.pNext = &deviceAttachmentFeedbackLoopLayoutFeaturesEXT[ndx];
3920 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3923 if (isAttachmentFeedbackLoopLayoutFeaturesEXT)
3924 log << TestLog::Message << deviceAttachmentFeedbackLoopLayoutFeaturesEXT[0] << TestLog::EndMessage;
3926 if (isAttachmentFeedbackLoopLayoutFeaturesEXT &&
3927 (deviceAttachmentFeedbackLoopLayoutFeaturesEXT[0].attachmentFeedbackLoopLayout != deviceAttachmentFeedbackLoopLayoutFeaturesEXT[1].attachmentFeedbackLoopLayout))
3929 TCU_FAIL("Mismatch between VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT");
3931 return tcu::TestStatus::pass("Querying succeeded");
3934 tcu::TestStatus testPhysicalDeviceFeatureDepthClampZeroOneFeaturesEXT (Context& context)
3936 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
3937 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2"));
3938 const InstanceDriver& vki (instance.getDriver());
3939 const int count = 2u;
3940 TestLog& log = context.getTestContext().getLog();
3941 VkPhysicalDeviceFeatures2 extFeatures;
3942 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
3944 VkPhysicalDeviceDepthClampZeroOneFeaturesEXT deviceDepthClampZeroOneFeaturesEXT[count];
3945 const bool isDepthClampZeroOneFeaturesEXT = checkExtension(properties, "VK_EXT_depth_clamp_zero_one");
3947 for (int ndx = 0; ndx < count; ++ndx)
3949 deMemset(&deviceDepthClampZeroOneFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDepthClampZeroOneFeaturesEXT));
3950 deviceDepthClampZeroOneFeaturesEXT[ndx].sType = isDepthClampZeroOneFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM;
3951 deviceDepthClampZeroOneFeaturesEXT[ndx].pNext = DE_NULL;
3953 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
3954 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
3955 extFeatures.pNext = &deviceDepthClampZeroOneFeaturesEXT[ndx];
3957 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
3960 if (isDepthClampZeroOneFeaturesEXT)
3961 log << TestLog::Message << deviceDepthClampZeroOneFeaturesEXT[0] << TestLog::EndMessage;
3963 if (isDepthClampZeroOneFeaturesEXT &&
3964 (deviceDepthClampZeroOneFeaturesEXT[0].depthClampZeroOne != deviceDepthClampZeroOneFeaturesEXT[1].depthClampZeroOne))
3966 TCU_FAIL("Mismatch between VkPhysicalDeviceDepthClampZeroOneFeaturesEXT");
3968 return tcu::TestStatus::pass("Querying succeeded");
3971 void addSeparateFeatureTests (tcu::TestCaseGroup* testGroup)
3973 addFunctionCase(testGroup, "private_data_features", "VkPhysicalDevicePrivateDataFeatures", testPhysicalDeviceFeaturePrivateDataFeatures);
3974 addFunctionCase(testGroup, "variable_pointers_features", "VkPhysicalDeviceVariablePointersFeatures", testPhysicalDeviceFeatureVariablePointersFeatures);
3975 addFunctionCase(testGroup, "multiview_features", "VkPhysicalDeviceMultiviewFeatures", testPhysicalDeviceFeatureMultiviewFeatures);
3976 addFunctionCase(testGroup, "present_id_features_khr", "VkPhysicalDevicePresentIdFeaturesKHR", testPhysicalDeviceFeaturePresentIdFeaturesKHR);
3977 addFunctionCase(testGroup, "present_wait_features_khr", "VkPhysicalDevicePresentWaitFeaturesKHR", testPhysicalDeviceFeaturePresentWaitFeaturesKHR);
3978 addFunctionCase(testGroup, "16_bit_storage_features", "VkPhysicalDevice16BitStorageFeatures", testPhysicalDeviceFeature16BitStorageFeatures);
3979 addFunctionCase(testGroup, "shader_subgroup_extended_types_features", "VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures", testPhysicalDeviceFeatureShaderSubgroupExtendedTypesFeatures);
3980 addFunctionCase(testGroup, "sampler_ycbcr_conversion_features", "VkPhysicalDeviceSamplerYcbcrConversionFeatures", testPhysicalDeviceFeatureSamplerYcbcrConversionFeatures);
3981 addFunctionCase(testGroup, "protected_memory_features", "VkPhysicalDeviceProtectedMemoryFeatures", testPhysicalDeviceFeatureProtectedMemoryFeatures);
3982 addFunctionCase(testGroup, "blend_operation_advanced_features_ext", "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT", testPhysicalDeviceFeatureBlendOperationAdvancedFeaturesEXT);
3983 addFunctionCase(testGroup, "multi_draw_features_ext", "VkPhysicalDeviceMultiDrawFeaturesEXT", testPhysicalDeviceFeatureMultiDrawFeaturesEXT);
3984 addFunctionCase(testGroup, "inline_uniform_block_features", "VkPhysicalDeviceInlineUniformBlockFeatures", testPhysicalDeviceFeatureInlineUniformBlockFeatures);
3985 addFunctionCase(testGroup, "maintenance4_features", "VkPhysicalDeviceMaintenance4Features", testPhysicalDeviceFeatureMaintenance4Features);
3986 addFunctionCase(testGroup, "shader_draw_parameters_features", "VkPhysicalDeviceShaderDrawParametersFeatures", testPhysicalDeviceFeatureShaderDrawParametersFeatures);
3987 addFunctionCase(testGroup, "shader_float16_int8_features", "VkPhysicalDeviceShaderFloat16Int8Features", testPhysicalDeviceFeatureShaderFloat16Int8Features);
3988 addFunctionCase(testGroup, "host_query_reset_features", "VkPhysicalDeviceHostQueryResetFeatures", testPhysicalDeviceFeatureHostQueryResetFeatures);
3989 addFunctionCase(testGroup, "global_priority_query_features_khr", "VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR", testPhysicalDeviceFeatureGlobalPriorityQueryFeaturesKHR);
3990 addFunctionCase(testGroup, "device_memory_report_features_ext", "VkPhysicalDeviceDeviceMemoryReportFeaturesEXT", testPhysicalDeviceFeatureDeviceMemoryReportFeaturesEXT);
3991 addFunctionCase(testGroup, "descriptor_indexing_features", "VkPhysicalDeviceDescriptorIndexingFeatures", testPhysicalDeviceFeatureDescriptorIndexingFeatures);
3992 addFunctionCase(testGroup, "timeline_semaphore_features", "VkPhysicalDeviceTimelineSemaphoreFeatures", testPhysicalDeviceFeatureTimelineSemaphoreFeatures);
3993 addFunctionCase(testGroup, "8_bit_storage_features", "VkPhysicalDevice8BitStorageFeatures", testPhysicalDeviceFeature8BitStorageFeatures);
3994 addFunctionCase(testGroup, "conditional_rendering_features_ext", "VkPhysicalDeviceConditionalRenderingFeaturesEXT", testPhysicalDeviceFeatureConditionalRenderingFeaturesEXT);
3995 addFunctionCase(testGroup, "vulkan_memory_model_features", "VkPhysicalDeviceVulkanMemoryModelFeatures", testPhysicalDeviceFeatureVulkanMemoryModelFeatures);
3996 addFunctionCase(testGroup, "shader_atomic_int64_features", "VkPhysicalDeviceShaderAtomicInt64Features", testPhysicalDeviceFeatureShaderAtomicInt64Features);
3997 addFunctionCase(testGroup, "shader_atomic_float_features_ext", "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT", testPhysicalDeviceFeatureShaderAtomicFloatFeaturesEXT);
3998 addFunctionCase(testGroup, "shader_atomic_float2_features_ext", "VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT", testPhysicalDeviceFeatureShaderAtomicFloat2FeaturesEXT);
3999 addFunctionCase(testGroup, "vertex_attribute_divisor_features_ext", "VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT", testPhysicalDeviceFeatureVertexAttributeDivisorFeaturesEXT);
4000 addFunctionCase(testGroup, "astc_decode_features_ext", "VkPhysicalDeviceASTCDecodeFeaturesEXT", testPhysicalDeviceFeatureASTCDecodeFeaturesEXT);
4001 addFunctionCase(testGroup, "transform_feedback_features_ext", "VkPhysicalDeviceTransformFeedbackFeaturesEXT", testPhysicalDeviceFeatureTransformFeedbackFeaturesEXT);
4002 addFunctionCase(testGroup, "mesh_shader_features_ext", "VkPhysicalDeviceMeshShaderFeaturesEXT", testPhysicalDeviceFeatureMeshShaderFeaturesEXT);
4003 addFunctionCase(testGroup, "acceleration_structure_features_khr", "VkPhysicalDeviceAccelerationStructureFeaturesKHR", testPhysicalDeviceFeatureAccelerationStructureFeaturesKHR);
4004 addFunctionCase(testGroup, "ray_tracing_pipeline_features_khr", "VkPhysicalDeviceRayTracingPipelineFeaturesKHR", testPhysicalDeviceFeatureRayTracingPipelineFeaturesKHR);
4005 addFunctionCase(testGroup, "ray_query_features_khr", "VkPhysicalDeviceRayQueryFeaturesKHR", testPhysicalDeviceFeatureRayQueryFeaturesKHR);
4006 addFunctionCase(testGroup, "ray_tracing_maintenance1_features_khr", "VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR", testPhysicalDeviceFeatureRayTracingMaintenance1FeaturesKHR);
4007 addFunctionCase(testGroup, "fragment_density_map_features_ext", "VkPhysicalDeviceFragmentDensityMapFeaturesEXT", testPhysicalDeviceFeatureFragmentDensityMapFeaturesEXT);
4008 addFunctionCase(testGroup, "fragment_density_map2_features_ext", "VkPhysicalDeviceFragmentDensityMap2FeaturesEXT", testPhysicalDeviceFeatureFragmentDensityMap2FeaturesEXT);
4009 addFunctionCase(testGroup, "scalar_block_layout_features", "VkPhysicalDeviceScalarBlockLayoutFeatures", testPhysicalDeviceFeatureScalarBlockLayoutFeatures);
4010 addFunctionCase(testGroup, "uniform_buffer_standard_layout_features", "VkPhysicalDeviceUniformBufferStandardLayoutFeatures", testPhysicalDeviceFeatureUniformBufferStandardLayoutFeatures);
4011 addFunctionCase(testGroup, "depth_clip_enable_features_ext", "VkPhysicalDeviceDepthClipEnableFeaturesEXT", testPhysicalDeviceFeatureDepthClipEnableFeaturesEXT);
4012 addFunctionCase(testGroup, "memory_priority_features_ext", "VkPhysicalDeviceMemoryPriorityFeaturesEXT", testPhysicalDeviceFeatureMemoryPriorityFeaturesEXT);
4013 addFunctionCase(testGroup, "pageable_device_local_memory_features_ext", "VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT", testPhysicalDeviceFeaturePageableDeviceLocalMemoryFeaturesEXT);
4014 addFunctionCase(testGroup, "buffer_device_address_features", "VkPhysicalDeviceBufferDeviceAddressFeatures", testPhysicalDeviceFeatureBufferDeviceAddressFeatures);
4015 addFunctionCase(testGroup, "buffer_device_address_features_ext", "VkPhysicalDeviceBufferDeviceAddressFeaturesEXT", testPhysicalDeviceFeatureBufferDeviceAddressFeaturesEXT);
4016 addFunctionCase(testGroup, "imageless_framebuffer_features", "VkPhysicalDeviceImagelessFramebufferFeatures", testPhysicalDeviceFeatureImagelessFramebufferFeatures);
4017 addFunctionCase(testGroup, "texture_compression_astchdr_features", "VkPhysicalDeviceTextureCompressionASTCHDRFeatures", testPhysicalDeviceFeatureTextureCompressionASTCHDRFeatures);
4018 addFunctionCase(testGroup, "ycbcr_image_arrays_features_ext", "VkPhysicalDeviceYcbcrImageArraysFeaturesEXT", testPhysicalDeviceFeatureYcbcrImageArraysFeaturesEXT);
4019 addFunctionCase(testGroup, "performance_query_features_khr", "VkPhysicalDevicePerformanceQueryFeaturesKHR", testPhysicalDeviceFeaturePerformanceQueryFeaturesKHR);
4020 addFunctionCase(testGroup, "shader_clock_features_khr", "VkPhysicalDeviceShaderClockFeaturesKHR", testPhysicalDeviceFeatureShaderClockFeaturesKHR);
4021 addFunctionCase(testGroup, "index_type_uint8_features_ext", "VkPhysicalDeviceIndexTypeUint8FeaturesEXT", testPhysicalDeviceFeatureIndexTypeUint8FeaturesEXT);
4022 addFunctionCase(testGroup, "fragment_shader_interlock_features_ext", "VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT", testPhysicalDeviceFeatureFragmentShaderInterlockFeaturesEXT);
4023 addFunctionCase(testGroup, "separate_depth_stencil_layouts_features", "VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures", testPhysicalDeviceFeatureSeparateDepthStencilLayoutsFeatures);
4024 addFunctionCase(testGroup, "primitive_topology_list_restart_features_ext", "VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT", testPhysicalDeviceFeaturePrimitiveTopologyListRestartFeaturesEXT);
4025 addFunctionCase(testGroup, "pipeline_executable_properties_features_khr", "VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR", testPhysicalDeviceFeaturePipelineExecutablePropertiesFeaturesKHR);
4026 addFunctionCase(testGroup, "shader_demote_to_helper_invocation_features", "VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures", testPhysicalDeviceFeatureShaderDemoteToHelperInvocationFeatures);
4027 addFunctionCase(testGroup, "texel_buffer_alignment_features_ext", "VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT", testPhysicalDeviceFeatureTexelBufferAlignmentFeaturesEXT);
4028 addFunctionCase(testGroup, "subgroup_size_control_features", "VkPhysicalDeviceSubgroupSizeControlFeatures", testPhysicalDeviceFeatureSubgroupSizeControlFeatures);
4029 addFunctionCase(testGroup, "line_rasterization_features_ext", "VkPhysicalDeviceLineRasterizationFeaturesEXT", testPhysicalDeviceFeatureLineRasterizationFeaturesEXT);
4030 addFunctionCase(testGroup, "pipeline_creation_cache_control_features", "VkPhysicalDevicePipelineCreationCacheControlFeatures", testPhysicalDeviceFeaturePipelineCreationCacheControlFeatures);
4031 addFunctionCase(testGroup, "vulkan11_features", "VkPhysicalDeviceVulkan11Features", testPhysicalDeviceFeatureVulkan11Features);
4032 addFunctionCase(testGroup, "vulkan12_features", "VkPhysicalDeviceVulkan12Features", testPhysicalDeviceFeatureVulkan12Features);
4033 addFunctionCase(testGroup, "vulkan13_features", "VkPhysicalDeviceVulkan13Features", testPhysicalDeviceFeatureVulkan13Features);
4034 addFunctionCase(testGroup, "custom_border_color_features_ext", "VkPhysicalDeviceCustomBorderColorFeaturesEXT", testPhysicalDeviceFeatureCustomBorderColorFeaturesEXT);
4035 addFunctionCase(testGroup, "border_color_swizzle_features_ext", "VkPhysicalDeviceBorderColorSwizzleFeaturesEXT", testPhysicalDeviceFeatureBorderColorSwizzleFeaturesEXT);
4036 addFunctionCase(testGroup, "extended_dynamic_state_features_ext", "VkPhysicalDeviceExtendedDynamicStateFeaturesEXT", testPhysicalDeviceFeatureExtendedDynamicStateFeaturesEXT);
4037 addFunctionCase(testGroup, "extended_dynamic_state2_features_ext", "VkPhysicalDeviceExtendedDynamicState2FeaturesEXT", testPhysicalDeviceFeatureExtendedDynamicState2FeaturesEXT);
4038 addFunctionCase(testGroup, "zero_initialize_workgroup_memory_features", "VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures", testPhysicalDeviceFeatureZeroInitializeWorkgroupMemoryFeatures);
4039 addFunctionCase(testGroup, "shader_subgroup_uniform_control_flow_features_khr", "VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR", testPhysicalDeviceFeatureShaderSubgroupUniformControlFlowFeaturesKHR);
4040 addFunctionCase(testGroup, "robustness2_features_ext", "VkPhysicalDeviceRobustness2FeaturesEXT", testPhysicalDeviceFeatureRobustness2FeaturesEXT);
4041 addFunctionCase(testGroup, "image_robustness_features", "VkPhysicalDeviceImageRobustnessFeatures", testPhysicalDeviceFeatureImageRobustnessFeatures);
4042 addFunctionCase(testGroup, "workgroup_memory_explicit_layout_features_khr", "VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR", testPhysicalDeviceFeatureWorkgroupMemoryExplicitLayoutFeaturesKHR);
4043 addFunctionCase(testGroup, "portability_subset_features_khr", "VkPhysicalDevicePortabilitySubsetFeaturesKHR", testPhysicalDeviceFeaturePortabilitySubsetFeaturesKHR);
4044 addFunctionCase(testGroup, "4444_formats_features_ext", "VkPhysicalDevice4444FormatsFeaturesEXT", testPhysicalDeviceFeature4444FormatsFeaturesEXT);
4045 addFunctionCase(testGroup, "shader_image_atomic_int64_features_ext", "VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT", testPhysicalDeviceFeatureShaderImageAtomicInt64FeaturesEXT);
4046 addFunctionCase(testGroup, "fragment_shading_rate_features_khr", "VkPhysicalDeviceFragmentShadingRateFeaturesKHR", testPhysicalDeviceFeatureFragmentShadingRateFeaturesKHR);
4047 addFunctionCase(testGroup, "shader_terminate_invocation_features", "VkPhysicalDeviceShaderTerminateInvocationFeatures", testPhysicalDeviceFeatureShaderTerminateInvocationFeatures);
4048 addFunctionCase(testGroup, "image2_d_view_of3_d_features_ext", "VkPhysicalDeviceImage2DViewOf3DFeaturesEXT", testPhysicalDeviceFeatureImage2DViewOf3DFeaturesEXT);
4049 addFunctionCase(testGroup, "depth_clip_control_features_ext", "VkPhysicalDeviceDepthClipControlFeaturesEXT", testPhysicalDeviceFeatureDepthClipControlFeaturesEXT);
4050 addFunctionCase(testGroup, "vertex_input_dynamic_state_features_ext", "VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT", testPhysicalDeviceFeatureVertexInputDynamicStateFeaturesEXT);
4051 addFunctionCase(testGroup, "color_write_enable_features_ext", "VkPhysicalDeviceColorWriteEnableFeaturesEXT", testPhysicalDeviceFeatureColorWriteEnableFeaturesEXT);
4052 addFunctionCase(testGroup, "synchronization2_features", "VkPhysicalDeviceSynchronization2Features", testPhysicalDeviceFeatureSynchronization2Features);
4053 addFunctionCase(testGroup, "primitives_generated_query_features_ext", "VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT", testPhysicalDeviceFeaturePrimitivesGeneratedQueryFeaturesEXT);
4054 addFunctionCase(testGroup, "legacy_dithering_features_ext", "VkPhysicalDeviceLegacyDitheringFeaturesEXT", testPhysicalDeviceFeatureLegacyDitheringFeaturesEXT);
4055 addFunctionCase(testGroup, "multisampled_render_to_single_sampled_features_ext", "VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT", testPhysicalDeviceFeatureMultisampledRenderToSingleSampledFeaturesEXT);
4056 addFunctionCase(testGroup, "ycbcr2_plane444_formats_features_ext", "VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT", testPhysicalDeviceFeatureYcbcr2Plane444FormatsFeaturesEXT);
4057 addFunctionCase(testGroup, "provoking_vertex_features_ext", "VkPhysicalDeviceProvokingVertexFeaturesEXT", testPhysicalDeviceFeatureProvokingVertexFeaturesEXT);
4058 addFunctionCase(testGroup, "shader_integer_dot_product_features", "VkPhysicalDeviceShaderIntegerDotProductFeatures", testPhysicalDeviceFeatureShaderIntegerDotProductFeatures);
4059 addFunctionCase(testGroup, "fragment_shader_barycentric_features_khr", "VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR", testPhysicalDeviceFeatureFragmentShaderBarycentricFeaturesKHR);
4060 addFunctionCase(testGroup, "rgba10_x6_formats_features_ext", "VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT", testPhysicalDeviceFeatureRGBA10X6FormatsFeaturesEXT);
4061 addFunctionCase(testGroup, "dynamic_rendering_features", "VkPhysicalDeviceDynamicRenderingFeatures", testPhysicalDeviceFeatureDynamicRenderingFeatures);
4062 addFunctionCase(testGroup, "image_view_min_lod_features_ext", "VkPhysicalDeviceImageViewMinLodFeaturesEXT", testPhysicalDeviceFeatureImageViewMinLodFeaturesEXT);
4063 addFunctionCase(testGroup, "rasterization_order_attachment_access_features_ext", "VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT", testPhysicalDeviceFeatureRasterizationOrderAttachmentAccessFeaturesEXT);
4064 addFunctionCase(testGroup, "graphics_pipeline_library_features_ext", "VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT", testPhysicalDeviceFeatureGraphicsPipelineLibraryFeaturesEXT);
4065 addFunctionCase(testGroup, "shader_module_identifier_features_ext", "VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT", testPhysicalDeviceFeatureShaderModuleIdentifierFeaturesEXT);
4066 addFunctionCase(testGroup, "image_compression_control_features_ext", "VkPhysicalDeviceImageCompressionControlFeaturesEXT", testPhysicalDeviceFeatureImageCompressionControlFeaturesEXT);
4067 addFunctionCase(testGroup, "image_compression_control_swapchain_features_ext", "VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT", testPhysicalDeviceFeatureImageCompressionControlSwapchainFeaturesEXT);
4068 addFunctionCase(testGroup, "subpass_merge_feedback_features_ext", "VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT", testPhysicalDeviceFeatureSubpassMergeFeedbackFeaturesEXT);
4069 addFunctionCase(testGroup, "pipeline_properties_features_ext", "VkPhysicalDevicePipelinePropertiesFeaturesEXT", testPhysicalDeviceFeaturePipelinePropertiesFeaturesEXT);
4070 addFunctionCase(testGroup, "non_seamless_cube_map_features_ext", "VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT", testPhysicalDeviceFeatureNonSeamlessCubeMapFeaturesEXT);
4071 addFunctionCase(testGroup, "pipeline_robustness_features_ext", "VkPhysicalDevicePipelineRobustnessFeaturesEXT", testPhysicalDeviceFeaturePipelineRobustnessFeaturesEXT);
4072 addFunctionCase(testGroup, "amigo_profiling_features_sec", "VkPhysicalDeviceAmigoProfilingFeaturesSEC", testPhysicalDeviceFeatureAmigoProfilingFeaturesSEC);
4073 addFunctionCase(testGroup, "attachment_feedback_loop_layout_features_ext", "VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT", testPhysicalDeviceFeatureAttachmentFeedbackLoopLayoutFeaturesEXT);
4074 addFunctionCase(testGroup, "depth_clamp_zero_one_features_ext", "VkPhysicalDeviceDepthClampZeroOneFeaturesEXT", testPhysicalDeviceFeatureDepthClampZeroOneFeaturesEXT);