1/* WARNING: This is auto-generated file. Do not modify, since changes will 2 * be lost! Modify the generating script instead. 3 * This file was generated by /scripts/gen_framework.py 4 */ 5 6tcu::TestStatus testPhysicalDeviceFeaturePrivateDataFeatures (Context& context) 7{ 8 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 9 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 10 const InstanceDriver& vki (instance.getDriver()); 11 const int count = 2u; 12 TestLog& log = context.getTestContext().getLog(); 13 VkPhysicalDeviceFeatures2 extFeatures; 14 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 15 16 VkPhysicalDevicePrivateDataFeatures devicePrivateDataFeatures[count]; 17 const bool isPrivateDataFeatures = checkExtension(properties, "VK_EXT_private_data") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 18 19 for (int ndx = 0; ndx < count; ++ndx) 20 { 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; 24 25 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 26 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 27 extFeatures.pNext = &devicePrivateDataFeatures[ndx]; 28 29 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 30 } 31 32 if (isPrivateDataFeatures) 33 log << TestLog::Message << devicePrivateDataFeatures[0] << TestLog::EndMessage; 34 35 if (isPrivateDataFeatures && 36 (devicePrivateDataFeatures[0].privateData != devicePrivateDataFeatures[1].privateData)) 37 { 38 TCU_FAIL("Mismatch between VkPhysicalDevicePrivateDataFeatures"); 39 } 40 return tcu::TestStatus::pass("Querying succeeded"); 41} 42 43tcu::TestStatus testPhysicalDeviceFeatureVariablePointersFeatures (Context& context) 44{ 45 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 46 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 47 const InstanceDriver& vki (instance.getDriver()); 48 const int count = 2u; 49 TestLog& log = context.getTestContext().getLog(); 50 VkPhysicalDeviceFeatures2 extFeatures; 51 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 52 53 VkPhysicalDeviceVariablePointersFeatures deviceVariablePointersFeatures[count]; 54 const bool isVariablePointersFeatures = checkExtension(properties, "VK_KHR_variable_pointers") || context.contextSupports(vk::ApiVersion(0, 1, 1, 0)); 55 56 for (int ndx = 0; ndx < count; ++ndx) 57 { 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; 61 62 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 63 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 64 extFeatures.pNext = &deviceVariablePointersFeatures[ndx]; 65 66 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 67 } 68 69 if (isVariablePointersFeatures) 70 log << TestLog::Message << deviceVariablePointersFeatures[0] << TestLog::EndMessage; 71 72 if (isVariablePointersFeatures && 73 (deviceVariablePointersFeatures[0].variablePointersStorageBuffer != deviceVariablePointersFeatures[1].variablePointersStorageBuffer || 74 deviceVariablePointersFeatures[0].variablePointers != deviceVariablePointersFeatures[1].variablePointers)) 75 { 76 TCU_FAIL("Mismatch between VkPhysicalDeviceVariablePointersFeatures"); 77 } 78 return tcu::TestStatus::pass("Querying succeeded"); 79} 80 81tcu::TestStatus testPhysicalDeviceFeatureMultiviewFeatures (Context& context) 82{ 83 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 84 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 85 const InstanceDriver& vki (instance.getDriver()); 86 const int count = 2u; 87 TestLog& log = context.getTestContext().getLog(); 88 VkPhysicalDeviceFeatures2 extFeatures; 89 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 90 91 VkPhysicalDeviceMultiviewFeatures deviceMultiviewFeatures[count]; 92 const bool isMultiviewFeatures = checkExtension(properties, "VK_KHR_multiview") || context.contextSupports(vk::ApiVersion(0, 1, 1, 0)); 93 94 for (int ndx = 0; ndx < count; ++ndx) 95 { 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; 99 100 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 101 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 102 extFeatures.pNext = &deviceMultiviewFeatures[ndx]; 103 104 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 105 } 106 107 if (isMultiviewFeatures) 108 log << TestLog::Message << deviceMultiviewFeatures[0] << TestLog::EndMessage; 109 110 if (isMultiviewFeatures && 111 (deviceMultiviewFeatures[0].multiview != deviceMultiviewFeatures[1].multiview || 112 deviceMultiviewFeatures[0].multiviewGeometryShader != deviceMultiviewFeatures[1].multiviewGeometryShader || 113 deviceMultiviewFeatures[0].multiviewTessellationShader != deviceMultiviewFeatures[1].multiviewTessellationShader)) 114 { 115 TCU_FAIL("Mismatch between VkPhysicalDeviceMultiviewFeatures"); 116 } 117 return tcu::TestStatus::pass("Querying succeeded"); 118} 119 120tcu::TestStatus testPhysicalDeviceFeaturePresentIdFeaturesKHR (Context& context) 121{ 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); 129 130 VkPhysicalDevicePresentIdFeaturesKHR devicePresentIdFeaturesKHR[count]; 131 const bool isPresentIdFeaturesKHR = checkExtension(properties, "VK_KHR_present_id"); 132 133 for (int ndx = 0; ndx < count; ++ndx) 134 { 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; 138 139 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 140 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 141 extFeatures.pNext = &devicePresentIdFeaturesKHR[ndx]; 142 143 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 144 } 145 146 if (isPresentIdFeaturesKHR) 147 log << TestLog::Message << devicePresentIdFeaturesKHR[0] << TestLog::EndMessage; 148 149 if (isPresentIdFeaturesKHR && 150 (devicePresentIdFeaturesKHR[0].presentId != devicePresentIdFeaturesKHR[1].presentId)) 151 { 152 TCU_FAIL("Mismatch between VkPhysicalDevicePresentIdFeaturesKHR"); 153 } 154 return tcu::TestStatus::pass("Querying succeeded"); 155} 156 157tcu::TestStatus testPhysicalDeviceFeaturePresentWaitFeaturesKHR (Context& context) 158{ 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); 166 167 VkPhysicalDevicePresentWaitFeaturesKHR devicePresentWaitFeaturesKHR[count]; 168 const bool isPresentWaitFeaturesKHR = checkExtension(properties, "VK_KHR_present_wait"); 169 170 for (int ndx = 0; ndx < count; ++ndx) 171 { 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; 175 176 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 177 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 178 extFeatures.pNext = &devicePresentWaitFeaturesKHR[ndx]; 179 180 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 181 } 182 183 if (isPresentWaitFeaturesKHR) 184 log << TestLog::Message << devicePresentWaitFeaturesKHR[0] << TestLog::EndMessage; 185 186 if (isPresentWaitFeaturesKHR && 187 (devicePresentWaitFeaturesKHR[0].presentWait != devicePresentWaitFeaturesKHR[1].presentWait)) 188 { 189 TCU_FAIL("Mismatch between VkPhysicalDevicePresentWaitFeaturesKHR"); 190 } 191 return tcu::TestStatus::pass("Querying succeeded"); 192} 193 194tcu::TestStatus testPhysicalDeviceFeature16BitStorageFeatures (Context& context) 195{ 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); 203 204 VkPhysicalDevice16BitStorageFeatures device16BitStorageFeatures[count]; 205 const bool is16BitStorageFeatures = checkExtension(properties, "VK_KHR_16bit_storage") || context.contextSupports(vk::ApiVersion(0, 1, 1, 0)); 206 207 for (int ndx = 0; ndx < count; ++ndx) 208 { 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; 212 213 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 214 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 215 extFeatures.pNext = &device16BitStorageFeatures[ndx]; 216 217 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 218 } 219 220 if (is16BitStorageFeatures) 221 log << TestLog::Message << device16BitStorageFeatures[0] << TestLog::EndMessage; 222 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)) 228 { 229 TCU_FAIL("Mismatch between VkPhysicalDevice16BitStorageFeatures"); 230 } 231 return tcu::TestStatus::pass("Querying succeeded"); 232} 233 234tcu::TestStatus testPhysicalDeviceFeatureShaderSubgroupExtendedTypesFeatures (Context& context) 235{ 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); 243 244 VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures deviceShaderSubgroupExtendedTypesFeatures[count]; 245 const bool isShaderSubgroupExtendedTypesFeatures = checkExtension(properties, "VK_KHR_shader_subgroup_extended_types") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 246 247 for (int ndx = 0; ndx < count; ++ndx) 248 { 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; 252 253 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 254 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 255 extFeatures.pNext = &deviceShaderSubgroupExtendedTypesFeatures[ndx]; 256 257 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 258 } 259 260 if (isShaderSubgroupExtendedTypesFeatures) 261 log << TestLog::Message << deviceShaderSubgroupExtendedTypesFeatures[0] << TestLog::EndMessage; 262 263 if (isShaderSubgroupExtendedTypesFeatures && 264 (deviceShaderSubgroupExtendedTypesFeatures[0].shaderSubgroupExtendedTypes != deviceShaderSubgroupExtendedTypesFeatures[1].shaderSubgroupExtendedTypes)) 265 { 266 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures"); 267 } 268 return tcu::TestStatus::pass("Querying succeeded"); 269} 270 271tcu::TestStatus testPhysicalDeviceFeatureSamplerYcbcrConversionFeatures (Context& context) 272{ 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); 280 281 VkPhysicalDeviceSamplerYcbcrConversionFeatures deviceSamplerYcbcrConversionFeatures[count]; 282 const bool isSamplerYcbcrConversionFeatures = checkExtension(properties, "VK_KHR_sampler_ycbcr_conversion") || context.contextSupports(vk::ApiVersion(0, 1, 1, 0)); 283 284 for (int ndx = 0; ndx < count; ++ndx) 285 { 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; 289 290 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 291 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 292 extFeatures.pNext = &deviceSamplerYcbcrConversionFeatures[ndx]; 293 294 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 295 } 296 297 if (isSamplerYcbcrConversionFeatures) 298 log << TestLog::Message << deviceSamplerYcbcrConversionFeatures[0] << TestLog::EndMessage; 299 300 if (isSamplerYcbcrConversionFeatures && 301 (deviceSamplerYcbcrConversionFeatures[0].samplerYcbcrConversion != deviceSamplerYcbcrConversionFeatures[1].samplerYcbcrConversion)) 302 { 303 TCU_FAIL("Mismatch between VkPhysicalDeviceSamplerYcbcrConversionFeatures"); 304 } 305 return tcu::TestStatus::pass("Querying succeeded"); 306} 307 308tcu::TestStatus testPhysicalDeviceFeatureProtectedMemoryFeatures (Context& context) 309{ 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); 317 318 VkPhysicalDeviceProtectedMemoryFeatures deviceProtectedMemoryFeatures[count]; 319 const bool isProtectedMemoryFeatures = context.contextSupports(vk::ApiVersion(0, 1, 1, 0)); 320 321 for (int ndx = 0; ndx < count; ++ndx) 322 { 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; 326 327 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 328 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 329 extFeatures.pNext = &deviceProtectedMemoryFeatures[ndx]; 330 331 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 332 } 333 334 if (isProtectedMemoryFeatures) 335 log << TestLog::Message << deviceProtectedMemoryFeatures[0] << TestLog::EndMessage; 336 337 if (isProtectedMemoryFeatures && 338 (deviceProtectedMemoryFeatures[0].protectedMemory != deviceProtectedMemoryFeatures[1].protectedMemory)) 339 { 340 TCU_FAIL("Mismatch between VkPhysicalDeviceProtectedMemoryFeatures"); 341 } 342 return tcu::TestStatus::pass("Querying succeeded"); 343} 344 345tcu::TestStatus testPhysicalDeviceFeatureBlendOperationAdvancedFeaturesEXT (Context& context) 346{ 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); 354 355 VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT deviceBlendOperationAdvancedFeaturesEXT[count]; 356 const bool isBlendOperationAdvancedFeaturesEXT = checkExtension(properties, "VK_EXT_blend_operation_advanced"); 357 358 for (int ndx = 0; ndx < count; ++ndx) 359 { 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; 363 364 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 365 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 366 extFeatures.pNext = &deviceBlendOperationAdvancedFeaturesEXT[ndx]; 367 368 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 369 } 370 371 if (isBlendOperationAdvancedFeaturesEXT) 372 log << TestLog::Message << deviceBlendOperationAdvancedFeaturesEXT[0] << TestLog::EndMessage; 373 374 if (isBlendOperationAdvancedFeaturesEXT && 375 (deviceBlendOperationAdvancedFeaturesEXT[0].advancedBlendCoherentOperations != deviceBlendOperationAdvancedFeaturesEXT[1].advancedBlendCoherentOperations)) 376 { 377 TCU_FAIL("Mismatch between VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT"); 378 } 379 return tcu::TestStatus::pass("Querying succeeded"); 380} 381 382tcu::TestStatus testPhysicalDeviceFeatureMultiDrawFeaturesEXT (Context& context) 383{ 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); 391 392 VkPhysicalDeviceMultiDrawFeaturesEXT deviceMultiDrawFeaturesEXT[count]; 393 const bool isMultiDrawFeaturesEXT = checkExtension(properties, "VK_EXT_multi_draw"); 394 395 for (int ndx = 0; ndx < count; ++ndx) 396 { 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; 400 401 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 402 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 403 extFeatures.pNext = &deviceMultiDrawFeaturesEXT[ndx]; 404 405 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 406 } 407 408 if (isMultiDrawFeaturesEXT) 409 log << TestLog::Message << deviceMultiDrawFeaturesEXT[0] << TestLog::EndMessage; 410 411 if (isMultiDrawFeaturesEXT && 412 (deviceMultiDrawFeaturesEXT[0].multiDraw != deviceMultiDrawFeaturesEXT[1].multiDraw)) 413 { 414 TCU_FAIL("Mismatch between VkPhysicalDeviceMultiDrawFeaturesEXT"); 415 } 416 return tcu::TestStatus::pass("Querying succeeded"); 417} 418 419tcu::TestStatus testPhysicalDeviceFeatureInlineUniformBlockFeatures (Context& context) 420{ 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); 428 429 VkPhysicalDeviceInlineUniformBlockFeatures deviceInlineUniformBlockFeatures[count]; 430 const bool isInlineUniformBlockFeatures = checkExtension(properties, "VK_EXT_inline_uniform_block") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 431 432 for (int ndx = 0; ndx < count; ++ndx) 433 { 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; 437 438 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 439 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 440 extFeatures.pNext = &deviceInlineUniformBlockFeatures[ndx]; 441 442 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 443 } 444 445 if (isInlineUniformBlockFeatures) 446 log << TestLog::Message << deviceInlineUniformBlockFeatures[0] << TestLog::EndMessage; 447 448 if (isInlineUniformBlockFeatures && 449 (deviceInlineUniformBlockFeatures[0].inlineUniformBlock != deviceInlineUniformBlockFeatures[1].inlineUniformBlock || 450 deviceInlineUniformBlockFeatures[0].descriptorBindingInlineUniformBlockUpdateAfterBind != deviceInlineUniformBlockFeatures[1].descriptorBindingInlineUniformBlockUpdateAfterBind)) 451 { 452 TCU_FAIL("Mismatch between VkPhysicalDeviceInlineUniformBlockFeatures"); 453 } 454 return tcu::TestStatus::pass("Querying succeeded"); 455} 456 457tcu::TestStatus testPhysicalDeviceFeatureMaintenance4Features (Context& context) 458{ 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); 466 467 VkPhysicalDeviceMaintenance4Features deviceMaintenance4Features[count]; 468 const bool isMaintenance4Features = checkExtension(properties, "VK_KHR_maintenance4") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 469 470 for (int ndx = 0; ndx < count; ++ndx) 471 { 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; 475 476 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 477 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 478 extFeatures.pNext = &deviceMaintenance4Features[ndx]; 479 480 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 481 } 482 483 if (isMaintenance4Features) 484 log << TestLog::Message << deviceMaintenance4Features[0] << TestLog::EndMessage; 485 486 if (isMaintenance4Features && 487 (deviceMaintenance4Features[0].maintenance4 != deviceMaintenance4Features[1].maintenance4)) 488 { 489 TCU_FAIL("Mismatch between VkPhysicalDeviceMaintenance4Features"); 490 } 491 return tcu::TestStatus::pass("Querying succeeded"); 492} 493 494tcu::TestStatus testPhysicalDeviceFeatureMaintenance5FeaturesKHR (Context& context) 495{ 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); 503 504 VkPhysicalDeviceMaintenance5FeaturesKHR deviceMaintenance5FeaturesKHR[count]; 505 const bool isMaintenance5FeaturesKHR = checkExtension(properties, "VK_KHR_maintenance5"); 506 507 for (int ndx = 0; ndx < count; ++ndx) 508 { 509 deMemset(&deviceMaintenance5FeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMaintenance5FeaturesKHR)); 510 deviceMaintenance5FeaturesKHR[ndx].sType = isMaintenance5FeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 511 deviceMaintenance5FeaturesKHR[ndx].pNext = DE_NULL; 512 513 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 514 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 515 extFeatures.pNext = &deviceMaintenance5FeaturesKHR[ndx]; 516 517 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 518 } 519 520 if (isMaintenance5FeaturesKHR) 521 log << TestLog::Message << deviceMaintenance5FeaturesKHR[0] << TestLog::EndMessage; 522 523 if (isMaintenance5FeaturesKHR && 524 (deviceMaintenance5FeaturesKHR[0].maintenance5 != deviceMaintenance5FeaturesKHR[1].maintenance5)) 525 { 526 TCU_FAIL("Mismatch between VkPhysicalDeviceMaintenance5FeaturesKHR"); 527 } 528 return tcu::TestStatus::pass("Querying succeeded"); 529} 530 531tcu::TestStatus testPhysicalDeviceFeatureShaderDrawParametersFeatures (Context& context) 532{ 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); 540 541 VkPhysicalDeviceShaderDrawParametersFeatures deviceShaderDrawParametersFeatures[count]; 542 const bool isShaderDrawParametersFeatures = context.contextSupports(vk::ApiVersion(0, 1, 1, 0)); 543 544 for (int ndx = 0; ndx < count; ++ndx) 545 { 546 deMemset(&deviceShaderDrawParametersFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderDrawParametersFeatures)); 547 deviceShaderDrawParametersFeatures[ndx].sType = isShaderDrawParametersFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 548 deviceShaderDrawParametersFeatures[ndx].pNext = DE_NULL; 549 550 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 551 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 552 extFeatures.pNext = &deviceShaderDrawParametersFeatures[ndx]; 553 554 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 555 } 556 557 if (isShaderDrawParametersFeatures) 558 log << TestLog::Message << deviceShaderDrawParametersFeatures[0] << TestLog::EndMessage; 559 560 if (isShaderDrawParametersFeatures && 561 (deviceShaderDrawParametersFeatures[0].shaderDrawParameters != deviceShaderDrawParametersFeatures[1].shaderDrawParameters)) 562 { 563 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderDrawParametersFeatures"); 564 } 565 return tcu::TestStatus::pass("Querying succeeded"); 566} 567 568tcu::TestStatus testPhysicalDeviceFeatureShaderFloat16Int8Features (Context& context) 569{ 570 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 571 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 572 const InstanceDriver& vki (instance.getDriver()); 573 const int count = 2u; 574 TestLog& log = context.getTestContext().getLog(); 575 VkPhysicalDeviceFeatures2 extFeatures; 576 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 577 578 VkPhysicalDeviceShaderFloat16Int8Features deviceShaderFloat16Int8Features[count]; 579 const bool isShaderFloat16Int8Features = checkExtension(properties, "VK_KHR_shader_float16_int8") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 580 581 for (int ndx = 0; ndx < count; ++ndx) 582 { 583 deMemset(&deviceShaderFloat16Int8Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderFloat16Int8Features)); 584 deviceShaderFloat16Int8Features[ndx].sType = isShaderFloat16Int8Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 585 deviceShaderFloat16Int8Features[ndx].pNext = DE_NULL; 586 587 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 588 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 589 extFeatures.pNext = &deviceShaderFloat16Int8Features[ndx]; 590 591 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 592 } 593 594 if (isShaderFloat16Int8Features) 595 log << TestLog::Message << deviceShaderFloat16Int8Features[0] << TestLog::EndMessage; 596 597 if (isShaderFloat16Int8Features && 598 (deviceShaderFloat16Int8Features[0].shaderFloat16 != deviceShaderFloat16Int8Features[1].shaderFloat16 || 599 deviceShaderFloat16Int8Features[0].shaderInt8 != deviceShaderFloat16Int8Features[1].shaderInt8)) 600 { 601 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderFloat16Int8Features"); 602 } 603 return tcu::TestStatus::pass("Querying succeeded"); 604} 605 606tcu::TestStatus testPhysicalDeviceFeatureHostQueryResetFeatures (Context& context) 607{ 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); 615 616 VkPhysicalDeviceHostQueryResetFeatures deviceHostQueryResetFeatures[count]; 617 const bool isHostQueryResetFeatures = checkExtension(properties, "VK_EXT_host_query_reset") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 618 619 for (int ndx = 0; ndx < count; ++ndx) 620 { 621 deMemset(&deviceHostQueryResetFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceHostQueryResetFeatures)); 622 deviceHostQueryResetFeatures[ndx].sType = isHostQueryResetFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 623 deviceHostQueryResetFeatures[ndx].pNext = DE_NULL; 624 625 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 626 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 627 extFeatures.pNext = &deviceHostQueryResetFeatures[ndx]; 628 629 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 630 } 631 632 if (isHostQueryResetFeatures) 633 log << TestLog::Message << deviceHostQueryResetFeatures[0] << TestLog::EndMessage; 634 635 if (isHostQueryResetFeatures && 636 (deviceHostQueryResetFeatures[0].hostQueryReset != deviceHostQueryResetFeatures[1].hostQueryReset)) 637 { 638 TCU_FAIL("Mismatch between VkPhysicalDeviceHostQueryResetFeatures"); 639 } 640 return tcu::TestStatus::pass("Querying succeeded"); 641} 642 643tcu::TestStatus testPhysicalDeviceFeatureGlobalPriorityQueryFeaturesKHR (Context& context) 644{ 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); 652 653 VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR deviceGlobalPriorityQueryFeaturesKHR[count]; 654 const bool isGlobalPriorityQueryFeaturesKHR = checkExtension(properties, "VK_KHR_global_priority"); 655 656 for (int ndx = 0; ndx < count; ++ndx) 657 { 658 deMemset(&deviceGlobalPriorityQueryFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR)); 659 deviceGlobalPriorityQueryFeaturesKHR[ndx].sType = isGlobalPriorityQueryFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 660 deviceGlobalPriorityQueryFeaturesKHR[ndx].pNext = DE_NULL; 661 662 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 663 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 664 extFeatures.pNext = &deviceGlobalPriorityQueryFeaturesKHR[ndx]; 665 666 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 667 } 668 669 if (isGlobalPriorityQueryFeaturesKHR) 670 log << TestLog::Message << deviceGlobalPriorityQueryFeaturesKHR[0] << TestLog::EndMessage; 671 672 if (isGlobalPriorityQueryFeaturesKHR && 673 (deviceGlobalPriorityQueryFeaturesKHR[0].globalPriorityQuery != deviceGlobalPriorityQueryFeaturesKHR[1].globalPriorityQuery)) 674 { 675 TCU_FAIL("Mismatch between VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR"); 676 } 677 return tcu::TestStatus::pass("Querying succeeded"); 678} 679 680tcu::TestStatus testPhysicalDeviceFeatureDeviceMemoryReportFeaturesEXT (Context& context) 681{ 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); 689 690 VkPhysicalDeviceDeviceMemoryReportFeaturesEXT deviceDeviceMemoryReportFeaturesEXT[count]; 691 const bool isDeviceMemoryReportFeaturesEXT = checkExtension(properties, "VK_EXT_device_memory_report"); 692 693 for (int ndx = 0; ndx < count; ++ndx) 694 { 695 deMemset(&deviceDeviceMemoryReportFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDeviceMemoryReportFeaturesEXT)); 696 deviceDeviceMemoryReportFeaturesEXT[ndx].sType = isDeviceMemoryReportFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 697 deviceDeviceMemoryReportFeaturesEXT[ndx].pNext = DE_NULL; 698 699 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 700 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 701 extFeatures.pNext = &deviceDeviceMemoryReportFeaturesEXT[ndx]; 702 703 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 704 } 705 706 if (isDeviceMemoryReportFeaturesEXT) 707 log << TestLog::Message << deviceDeviceMemoryReportFeaturesEXT[0] << TestLog::EndMessage; 708 709 if (isDeviceMemoryReportFeaturesEXT && 710 (deviceDeviceMemoryReportFeaturesEXT[0].deviceMemoryReport != deviceDeviceMemoryReportFeaturesEXT[1].deviceMemoryReport)) 711 { 712 TCU_FAIL("Mismatch between VkPhysicalDeviceDeviceMemoryReportFeaturesEXT"); 713 } 714 return tcu::TestStatus::pass("Querying succeeded"); 715} 716 717tcu::TestStatus testPhysicalDeviceFeatureDescriptorIndexingFeatures (Context& context) 718{ 719 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 720 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 721 const InstanceDriver& vki (instance.getDriver()); 722 const int count = 2u; 723 TestLog& log = context.getTestContext().getLog(); 724 VkPhysicalDeviceFeatures2 extFeatures; 725 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 726 727 VkPhysicalDeviceDescriptorIndexingFeatures deviceDescriptorIndexingFeatures[count]; 728 const bool isDescriptorIndexingFeatures = checkExtension(properties, "VK_EXT_descriptor_indexing") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 729 730 for (int ndx = 0; ndx < count; ++ndx) 731 { 732 deMemset(&deviceDescriptorIndexingFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDescriptorIndexingFeatures)); 733 deviceDescriptorIndexingFeatures[ndx].sType = isDescriptorIndexingFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 734 deviceDescriptorIndexingFeatures[ndx].pNext = DE_NULL; 735 736 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 737 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 738 extFeatures.pNext = &deviceDescriptorIndexingFeatures[ndx]; 739 740 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 741 } 742 743 if (isDescriptorIndexingFeatures) 744 log << TestLog::Message << deviceDescriptorIndexingFeatures[0] << TestLog::EndMessage; 745 746 if (isDescriptorIndexingFeatures && 747 (deviceDescriptorIndexingFeatures[0].shaderInputAttachmentArrayDynamicIndexing != deviceDescriptorIndexingFeatures[1].shaderInputAttachmentArrayDynamicIndexing || 748 deviceDescriptorIndexingFeatures[0].shaderUniformTexelBufferArrayDynamicIndexing != deviceDescriptorIndexingFeatures[1].shaderUniformTexelBufferArrayDynamicIndexing || 749 deviceDescriptorIndexingFeatures[0].shaderStorageTexelBufferArrayDynamicIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageTexelBufferArrayDynamicIndexing || 750 deviceDescriptorIndexingFeatures[0].shaderUniformBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderUniformBufferArrayNonUniformIndexing || 751 deviceDescriptorIndexingFeatures[0].shaderSampledImageArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderSampledImageArrayNonUniformIndexing || 752 deviceDescriptorIndexingFeatures[0].shaderStorageBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageBufferArrayNonUniformIndexing || 753 deviceDescriptorIndexingFeatures[0].shaderStorageImageArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageImageArrayNonUniformIndexing || 754 deviceDescriptorIndexingFeatures[0].shaderInputAttachmentArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderInputAttachmentArrayNonUniformIndexing || 755 deviceDescriptorIndexingFeatures[0].shaderUniformTexelBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderUniformTexelBufferArrayNonUniformIndexing || 756 deviceDescriptorIndexingFeatures[0].shaderStorageTexelBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageTexelBufferArrayNonUniformIndexing || 757 deviceDescriptorIndexingFeatures[0].descriptorBindingUniformBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingUniformBufferUpdateAfterBind || 758 deviceDescriptorIndexingFeatures[0].descriptorBindingSampledImageUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingSampledImageUpdateAfterBind || 759 deviceDescriptorIndexingFeatures[0].descriptorBindingStorageImageUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingStorageImageUpdateAfterBind || 760 deviceDescriptorIndexingFeatures[0].descriptorBindingStorageBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingStorageBufferUpdateAfterBind || 761 deviceDescriptorIndexingFeatures[0].descriptorBindingUniformTexelBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingUniformTexelBufferUpdateAfterBind || 762 deviceDescriptorIndexingFeatures[0].descriptorBindingStorageTexelBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingStorageTexelBufferUpdateAfterBind || 763 deviceDescriptorIndexingFeatures[0].descriptorBindingUpdateUnusedWhilePending != deviceDescriptorIndexingFeatures[1].descriptorBindingUpdateUnusedWhilePending || 764 deviceDescriptorIndexingFeatures[0].descriptorBindingPartiallyBound != deviceDescriptorIndexingFeatures[1].descriptorBindingPartiallyBound || 765 deviceDescriptorIndexingFeatures[0].descriptorBindingVariableDescriptorCount != deviceDescriptorIndexingFeatures[1].descriptorBindingVariableDescriptorCount || 766 deviceDescriptorIndexingFeatures[0].runtimeDescriptorArray != deviceDescriptorIndexingFeatures[1].runtimeDescriptorArray)) 767 { 768 TCU_FAIL("Mismatch between VkPhysicalDeviceDescriptorIndexingFeatures"); 769 } 770 return tcu::TestStatus::pass("Querying succeeded"); 771} 772 773tcu::TestStatus testPhysicalDeviceFeatureTimelineSemaphoreFeatures (Context& context) 774{ 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); 782 783 VkPhysicalDeviceTimelineSemaphoreFeatures deviceTimelineSemaphoreFeatures[count]; 784 const bool isTimelineSemaphoreFeatures = checkExtension(properties, "VK_KHR_timeline_semaphore") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 785 786 for (int ndx = 0; ndx < count; ++ndx) 787 { 788 deMemset(&deviceTimelineSemaphoreFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceTimelineSemaphoreFeatures)); 789 deviceTimelineSemaphoreFeatures[ndx].sType = isTimelineSemaphoreFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 790 deviceTimelineSemaphoreFeatures[ndx].pNext = DE_NULL; 791 792 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 793 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 794 extFeatures.pNext = &deviceTimelineSemaphoreFeatures[ndx]; 795 796 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 797 } 798 799 if (isTimelineSemaphoreFeatures) 800 log << TestLog::Message << deviceTimelineSemaphoreFeatures[0] << TestLog::EndMessage; 801 802 if (isTimelineSemaphoreFeatures && 803 (deviceTimelineSemaphoreFeatures[0].timelineSemaphore != deviceTimelineSemaphoreFeatures[1].timelineSemaphore)) 804 { 805 TCU_FAIL("Mismatch between VkPhysicalDeviceTimelineSemaphoreFeatures"); 806 } 807 return tcu::TestStatus::pass("Querying succeeded"); 808} 809 810tcu::TestStatus testPhysicalDeviceFeature8BitStorageFeatures (Context& context) 811{ 812 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 813 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 814 const InstanceDriver& vki (instance.getDriver()); 815 const int count = 2u; 816 TestLog& log = context.getTestContext().getLog(); 817 VkPhysicalDeviceFeatures2 extFeatures; 818 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 819 820 VkPhysicalDevice8BitStorageFeatures device8BitStorageFeatures[count]; 821 const bool is8BitStorageFeatures = checkExtension(properties, "VK_KHR_8bit_storage") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 822 823 for (int ndx = 0; ndx < count; ++ndx) 824 { 825 deMemset(&device8BitStorageFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDevice8BitStorageFeatures)); 826 device8BitStorageFeatures[ndx].sType = is8BitStorageFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 827 device8BitStorageFeatures[ndx].pNext = DE_NULL; 828 829 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 830 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 831 extFeatures.pNext = &device8BitStorageFeatures[ndx]; 832 833 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 834 } 835 836 if (is8BitStorageFeatures) 837 log << TestLog::Message << device8BitStorageFeatures[0] << TestLog::EndMessage; 838 839 if (is8BitStorageFeatures && 840 (device8BitStorageFeatures[0].storageBuffer8BitAccess != device8BitStorageFeatures[1].storageBuffer8BitAccess || 841 device8BitStorageFeatures[0].uniformAndStorageBuffer8BitAccess != device8BitStorageFeatures[1].uniformAndStorageBuffer8BitAccess || 842 device8BitStorageFeatures[0].storagePushConstant8 != device8BitStorageFeatures[1].storagePushConstant8)) 843 { 844 TCU_FAIL("Mismatch between VkPhysicalDevice8BitStorageFeatures"); 845 } 846 return tcu::TestStatus::pass("Querying succeeded"); 847} 848 849tcu::TestStatus testPhysicalDeviceFeatureConditionalRenderingFeaturesEXT (Context& context) 850{ 851 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 852 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 853 const InstanceDriver& vki (instance.getDriver()); 854 const int count = 2u; 855 TestLog& log = context.getTestContext().getLog(); 856 VkPhysicalDeviceFeatures2 extFeatures; 857 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 858 859 VkPhysicalDeviceConditionalRenderingFeaturesEXT deviceConditionalRenderingFeaturesEXT[count]; 860 const bool isConditionalRenderingFeaturesEXT = checkExtension(properties, "VK_EXT_conditional_rendering"); 861 862 for (int ndx = 0; ndx < count; ++ndx) 863 { 864 deMemset(&deviceConditionalRenderingFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceConditionalRenderingFeaturesEXT)); 865 deviceConditionalRenderingFeaturesEXT[ndx].sType = isConditionalRenderingFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 866 deviceConditionalRenderingFeaturesEXT[ndx].pNext = DE_NULL; 867 868 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 869 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 870 extFeatures.pNext = &deviceConditionalRenderingFeaturesEXT[ndx]; 871 872 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 873 } 874 875 if (isConditionalRenderingFeaturesEXT) 876 log << TestLog::Message << deviceConditionalRenderingFeaturesEXT[0] << TestLog::EndMessage; 877 878 if (isConditionalRenderingFeaturesEXT && 879 (deviceConditionalRenderingFeaturesEXT[0].conditionalRendering != deviceConditionalRenderingFeaturesEXT[1].conditionalRendering || 880 deviceConditionalRenderingFeaturesEXT[0].inheritedConditionalRendering != deviceConditionalRenderingFeaturesEXT[1].inheritedConditionalRendering)) 881 { 882 TCU_FAIL("Mismatch between VkPhysicalDeviceConditionalRenderingFeaturesEXT"); 883 } 884 return tcu::TestStatus::pass("Querying succeeded"); 885} 886 887tcu::TestStatus testPhysicalDeviceFeatureVulkanMemoryModelFeatures (Context& context) 888{ 889 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 890 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 891 const InstanceDriver& vki (instance.getDriver()); 892 const int count = 2u; 893 TestLog& log = context.getTestContext().getLog(); 894 VkPhysicalDeviceFeatures2 extFeatures; 895 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 896 897 VkPhysicalDeviceVulkanMemoryModelFeatures deviceVulkanMemoryModelFeatures[count]; 898 const bool isVulkanMemoryModelFeatures = checkExtension(properties, "VK_KHR_vulkan_memory_model") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 899 900 for (int ndx = 0; ndx < count; ++ndx) 901 { 902 deMemset(&deviceVulkanMemoryModelFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVulkanMemoryModelFeatures)); 903 deviceVulkanMemoryModelFeatures[ndx].sType = isVulkanMemoryModelFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 904 deviceVulkanMemoryModelFeatures[ndx].pNext = DE_NULL; 905 906 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 907 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 908 extFeatures.pNext = &deviceVulkanMemoryModelFeatures[ndx]; 909 910 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 911 } 912 913 if (isVulkanMemoryModelFeatures) 914 log << TestLog::Message << deviceVulkanMemoryModelFeatures[0] << TestLog::EndMessage; 915 916 if (isVulkanMemoryModelFeatures && 917 (deviceVulkanMemoryModelFeatures[0].vulkanMemoryModel != deviceVulkanMemoryModelFeatures[1].vulkanMemoryModel || 918 deviceVulkanMemoryModelFeatures[0].vulkanMemoryModelDeviceScope != deviceVulkanMemoryModelFeatures[1].vulkanMemoryModelDeviceScope || 919 deviceVulkanMemoryModelFeatures[0].vulkanMemoryModelAvailabilityVisibilityChains != deviceVulkanMemoryModelFeatures[1].vulkanMemoryModelAvailabilityVisibilityChains)) 920 { 921 TCU_FAIL("Mismatch between VkPhysicalDeviceVulkanMemoryModelFeatures"); 922 } 923 return tcu::TestStatus::pass("Querying succeeded"); 924} 925 926tcu::TestStatus testPhysicalDeviceFeatureShaderAtomicInt64Features (Context& context) 927{ 928 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 929 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 930 const InstanceDriver& vki (instance.getDriver()); 931 const int count = 2u; 932 TestLog& log = context.getTestContext().getLog(); 933 VkPhysicalDeviceFeatures2 extFeatures; 934 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 935 936 VkPhysicalDeviceShaderAtomicInt64Features deviceShaderAtomicInt64Features[count]; 937 const bool isShaderAtomicInt64Features = checkExtension(properties, "VK_KHR_shader_atomic_int64") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 938 939 for (int ndx = 0; ndx < count; ++ndx) 940 { 941 deMemset(&deviceShaderAtomicInt64Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderAtomicInt64Features)); 942 deviceShaderAtomicInt64Features[ndx].sType = isShaderAtomicInt64Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 943 deviceShaderAtomicInt64Features[ndx].pNext = DE_NULL; 944 945 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 946 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 947 extFeatures.pNext = &deviceShaderAtomicInt64Features[ndx]; 948 949 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 950 } 951 952 if (isShaderAtomicInt64Features) 953 log << TestLog::Message << deviceShaderAtomicInt64Features[0] << TestLog::EndMessage; 954 955 if (isShaderAtomicInt64Features && 956 (deviceShaderAtomicInt64Features[0].shaderBufferInt64Atomics != deviceShaderAtomicInt64Features[1].shaderBufferInt64Atomics || 957 deviceShaderAtomicInt64Features[0].shaderSharedInt64Atomics != deviceShaderAtomicInt64Features[1].shaderSharedInt64Atomics)) 958 { 959 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderAtomicInt64Features"); 960 } 961 return tcu::TestStatus::pass("Querying succeeded"); 962} 963 964tcu::TestStatus testPhysicalDeviceFeatureShaderAtomicFloatFeaturesEXT (Context& context) 965{ 966 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 967 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 968 const InstanceDriver& vki (instance.getDriver()); 969 const int count = 2u; 970 TestLog& log = context.getTestContext().getLog(); 971 VkPhysicalDeviceFeatures2 extFeatures; 972 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 973 974 VkPhysicalDeviceShaderAtomicFloatFeaturesEXT deviceShaderAtomicFloatFeaturesEXT[count]; 975 const bool isShaderAtomicFloatFeaturesEXT = checkExtension(properties, "VK_EXT_shader_atomic_float"); 976 977 for (int ndx = 0; ndx < count; ++ndx) 978 { 979 deMemset(&deviceShaderAtomicFloatFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT)); 980 deviceShaderAtomicFloatFeaturesEXT[ndx].sType = isShaderAtomicFloatFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 981 deviceShaderAtomicFloatFeaturesEXT[ndx].pNext = DE_NULL; 982 983 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 984 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 985 extFeatures.pNext = &deviceShaderAtomicFloatFeaturesEXT[ndx]; 986 987 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 988 } 989 990 if (isShaderAtomicFloatFeaturesEXT) 991 log << TestLog::Message << deviceShaderAtomicFloatFeaturesEXT[0] << TestLog::EndMessage; 992 993 if (isShaderAtomicFloatFeaturesEXT && 994 (deviceShaderAtomicFloatFeaturesEXT[0].shaderBufferFloat32Atomics != deviceShaderAtomicFloatFeaturesEXT[1].shaderBufferFloat32Atomics || 995 deviceShaderAtomicFloatFeaturesEXT[0].shaderBufferFloat32AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].shaderBufferFloat32AtomicAdd || 996 deviceShaderAtomicFloatFeaturesEXT[0].shaderBufferFloat64Atomics != deviceShaderAtomicFloatFeaturesEXT[1].shaderBufferFloat64Atomics || 997 deviceShaderAtomicFloatFeaturesEXT[0].shaderBufferFloat64AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].shaderBufferFloat64AtomicAdd || 998 deviceShaderAtomicFloatFeaturesEXT[0].shaderSharedFloat32Atomics != deviceShaderAtomicFloatFeaturesEXT[1].shaderSharedFloat32Atomics || 999 deviceShaderAtomicFloatFeaturesEXT[0].shaderSharedFloat32AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].shaderSharedFloat32AtomicAdd || 1000 deviceShaderAtomicFloatFeaturesEXT[0].shaderSharedFloat64Atomics != deviceShaderAtomicFloatFeaturesEXT[1].shaderSharedFloat64Atomics || 1001 deviceShaderAtomicFloatFeaturesEXT[0].shaderSharedFloat64AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].shaderSharedFloat64AtomicAdd || 1002 deviceShaderAtomicFloatFeaturesEXT[0].shaderImageFloat32Atomics != deviceShaderAtomicFloatFeaturesEXT[1].shaderImageFloat32Atomics || 1003 deviceShaderAtomicFloatFeaturesEXT[0].shaderImageFloat32AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].shaderImageFloat32AtomicAdd || 1004 deviceShaderAtomicFloatFeaturesEXT[0].sparseImageFloat32Atomics != deviceShaderAtomicFloatFeaturesEXT[1].sparseImageFloat32Atomics || 1005 deviceShaderAtomicFloatFeaturesEXT[0].sparseImageFloat32AtomicAdd != deviceShaderAtomicFloatFeaturesEXT[1].sparseImageFloat32AtomicAdd)) 1006 { 1007 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderAtomicFloatFeaturesEXT"); 1008 } 1009 return tcu::TestStatus::pass("Querying succeeded"); 1010} 1011 1012tcu::TestStatus testPhysicalDeviceFeatureShaderAtomicFloat2FeaturesEXT (Context& context) 1013{ 1014 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1015 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1016 const InstanceDriver& vki (instance.getDriver()); 1017 const int count = 2u; 1018 TestLog& log = context.getTestContext().getLog(); 1019 VkPhysicalDeviceFeatures2 extFeatures; 1020 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1021 1022 VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT deviceShaderAtomicFloat2FeaturesEXT[count]; 1023 const bool isShaderAtomicFloat2FeaturesEXT = checkExtension(properties, "VK_EXT_shader_atomic_float2"); 1024 1025 for (int ndx = 0; ndx < count; ++ndx) 1026 { 1027 deMemset(&deviceShaderAtomicFloat2FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT)); 1028 deviceShaderAtomicFloat2FeaturesEXT[ndx].sType = isShaderAtomicFloat2FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1029 deviceShaderAtomicFloat2FeaturesEXT[ndx].pNext = DE_NULL; 1030 1031 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1032 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1033 extFeatures.pNext = &deviceShaderAtomicFloat2FeaturesEXT[ndx]; 1034 1035 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1036 } 1037 1038 if (isShaderAtomicFloat2FeaturesEXT) 1039 log << TestLog::Message << deviceShaderAtomicFloat2FeaturesEXT[0] << TestLog::EndMessage; 1040 1041 if (isShaderAtomicFloat2FeaturesEXT && 1042 (deviceShaderAtomicFloat2FeaturesEXT[0].shaderBufferFloat16Atomics != deviceShaderAtomicFloat2FeaturesEXT[1].shaderBufferFloat16Atomics || 1043 deviceShaderAtomicFloat2FeaturesEXT[0].shaderBufferFloat16AtomicAdd != deviceShaderAtomicFloat2FeaturesEXT[1].shaderBufferFloat16AtomicAdd || 1044 deviceShaderAtomicFloat2FeaturesEXT[0].shaderBufferFloat16AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderBufferFloat16AtomicMinMax || 1045 deviceShaderAtomicFloat2FeaturesEXT[0].shaderBufferFloat32AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderBufferFloat32AtomicMinMax || 1046 deviceShaderAtomicFloat2FeaturesEXT[0].shaderBufferFloat64AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderBufferFloat64AtomicMinMax || 1047 deviceShaderAtomicFloat2FeaturesEXT[0].shaderSharedFloat16Atomics != deviceShaderAtomicFloat2FeaturesEXT[1].shaderSharedFloat16Atomics || 1048 deviceShaderAtomicFloat2FeaturesEXT[0].shaderSharedFloat16AtomicAdd != deviceShaderAtomicFloat2FeaturesEXT[1].shaderSharedFloat16AtomicAdd || 1049 deviceShaderAtomicFloat2FeaturesEXT[0].shaderSharedFloat16AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderSharedFloat16AtomicMinMax || 1050 deviceShaderAtomicFloat2FeaturesEXT[0].shaderSharedFloat32AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderSharedFloat32AtomicMinMax || 1051 deviceShaderAtomicFloat2FeaturesEXT[0].shaderSharedFloat64AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderSharedFloat64AtomicMinMax || 1052 deviceShaderAtomicFloat2FeaturesEXT[0].shaderImageFloat32AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].shaderImageFloat32AtomicMinMax || 1053 deviceShaderAtomicFloat2FeaturesEXT[0].sparseImageFloat32AtomicMinMax != deviceShaderAtomicFloat2FeaturesEXT[1].sparseImageFloat32AtomicMinMax)) 1054 { 1055 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT"); 1056 } 1057 return tcu::TestStatus::pass("Querying succeeded"); 1058} 1059 1060tcu::TestStatus testPhysicalDeviceFeatureVertexAttributeDivisorFeaturesEXT (Context& context) 1061{ 1062 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1063 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1064 const InstanceDriver& vki (instance.getDriver()); 1065 const int count = 2u; 1066 TestLog& log = context.getTestContext().getLog(); 1067 VkPhysicalDeviceFeatures2 extFeatures; 1068 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1069 1070 VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT deviceVertexAttributeDivisorFeaturesEXT[count]; 1071 const bool isVertexAttributeDivisorFeaturesEXT = checkExtension(properties, "VK_EXT_vertex_attribute_divisor"); 1072 1073 for (int ndx = 0; ndx < count; ++ndx) 1074 { 1075 deMemset(&deviceVertexAttributeDivisorFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT)); 1076 deviceVertexAttributeDivisorFeaturesEXT[ndx].sType = isVertexAttributeDivisorFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1077 deviceVertexAttributeDivisorFeaturesEXT[ndx].pNext = DE_NULL; 1078 1079 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1080 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1081 extFeatures.pNext = &deviceVertexAttributeDivisorFeaturesEXT[ndx]; 1082 1083 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1084 } 1085 1086 if (isVertexAttributeDivisorFeaturesEXT) 1087 log << TestLog::Message << deviceVertexAttributeDivisorFeaturesEXT[0] << TestLog::EndMessage; 1088 1089 if (isVertexAttributeDivisorFeaturesEXT && 1090 (deviceVertexAttributeDivisorFeaturesEXT[0].vertexAttributeInstanceRateDivisor != deviceVertexAttributeDivisorFeaturesEXT[1].vertexAttributeInstanceRateDivisor || 1091 deviceVertexAttributeDivisorFeaturesEXT[0].vertexAttributeInstanceRateZeroDivisor != deviceVertexAttributeDivisorFeaturesEXT[1].vertexAttributeInstanceRateZeroDivisor)) 1092 { 1093 TCU_FAIL("Mismatch between VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT"); 1094 } 1095 return tcu::TestStatus::pass("Querying succeeded"); 1096} 1097 1098tcu::TestStatus testPhysicalDeviceFeatureASTCDecodeFeaturesEXT (Context& context) 1099{ 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); 1107 1108 VkPhysicalDeviceASTCDecodeFeaturesEXT deviceASTCDecodeFeaturesEXT[count]; 1109 const bool isASTCDecodeFeaturesEXT = checkExtension(properties, "VK_EXT_astc_decode_mode"); 1110 1111 for (int ndx = 0; ndx < count; ++ndx) 1112 { 1113 deMemset(&deviceASTCDecodeFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceASTCDecodeFeaturesEXT)); 1114 deviceASTCDecodeFeaturesEXT[ndx].sType = isASTCDecodeFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1115 deviceASTCDecodeFeaturesEXT[ndx].pNext = DE_NULL; 1116 1117 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1118 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1119 extFeatures.pNext = &deviceASTCDecodeFeaturesEXT[ndx]; 1120 1121 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1122 } 1123 1124 if (isASTCDecodeFeaturesEXT) 1125 log << TestLog::Message << deviceASTCDecodeFeaturesEXT[0] << TestLog::EndMessage; 1126 1127 if (isASTCDecodeFeaturesEXT && 1128 (deviceASTCDecodeFeaturesEXT[0].decodeModeSharedExponent != deviceASTCDecodeFeaturesEXT[1].decodeModeSharedExponent)) 1129 { 1130 TCU_FAIL("Mismatch between VkPhysicalDeviceASTCDecodeFeaturesEXT"); 1131 } 1132 return tcu::TestStatus::pass("Querying succeeded"); 1133} 1134 1135tcu::TestStatus testPhysicalDeviceFeatureTransformFeedbackFeaturesEXT (Context& context) 1136{ 1137 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1138 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1139 const InstanceDriver& vki (instance.getDriver()); 1140 const int count = 2u; 1141 TestLog& log = context.getTestContext().getLog(); 1142 VkPhysicalDeviceFeatures2 extFeatures; 1143 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1144 1145 VkPhysicalDeviceTransformFeedbackFeaturesEXT deviceTransformFeedbackFeaturesEXT[count]; 1146 const bool isTransformFeedbackFeaturesEXT = checkExtension(properties, "VK_EXT_transform_feedback"); 1147 1148 for (int ndx = 0; ndx < count; ++ndx) 1149 { 1150 deMemset(&deviceTransformFeedbackFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceTransformFeedbackFeaturesEXT)); 1151 deviceTransformFeedbackFeaturesEXT[ndx].sType = isTransformFeedbackFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1152 deviceTransformFeedbackFeaturesEXT[ndx].pNext = DE_NULL; 1153 1154 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1155 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1156 extFeatures.pNext = &deviceTransformFeedbackFeaturesEXT[ndx]; 1157 1158 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1159 } 1160 1161 if (isTransformFeedbackFeaturesEXT) 1162 log << TestLog::Message << deviceTransformFeedbackFeaturesEXT[0] << TestLog::EndMessage; 1163 1164 if (isTransformFeedbackFeaturesEXT && 1165 (deviceTransformFeedbackFeaturesEXT[0].transformFeedback != deviceTransformFeedbackFeaturesEXT[1].transformFeedback || 1166 deviceTransformFeedbackFeaturesEXT[0].geometryStreams != deviceTransformFeedbackFeaturesEXT[1].geometryStreams)) 1167 { 1168 TCU_FAIL("Mismatch between VkPhysicalDeviceTransformFeedbackFeaturesEXT"); 1169 } 1170 return tcu::TestStatus::pass("Querying succeeded"); 1171} 1172 1173tcu::TestStatus testPhysicalDeviceFeatureMeshShaderFeaturesEXT (Context& context) 1174{ 1175 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1176 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1177 const InstanceDriver& vki (instance.getDriver()); 1178 const int count = 2u; 1179 TestLog& log = context.getTestContext().getLog(); 1180 VkPhysicalDeviceFeatures2 extFeatures; 1181 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1182 1183 VkPhysicalDeviceMeshShaderFeaturesEXT deviceMeshShaderFeaturesEXT[count]; 1184 const bool isMeshShaderFeaturesEXT = checkExtension(properties, "VK_EXT_mesh_shader"); 1185 1186 for (int ndx = 0; ndx < count; ++ndx) 1187 { 1188 deMemset(&deviceMeshShaderFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMeshShaderFeaturesEXT)); 1189 deviceMeshShaderFeaturesEXT[ndx].sType = isMeshShaderFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1190 deviceMeshShaderFeaturesEXT[ndx].pNext = DE_NULL; 1191 1192 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1193 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1194 extFeatures.pNext = &deviceMeshShaderFeaturesEXT[ndx]; 1195 1196 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1197 } 1198 1199 if (isMeshShaderFeaturesEXT) 1200 log << TestLog::Message << deviceMeshShaderFeaturesEXT[0] << TestLog::EndMessage; 1201 1202 if (isMeshShaderFeaturesEXT && 1203 (deviceMeshShaderFeaturesEXT[0].taskShader != deviceMeshShaderFeaturesEXT[1].taskShader || 1204 deviceMeshShaderFeaturesEXT[0].meshShader != deviceMeshShaderFeaturesEXT[1].meshShader || 1205 deviceMeshShaderFeaturesEXT[0].multiviewMeshShader != deviceMeshShaderFeaturesEXT[1].multiviewMeshShader || 1206 deviceMeshShaderFeaturesEXT[0].primitiveFragmentShadingRateMeshShader != deviceMeshShaderFeaturesEXT[1].primitiveFragmentShadingRateMeshShader || 1207 deviceMeshShaderFeaturesEXT[0].meshShaderQueries != deviceMeshShaderFeaturesEXT[1].meshShaderQueries)) 1208 { 1209 TCU_FAIL("Mismatch between VkPhysicalDeviceMeshShaderFeaturesEXT"); 1210 } 1211 return tcu::TestStatus::pass("Querying succeeded"); 1212} 1213 1214tcu::TestStatus testPhysicalDeviceFeatureAccelerationStructureFeaturesKHR (Context& context) 1215{ 1216 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1217 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1218 const InstanceDriver& vki (instance.getDriver()); 1219 const int count = 2u; 1220 TestLog& log = context.getTestContext().getLog(); 1221 VkPhysicalDeviceFeatures2 extFeatures; 1222 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1223 1224 VkPhysicalDeviceAccelerationStructureFeaturesKHR deviceAccelerationStructureFeaturesKHR[count]; 1225 const bool isAccelerationStructureFeaturesKHR = checkExtension(properties, "VK_KHR_acceleration_structure"); 1226 1227 for (int ndx = 0; ndx < count; ++ndx) 1228 { 1229 deMemset(&deviceAccelerationStructureFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceAccelerationStructureFeaturesKHR)); 1230 deviceAccelerationStructureFeaturesKHR[ndx].sType = isAccelerationStructureFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 1231 deviceAccelerationStructureFeaturesKHR[ndx].pNext = DE_NULL; 1232 1233 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1234 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1235 extFeatures.pNext = &deviceAccelerationStructureFeaturesKHR[ndx]; 1236 1237 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1238 } 1239 1240 if (isAccelerationStructureFeaturesKHR) 1241 log << TestLog::Message << deviceAccelerationStructureFeaturesKHR[0] << TestLog::EndMessage; 1242 1243 if (isAccelerationStructureFeaturesKHR && 1244 (deviceAccelerationStructureFeaturesKHR[0].accelerationStructure != deviceAccelerationStructureFeaturesKHR[1].accelerationStructure || 1245 deviceAccelerationStructureFeaturesKHR[0].accelerationStructureCaptureReplay != deviceAccelerationStructureFeaturesKHR[1].accelerationStructureCaptureReplay || 1246 deviceAccelerationStructureFeaturesKHR[0].accelerationStructureIndirectBuild != deviceAccelerationStructureFeaturesKHR[1].accelerationStructureIndirectBuild || 1247 deviceAccelerationStructureFeaturesKHR[0].accelerationStructureHostCommands != deviceAccelerationStructureFeaturesKHR[1].accelerationStructureHostCommands || 1248 deviceAccelerationStructureFeaturesKHR[0].descriptorBindingAccelerationStructureUpdateAfterBind != deviceAccelerationStructureFeaturesKHR[1].descriptorBindingAccelerationStructureUpdateAfterBind)) 1249 { 1250 TCU_FAIL("Mismatch between VkPhysicalDeviceAccelerationStructureFeaturesKHR"); 1251 } 1252 return tcu::TestStatus::pass("Querying succeeded"); 1253} 1254 1255tcu::TestStatus testPhysicalDeviceFeatureRayTracingPipelineFeaturesKHR (Context& context) 1256{ 1257 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1258 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1259 const InstanceDriver& vki (instance.getDriver()); 1260 const int count = 2u; 1261 TestLog& log = context.getTestContext().getLog(); 1262 VkPhysicalDeviceFeatures2 extFeatures; 1263 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1264 1265 VkPhysicalDeviceRayTracingPipelineFeaturesKHR deviceRayTracingPipelineFeaturesKHR[count]; 1266 const bool isRayTracingPipelineFeaturesKHR = checkExtension(properties, "VK_KHR_ray_tracing_pipeline"); 1267 1268 for (int ndx = 0; ndx < count; ++ndx) 1269 { 1270 deMemset(&deviceRayTracingPipelineFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRayTracingPipelineFeaturesKHR)); 1271 deviceRayTracingPipelineFeaturesKHR[ndx].sType = isRayTracingPipelineFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 1272 deviceRayTracingPipelineFeaturesKHR[ndx].pNext = DE_NULL; 1273 1274 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1275 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1276 extFeatures.pNext = &deviceRayTracingPipelineFeaturesKHR[ndx]; 1277 1278 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1279 } 1280 1281 if (isRayTracingPipelineFeaturesKHR) 1282 log << TestLog::Message << deviceRayTracingPipelineFeaturesKHR[0] << TestLog::EndMessage; 1283 1284 if (isRayTracingPipelineFeaturesKHR && 1285 (deviceRayTracingPipelineFeaturesKHR[0].rayTracingPipeline != deviceRayTracingPipelineFeaturesKHR[1].rayTracingPipeline || 1286 deviceRayTracingPipelineFeaturesKHR[0].rayTracingPipelineShaderGroupHandleCaptureReplay != deviceRayTracingPipelineFeaturesKHR[1].rayTracingPipelineShaderGroupHandleCaptureReplay || 1287 deviceRayTracingPipelineFeaturesKHR[0].rayTracingPipelineShaderGroupHandleCaptureReplayMixed != deviceRayTracingPipelineFeaturesKHR[1].rayTracingPipelineShaderGroupHandleCaptureReplayMixed || 1288 deviceRayTracingPipelineFeaturesKHR[0].rayTracingPipelineTraceRaysIndirect != deviceRayTracingPipelineFeaturesKHR[1].rayTracingPipelineTraceRaysIndirect || 1289 deviceRayTracingPipelineFeaturesKHR[0].rayTraversalPrimitiveCulling != deviceRayTracingPipelineFeaturesKHR[1].rayTraversalPrimitiveCulling)) 1290 { 1291 TCU_FAIL("Mismatch between VkPhysicalDeviceRayTracingPipelineFeaturesKHR"); 1292 } 1293 return tcu::TestStatus::pass("Querying succeeded"); 1294} 1295 1296tcu::TestStatus testPhysicalDeviceFeatureRayQueryFeaturesKHR (Context& context) 1297{ 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); 1305 1306 VkPhysicalDeviceRayQueryFeaturesKHR deviceRayQueryFeaturesKHR[count]; 1307 const bool isRayQueryFeaturesKHR = checkExtension(properties, "VK_KHR_ray_query"); 1308 1309 for (int ndx = 0; ndx < count; ++ndx) 1310 { 1311 deMemset(&deviceRayQueryFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRayQueryFeaturesKHR)); 1312 deviceRayQueryFeaturesKHR[ndx].sType = isRayQueryFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 1313 deviceRayQueryFeaturesKHR[ndx].pNext = DE_NULL; 1314 1315 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1316 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1317 extFeatures.pNext = &deviceRayQueryFeaturesKHR[ndx]; 1318 1319 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1320 } 1321 1322 if (isRayQueryFeaturesKHR) 1323 log << TestLog::Message << deviceRayQueryFeaturesKHR[0] << TestLog::EndMessage; 1324 1325 if (isRayQueryFeaturesKHR && 1326 (deviceRayQueryFeaturesKHR[0].rayQuery != deviceRayQueryFeaturesKHR[1].rayQuery)) 1327 { 1328 TCU_FAIL("Mismatch between VkPhysicalDeviceRayQueryFeaturesKHR"); 1329 } 1330 return tcu::TestStatus::pass("Querying succeeded"); 1331} 1332 1333tcu::TestStatus testPhysicalDeviceFeatureRayTracingMaintenance1FeaturesKHR (Context& context) 1334{ 1335 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1336 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1337 const InstanceDriver& vki (instance.getDriver()); 1338 const int count = 2u; 1339 TestLog& log = context.getTestContext().getLog(); 1340 VkPhysicalDeviceFeatures2 extFeatures; 1341 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1342 1343 VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR deviceRayTracingMaintenance1FeaturesKHR[count]; 1344 const bool isRayTracingMaintenance1FeaturesKHR = checkExtension(properties, "VK_KHR_ray_tracing_maintenance1"); 1345 1346 for (int ndx = 0; ndx < count; ++ndx) 1347 { 1348 deMemset(&deviceRayTracingMaintenance1FeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR)); 1349 deviceRayTracingMaintenance1FeaturesKHR[ndx].sType = isRayTracingMaintenance1FeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 1350 deviceRayTracingMaintenance1FeaturesKHR[ndx].pNext = DE_NULL; 1351 1352 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1353 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1354 extFeatures.pNext = &deviceRayTracingMaintenance1FeaturesKHR[ndx]; 1355 1356 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1357 } 1358 1359 if (isRayTracingMaintenance1FeaturesKHR) 1360 log << TestLog::Message << deviceRayTracingMaintenance1FeaturesKHR[0] << TestLog::EndMessage; 1361 1362 if (isRayTracingMaintenance1FeaturesKHR && 1363 (deviceRayTracingMaintenance1FeaturesKHR[0].rayTracingMaintenance1 != deviceRayTracingMaintenance1FeaturesKHR[1].rayTracingMaintenance1 || 1364 deviceRayTracingMaintenance1FeaturesKHR[0].rayTracingPipelineTraceRaysIndirect2 != deviceRayTracingMaintenance1FeaturesKHR[1].rayTracingPipelineTraceRaysIndirect2)) 1365 { 1366 TCU_FAIL("Mismatch between VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR"); 1367 } 1368 return tcu::TestStatus::pass("Querying succeeded"); 1369} 1370 1371tcu::TestStatus testPhysicalDeviceFeatureFragmentDensityMapFeaturesEXT (Context& context) 1372{ 1373 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1374 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1375 const InstanceDriver& vki (instance.getDriver()); 1376 const int count = 2u; 1377 TestLog& log = context.getTestContext().getLog(); 1378 VkPhysicalDeviceFeatures2 extFeatures; 1379 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1380 1381 VkPhysicalDeviceFragmentDensityMapFeaturesEXT deviceFragmentDensityMapFeaturesEXT[count]; 1382 const bool isFragmentDensityMapFeaturesEXT = checkExtension(properties, "VK_EXT_fragment_density_map"); 1383 1384 for (int ndx = 0; ndx < count; ++ndx) 1385 { 1386 deMemset(&deviceFragmentDensityMapFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT)); 1387 deviceFragmentDensityMapFeaturesEXT[ndx].sType = isFragmentDensityMapFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1388 deviceFragmentDensityMapFeaturesEXT[ndx].pNext = DE_NULL; 1389 1390 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1391 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1392 extFeatures.pNext = &deviceFragmentDensityMapFeaturesEXT[ndx]; 1393 1394 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1395 } 1396 1397 if (isFragmentDensityMapFeaturesEXT) 1398 log << TestLog::Message << deviceFragmentDensityMapFeaturesEXT[0] << TestLog::EndMessage; 1399 1400 if (isFragmentDensityMapFeaturesEXT && 1401 (deviceFragmentDensityMapFeaturesEXT[0].fragmentDensityMap != deviceFragmentDensityMapFeaturesEXT[1].fragmentDensityMap || 1402 deviceFragmentDensityMapFeaturesEXT[0].fragmentDensityMapDynamic != deviceFragmentDensityMapFeaturesEXT[1].fragmentDensityMapDynamic || 1403 deviceFragmentDensityMapFeaturesEXT[0].fragmentDensityMapNonSubsampledImages != deviceFragmentDensityMapFeaturesEXT[1].fragmentDensityMapNonSubsampledImages)) 1404 { 1405 TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentDensityMapFeaturesEXT"); 1406 } 1407 return tcu::TestStatus::pass("Querying succeeded"); 1408} 1409 1410tcu::TestStatus testPhysicalDeviceFeatureFragmentDensityMap2FeaturesEXT (Context& context) 1411{ 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); 1419 1420 VkPhysicalDeviceFragmentDensityMap2FeaturesEXT deviceFragmentDensityMap2FeaturesEXT[count]; 1421 const bool isFragmentDensityMap2FeaturesEXT = checkExtension(properties, "VK_EXT_fragment_density_map2"); 1422 1423 for (int ndx = 0; ndx < count; ++ndx) 1424 { 1425 deMemset(&deviceFragmentDensityMap2FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT)); 1426 deviceFragmentDensityMap2FeaturesEXT[ndx].sType = isFragmentDensityMap2FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1427 deviceFragmentDensityMap2FeaturesEXT[ndx].pNext = DE_NULL; 1428 1429 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1430 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1431 extFeatures.pNext = &deviceFragmentDensityMap2FeaturesEXT[ndx]; 1432 1433 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1434 } 1435 1436 if (isFragmentDensityMap2FeaturesEXT) 1437 log << TestLog::Message << deviceFragmentDensityMap2FeaturesEXT[0] << TestLog::EndMessage; 1438 1439 if (isFragmentDensityMap2FeaturesEXT && 1440 (deviceFragmentDensityMap2FeaturesEXT[0].fragmentDensityMapDeferred != deviceFragmentDensityMap2FeaturesEXT[1].fragmentDensityMapDeferred)) 1441 { 1442 TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentDensityMap2FeaturesEXT"); 1443 } 1444 return tcu::TestStatus::pass("Querying succeeded"); 1445} 1446 1447tcu::TestStatus testPhysicalDeviceFeatureScalarBlockLayoutFeatures (Context& context) 1448{ 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); 1456 1457 VkPhysicalDeviceScalarBlockLayoutFeatures deviceScalarBlockLayoutFeatures[count]; 1458 const bool isScalarBlockLayoutFeatures = checkExtension(properties, "VK_EXT_scalar_block_layout") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 1459 1460 for (int ndx = 0; ndx < count; ++ndx) 1461 { 1462 deMemset(&deviceScalarBlockLayoutFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceScalarBlockLayoutFeatures)); 1463 deviceScalarBlockLayoutFeatures[ndx].sType = isScalarBlockLayoutFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 1464 deviceScalarBlockLayoutFeatures[ndx].pNext = DE_NULL; 1465 1466 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1467 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1468 extFeatures.pNext = &deviceScalarBlockLayoutFeatures[ndx]; 1469 1470 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1471 } 1472 1473 if (isScalarBlockLayoutFeatures) 1474 log << TestLog::Message << deviceScalarBlockLayoutFeatures[0] << TestLog::EndMessage; 1475 1476 if (isScalarBlockLayoutFeatures && 1477 (deviceScalarBlockLayoutFeatures[0].scalarBlockLayout != deviceScalarBlockLayoutFeatures[1].scalarBlockLayout)) 1478 { 1479 TCU_FAIL("Mismatch between VkPhysicalDeviceScalarBlockLayoutFeatures"); 1480 } 1481 return tcu::TestStatus::pass("Querying succeeded"); 1482} 1483 1484tcu::TestStatus testPhysicalDeviceFeatureUniformBufferStandardLayoutFeatures (Context& context) 1485{ 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); 1493 1494 VkPhysicalDeviceUniformBufferStandardLayoutFeatures deviceUniformBufferStandardLayoutFeatures[count]; 1495 const bool isUniformBufferStandardLayoutFeatures = checkExtension(properties, "VK_KHR_uniform_buffer_standard_layout") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 1496 1497 for (int ndx = 0; ndx < count; ++ndx) 1498 { 1499 deMemset(&deviceUniformBufferStandardLayoutFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceUniformBufferStandardLayoutFeatures)); 1500 deviceUniformBufferStandardLayoutFeatures[ndx].sType = isUniformBufferStandardLayoutFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 1501 deviceUniformBufferStandardLayoutFeatures[ndx].pNext = DE_NULL; 1502 1503 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1504 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1505 extFeatures.pNext = &deviceUniformBufferStandardLayoutFeatures[ndx]; 1506 1507 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1508 } 1509 1510 if (isUniformBufferStandardLayoutFeatures) 1511 log << TestLog::Message << deviceUniformBufferStandardLayoutFeatures[0] << TestLog::EndMessage; 1512 1513 if (isUniformBufferStandardLayoutFeatures && 1514 (deviceUniformBufferStandardLayoutFeatures[0].uniformBufferStandardLayout != deviceUniformBufferStandardLayoutFeatures[1].uniformBufferStandardLayout)) 1515 { 1516 TCU_FAIL("Mismatch between VkPhysicalDeviceUniformBufferStandardLayoutFeatures"); 1517 } 1518 return tcu::TestStatus::pass("Querying succeeded"); 1519} 1520 1521tcu::TestStatus testPhysicalDeviceFeatureDepthClipEnableFeaturesEXT (Context& context) 1522{ 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); 1530 1531 VkPhysicalDeviceDepthClipEnableFeaturesEXT deviceDepthClipEnableFeaturesEXT[count]; 1532 const bool isDepthClipEnableFeaturesEXT = checkExtension(properties, "VK_EXT_depth_clip_enable"); 1533 1534 for (int ndx = 0; ndx < count; ++ndx) 1535 { 1536 deMemset(&deviceDepthClipEnableFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDepthClipEnableFeaturesEXT)); 1537 deviceDepthClipEnableFeaturesEXT[ndx].sType = isDepthClipEnableFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1538 deviceDepthClipEnableFeaturesEXT[ndx].pNext = DE_NULL; 1539 1540 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1541 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1542 extFeatures.pNext = &deviceDepthClipEnableFeaturesEXT[ndx]; 1543 1544 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1545 } 1546 1547 if (isDepthClipEnableFeaturesEXT) 1548 log << TestLog::Message << deviceDepthClipEnableFeaturesEXT[0] << TestLog::EndMessage; 1549 1550 if (isDepthClipEnableFeaturesEXT && 1551 (deviceDepthClipEnableFeaturesEXT[0].depthClipEnable != deviceDepthClipEnableFeaturesEXT[1].depthClipEnable)) 1552 { 1553 TCU_FAIL("Mismatch between VkPhysicalDeviceDepthClipEnableFeaturesEXT"); 1554 } 1555 return tcu::TestStatus::pass("Querying succeeded"); 1556} 1557 1558tcu::TestStatus testPhysicalDeviceFeatureMemoryPriorityFeaturesEXT (Context& context) 1559{ 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); 1567 1568 VkPhysicalDeviceMemoryPriorityFeaturesEXT deviceMemoryPriorityFeaturesEXT[count]; 1569 const bool isMemoryPriorityFeaturesEXT = checkExtension(properties, "VK_EXT_memory_priority"); 1570 1571 for (int ndx = 0; ndx < count; ++ndx) 1572 { 1573 deMemset(&deviceMemoryPriorityFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMemoryPriorityFeaturesEXT)); 1574 deviceMemoryPriorityFeaturesEXT[ndx].sType = isMemoryPriorityFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1575 deviceMemoryPriorityFeaturesEXT[ndx].pNext = DE_NULL; 1576 1577 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1578 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1579 extFeatures.pNext = &deviceMemoryPriorityFeaturesEXT[ndx]; 1580 1581 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1582 } 1583 1584 if (isMemoryPriorityFeaturesEXT) 1585 log << TestLog::Message << deviceMemoryPriorityFeaturesEXT[0] << TestLog::EndMessage; 1586 1587 if (isMemoryPriorityFeaturesEXT && 1588 (deviceMemoryPriorityFeaturesEXT[0].memoryPriority != deviceMemoryPriorityFeaturesEXT[1].memoryPriority)) 1589 { 1590 TCU_FAIL("Mismatch between VkPhysicalDeviceMemoryPriorityFeaturesEXT"); 1591 } 1592 return tcu::TestStatus::pass("Querying succeeded"); 1593} 1594 1595tcu::TestStatus testPhysicalDeviceFeaturePageableDeviceLocalMemoryFeaturesEXT (Context& context) 1596{ 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); 1604 1605 VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT devicePageableDeviceLocalMemoryFeaturesEXT[count]; 1606 const bool isPageableDeviceLocalMemoryFeaturesEXT = checkExtension(properties, "VK_EXT_pageable_device_local_memory"); 1607 1608 for (int ndx = 0; ndx < count; ++ndx) 1609 { 1610 deMemset(&devicePageableDeviceLocalMemoryFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT)); 1611 devicePageableDeviceLocalMemoryFeaturesEXT[ndx].sType = isPageableDeviceLocalMemoryFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1612 devicePageableDeviceLocalMemoryFeaturesEXT[ndx].pNext = DE_NULL; 1613 1614 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1615 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1616 extFeatures.pNext = &devicePageableDeviceLocalMemoryFeaturesEXT[ndx]; 1617 1618 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1619 } 1620 1621 if (isPageableDeviceLocalMemoryFeaturesEXT) 1622 log << TestLog::Message << devicePageableDeviceLocalMemoryFeaturesEXT[0] << TestLog::EndMessage; 1623 1624 if (isPageableDeviceLocalMemoryFeaturesEXT && 1625 (devicePageableDeviceLocalMemoryFeaturesEXT[0].pageableDeviceLocalMemory != devicePageableDeviceLocalMemoryFeaturesEXT[1].pageableDeviceLocalMemory)) 1626 { 1627 TCU_FAIL("Mismatch between VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT"); 1628 } 1629 return tcu::TestStatus::pass("Querying succeeded"); 1630} 1631 1632tcu::TestStatus testPhysicalDeviceFeatureBufferDeviceAddressFeatures (Context& context) 1633{ 1634 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1635 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1636 const InstanceDriver& vki (instance.getDriver()); 1637 const int count = 2u; 1638 TestLog& log = context.getTestContext().getLog(); 1639 VkPhysicalDeviceFeatures2 extFeatures; 1640 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1641 1642 VkPhysicalDeviceBufferDeviceAddressFeatures deviceBufferDeviceAddressFeatures[count]; 1643 const bool isBufferDeviceAddressFeatures = checkExtension(properties, "VK_KHR_buffer_device_address") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 1644 1645 for (int ndx = 0; ndx < count; ++ndx) 1646 { 1647 deMemset(&deviceBufferDeviceAddressFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceBufferDeviceAddressFeatures)); 1648 deviceBufferDeviceAddressFeatures[ndx].sType = isBufferDeviceAddressFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 1649 deviceBufferDeviceAddressFeatures[ndx].pNext = DE_NULL; 1650 1651 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1652 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1653 extFeatures.pNext = &deviceBufferDeviceAddressFeatures[ndx]; 1654 1655 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1656 } 1657 1658 if (isBufferDeviceAddressFeatures) 1659 log << TestLog::Message << deviceBufferDeviceAddressFeatures[0] << TestLog::EndMessage; 1660 1661 if (isBufferDeviceAddressFeatures && 1662 (deviceBufferDeviceAddressFeatures[0].bufferDeviceAddress != deviceBufferDeviceAddressFeatures[1].bufferDeviceAddress || 1663 deviceBufferDeviceAddressFeatures[0].bufferDeviceAddressCaptureReplay != deviceBufferDeviceAddressFeatures[1].bufferDeviceAddressCaptureReplay || 1664 deviceBufferDeviceAddressFeatures[0].bufferDeviceAddressMultiDevice != deviceBufferDeviceAddressFeatures[1].bufferDeviceAddressMultiDevice)) 1665 { 1666 TCU_FAIL("Mismatch between VkPhysicalDeviceBufferDeviceAddressFeatures"); 1667 } 1668 return tcu::TestStatus::pass("Querying succeeded"); 1669} 1670 1671tcu::TestStatus testPhysicalDeviceFeatureBufferDeviceAddressFeaturesEXT (Context& context) 1672{ 1673 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1674 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1675 const InstanceDriver& vki (instance.getDriver()); 1676 const int count = 2u; 1677 TestLog& log = context.getTestContext().getLog(); 1678 VkPhysicalDeviceFeatures2 extFeatures; 1679 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1680 1681 VkPhysicalDeviceBufferDeviceAddressFeaturesEXT deviceBufferDeviceAddressFeaturesEXT[count]; 1682 const bool isBufferDeviceAddressFeaturesEXT = checkExtension(properties, "VK_EXT_buffer_device_address"); 1683 1684 for (int ndx = 0; ndx < count; ++ndx) 1685 { 1686 deMemset(&deviceBufferDeviceAddressFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT)); 1687 deviceBufferDeviceAddressFeaturesEXT[ndx].sType = isBufferDeviceAddressFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1688 deviceBufferDeviceAddressFeaturesEXT[ndx].pNext = DE_NULL; 1689 1690 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1691 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1692 extFeatures.pNext = &deviceBufferDeviceAddressFeaturesEXT[ndx]; 1693 1694 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1695 } 1696 1697 if (isBufferDeviceAddressFeaturesEXT) 1698 log << TestLog::Message << deviceBufferDeviceAddressFeaturesEXT[0] << TestLog::EndMessage; 1699 1700 if (isBufferDeviceAddressFeaturesEXT && 1701 (deviceBufferDeviceAddressFeaturesEXT[0].bufferDeviceAddress != deviceBufferDeviceAddressFeaturesEXT[1].bufferDeviceAddress || 1702 deviceBufferDeviceAddressFeaturesEXT[0].bufferDeviceAddressCaptureReplay != deviceBufferDeviceAddressFeaturesEXT[1].bufferDeviceAddressCaptureReplay || 1703 deviceBufferDeviceAddressFeaturesEXT[0].bufferDeviceAddressMultiDevice != deviceBufferDeviceAddressFeaturesEXT[1].bufferDeviceAddressMultiDevice)) 1704 { 1705 TCU_FAIL("Mismatch between VkPhysicalDeviceBufferDeviceAddressFeaturesEXT"); 1706 } 1707 return tcu::TestStatus::pass("Querying succeeded"); 1708} 1709 1710tcu::TestStatus testPhysicalDeviceFeatureImagelessFramebufferFeatures (Context& context) 1711{ 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); 1719 1720 VkPhysicalDeviceImagelessFramebufferFeatures deviceImagelessFramebufferFeatures[count]; 1721 const bool isImagelessFramebufferFeatures = checkExtension(properties, "VK_KHR_imageless_framebuffer") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 1722 1723 for (int ndx = 0; ndx < count; ++ndx) 1724 { 1725 deMemset(&deviceImagelessFramebufferFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImagelessFramebufferFeatures)); 1726 deviceImagelessFramebufferFeatures[ndx].sType = isImagelessFramebufferFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 1727 deviceImagelessFramebufferFeatures[ndx].pNext = DE_NULL; 1728 1729 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1730 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1731 extFeatures.pNext = &deviceImagelessFramebufferFeatures[ndx]; 1732 1733 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1734 } 1735 1736 if (isImagelessFramebufferFeatures) 1737 log << TestLog::Message << deviceImagelessFramebufferFeatures[0] << TestLog::EndMessage; 1738 1739 if (isImagelessFramebufferFeatures && 1740 (deviceImagelessFramebufferFeatures[0].imagelessFramebuffer != deviceImagelessFramebufferFeatures[1].imagelessFramebuffer)) 1741 { 1742 TCU_FAIL("Mismatch between VkPhysicalDeviceImagelessFramebufferFeatures"); 1743 } 1744 return tcu::TestStatus::pass("Querying succeeded"); 1745} 1746 1747tcu::TestStatus testPhysicalDeviceFeatureTextureCompressionASTCHDRFeatures (Context& context) 1748{ 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); 1756 1757 VkPhysicalDeviceTextureCompressionASTCHDRFeatures deviceTextureCompressionASTCHDRFeatures[count]; 1758 const bool isTextureCompressionASTCHDRFeatures = checkExtension(properties, "VK_EXT_texture_compression_astc_hdr") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 1759 1760 for (int ndx = 0; ndx < count; ++ndx) 1761 { 1762 deMemset(&deviceTextureCompressionASTCHDRFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceTextureCompressionASTCHDRFeatures)); 1763 deviceTextureCompressionASTCHDRFeatures[ndx].sType = isTextureCompressionASTCHDRFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 1764 deviceTextureCompressionASTCHDRFeatures[ndx].pNext = DE_NULL; 1765 1766 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1767 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1768 extFeatures.pNext = &deviceTextureCompressionASTCHDRFeatures[ndx]; 1769 1770 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1771 } 1772 1773 if (isTextureCompressionASTCHDRFeatures) 1774 log << TestLog::Message << deviceTextureCompressionASTCHDRFeatures[0] << TestLog::EndMessage; 1775 1776 if (isTextureCompressionASTCHDRFeatures && 1777 (deviceTextureCompressionASTCHDRFeatures[0].textureCompressionASTC_HDR != deviceTextureCompressionASTCHDRFeatures[1].textureCompressionASTC_HDR)) 1778 { 1779 TCU_FAIL("Mismatch between VkPhysicalDeviceTextureCompressionASTCHDRFeatures"); 1780 } 1781 return tcu::TestStatus::pass("Querying succeeded"); 1782} 1783 1784tcu::TestStatus testPhysicalDeviceFeatureYcbcrImageArraysFeaturesEXT (Context& context) 1785{ 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); 1793 1794 VkPhysicalDeviceYcbcrImageArraysFeaturesEXT deviceYcbcrImageArraysFeaturesEXT[count]; 1795 const bool isYcbcrImageArraysFeaturesEXT = checkExtension(properties, "VK_EXT_ycbcr_image_arrays"); 1796 1797 for (int ndx = 0; ndx < count; ++ndx) 1798 { 1799 deMemset(&deviceYcbcrImageArraysFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT)); 1800 deviceYcbcrImageArraysFeaturesEXT[ndx].sType = isYcbcrImageArraysFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1801 deviceYcbcrImageArraysFeaturesEXT[ndx].pNext = DE_NULL; 1802 1803 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1804 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1805 extFeatures.pNext = &deviceYcbcrImageArraysFeaturesEXT[ndx]; 1806 1807 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1808 } 1809 1810 if (isYcbcrImageArraysFeaturesEXT) 1811 log << TestLog::Message << deviceYcbcrImageArraysFeaturesEXT[0] << TestLog::EndMessage; 1812 1813 if (isYcbcrImageArraysFeaturesEXT && 1814 (deviceYcbcrImageArraysFeaturesEXT[0].ycbcrImageArrays != deviceYcbcrImageArraysFeaturesEXT[1].ycbcrImageArrays)) 1815 { 1816 TCU_FAIL("Mismatch between VkPhysicalDeviceYcbcrImageArraysFeaturesEXT"); 1817 } 1818 return tcu::TestStatus::pass("Querying succeeded"); 1819} 1820 1821tcu::TestStatus testPhysicalDeviceFeaturePerformanceQueryFeaturesKHR (Context& context) 1822{ 1823 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1824 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1825 const InstanceDriver& vki (instance.getDriver()); 1826 const int count = 2u; 1827 TestLog& log = context.getTestContext().getLog(); 1828 VkPhysicalDeviceFeatures2 extFeatures; 1829 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1830 1831 VkPhysicalDevicePerformanceQueryFeaturesKHR devicePerformanceQueryFeaturesKHR[count]; 1832 const bool isPerformanceQueryFeaturesKHR = checkExtension(properties, "VK_KHR_performance_query"); 1833 1834 for (int ndx = 0; ndx < count; ++ndx) 1835 { 1836 deMemset(&devicePerformanceQueryFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePerformanceQueryFeaturesKHR)); 1837 devicePerformanceQueryFeaturesKHR[ndx].sType = isPerformanceQueryFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 1838 devicePerformanceQueryFeaturesKHR[ndx].pNext = DE_NULL; 1839 1840 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1841 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1842 extFeatures.pNext = &devicePerformanceQueryFeaturesKHR[ndx]; 1843 1844 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1845 } 1846 1847 if (isPerformanceQueryFeaturesKHR) 1848 log << TestLog::Message << devicePerformanceQueryFeaturesKHR[0] << TestLog::EndMessage; 1849 1850 if (isPerformanceQueryFeaturesKHR && 1851 (devicePerformanceQueryFeaturesKHR[0].performanceCounterQueryPools != devicePerformanceQueryFeaturesKHR[1].performanceCounterQueryPools || 1852 devicePerformanceQueryFeaturesKHR[0].performanceCounterMultipleQueryPools != devicePerformanceQueryFeaturesKHR[1].performanceCounterMultipleQueryPools)) 1853 { 1854 TCU_FAIL("Mismatch between VkPhysicalDevicePerformanceQueryFeaturesKHR"); 1855 } 1856 return tcu::TestStatus::pass("Querying succeeded"); 1857} 1858 1859tcu::TestStatus testPhysicalDeviceFeatureShaderClockFeaturesKHR (Context& context) 1860{ 1861 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1862 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1863 const InstanceDriver& vki (instance.getDriver()); 1864 const int count = 2u; 1865 TestLog& log = context.getTestContext().getLog(); 1866 VkPhysicalDeviceFeatures2 extFeatures; 1867 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1868 1869 VkPhysicalDeviceShaderClockFeaturesKHR deviceShaderClockFeaturesKHR[count]; 1870 const bool isShaderClockFeaturesKHR = checkExtension(properties, "VK_KHR_shader_clock"); 1871 1872 for (int ndx = 0; ndx < count; ++ndx) 1873 { 1874 deMemset(&deviceShaderClockFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderClockFeaturesKHR)); 1875 deviceShaderClockFeaturesKHR[ndx].sType = isShaderClockFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 1876 deviceShaderClockFeaturesKHR[ndx].pNext = DE_NULL; 1877 1878 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1879 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1880 extFeatures.pNext = &deviceShaderClockFeaturesKHR[ndx]; 1881 1882 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1883 } 1884 1885 if (isShaderClockFeaturesKHR) 1886 log << TestLog::Message << deviceShaderClockFeaturesKHR[0] << TestLog::EndMessage; 1887 1888 if (isShaderClockFeaturesKHR && 1889 (deviceShaderClockFeaturesKHR[0].shaderSubgroupClock != deviceShaderClockFeaturesKHR[1].shaderSubgroupClock || 1890 deviceShaderClockFeaturesKHR[0].shaderDeviceClock != deviceShaderClockFeaturesKHR[1].shaderDeviceClock)) 1891 { 1892 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderClockFeaturesKHR"); 1893 } 1894 return tcu::TestStatus::pass("Querying succeeded"); 1895} 1896 1897tcu::TestStatus testPhysicalDeviceFeatureIndexTypeUint8FeaturesEXT (Context& context) 1898{ 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); 1906 1907 VkPhysicalDeviceIndexTypeUint8FeaturesEXT deviceIndexTypeUint8FeaturesEXT[count]; 1908 const bool isIndexTypeUint8FeaturesEXT = checkExtension(properties, "VK_EXT_index_type_uint8"); 1909 1910 for (int ndx = 0; ndx < count; ++ndx) 1911 { 1912 deMemset(&deviceIndexTypeUint8FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceIndexTypeUint8FeaturesEXT)); 1913 deviceIndexTypeUint8FeaturesEXT[ndx].sType = isIndexTypeUint8FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1914 deviceIndexTypeUint8FeaturesEXT[ndx].pNext = DE_NULL; 1915 1916 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1917 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1918 extFeatures.pNext = &deviceIndexTypeUint8FeaturesEXT[ndx]; 1919 1920 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1921 } 1922 1923 if (isIndexTypeUint8FeaturesEXT) 1924 log << TestLog::Message << deviceIndexTypeUint8FeaturesEXT[0] << TestLog::EndMessage; 1925 1926 if (isIndexTypeUint8FeaturesEXT && 1927 (deviceIndexTypeUint8FeaturesEXT[0].indexTypeUint8 != deviceIndexTypeUint8FeaturesEXT[1].indexTypeUint8)) 1928 { 1929 TCU_FAIL("Mismatch between VkPhysicalDeviceIndexTypeUint8FeaturesEXT"); 1930 } 1931 return tcu::TestStatus::pass("Querying succeeded"); 1932} 1933 1934tcu::TestStatus testPhysicalDeviceFeatureFragmentShaderInterlockFeaturesEXT (Context& context) 1935{ 1936 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 1937 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 1938 const InstanceDriver& vki (instance.getDriver()); 1939 const int count = 2u; 1940 TestLog& log = context.getTestContext().getLog(); 1941 VkPhysicalDeviceFeatures2 extFeatures; 1942 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 1943 1944 VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT deviceFragmentShaderInterlockFeaturesEXT[count]; 1945 const bool isFragmentShaderInterlockFeaturesEXT = checkExtension(properties, "VK_EXT_fragment_shader_interlock"); 1946 1947 for (int ndx = 0; ndx < count; ++ndx) 1948 { 1949 deMemset(&deviceFragmentShaderInterlockFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT)); 1950 deviceFragmentShaderInterlockFeaturesEXT[ndx].sType = isFragmentShaderInterlockFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 1951 deviceFragmentShaderInterlockFeaturesEXT[ndx].pNext = DE_NULL; 1952 1953 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1954 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1955 extFeatures.pNext = &deviceFragmentShaderInterlockFeaturesEXT[ndx]; 1956 1957 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1958 } 1959 1960 if (isFragmentShaderInterlockFeaturesEXT) 1961 log << TestLog::Message << deviceFragmentShaderInterlockFeaturesEXT[0] << TestLog::EndMessage; 1962 1963 if (isFragmentShaderInterlockFeaturesEXT && 1964 (deviceFragmentShaderInterlockFeaturesEXT[0].fragmentShaderSampleInterlock != deviceFragmentShaderInterlockFeaturesEXT[1].fragmentShaderSampleInterlock || 1965 deviceFragmentShaderInterlockFeaturesEXT[0].fragmentShaderPixelInterlock != deviceFragmentShaderInterlockFeaturesEXT[1].fragmentShaderPixelInterlock || 1966 deviceFragmentShaderInterlockFeaturesEXT[0].fragmentShaderShadingRateInterlock != deviceFragmentShaderInterlockFeaturesEXT[1].fragmentShaderShadingRateInterlock)) 1967 { 1968 TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT"); 1969 } 1970 return tcu::TestStatus::pass("Querying succeeded"); 1971} 1972 1973tcu::TestStatus testPhysicalDeviceFeatureSeparateDepthStencilLayoutsFeatures (Context& context) 1974{ 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); 1982 1983 VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures deviceSeparateDepthStencilLayoutsFeatures[count]; 1984 const bool isSeparateDepthStencilLayoutsFeatures = checkExtension(properties, "VK_KHR_separate_depth_stencil_layouts") || context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 1985 1986 for (int ndx = 0; ndx < count; ++ndx) 1987 { 1988 deMemset(&deviceSeparateDepthStencilLayoutsFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures)); 1989 deviceSeparateDepthStencilLayoutsFeatures[ndx].sType = isSeparateDepthStencilLayoutsFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 1990 deviceSeparateDepthStencilLayoutsFeatures[ndx].pNext = DE_NULL; 1991 1992 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 1993 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 1994 extFeatures.pNext = &deviceSeparateDepthStencilLayoutsFeatures[ndx]; 1995 1996 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 1997 } 1998 1999 if (isSeparateDepthStencilLayoutsFeatures) 2000 log << TestLog::Message << deviceSeparateDepthStencilLayoutsFeatures[0] << TestLog::EndMessage; 2001 2002 if (isSeparateDepthStencilLayoutsFeatures && 2003 (deviceSeparateDepthStencilLayoutsFeatures[0].separateDepthStencilLayouts != deviceSeparateDepthStencilLayoutsFeatures[1].separateDepthStencilLayouts)) 2004 { 2005 TCU_FAIL("Mismatch between VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures"); 2006 } 2007 return tcu::TestStatus::pass("Querying succeeded"); 2008} 2009 2010tcu::TestStatus testPhysicalDeviceFeaturePrimitiveTopologyListRestartFeaturesEXT (Context& context) 2011{ 2012 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2013 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2014 const InstanceDriver& vki (instance.getDriver()); 2015 const int count = 2u; 2016 TestLog& log = context.getTestContext().getLog(); 2017 VkPhysicalDeviceFeatures2 extFeatures; 2018 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2019 2020 VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT devicePrimitiveTopologyListRestartFeaturesEXT[count]; 2021 const bool isPrimitiveTopologyListRestartFeaturesEXT = checkExtension(properties, "VK_EXT_primitive_topology_list_restart"); 2022 2023 for (int ndx = 0; ndx < count; ++ndx) 2024 { 2025 deMemset(&devicePrimitiveTopologyListRestartFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT)); 2026 devicePrimitiveTopologyListRestartFeaturesEXT[ndx].sType = isPrimitiveTopologyListRestartFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2027 devicePrimitiveTopologyListRestartFeaturesEXT[ndx].pNext = DE_NULL; 2028 2029 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2030 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2031 extFeatures.pNext = &devicePrimitiveTopologyListRestartFeaturesEXT[ndx]; 2032 2033 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2034 } 2035 2036 if (isPrimitiveTopologyListRestartFeaturesEXT) 2037 log << TestLog::Message << devicePrimitiveTopologyListRestartFeaturesEXT[0] << TestLog::EndMessage; 2038 2039 if (isPrimitiveTopologyListRestartFeaturesEXT && 2040 (devicePrimitiveTopologyListRestartFeaturesEXT[0].primitiveTopologyListRestart != devicePrimitiveTopologyListRestartFeaturesEXT[1].primitiveTopologyListRestart || 2041 devicePrimitiveTopologyListRestartFeaturesEXT[0].primitiveTopologyPatchListRestart != devicePrimitiveTopologyListRestartFeaturesEXT[1].primitiveTopologyPatchListRestart)) 2042 { 2043 TCU_FAIL("Mismatch between VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT"); 2044 } 2045 return tcu::TestStatus::pass("Querying succeeded"); 2046} 2047 2048tcu::TestStatus testPhysicalDeviceFeaturePipelineExecutablePropertiesFeaturesKHR (Context& context) 2049{ 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); 2057 2058 VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR devicePipelineExecutablePropertiesFeaturesKHR[count]; 2059 const bool isPipelineExecutablePropertiesFeaturesKHR = checkExtension(properties, "VK_KHR_pipeline_executable_properties"); 2060 2061 for (int ndx = 0; ndx < count; ++ndx) 2062 { 2063 deMemset(&devicePipelineExecutablePropertiesFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR)); 2064 devicePipelineExecutablePropertiesFeaturesKHR[ndx].sType = isPipelineExecutablePropertiesFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 2065 devicePipelineExecutablePropertiesFeaturesKHR[ndx].pNext = DE_NULL; 2066 2067 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2068 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2069 extFeatures.pNext = &devicePipelineExecutablePropertiesFeaturesKHR[ndx]; 2070 2071 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2072 } 2073 2074 if (isPipelineExecutablePropertiesFeaturesKHR) 2075 log << TestLog::Message << devicePipelineExecutablePropertiesFeaturesKHR[0] << TestLog::EndMessage; 2076 2077 if (isPipelineExecutablePropertiesFeaturesKHR && 2078 (devicePipelineExecutablePropertiesFeaturesKHR[0].pipelineExecutableInfo != devicePipelineExecutablePropertiesFeaturesKHR[1].pipelineExecutableInfo)) 2079 { 2080 TCU_FAIL("Mismatch between VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR"); 2081 } 2082 return tcu::TestStatus::pass("Querying succeeded"); 2083} 2084 2085tcu::TestStatus testPhysicalDeviceFeatureShaderDemoteToHelperInvocationFeatures (Context& context) 2086{ 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); 2094 2095 VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures deviceShaderDemoteToHelperInvocationFeatures[count]; 2096 const bool isShaderDemoteToHelperInvocationFeatures = checkExtension(properties, "VK_EXT_shader_demote_to_helper_invocation") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 2097 2098 for (int ndx = 0; ndx < count; ++ndx) 2099 { 2100 deMemset(&deviceShaderDemoteToHelperInvocationFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures)); 2101 deviceShaderDemoteToHelperInvocationFeatures[ndx].sType = isShaderDemoteToHelperInvocationFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 2102 deviceShaderDemoteToHelperInvocationFeatures[ndx].pNext = DE_NULL; 2103 2104 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2105 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2106 extFeatures.pNext = &deviceShaderDemoteToHelperInvocationFeatures[ndx]; 2107 2108 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2109 } 2110 2111 if (isShaderDemoteToHelperInvocationFeatures) 2112 log << TestLog::Message << deviceShaderDemoteToHelperInvocationFeatures[0] << TestLog::EndMessage; 2113 2114 if (isShaderDemoteToHelperInvocationFeatures && 2115 (deviceShaderDemoteToHelperInvocationFeatures[0].shaderDemoteToHelperInvocation != deviceShaderDemoteToHelperInvocationFeatures[1].shaderDemoteToHelperInvocation)) 2116 { 2117 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures"); 2118 } 2119 return tcu::TestStatus::pass("Querying succeeded"); 2120} 2121 2122tcu::TestStatus testPhysicalDeviceFeatureTexelBufferAlignmentFeaturesEXT (Context& context) 2123{ 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); 2131 2132 VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT deviceTexelBufferAlignmentFeaturesEXT[count]; 2133 const bool isTexelBufferAlignmentFeaturesEXT = checkExtension(properties, "VK_EXT_texel_buffer_alignment"); 2134 2135 for (int ndx = 0; ndx < count; ++ndx) 2136 { 2137 deMemset(&deviceTexelBufferAlignmentFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT)); 2138 deviceTexelBufferAlignmentFeaturesEXT[ndx].sType = isTexelBufferAlignmentFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2139 deviceTexelBufferAlignmentFeaturesEXT[ndx].pNext = DE_NULL; 2140 2141 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2142 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2143 extFeatures.pNext = &deviceTexelBufferAlignmentFeaturesEXT[ndx]; 2144 2145 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2146 } 2147 2148 if (isTexelBufferAlignmentFeaturesEXT) 2149 log << TestLog::Message << deviceTexelBufferAlignmentFeaturesEXT[0] << TestLog::EndMessage; 2150 2151 if (isTexelBufferAlignmentFeaturesEXT && 2152 (deviceTexelBufferAlignmentFeaturesEXT[0].texelBufferAlignment != deviceTexelBufferAlignmentFeaturesEXT[1].texelBufferAlignment)) 2153 { 2154 TCU_FAIL("Mismatch between VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT"); 2155 } 2156 return tcu::TestStatus::pass("Querying succeeded"); 2157} 2158 2159tcu::TestStatus testPhysicalDeviceFeatureSubgroupSizeControlFeatures (Context& context) 2160{ 2161 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2162 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2163 const InstanceDriver& vki (instance.getDriver()); 2164 const int count = 2u; 2165 TestLog& log = context.getTestContext().getLog(); 2166 VkPhysicalDeviceFeatures2 extFeatures; 2167 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2168 2169 VkPhysicalDeviceSubgroupSizeControlFeatures deviceSubgroupSizeControlFeatures[count]; 2170 const bool isSubgroupSizeControlFeatures = checkExtension(properties, "VK_EXT_subgroup_size_control") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 2171 2172 for (int ndx = 0; ndx < count; ++ndx) 2173 { 2174 deMemset(&deviceSubgroupSizeControlFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceSubgroupSizeControlFeatures)); 2175 deviceSubgroupSizeControlFeatures[ndx].sType = isSubgroupSizeControlFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 2176 deviceSubgroupSizeControlFeatures[ndx].pNext = DE_NULL; 2177 2178 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2179 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2180 extFeatures.pNext = &deviceSubgroupSizeControlFeatures[ndx]; 2181 2182 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2183 } 2184 2185 if (isSubgroupSizeControlFeatures) 2186 log << TestLog::Message << deviceSubgroupSizeControlFeatures[0] << TestLog::EndMessage; 2187 2188 if (isSubgroupSizeControlFeatures && 2189 (deviceSubgroupSizeControlFeatures[0].subgroupSizeControl != deviceSubgroupSizeControlFeatures[1].subgroupSizeControl || 2190 deviceSubgroupSizeControlFeatures[0].computeFullSubgroups != deviceSubgroupSizeControlFeatures[1].computeFullSubgroups)) 2191 { 2192 TCU_FAIL("Mismatch between VkPhysicalDeviceSubgroupSizeControlFeatures"); 2193 } 2194 return tcu::TestStatus::pass("Querying succeeded"); 2195} 2196 2197tcu::TestStatus testPhysicalDeviceFeatureLineRasterizationFeaturesEXT (Context& context) 2198{ 2199 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2200 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2201 const InstanceDriver& vki (instance.getDriver()); 2202 const int count = 2u; 2203 TestLog& log = context.getTestContext().getLog(); 2204 VkPhysicalDeviceFeatures2 extFeatures; 2205 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2206 2207 VkPhysicalDeviceLineRasterizationFeaturesEXT deviceLineRasterizationFeaturesEXT[count]; 2208 const bool isLineRasterizationFeaturesEXT = checkExtension(properties, "VK_EXT_line_rasterization"); 2209 2210 for (int ndx = 0; ndx < count; ++ndx) 2211 { 2212 deMemset(&deviceLineRasterizationFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceLineRasterizationFeaturesEXT)); 2213 deviceLineRasterizationFeaturesEXT[ndx].sType = isLineRasterizationFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2214 deviceLineRasterizationFeaturesEXT[ndx].pNext = DE_NULL; 2215 2216 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2217 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2218 extFeatures.pNext = &deviceLineRasterizationFeaturesEXT[ndx]; 2219 2220 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2221 } 2222 2223 if (isLineRasterizationFeaturesEXT) 2224 log << TestLog::Message << deviceLineRasterizationFeaturesEXT[0] << TestLog::EndMessage; 2225 2226 if (isLineRasterizationFeaturesEXT && 2227 (deviceLineRasterizationFeaturesEXT[0].rectangularLines != deviceLineRasterizationFeaturesEXT[1].rectangularLines || 2228 deviceLineRasterizationFeaturesEXT[0].bresenhamLines != deviceLineRasterizationFeaturesEXT[1].bresenhamLines || 2229 deviceLineRasterizationFeaturesEXT[0].smoothLines != deviceLineRasterizationFeaturesEXT[1].smoothLines || 2230 deviceLineRasterizationFeaturesEXT[0].stippledRectangularLines != deviceLineRasterizationFeaturesEXT[1].stippledRectangularLines || 2231 deviceLineRasterizationFeaturesEXT[0].stippledBresenhamLines != deviceLineRasterizationFeaturesEXT[1].stippledBresenhamLines || 2232 deviceLineRasterizationFeaturesEXT[0].stippledSmoothLines != deviceLineRasterizationFeaturesEXT[1].stippledSmoothLines)) 2233 { 2234 TCU_FAIL("Mismatch between VkPhysicalDeviceLineRasterizationFeaturesEXT"); 2235 } 2236 return tcu::TestStatus::pass("Querying succeeded"); 2237} 2238 2239tcu::TestStatus testPhysicalDeviceFeaturePipelineCreationCacheControlFeatures (Context& context) 2240{ 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); 2248 2249 VkPhysicalDevicePipelineCreationCacheControlFeatures devicePipelineCreationCacheControlFeatures[count]; 2250 const bool isPipelineCreationCacheControlFeatures = checkExtension(properties, "VK_EXT_pipeline_creation_cache_control") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 2251 2252 for (int ndx = 0; ndx < count; ++ndx) 2253 { 2254 deMemset(&devicePipelineCreationCacheControlFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePipelineCreationCacheControlFeatures)); 2255 devicePipelineCreationCacheControlFeatures[ndx].sType = isPipelineCreationCacheControlFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 2256 devicePipelineCreationCacheControlFeatures[ndx].pNext = DE_NULL; 2257 2258 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2259 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2260 extFeatures.pNext = &devicePipelineCreationCacheControlFeatures[ndx]; 2261 2262 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2263 } 2264 2265 if (isPipelineCreationCacheControlFeatures) 2266 log << TestLog::Message << devicePipelineCreationCacheControlFeatures[0] << TestLog::EndMessage; 2267 2268 if (isPipelineCreationCacheControlFeatures && 2269 (devicePipelineCreationCacheControlFeatures[0].pipelineCreationCacheControl != devicePipelineCreationCacheControlFeatures[1].pipelineCreationCacheControl)) 2270 { 2271 TCU_FAIL("Mismatch between VkPhysicalDevicePipelineCreationCacheControlFeatures"); 2272 } 2273 return tcu::TestStatus::pass("Querying succeeded"); 2274} 2275 2276tcu::TestStatus testPhysicalDeviceFeatureVulkan11Features (Context& context) 2277{ 2278 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2279 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2280 const InstanceDriver& vki (instance.getDriver()); 2281 const int count = 2u; 2282 TestLog& log = context.getTestContext().getLog(); 2283 VkPhysicalDeviceFeatures2 extFeatures; 2284 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2285 2286 VkPhysicalDeviceVulkan11Features deviceVulkan11Features[count]; 2287 const bool isVulkan11Features = context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 2288 2289 for (int ndx = 0; ndx < count; ++ndx) 2290 { 2291 deMemset(&deviceVulkan11Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVulkan11Features)); 2292 deviceVulkan11Features[ndx].sType = isVulkan11Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 2293 deviceVulkan11Features[ndx].pNext = DE_NULL; 2294 2295 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2296 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2297 extFeatures.pNext = &deviceVulkan11Features[ndx]; 2298 2299 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2300 } 2301 2302 if (isVulkan11Features) 2303 log << TestLog::Message << deviceVulkan11Features[0] << TestLog::EndMessage; 2304 2305 if (isVulkan11Features && 2306 (deviceVulkan11Features[0].storageBuffer16BitAccess != deviceVulkan11Features[1].storageBuffer16BitAccess || 2307 deviceVulkan11Features[0].uniformAndStorageBuffer16BitAccess != deviceVulkan11Features[1].uniformAndStorageBuffer16BitAccess || 2308 deviceVulkan11Features[0].storagePushConstant16 != deviceVulkan11Features[1].storagePushConstant16 || 2309 deviceVulkan11Features[0].storageInputOutput16 != deviceVulkan11Features[1].storageInputOutput16 || 2310 deviceVulkan11Features[0].multiview != deviceVulkan11Features[1].multiview || 2311 deviceVulkan11Features[0].multiviewGeometryShader != deviceVulkan11Features[1].multiviewGeometryShader || 2312 deviceVulkan11Features[0].multiviewTessellationShader != deviceVulkan11Features[1].multiviewTessellationShader || 2313 deviceVulkan11Features[0].variablePointersStorageBuffer != deviceVulkan11Features[1].variablePointersStorageBuffer || 2314 deviceVulkan11Features[0].variablePointers != deviceVulkan11Features[1].variablePointers || 2315 deviceVulkan11Features[0].protectedMemory != deviceVulkan11Features[1].protectedMemory || 2316 deviceVulkan11Features[0].samplerYcbcrConversion != deviceVulkan11Features[1].samplerYcbcrConversion || 2317 deviceVulkan11Features[0].shaderDrawParameters != deviceVulkan11Features[1].shaderDrawParameters)) 2318 { 2319 TCU_FAIL("Mismatch between VkPhysicalDeviceVulkan11Features"); 2320 } 2321 return tcu::TestStatus::pass("Querying succeeded"); 2322} 2323 2324tcu::TestStatus testPhysicalDeviceFeatureVulkan12Features (Context& context) 2325{ 2326 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2327 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2328 const InstanceDriver& vki (instance.getDriver()); 2329 const int count = 2u; 2330 TestLog& log = context.getTestContext().getLog(); 2331 VkPhysicalDeviceFeatures2 extFeatures; 2332 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2333 2334 VkPhysicalDeviceVulkan12Features deviceVulkan12Features[count]; 2335 const bool isVulkan12Features = context.contextSupports(vk::ApiVersion(0, 1, 2, 0)); 2336 2337 for (int ndx = 0; ndx < count; ++ndx) 2338 { 2339 deMemset(&deviceVulkan12Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVulkan12Features)); 2340 deviceVulkan12Features[ndx].sType = isVulkan12Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 2341 deviceVulkan12Features[ndx].pNext = DE_NULL; 2342 2343 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2344 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2345 extFeatures.pNext = &deviceVulkan12Features[ndx]; 2346 2347 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2348 } 2349 2350 if (isVulkan12Features) 2351 log << TestLog::Message << deviceVulkan12Features[0] << TestLog::EndMessage; 2352 2353 if (isVulkan12Features && 2354 (deviceVulkan12Features[0].samplerMirrorClampToEdge != deviceVulkan12Features[1].samplerMirrorClampToEdge || 2355 deviceVulkan12Features[0].drawIndirectCount != deviceVulkan12Features[1].drawIndirectCount || 2356 deviceVulkan12Features[0].storageBuffer8BitAccess != deviceVulkan12Features[1].storageBuffer8BitAccess || 2357 deviceVulkan12Features[0].uniformAndStorageBuffer8BitAccess != deviceVulkan12Features[1].uniformAndStorageBuffer8BitAccess || 2358 deviceVulkan12Features[0].storagePushConstant8 != deviceVulkan12Features[1].storagePushConstant8 || 2359 deviceVulkan12Features[0].shaderBufferInt64Atomics != deviceVulkan12Features[1].shaderBufferInt64Atomics || 2360 deviceVulkan12Features[0].shaderSharedInt64Atomics != deviceVulkan12Features[1].shaderSharedInt64Atomics || 2361 deviceVulkan12Features[0].shaderFloat16 != deviceVulkan12Features[1].shaderFloat16 || 2362 deviceVulkan12Features[0].shaderInt8 != deviceVulkan12Features[1].shaderInt8 || 2363 deviceVulkan12Features[0].descriptorIndexing != deviceVulkan12Features[1].descriptorIndexing || 2364 deviceVulkan12Features[0].shaderInputAttachmentArrayDynamicIndexing != deviceVulkan12Features[1].shaderInputAttachmentArrayDynamicIndexing || 2365 deviceVulkan12Features[0].shaderUniformTexelBufferArrayDynamicIndexing != deviceVulkan12Features[1].shaderUniformTexelBufferArrayDynamicIndexing || 2366 deviceVulkan12Features[0].shaderStorageTexelBufferArrayDynamicIndexing != deviceVulkan12Features[1].shaderStorageTexelBufferArrayDynamicIndexing || 2367 deviceVulkan12Features[0].shaderUniformBufferArrayNonUniformIndexing != deviceVulkan12Features[1].shaderUniformBufferArrayNonUniformIndexing || 2368 deviceVulkan12Features[0].shaderSampledImageArrayNonUniformIndexing != deviceVulkan12Features[1].shaderSampledImageArrayNonUniformIndexing || 2369 deviceVulkan12Features[0].shaderStorageBufferArrayNonUniformIndexing != deviceVulkan12Features[1].shaderStorageBufferArrayNonUniformIndexing || 2370 deviceVulkan12Features[0].shaderStorageImageArrayNonUniformIndexing != deviceVulkan12Features[1].shaderStorageImageArrayNonUniformIndexing || 2371 deviceVulkan12Features[0].shaderInputAttachmentArrayNonUniformIndexing != deviceVulkan12Features[1].shaderInputAttachmentArrayNonUniformIndexing || 2372 deviceVulkan12Features[0].shaderUniformTexelBufferArrayNonUniformIndexing != deviceVulkan12Features[1].shaderUniformTexelBufferArrayNonUniformIndexing || 2373 deviceVulkan12Features[0].shaderStorageTexelBufferArrayNonUniformIndexing != deviceVulkan12Features[1].shaderStorageTexelBufferArrayNonUniformIndexing || 2374 deviceVulkan12Features[0].descriptorBindingUniformBufferUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingUniformBufferUpdateAfterBind || 2375 deviceVulkan12Features[0].descriptorBindingSampledImageUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingSampledImageUpdateAfterBind || 2376 deviceVulkan12Features[0].descriptorBindingStorageImageUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingStorageImageUpdateAfterBind || 2377 deviceVulkan12Features[0].descriptorBindingStorageBufferUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingStorageBufferUpdateAfterBind || 2378 deviceVulkan12Features[0].descriptorBindingUniformTexelBufferUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingUniformTexelBufferUpdateAfterBind || 2379 deviceVulkan12Features[0].descriptorBindingStorageTexelBufferUpdateAfterBind != deviceVulkan12Features[1].descriptorBindingStorageTexelBufferUpdateAfterBind || 2380 deviceVulkan12Features[0].descriptorBindingUpdateUnusedWhilePending != deviceVulkan12Features[1].descriptorBindingUpdateUnusedWhilePending || 2381 deviceVulkan12Features[0].descriptorBindingPartiallyBound != deviceVulkan12Features[1].descriptorBindingPartiallyBound || 2382 deviceVulkan12Features[0].descriptorBindingVariableDescriptorCount != deviceVulkan12Features[1].descriptorBindingVariableDescriptorCount || 2383 deviceVulkan12Features[0].runtimeDescriptorArray != deviceVulkan12Features[1].runtimeDescriptorArray || 2384 deviceVulkan12Features[0].samplerFilterMinmax != deviceVulkan12Features[1].samplerFilterMinmax || 2385 deviceVulkan12Features[0].scalarBlockLayout != deviceVulkan12Features[1].scalarBlockLayout || 2386 deviceVulkan12Features[0].imagelessFramebuffer != deviceVulkan12Features[1].imagelessFramebuffer || 2387 deviceVulkan12Features[0].uniformBufferStandardLayout != deviceVulkan12Features[1].uniformBufferStandardLayout || 2388 deviceVulkan12Features[0].shaderSubgroupExtendedTypes != deviceVulkan12Features[1].shaderSubgroupExtendedTypes || 2389 deviceVulkan12Features[0].separateDepthStencilLayouts != deviceVulkan12Features[1].separateDepthStencilLayouts || 2390 deviceVulkan12Features[0].hostQueryReset != deviceVulkan12Features[1].hostQueryReset || 2391 deviceVulkan12Features[0].timelineSemaphore != deviceVulkan12Features[1].timelineSemaphore || 2392 deviceVulkan12Features[0].bufferDeviceAddress != deviceVulkan12Features[1].bufferDeviceAddress || 2393 deviceVulkan12Features[0].bufferDeviceAddressCaptureReplay != deviceVulkan12Features[1].bufferDeviceAddressCaptureReplay || 2394 deviceVulkan12Features[0].bufferDeviceAddressMultiDevice != deviceVulkan12Features[1].bufferDeviceAddressMultiDevice || 2395 deviceVulkan12Features[0].vulkanMemoryModel != deviceVulkan12Features[1].vulkanMemoryModel || 2396 deviceVulkan12Features[0].vulkanMemoryModelDeviceScope != deviceVulkan12Features[1].vulkanMemoryModelDeviceScope || 2397 deviceVulkan12Features[0].vulkanMemoryModelAvailabilityVisibilityChains != deviceVulkan12Features[1].vulkanMemoryModelAvailabilityVisibilityChains || 2398 deviceVulkan12Features[0].shaderOutputViewportIndex != deviceVulkan12Features[1].shaderOutputViewportIndex || 2399 deviceVulkan12Features[0].shaderOutputLayer != deviceVulkan12Features[1].shaderOutputLayer || 2400 deviceVulkan12Features[0].subgroupBroadcastDynamicId != deviceVulkan12Features[1].subgroupBroadcastDynamicId)) 2401 { 2402 TCU_FAIL("Mismatch between VkPhysicalDeviceVulkan12Features"); 2403 } 2404 return tcu::TestStatus::pass("Querying succeeded"); 2405} 2406 2407tcu::TestStatus testPhysicalDeviceFeatureVulkan13Features (Context& context) 2408{ 2409 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2410 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2411 const InstanceDriver& vki (instance.getDriver()); 2412 const int count = 2u; 2413 TestLog& log = context.getTestContext().getLog(); 2414 VkPhysicalDeviceFeatures2 extFeatures; 2415 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2416 2417 VkPhysicalDeviceVulkan13Features deviceVulkan13Features[count]; 2418 const bool isVulkan13Features = context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 2419 2420 for (int ndx = 0; ndx < count; ++ndx) 2421 { 2422 deMemset(&deviceVulkan13Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVulkan13Features)); 2423 deviceVulkan13Features[ndx].sType = isVulkan13Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 2424 deviceVulkan13Features[ndx].pNext = DE_NULL; 2425 2426 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2427 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2428 extFeatures.pNext = &deviceVulkan13Features[ndx]; 2429 2430 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2431 } 2432 2433 if (isVulkan13Features) 2434 log << TestLog::Message << deviceVulkan13Features[0] << TestLog::EndMessage; 2435 2436 if (isVulkan13Features && 2437 (deviceVulkan13Features[0].robustImageAccess != deviceVulkan13Features[1].robustImageAccess || 2438 deviceVulkan13Features[0].inlineUniformBlock != deviceVulkan13Features[1].inlineUniformBlock || 2439 deviceVulkan13Features[0].descriptorBindingInlineUniformBlockUpdateAfterBind != deviceVulkan13Features[1].descriptorBindingInlineUniformBlockUpdateAfterBind || 2440 deviceVulkan13Features[0].pipelineCreationCacheControl != deviceVulkan13Features[1].pipelineCreationCacheControl || 2441 deviceVulkan13Features[0].privateData != deviceVulkan13Features[1].privateData || 2442 deviceVulkan13Features[0].shaderDemoteToHelperInvocation != deviceVulkan13Features[1].shaderDemoteToHelperInvocation || 2443 deviceVulkan13Features[0].shaderTerminateInvocation != deviceVulkan13Features[1].shaderTerminateInvocation || 2444 deviceVulkan13Features[0].subgroupSizeControl != deviceVulkan13Features[1].subgroupSizeControl || 2445 deviceVulkan13Features[0].computeFullSubgroups != deviceVulkan13Features[1].computeFullSubgroups || 2446 deviceVulkan13Features[0].synchronization2 != deviceVulkan13Features[1].synchronization2 || 2447 deviceVulkan13Features[0].textureCompressionASTC_HDR != deviceVulkan13Features[1].textureCompressionASTC_HDR || 2448 deviceVulkan13Features[0].shaderZeroInitializeWorkgroupMemory != deviceVulkan13Features[1].shaderZeroInitializeWorkgroupMemory || 2449 deviceVulkan13Features[0].dynamicRendering != deviceVulkan13Features[1].dynamicRendering || 2450 deviceVulkan13Features[0].shaderIntegerDotProduct != deviceVulkan13Features[1].shaderIntegerDotProduct || 2451 deviceVulkan13Features[0].maintenance4 != deviceVulkan13Features[1].maintenance4)) 2452 { 2453 TCU_FAIL("Mismatch between VkPhysicalDeviceVulkan13Features"); 2454 } 2455 return tcu::TestStatus::pass("Querying succeeded"); 2456} 2457 2458tcu::TestStatus testPhysicalDeviceFeatureCustomBorderColorFeaturesEXT (Context& context) 2459{ 2460 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2461 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2462 const InstanceDriver& vki (instance.getDriver()); 2463 const int count = 2u; 2464 TestLog& log = context.getTestContext().getLog(); 2465 VkPhysicalDeviceFeatures2 extFeatures; 2466 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2467 2468 VkPhysicalDeviceCustomBorderColorFeaturesEXT deviceCustomBorderColorFeaturesEXT[count]; 2469 const bool isCustomBorderColorFeaturesEXT = checkExtension(properties, "VK_EXT_custom_border_color"); 2470 2471 for (int ndx = 0; ndx < count; ++ndx) 2472 { 2473 deMemset(&deviceCustomBorderColorFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceCustomBorderColorFeaturesEXT)); 2474 deviceCustomBorderColorFeaturesEXT[ndx].sType = isCustomBorderColorFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2475 deviceCustomBorderColorFeaturesEXT[ndx].pNext = DE_NULL; 2476 2477 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2478 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2479 extFeatures.pNext = &deviceCustomBorderColorFeaturesEXT[ndx]; 2480 2481 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2482 } 2483 2484 if (isCustomBorderColorFeaturesEXT) 2485 log << TestLog::Message << deviceCustomBorderColorFeaturesEXT[0] << TestLog::EndMessage; 2486 2487 if (isCustomBorderColorFeaturesEXT && 2488 (deviceCustomBorderColorFeaturesEXT[0].customBorderColors != deviceCustomBorderColorFeaturesEXT[1].customBorderColors || 2489 deviceCustomBorderColorFeaturesEXT[0].customBorderColorWithoutFormat != deviceCustomBorderColorFeaturesEXT[1].customBorderColorWithoutFormat)) 2490 { 2491 TCU_FAIL("Mismatch between VkPhysicalDeviceCustomBorderColorFeaturesEXT"); 2492 } 2493 return tcu::TestStatus::pass("Querying succeeded"); 2494} 2495 2496tcu::TestStatus testPhysicalDeviceFeatureBorderColorSwizzleFeaturesEXT (Context& context) 2497{ 2498 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2499 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2500 const InstanceDriver& vki (instance.getDriver()); 2501 const int count = 2u; 2502 TestLog& log = context.getTestContext().getLog(); 2503 VkPhysicalDeviceFeatures2 extFeatures; 2504 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2505 2506 VkPhysicalDeviceBorderColorSwizzleFeaturesEXT deviceBorderColorSwizzleFeaturesEXT[count]; 2507 const bool isBorderColorSwizzleFeaturesEXT = checkExtension(properties, "VK_EXT_border_color_swizzle"); 2508 2509 for (int ndx = 0; ndx < count; ++ndx) 2510 { 2511 deMemset(&deviceBorderColorSwizzleFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT)); 2512 deviceBorderColorSwizzleFeaturesEXT[ndx].sType = isBorderColorSwizzleFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2513 deviceBorderColorSwizzleFeaturesEXT[ndx].pNext = DE_NULL; 2514 2515 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2516 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2517 extFeatures.pNext = &deviceBorderColorSwizzleFeaturesEXT[ndx]; 2518 2519 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2520 } 2521 2522 if (isBorderColorSwizzleFeaturesEXT) 2523 log << TestLog::Message << deviceBorderColorSwizzleFeaturesEXT[0] << TestLog::EndMessage; 2524 2525 if (isBorderColorSwizzleFeaturesEXT && 2526 (deviceBorderColorSwizzleFeaturesEXT[0].borderColorSwizzle != deviceBorderColorSwizzleFeaturesEXT[1].borderColorSwizzle || 2527 deviceBorderColorSwizzleFeaturesEXT[0].borderColorSwizzleFromImage != deviceBorderColorSwizzleFeaturesEXT[1].borderColorSwizzleFromImage)) 2528 { 2529 TCU_FAIL("Mismatch between VkPhysicalDeviceBorderColorSwizzleFeaturesEXT"); 2530 } 2531 return tcu::TestStatus::pass("Querying succeeded"); 2532} 2533 2534tcu::TestStatus testPhysicalDeviceFeatureExtendedDynamicStateFeaturesEXT (Context& context) 2535{ 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); 2543 2544 VkPhysicalDeviceExtendedDynamicStateFeaturesEXT deviceExtendedDynamicStateFeaturesEXT[count]; 2545 const bool isExtendedDynamicStateFeaturesEXT = checkExtension(properties, "VK_EXT_extended_dynamic_state"); 2546 2547 for (int ndx = 0; ndx < count; ++ndx) 2548 { 2549 deMemset(&deviceExtendedDynamicStateFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT)); 2550 deviceExtendedDynamicStateFeaturesEXT[ndx].sType = isExtendedDynamicStateFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2551 deviceExtendedDynamicStateFeaturesEXT[ndx].pNext = DE_NULL; 2552 2553 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2554 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2555 extFeatures.pNext = &deviceExtendedDynamicStateFeaturesEXT[ndx]; 2556 2557 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2558 } 2559 2560 if (isExtendedDynamicStateFeaturesEXT) 2561 log << TestLog::Message << deviceExtendedDynamicStateFeaturesEXT[0] << TestLog::EndMessage; 2562 2563 if (isExtendedDynamicStateFeaturesEXT && 2564 (deviceExtendedDynamicStateFeaturesEXT[0].extendedDynamicState != deviceExtendedDynamicStateFeaturesEXT[1].extendedDynamicState)) 2565 { 2566 TCU_FAIL("Mismatch between VkPhysicalDeviceExtendedDynamicStateFeaturesEXT"); 2567 } 2568 return tcu::TestStatus::pass("Querying succeeded"); 2569} 2570 2571tcu::TestStatus testPhysicalDeviceFeatureExtendedDynamicState2FeaturesEXT (Context& context) 2572{ 2573 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2574 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2575 const InstanceDriver& vki (instance.getDriver()); 2576 const int count = 2u; 2577 TestLog& log = context.getTestContext().getLog(); 2578 VkPhysicalDeviceFeatures2 extFeatures; 2579 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2580 2581 VkPhysicalDeviceExtendedDynamicState2FeaturesEXT deviceExtendedDynamicState2FeaturesEXT[count]; 2582 const bool isExtendedDynamicState2FeaturesEXT = checkExtension(properties, "VK_EXT_extended_dynamic_state2"); 2583 2584 for (int ndx = 0; ndx < count; ++ndx) 2585 { 2586 deMemset(&deviceExtendedDynamicState2FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceExtendedDynamicState2FeaturesEXT)); 2587 deviceExtendedDynamicState2FeaturesEXT[ndx].sType = isExtendedDynamicState2FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2588 deviceExtendedDynamicState2FeaturesEXT[ndx].pNext = DE_NULL; 2589 2590 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2591 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2592 extFeatures.pNext = &deviceExtendedDynamicState2FeaturesEXT[ndx]; 2593 2594 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2595 } 2596 2597 if (isExtendedDynamicState2FeaturesEXT) 2598 log << TestLog::Message << deviceExtendedDynamicState2FeaturesEXT[0] << TestLog::EndMessage; 2599 2600 if (isExtendedDynamicState2FeaturesEXT && 2601 (deviceExtendedDynamicState2FeaturesEXT[0].extendedDynamicState2 != deviceExtendedDynamicState2FeaturesEXT[1].extendedDynamicState2 || 2602 deviceExtendedDynamicState2FeaturesEXT[0].extendedDynamicState2LogicOp != deviceExtendedDynamicState2FeaturesEXT[1].extendedDynamicState2LogicOp || 2603 deviceExtendedDynamicState2FeaturesEXT[0].extendedDynamicState2PatchControlPoints != deviceExtendedDynamicState2FeaturesEXT[1].extendedDynamicState2PatchControlPoints)) 2604 { 2605 TCU_FAIL("Mismatch between VkPhysicalDeviceExtendedDynamicState2FeaturesEXT"); 2606 } 2607 return tcu::TestStatus::pass("Querying succeeded"); 2608} 2609 2610tcu::TestStatus testPhysicalDeviceFeatureExtendedDynamicState3FeaturesEXT (Context& context) 2611{ 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); 2619 2620 VkPhysicalDeviceExtendedDynamicState3FeaturesEXT deviceExtendedDynamicState3FeaturesEXT[count]; 2621 const bool isExtendedDynamicState3FeaturesEXT = checkExtension(properties, "VK_EXT_extended_dynamic_state3"); 2622 2623 for (int ndx = 0; ndx < count; ++ndx) 2624 { 2625 deMemset(&deviceExtendedDynamicState3FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceExtendedDynamicState3FeaturesEXT)); 2626 deviceExtendedDynamicState3FeaturesEXT[ndx].sType = isExtendedDynamicState3FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2627 deviceExtendedDynamicState3FeaturesEXT[ndx].pNext = DE_NULL; 2628 2629 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2630 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2631 extFeatures.pNext = &deviceExtendedDynamicState3FeaturesEXT[ndx]; 2632 2633 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2634 } 2635 2636 if (isExtendedDynamicState3FeaturesEXT) 2637 log << TestLog::Message << deviceExtendedDynamicState3FeaturesEXT[0] << TestLog::EndMessage; 2638 2639 if (isExtendedDynamicState3FeaturesEXT && 2640 (deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3TessellationDomainOrigin != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3TessellationDomainOrigin || 2641 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3DepthClampEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3DepthClampEnable || 2642 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3PolygonMode != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3PolygonMode || 2643 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3RasterizationSamples != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3RasterizationSamples || 2644 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3SampleMask != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3SampleMask || 2645 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3AlphaToCoverageEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3AlphaToCoverageEnable || 2646 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3AlphaToOneEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3AlphaToOneEnable || 2647 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3LogicOpEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3LogicOpEnable || 2648 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3ColorBlendEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3ColorBlendEnable || 2649 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3ColorBlendEquation != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3ColorBlendEquation || 2650 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3ColorWriteMask != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3ColorWriteMask || 2651 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3RasterizationStream != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3RasterizationStream || 2652 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3ConservativeRasterizationMode != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3ConservativeRasterizationMode || 2653 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3ExtraPrimitiveOverestimationSize != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3ExtraPrimitiveOverestimationSize || 2654 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3DepthClipEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3DepthClipEnable || 2655 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3SampleLocationsEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3SampleLocationsEnable || 2656 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3ColorBlendAdvanced != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3ColorBlendAdvanced || 2657 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3ProvokingVertexMode != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3ProvokingVertexMode || 2658 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3LineRasterizationMode != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3LineRasterizationMode || 2659 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3LineStippleEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3LineStippleEnable || 2660 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3DepthClipNegativeOneToOne != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3DepthClipNegativeOneToOne || 2661 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3ViewportWScalingEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3ViewportWScalingEnable || 2662 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3ViewportSwizzle != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3ViewportSwizzle || 2663 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3CoverageToColorEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3CoverageToColorEnable || 2664 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3CoverageToColorLocation != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3CoverageToColorLocation || 2665 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3CoverageModulationMode != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3CoverageModulationMode || 2666 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3CoverageModulationTableEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3CoverageModulationTableEnable || 2667 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3CoverageModulationTable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3CoverageModulationTable || 2668 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3CoverageReductionMode != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3CoverageReductionMode || 2669 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3RepresentativeFragmentTestEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3RepresentativeFragmentTestEnable || 2670 deviceExtendedDynamicState3FeaturesEXT[0].extendedDynamicState3ShadingRateImageEnable != deviceExtendedDynamicState3FeaturesEXT[1].extendedDynamicState3ShadingRateImageEnable)) 2671 { 2672 TCU_FAIL("Mismatch between VkPhysicalDeviceExtendedDynamicState3FeaturesEXT"); 2673 } 2674 return tcu::TestStatus::pass("Querying succeeded"); 2675} 2676 2677tcu::TestStatus testPhysicalDeviceFeatureZeroInitializeWorkgroupMemoryFeatures (Context& context) 2678{ 2679 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2680 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2681 const InstanceDriver& vki (instance.getDriver()); 2682 const int count = 2u; 2683 TestLog& log = context.getTestContext().getLog(); 2684 VkPhysicalDeviceFeatures2 extFeatures; 2685 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2686 2687 VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures deviceZeroInitializeWorkgroupMemoryFeatures[count]; 2688 const bool isZeroInitializeWorkgroupMemoryFeatures = checkExtension(properties, "VK_KHR_zero_initialize_workgroup_memory") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 2689 2690 for (int ndx = 0; ndx < count; ++ndx) 2691 { 2692 deMemset(&deviceZeroInitializeWorkgroupMemoryFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures)); 2693 deviceZeroInitializeWorkgroupMemoryFeatures[ndx].sType = isZeroInitializeWorkgroupMemoryFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 2694 deviceZeroInitializeWorkgroupMemoryFeatures[ndx].pNext = DE_NULL; 2695 2696 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2697 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2698 extFeatures.pNext = &deviceZeroInitializeWorkgroupMemoryFeatures[ndx]; 2699 2700 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2701 } 2702 2703 if (isZeroInitializeWorkgroupMemoryFeatures) 2704 log << TestLog::Message << deviceZeroInitializeWorkgroupMemoryFeatures[0] << TestLog::EndMessage; 2705 2706 if (isZeroInitializeWorkgroupMemoryFeatures && 2707 (deviceZeroInitializeWorkgroupMemoryFeatures[0].shaderZeroInitializeWorkgroupMemory != deviceZeroInitializeWorkgroupMemoryFeatures[1].shaderZeroInitializeWorkgroupMemory)) 2708 { 2709 TCU_FAIL("Mismatch between VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures"); 2710 } 2711 return tcu::TestStatus::pass("Querying succeeded"); 2712} 2713 2714tcu::TestStatus testPhysicalDeviceFeatureShaderSubgroupUniformControlFlowFeaturesKHR (Context& context) 2715{ 2716 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2717 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2718 const InstanceDriver& vki (instance.getDriver()); 2719 const int count = 2u; 2720 TestLog& log = context.getTestContext().getLog(); 2721 VkPhysicalDeviceFeatures2 extFeatures; 2722 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2723 2724 VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR deviceShaderSubgroupUniformControlFlowFeaturesKHR[count]; 2725 const bool isShaderSubgroupUniformControlFlowFeaturesKHR = checkExtension(properties, "VK_KHR_shader_subgroup_uniform_control_flow"); 2726 2727 for (int ndx = 0; ndx < count; ++ndx) 2728 { 2729 deMemset(&deviceShaderSubgroupUniformControlFlowFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR)); 2730 deviceShaderSubgroupUniformControlFlowFeaturesKHR[ndx].sType = isShaderSubgroupUniformControlFlowFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 2731 deviceShaderSubgroupUniformControlFlowFeaturesKHR[ndx].pNext = DE_NULL; 2732 2733 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2734 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2735 extFeatures.pNext = &deviceShaderSubgroupUniformControlFlowFeaturesKHR[ndx]; 2736 2737 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2738 } 2739 2740 if (isShaderSubgroupUniformControlFlowFeaturesKHR) 2741 log << TestLog::Message << deviceShaderSubgroupUniformControlFlowFeaturesKHR[0] << TestLog::EndMessage; 2742 2743 if (isShaderSubgroupUniformControlFlowFeaturesKHR && 2744 (deviceShaderSubgroupUniformControlFlowFeaturesKHR[0].shaderSubgroupUniformControlFlow != deviceShaderSubgroupUniformControlFlowFeaturesKHR[1].shaderSubgroupUniformControlFlow)) 2745 { 2746 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR"); 2747 } 2748 return tcu::TestStatus::pass("Querying succeeded"); 2749} 2750 2751tcu::TestStatus testPhysicalDeviceFeatureRobustness2FeaturesEXT (Context& context) 2752{ 2753 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2754 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2755 const InstanceDriver& vki (instance.getDriver()); 2756 const int count = 2u; 2757 TestLog& log = context.getTestContext().getLog(); 2758 VkPhysicalDeviceFeatures2 extFeatures; 2759 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2760 2761 VkPhysicalDeviceRobustness2FeaturesEXT deviceRobustness2FeaturesEXT[count]; 2762 const bool isRobustness2FeaturesEXT = checkExtension(properties, "VK_EXT_robustness2"); 2763 2764 for (int ndx = 0; ndx < count; ++ndx) 2765 { 2766 deMemset(&deviceRobustness2FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRobustness2FeaturesEXT)); 2767 deviceRobustness2FeaturesEXT[ndx].sType = isRobustness2FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2768 deviceRobustness2FeaturesEXT[ndx].pNext = DE_NULL; 2769 2770 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2771 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2772 extFeatures.pNext = &deviceRobustness2FeaturesEXT[ndx]; 2773 2774 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2775 } 2776 2777 if (isRobustness2FeaturesEXT) 2778 log << TestLog::Message << deviceRobustness2FeaturesEXT[0] << TestLog::EndMessage; 2779 2780 if (isRobustness2FeaturesEXT && 2781 (deviceRobustness2FeaturesEXT[0].robustBufferAccess2 != deviceRobustness2FeaturesEXT[1].robustBufferAccess2 || 2782 deviceRobustness2FeaturesEXT[0].robustImageAccess2 != deviceRobustness2FeaturesEXT[1].robustImageAccess2 || 2783 deviceRobustness2FeaturesEXT[0].nullDescriptor != deviceRobustness2FeaturesEXT[1].nullDescriptor)) 2784 { 2785 TCU_FAIL("Mismatch between VkPhysicalDeviceRobustness2FeaturesEXT"); 2786 } 2787 return tcu::TestStatus::pass("Querying succeeded"); 2788} 2789 2790tcu::TestStatus testPhysicalDeviceFeatureImageRobustnessFeatures (Context& context) 2791{ 2792 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2793 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2794 const InstanceDriver& vki (instance.getDriver()); 2795 const int count = 2u; 2796 TestLog& log = context.getTestContext().getLog(); 2797 VkPhysicalDeviceFeatures2 extFeatures; 2798 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2799 2800 VkPhysicalDeviceImageRobustnessFeatures deviceImageRobustnessFeatures[count]; 2801 const bool isImageRobustnessFeatures = checkExtension(properties, "VK_EXT_image_robustness") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 2802 2803 for (int ndx = 0; ndx < count; ++ndx) 2804 { 2805 deMemset(&deviceImageRobustnessFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImageRobustnessFeatures)); 2806 deviceImageRobustnessFeatures[ndx].sType = isImageRobustnessFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 2807 deviceImageRobustnessFeatures[ndx].pNext = DE_NULL; 2808 2809 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2810 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2811 extFeatures.pNext = &deviceImageRobustnessFeatures[ndx]; 2812 2813 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2814 } 2815 2816 if (isImageRobustnessFeatures) 2817 log << TestLog::Message << deviceImageRobustnessFeatures[0] << TestLog::EndMessage; 2818 2819 if (isImageRobustnessFeatures && 2820 (deviceImageRobustnessFeatures[0].robustImageAccess != deviceImageRobustnessFeatures[1].robustImageAccess)) 2821 { 2822 TCU_FAIL("Mismatch between VkPhysicalDeviceImageRobustnessFeatures"); 2823 } 2824 return tcu::TestStatus::pass("Querying succeeded"); 2825} 2826 2827tcu::TestStatus testPhysicalDeviceFeatureWorkgroupMemoryExplicitLayoutFeaturesKHR (Context& context) 2828{ 2829 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2830 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2831 const InstanceDriver& vki (instance.getDriver()); 2832 const int count = 2u; 2833 TestLog& log = context.getTestContext().getLog(); 2834 VkPhysicalDeviceFeatures2 extFeatures; 2835 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2836 2837 VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[count]; 2838 const bool isWorkgroupMemoryExplicitLayoutFeaturesKHR = checkExtension(properties, "VK_KHR_workgroup_memory_explicit_layout"); 2839 2840 for (int ndx = 0; ndx < count; ++ndx) 2841 { 2842 deMemset(&deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR)); 2843 deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[ndx].sType = isWorkgroupMemoryExplicitLayoutFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 2844 deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[ndx].pNext = DE_NULL; 2845 2846 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2847 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2848 extFeatures.pNext = &deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[ndx]; 2849 2850 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2851 } 2852 2853 if (isWorkgroupMemoryExplicitLayoutFeaturesKHR) 2854 log << TestLog::Message << deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[0] << TestLog::EndMessage; 2855 2856 if (isWorkgroupMemoryExplicitLayoutFeaturesKHR && 2857 (deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[0].workgroupMemoryExplicitLayout != deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[1].workgroupMemoryExplicitLayout || 2858 deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[0].workgroupMemoryExplicitLayoutScalarBlockLayout != deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[1].workgroupMemoryExplicitLayoutScalarBlockLayout || 2859 deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[0].workgroupMemoryExplicitLayout8BitAccess != deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[1].workgroupMemoryExplicitLayout8BitAccess || 2860 deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[0].workgroupMemoryExplicitLayout16BitAccess != deviceWorkgroupMemoryExplicitLayoutFeaturesKHR[1].workgroupMemoryExplicitLayout16BitAccess)) 2861 { 2862 TCU_FAIL("Mismatch between VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR"); 2863 } 2864 return tcu::TestStatus::pass("Querying succeeded"); 2865} 2866 2867tcu::TestStatus testPhysicalDeviceFeaturePortabilitySubsetFeaturesKHR (Context& context) 2868{ 2869 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2870 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2871 const InstanceDriver& vki (instance.getDriver()); 2872 const int count = 2u; 2873 TestLog& log = context.getTestContext().getLog(); 2874 VkPhysicalDeviceFeatures2 extFeatures; 2875 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2876 2877 VkPhysicalDevicePortabilitySubsetFeaturesKHR devicePortabilitySubsetFeaturesKHR[count]; 2878 const bool isPortabilitySubsetFeaturesKHR = checkExtension(properties, "VK_KHR_portability_subset"); 2879 2880 for (int ndx = 0; ndx < count; ++ndx) 2881 { 2882 deMemset(&devicePortabilitySubsetFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePortabilitySubsetFeaturesKHR)); 2883 devicePortabilitySubsetFeaturesKHR[ndx].sType = isPortabilitySubsetFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 2884 devicePortabilitySubsetFeaturesKHR[ndx].pNext = DE_NULL; 2885 2886 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2887 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2888 extFeatures.pNext = &devicePortabilitySubsetFeaturesKHR[ndx]; 2889 2890 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2891 } 2892 2893 if (isPortabilitySubsetFeaturesKHR) 2894 log << TestLog::Message << devicePortabilitySubsetFeaturesKHR[0] << TestLog::EndMessage; 2895 2896 if (isPortabilitySubsetFeaturesKHR && 2897 (devicePortabilitySubsetFeaturesKHR[0].constantAlphaColorBlendFactors != devicePortabilitySubsetFeaturesKHR[1].constantAlphaColorBlendFactors || 2898 devicePortabilitySubsetFeaturesKHR[0].events != devicePortabilitySubsetFeaturesKHR[1].events || 2899 devicePortabilitySubsetFeaturesKHR[0].imageViewFormatReinterpretation != devicePortabilitySubsetFeaturesKHR[1].imageViewFormatReinterpretation || 2900 devicePortabilitySubsetFeaturesKHR[0].imageViewFormatSwizzle != devicePortabilitySubsetFeaturesKHR[1].imageViewFormatSwizzle || 2901 devicePortabilitySubsetFeaturesKHR[0].imageView2DOn3DImage != devicePortabilitySubsetFeaturesKHR[1].imageView2DOn3DImage || 2902 devicePortabilitySubsetFeaturesKHR[0].multisampleArrayImage != devicePortabilitySubsetFeaturesKHR[1].multisampleArrayImage || 2903 devicePortabilitySubsetFeaturesKHR[0].mutableComparisonSamplers != devicePortabilitySubsetFeaturesKHR[1].mutableComparisonSamplers || 2904 devicePortabilitySubsetFeaturesKHR[0].pointPolygons != devicePortabilitySubsetFeaturesKHR[1].pointPolygons || 2905 devicePortabilitySubsetFeaturesKHR[0].samplerMipLodBias != devicePortabilitySubsetFeaturesKHR[1].samplerMipLodBias || 2906 devicePortabilitySubsetFeaturesKHR[0].separateStencilMaskRef != devicePortabilitySubsetFeaturesKHR[1].separateStencilMaskRef || 2907 devicePortabilitySubsetFeaturesKHR[0].shaderSampleRateInterpolationFunctions != devicePortabilitySubsetFeaturesKHR[1].shaderSampleRateInterpolationFunctions || 2908 devicePortabilitySubsetFeaturesKHR[0].tessellationIsolines != devicePortabilitySubsetFeaturesKHR[1].tessellationIsolines || 2909 devicePortabilitySubsetFeaturesKHR[0].tessellationPointMode != devicePortabilitySubsetFeaturesKHR[1].tessellationPointMode || 2910 devicePortabilitySubsetFeaturesKHR[0].triangleFans != devicePortabilitySubsetFeaturesKHR[1].triangleFans || 2911 devicePortabilitySubsetFeaturesKHR[0].vertexAttributeAccessBeyondStride != devicePortabilitySubsetFeaturesKHR[1].vertexAttributeAccessBeyondStride)) 2912 { 2913 TCU_FAIL("Mismatch between VkPhysicalDevicePortabilitySubsetFeaturesKHR"); 2914 } 2915 return tcu::TestStatus::pass("Querying succeeded"); 2916} 2917 2918tcu::TestStatus testPhysicalDeviceFeature4444FormatsFeaturesEXT (Context& context) 2919{ 2920 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2921 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2922 const InstanceDriver& vki (instance.getDriver()); 2923 const int count = 2u; 2924 TestLog& log = context.getTestContext().getLog(); 2925 VkPhysicalDeviceFeatures2 extFeatures; 2926 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2927 2928 VkPhysicalDevice4444FormatsFeaturesEXT device4444FormatsFeaturesEXT[count]; 2929 const bool is4444FormatsFeaturesEXT = checkExtension(properties, "VK_EXT_4444_formats"); 2930 2931 for (int ndx = 0; ndx < count; ++ndx) 2932 { 2933 deMemset(&device4444FormatsFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevice4444FormatsFeaturesEXT)); 2934 device4444FormatsFeaturesEXT[ndx].sType = is4444FormatsFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2935 device4444FormatsFeaturesEXT[ndx].pNext = DE_NULL; 2936 2937 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2938 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2939 extFeatures.pNext = &device4444FormatsFeaturesEXT[ndx]; 2940 2941 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2942 } 2943 2944 if (is4444FormatsFeaturesEXT) 2945 log << TestLog::Message << device4444FormatsFeaturesEXT[0] << TestLog::EndMessage; 2946 2947 if (is4444FormatsFeaturesEXT && 2948 (device4444FormatsFeaturesEXT[0].formatA4R4G4B4 != device4444FormatsFeaturesEXT[1].formatA4R4G4B4 || 2949 device4444FormatsFeaturesEXT[0].formatA4B4G4R4 != device4444FormatsFeaturesEXT[1].formatA4B4G4R4)) 2950 { 2951 TCU_FAIL("Mismatch between VkPhysicalDevice4444FormatsFeaturesEXT"); 2952 } 2953 return tcu::TestStatus::pass("Querying succeeded"); 2954} 2955 2956tcu::TestStatus testPhysicalDeviceFeatureShaderImageAtomicInt64FeaturesEXT (Context& context) 2957{ 2958 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2959 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2960 const InstanceDriver& vki (instance.getDriver()); 2961 const int count = 2u; 2962 TestLog& log = context.getTestContext().getLog(); 2963 VkPhysicalDeviceFeatures2 extFeatures; 2964 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 2965 2966 VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT deviceShaderImageAtomicInt64FeaturesEXT[count]; 2967 const bool isShaderImageAtomicInt64FeaturesEXT = checkExtension(properties, "VK_EXT_shader_image_atomic_int64"); 2968 2969 for (int ndx = 0; ndx < count; ++ndx) 2970 { 2971 deMemset(&deviceShaderImageAtomicInt64FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT)); 2972 deviceShaderImageAtomicInt64FeaturesEXT[ndx].sType = isShaderImageAtomicInt64FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 2973 deviceShaderImageAtomicInt64FeaturesEXT[ndx].pNext = DE_NULL; 2974 2975 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 2976 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 2977 extFeatures.pNext = &deviceShaderImageAtomicInt64FeaturesEXT[ndx]; 2978 2979 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 2980 } 2981 2982 if (isShaderImageAtomicInt64FeaturesEXT) 2983 log << TestLog::Message << deviceShaderImageAtomicInt64FeaturesEXT[0] << TestLog::EndMessage; 2984 2985 if (isShaderImageAtomicInt64FeaturesEXT && 2986 (deviceShaderImageAtomicInt64FeaturesEXT[0].shaderImageInt64Atomics != deviceShaderImageAtomicInt64FeaturesEXT[1].shaderImageInt64Atomics || 2987 deviceShaderImageAtomicInt64FeaturesEXT[0].sparseImageInt64Atomics != deviceShaderImageAtomicInt64FeaturesEXT[1].sparseImageInt64Atomics)) 2988 { 2989 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT"); 2990 } 2991 return tcu::TestStatus::pass("Querying succeeded"); 2992} 2993 2994tcu::TestStatus testPhysicalDeviceFeatureFragmentShadingRateFeaturesKHR (Context& context) 2995{ 2996 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 2997 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 2998 const InstanceDriver& vki (instance.getDriver()); 2999 const int count = 2u; 3000 TestLog& log = context.getTestContext().getLog(); 3001 VkPhysicalDeviceFeatures2 extFeatures; 3002 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3003 3004 VkPhysicalDeviceFragmentShadingRateFeaturesKHR deviceFragmentShadingRateFeaturesKHR[count]; 3005 const bool isFragmentShadingRateFeaturesKHR = checkExtension(properties, "VK_KHR_fragment_shading_rate"); 3006 3007 for (int ndx = 0; ndx < count; ++ndx) 3008 { 3009 deMemset(&deviceFragmentShadingRateFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFragmentShadingRateFeaturesKHR)); 3010 deviceFragmentShadingRateFeaturesKHR[ndx].sType = isFragmentShadingRateFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 3011 deviceFragmentShadingRateFeaturesKHR[ndx].pNext = DE_NULL; 3012 3013 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3014 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3015 extFeatures.pNext = &deviceFragmentShadingRateFeaturesKHR[ndx]; 3016 3017 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3018 } 3019 3020 if (isFragmentShadingRateFeaturesKHR) 3021 log << TestLog::Message << deviceFragmentShadingRateFeaturesKHR[0] << TestLog::EndMessage; 3022 3023 if (isFragmentShadingRateFeaturesKHR && 3024 (deviceFragmentShadingRateFeaturesKHR[0].pipelineFragmentShadingRate != deviceFragmentShadingRateFeaturesKHR[1].pipelineFragmentShadingRate || 3025 deviceFragmentShadingRateFeaturesKHR[0].primitiveFragmentShadingRate != deviceFragmentShadingRateFeaturesKHR[1].primitiveFragmentShadingRate || 3026 deviceFragmentShadingRateFeaturesKHR[0].attachmentFragmentShadingRate != deviceFragmentShadingRateFeaturesKHR[1].attachmentFragmentShadingRate)) 3027 { 3028 TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentShadingRateFeaturesKHR"); 3029 } 3030 return tcu::TestStatus::pass("Querying succeeded"); 3031} 3032 3033tcu::TestStatus testPhysicalDeviceFeatureShaderTerminateInvocationFeatures (Context& context) 3034{ 3035 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3036 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3037 const InstanceDriver& vki (instance.getDriver()); 3038 const int count = 2u; 3039 TestLog& log = context.getTestContext().getLog(); 3040 VkPhysicalDeviceFeatures2 extFeatures; 3041 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3042 3043 VkPhysicalDeviceShaderTerminateInvocationFeatures deviceShaderTerminateInvocationFeatures[count]; 3044 const bool isShaderTerminateInvocationFeatures = checkExtension(properties, "VK_KHR_shader_terminate_invocation") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 3045 3046 for (int ndx = 0; ndx < count; ++ndx) 3047 { 3048 deMemset(&deviceShaderTerminateInvocationFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderTerminateInvocationFeatures)); 3049 deviceShaderTerminateInvocationFeatures[ndx].sType = isShaderTerminateInvocationFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 3050 deviceShaderTerminateInvocationFeatures[ndx].pNext = DE_NULL; 3051 3052 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3053 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3054 extFeatures.pNext = &deviceShaderTerminateInvocationFeatures[ndx]; 3055 3056 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3057 } 3058 3059 if (isShaderTerminateInvocationFeatures) 3060 log << TestLog::Message << deviceShaderTerminateInvocationFeatures[0] << TestLog::EndMessage; 3061 3062 if (isShaderTerminateInvocationFeatures && 3063 (deviceShaderTerminateInvocationFeatures[0].shaderTerminateInvocation != deviceShaderTerminateInvocationFeatures[1].shaderTerminateInvocation)) 3064 { 3065 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderTerminateInvocationFeatures"); 3066 } 3067 return tcu::TestStatus::pass("Querying succeeded"); 3068} 3069 3070tcu::TestStatus testPhysicalDeviceFeatureImage2DViewOf3DFeaturesEXT (Context& context) 3071{ 3072 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3073 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3074 const InstanceDriver& vki (instance.getDriver()); 3075 const int count = 2u; 3076 TestLog& log = context.getTestContext().getLog(); 3077 VkPhysicalDeviceFeatures2 extFeatures; 3078 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3079 3080 VkPhysicalDeviceImage2DViewOf3DFeaturesEXT deviceImage2DViewOf3DFeaturesEXT[count]; 3081 const bool isImage2DViewOf3DFeaturesEXT = checkExtension(properties, "VK_EXT_image_2d_view_of_3d"); 3082 3083 for (int ndx = 0; ndx < count; ++ndx) 3084 { 3085 deMemset(&deviceImage2DViewOf3DFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT)); 3086 deviceImage2DViewOf3DFeaturesEXT[ndx].sType = isImage2DViewOf3DFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3087 deviceImage2DViewOf3DFeaturesEXT[ndx].pNext = DE_NULL; 3088 3089 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3090 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3091 extFeatures.pNext = &deviceImage2DViewOf3DFeaturesEXT[ndx]; 3092 3093 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3094 } 3095 3096 if (isImage2DViewOf3DFeaturesEXT) 3097 log << TestLog::Message << deviceImage2DViewOf3DFeaturesEXT[0] << TestLog::EndMessage; 3098 3099 if (isImage2DViewOf3DFeaturesEXT && 3100 (deviceImage2DViewOf3DFeaturesEXT[0].image2DViewOf3D != deviceImage2DViewOf3DFeaturesEXT[1].image2DViewOf3D || 3101 deviceImage2DViewOf3DFeaturesEXT[0].sampler2DViewOf3D != deviceImage2DViewOf3DFeaturesEXT[1].sampler2DViewOf3D)) 3102 { 3103 TCU_FAIL("Mismatch between VkPhysicalDeviceImage2DViewOf3DFeaturesEXT"); 3104 } 3105 return tcu::TestStatus::pass("Querying succeeded"); 3106} 3107 3108tcu::TestStatus testPhysicalDeviceFeatureImageSlicedViewOf3DFeaturesEXT (Context& context) 3109{ 3110 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3111 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3112 const InstanceDriver& vki (instance.getDriver()); 3113 const int count = 2u; 3114 TestLog& log = context.getTestContext().getLog(); 3115 VkPhysicalDeviceFeatures2 extFeatures; 3116 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3117 3118 VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT deviceImageSlicedViewOf3DFeaturesEXT[count]; 3119 const bool isImageSlicedViewOf3DFeaturesEXT = checkExtension(properties, "VK_EXT_image_sliced_view_of_3d"); 3120 3121 for (int ndx = 0; ndx < count; ++ndx) 3122 { 3123 deMemset(&deviceImageSlicedViewOf3DFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT)); 3124 deviceImageSlicedViewOf3DFeaturesEXT[ndx].sType = isImageSlicedViewOf3DFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3125 deviceImageSlicedViewOf3DFeaturesEXT[ndx].pNext = DE_NULL; 3126 3127 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3128 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3129 extFeatures.pNext = &deviceImageSlicedViewOf3DFeaturesEXT[ndx]; 3130 3131 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3132 } 3133 3134 if (isImageSlicedViewOf3DFeaturesEXT) 3135 log << TestLog::Message << deviceImageSlicedViewOf3DFeaturesEXT[0] << TestLog::EndMessage; 3136 3137 if (isImageSlicedViewOf3DFeaturesEXT && 3138 (deviceImageSlicedViewOf3DFeaturesEXT[0].imageSlicedViewOf3D != deviceImageSlicedViewOf3DFeaturesEXT[1].imageSlicedViewOf3D)) 3139 { 3140 TCU_FAIL("Mismatch between VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT"); 3141 } 3142 return tcu::TestStatus::pass("Querying succeeded"); 3143} 3144 3145tcu::TestStatus testPhysicalDeviceFeatureAttachmentFeedbackLoopDynamicStateFeaturesEXT (Context& context) 3146{ 3147 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3148 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3149 const InstanceDriver& vki (instance.getDriver()); 3150 const int count = 2u; 3151 TestLog& log = context.getTestContext().getLog(); 3152 VkPhysicalDeviceFeatures2 extFeatures; 3153 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3154 3155 VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT deviceAttachmentFeedbackLoopDynamicStateFeaturesEXT[count]; 3156 const bool isAttachmentFeedbackLoopDynamicStateFeaturesEXT = checkExtension(properties, "VK_EXT_attachment_feedback_loop_dynamic_state"); 3157 3158 for (int ndx = 0; ndx < count; ++ndx) 3159 { 3160 deMemset(&deviceAttachmentFeedbackLoopDynamicStateFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT)); 3161 deviceAttachmentFeedbackLoopDynamicStateFeaturesEXT[ndx].sType = isAttachmentFeedbackLoopDynamicStateFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3162 deviceAttachmentFeedbackLoopDynamicStateFeaturesEXT[ndx].pNext = DE_NULL; 3163 3164 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3165 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3166 extFeatures.pNext = &deviceAttachmentFeedbackLoopDynamicStateFeaturesEXT[ndx]; 3167 3168 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3169 } 3170 3171 if (isAttachmentFeedbackLoopDynamicStateFeaturesEXT) 3172 log << TestLog::Message << deviceAttachmentFeedbackLoopDynamicStateFeaturesEXT[0] << TestLog::EndMessage; 3173 3174 if (isAttachmentFeedbackLoopDynamicStateFeaturesEXT && 3175 (deviceAttachmentFeedbackLoopDynamicStateFeaturesEXT[0].attachmentFeedbackLoopDynamicState != deviceAttachmentFeedbackLoopDynamicStateFeaturesEXT[1].attachmentFeedbackLoopDynamicState)) 3176 { 3177 TCU_FAIL("Mismatch between VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT"); 3178 } 3179 return tcu::TestStatus::pass("Querying succeeded"); 3180} 3181 3182tcu::TestStatus testPhysicalDeviceFeatureMutableDescriptorTypeFeaturesEXT (Context& context) 3183{ 3184 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3185 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3186 const InstanceDriver& vki (instance.getDriver()); 3187 const int count = 2u; 3188 TestLog& log = context.getTestContext().getLog(); 3189 VkPhysicalDeviceFeatures2 extFeatures; 3190 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3191 3192 VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT deviceMutableDescriptorTypeFeaturesEXT[count]; 3193 const bool isMutableDescriptorTypeFeaturesEXT = checkExtension(properties, "VK_EXT_mutable_descriptor_type"); 3194 3195 for (int ndx = 0; ndx < count; ++ndx) 3196 { 3197 deMemset(&deviceMutableDescriptorTypeFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT)); 3198 deviceMutableDescriptorTypeFeaturesEXT[ndx].sType = isMutableDescriptorTypeFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3199 deviceMutableDescriptorTypeFeaturesEXT[ndx].pNext = DE_NULL; 3200 3201 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3202 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3203 extFeatures.pNext = &deviceMutableDescriptorTypeFeaturesEXT[ndx]; 3204 3205 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3206 } 3207 3208 if (isMutableDescriptorTypeFeaturesEXT) 3209 log << TestLog::Message << deviceMutableDescriptorTypeFeaturesEXT[0] << TestLog::EndMessage; 3210 3211 if (isMutableDescriptorTypeFeaturesEXT && 3212 (deviceMutableDescriptorTypeFeaturesEXT[0].mutableDescriptorType != deviceMutableDescriptorTypeFeaturesEXT[1].mutableDescriptorType)) 3213 { 3214 TCU_FAIL("Mismatch between VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT"); 3215 } 3216 return tcu::TestStatus::pass("Querying succeeded"); 3217} 3218 3219tcu::TestStatus testPhysicalDeviceFeatureDepthClipControlFeaturesEXT (Context& context) 3220{ 3221 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3222 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3223 const InstanceDriver& vki (instance.getDriver()); 3224 const int count = 2u; 3225 TestLog& log = context.getTestContext().getLog(); 3226 VkPhysicalDeviceFeatures2 extFeatures; 3227 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3228 3229 VkPhysicalDeviceDepthClipControlFeaturesEXT deviceDepthClipControlFeaturesEXT[count]; 3230 const bool isDepthClipControlFeaturesEXT = checkExtension(properties, "VK_EXT_depth_clip_control"); 3231 3232 for (int ndx = 0; ndx < count; ++ndx) 3233 { 3234 deMemset(&deviceDepthClipControlFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDepthClipControlFeaturesEXT)); 3235 deviceDepthClipControlFeaturesEXT[ndx].sType = isDepthClipControlFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3236 deviceDepthClipControlFeaturesEXT[ndx].pNext = DE_NULL; 3237 3238 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3239 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3240 extFeatures.pNext = &deviceDepthClipControlFeaturesEXT[ndx]; 3241 3242 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3243 } 3244 3245 if (isDepthClipControlFeaturesEXT) 3246 log << TestLog::Message << deviceDepthClipControlFeaturesEXT[0] << TestLog::EndMessage; 3247 3248 if (isDepthClipControlFeaturesEXT && 3249 (deviceDepthClipControlFeaturesEXT[0].depthClipControl != deviceDepthClipControlFeaturesEXT[1].depthClipControl)) 3250 { 3251 TCU_FAIL("Mismatch between VkPhysicalDeviceDepthClipControlFeaturesEXT"); 3252 } 3253 return tcu::TestStatus::pass("Querying succeeded"); 3254} 3255 3256tcu::TestStatus testPhysicalDeviceFeatureVertexInputDynamicStateFeaturesEXT (Context& context) 3257{ 3258 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3259 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3260 const InstanceDriver& vki (instance.getDriver()); 3261 const int count = 2u; 3262 TestLog& log = context.getTestContext().getLog(); 3263 VkPhysicalDeviceFeatures2 extFeatures; 3264 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3265 3266 VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT deviceVertexInputDynamicStateFeaturesEXT[count]; 3267 const bool isVertexInputDynamicStateFeaturesEXT = checkExtension(properties, "VK_EXT_vertex_input_dynamic_state"); 3268 3269 for (int ndx = 0; ndx < count; ++ndx) 3270 { 3271 deMemset(&deviceVertexInputDynamicStateFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT)); 3272 deviceVertexInputDynamicStateFeaturesEXT[ndx].sType = isVertexInputDynamicStateFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3273 deviceVertexInputDynamicStateFeaturesEXT[ndx].pNext = DE_NULL; 3274 3275 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3276 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3277 extFeatures.pNext = &deviceVertexInputDynamicStateFeaturesEXT[ndx]; 3278 3279 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3280 } 3281 3282 if (isVertexInputDynamicStateFeaturesEXT) 3283 log << TestLog::Message << deviceVertexInputDynamicStateFeaturesEXT[0] << TestLog::EndMessage; 3284 3285 if (isVertexInputDynamicStateFeaturesEXT && 3286 (deviceVertexInputDynamicStateFeaturesEXT[0].vertexInputDynamicState != deviceVertexInputDynamicStateFeaturesEXT[1].vertexInputDynamicState)) 3287 { 3288 TCU_FAIL("Mismatch between VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT"); 3289 } 3290 return tcu::TestStatus::pass("Querying succeeded"); 3291} 3292 3293tcu::TestStatus testPhysicalDeviceFeatureColorWriteEnableFeaturesEXT (Context& context) 3294{ 3295 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3296 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3297 const InstanceDriver& vki (instance.getDriver()); 3298 const int count = 2u; 3299 TestLog& log = context.getTestContext().getLog(); 3300 VkPhysicalDeviceFeatures2 extFeatures; 3301 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3302 3303 VkPhysicalDeviceColorWriteEnableFeaturesEXT deviceColorWriteEnableFeaturesEXT[count]; 3304 const bool isColorWriteEnableFeaturesEXT = checkExtension(properties, "VK_EXT_color_write_enable"); 3305 3306 for (int ndx = 0; ndx < count; ++ndx) 3307 { 3308 deMemset(&deviceColorWriteEnableFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceColorWriteEnableFeaturesEXT)); 3309 deviceColorWriteEnableFeaturesEXT[ndx].sType = isColorWriteEnableFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3310 deviceColorWriteEnableFeaturesEXT[ndx].pNext = DE_NULL; 3311 3312 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3313 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3314 extFeatures.pNext = &deviceColorWriteEnableFeaturesEXT[ndx]; 3315 3316 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3317 } 3318 3319 if (isColorWriteEnableFeaturesEXT) 3320 log << TestLog::Message << deviceColorWriteEnableFeaturesEXT[0] << TestLog::EndMessage; 3321 3322 if (isColorWriteEnableFeaturesEXT && 3323 (deviceColorWriteEnableFeaturesEXT[0].colorWriteEnable != deviceColorWriteEnableFeaturesEXT[1].colorWriteEnable)) 3324 { 3325 TCU_FAIL("Mismatch between VkPhysicalDeviceColorWriteEnableFeaturesEXT"); 3326 } 3327 return tcu::TestStatus::pass("Querying succeeded"); 3328} 3329 3330tcu::TestStatus testPhysicalDeviceFeatureSynchronization2Features (Context& context) 3331{ 3332 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3333 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3334 const InstanceDriver& vki (instance.getDriver()); 3335 const int count = 2u; 3336 TestLog& log = context.getTestContext().getLog(); 3337 VkPhysicalDeviceFeatures2 extFeatures; 3338 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3339 3340 VkPhysicalDeviceSynchronization2Features deviceSynchronization2Features[count]; 3341 const bool isSynchronization2Features = checkExtension(properties, "VK_KHR_synchronization2") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 3342 3343 for (int ndx = 0; ndx < count; ++ndx) 3344 { 3345 deMemset(&deviceSynchronization2Features[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceSynchronization2Features)); 3346 deviceSynchronization2Features[ndx].sType = isSynchronization2Features ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 3347 deviceSynchronization2Features[ndx].pNext = DE_NULL; 3348 3349 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3350 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3351 extFeatures.pNext = &deviceSynchronization2Features[ndx]; 3352 3353 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3354 } 3355 3356 if (isSynchronization2Features) 3357 log << TestLog::Message << deviceSynchronization2Features[0] << TestLog::EndMessage; 3358 3359 if (isSynchronization2Features && 3360 (deviceSynchronization2Features[0].synchronization2 != deviceSynchronization2Features[1].synchronization2)) 3361 { 3362 TCU_FAIL("Mismatch between VkPhysicalDeviceSynchronization2Features"); 3363 } 3364 return tcu::TestStatus::pass("Querying succeeded"); 3365} 3366 3367tcu::TestStatus testPhysicalDeviceFeatureHostImageCopyFeaturesEXT (Context& context) 3368{ 3369 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3370 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3371 const InstanceDriver& vki (instance.getDriver()); 3372 const int count = 2u; 3373 TestLog& log = context.getTestContext().getLog(); 3374 VkPhysicalDeviceFeatures2 extFeatures; 3375 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3376 3377 VkPhysicalDeviceHostImageCopyFeaturesEXT deviceHostImageCopyFeaturesEXT[count]; 3378 const bool isHostImageCopyFeaturesEXT = checkExtension(properties, "VK_EXT_host_image_copy"); 3379 3380 for (int ndx = 0; ndx < count; ++ndx) 3381 { 3382 deMemset(&deviceHostImageCopyFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceHostImageCopyFeaturesEXT)); 3383 deviceHostImageCopyFeaturesEXT[ndx].sType = isHostImageCopyFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3384 deviceHostImageCopyFeaturesEXT[ndx].pNext = DE_NULL; 3385 3386 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3387 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3388 extFeatures.pNext = &deviceHostImageCopyFeaturesEXT[ndx]; 3389 3390 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3391 } 3392 3393 if (isHostImageCopyFeaturesEXT) 3394 log << TestLog::Message << deviceHostImageCopyFeaturesEXT[0] << TestLog::EndMessage; 3395 3396 if (isHostImageCopyFeaturesEXT && 3397 (deviceHostImageCopyFeaturesEXT[0].hostImageCopy != deviceHostImageCopyFeaturesEXT[1].hostImageCopy)) 3398 { 3399 TCU_FAIL("Mismatch between VkPhysicalDeviceHostImageCopyFeaturesEXT"); 3400 } 3401 return tcu::TestStatus::pass("Querying succeeded"); 3402} 3403 3404tcu::TestStatus testPhysicalDeviceFeaturePrimitivesGeneratedQueryFeaturesEXT (Context& context) 3405{ 3406 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3407 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3408 const InstanceDriver& vki (instance.getDriver()); 3409 const int count = 2u; 3410 TestLog& log = context.getTestContext().getLog(); 3411 VkPhysicalDeviceFeatures2 extFeatures; 3412 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3413 3414 VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT devicePrimitivesGeneratedQueryFeaturesEXT[count]; 3415 const bool isPrimitivesGeneratedQueryFeaturesEXT = checkExtension(properties, "VK_EXT_primitives_generated_query"); 3416 3417 for (int ndx = 0; ndx < count; ++ndx) 3418 { 3419 deMemset(&devicePrimitivesGeneratedQueryFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT)); 3420 devicePrimitivesGeneratedQueryFeaturesEXT[ndx].sType = isPrimitivesGeneratedQueryFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3421 devicePrimitivesGeneratedQueryFeaturesEXT[ndx].pNext = DE_NULL; 3422 3423 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3424 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3425 extFeatures.pNext = &devicePrimitivesGeneratedQueryFeaturesEXT[ndx]; 3426 3427 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3428 } 3429 3430 if (isPrimitivesGeneratedQueryFeaturesEXT) 3431 log << TestLog::Message << devicePrimitivesGeneratedQueryFeaturesEXT[0] << TestLog::EndMessage; 3432 3433 if (isPrimitivesGeneratedQueryFeaturesEXT && 3434 (devicePrimitivesGeneratedQueryFeaturesEXT[0].primitivesGeneratedQuery != devicePrimitivesGeneratedQueryFeaturesEXT[1].primitivesGeneratedQuery || 3435 devicePrimitivesGeneratedQueryFeaturesEXT[0].primitivesGeneratedQueryWithRasterizerDiscard != devicePrimitivesGeneratedQueryFeaturesEXT[1].primitivesGeneratedQueryWithRasterizerDiscard || 3436 devicePrimitivesGeneratedQueryFeaturesEXT[0].primitivesGeneratedQueryWithNonZeroStreams != devicePrimitivesGeneratedQueryFeaturesEXT[1].primitivesGeneratedQueryWithNonZeroStreams)) 3437 { 3438 TCU_FAIL("Mismatch between VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT"); 3439 } 3440 return tcu::TestStatus::pass("Querying succeeded"); 3441} 3442 3443tcu::TestStatus testPhysicalDeviceFeatureLegacyDitheringFeaturesEXT (Context& context) 3444{ 3445 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3446 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3447 const InstanceDriver& vki (instance.getDriver()); 3448 const int count = 2u; 3449 TestLog& log = context.getTestContext().getLog(); 3450 VkPhysicalDeviceFeatures2 extFeatures; 3451 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3452 3453 VkPhysicalDeviceLegacyDitheringFeaturesEXT deviceLegacyDitheringFeaturesEXT[count]; 3454 const bool isLegacyDitheringFeaturesEXT = checkExtension(properties, "VK_EXT_legacy_dithering"); 3455 3456 for (int ndx = 0; ndx < count; ++ndx) 3457 { 3458 deMemset(&deviceLegacyDitheringFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceLegacyDitheringFeaturesEXT)); 3459 deviceLegacyDitheringFeaturesEXT[ndx].sType = isLegacyDitheringFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3460 deviceLegacyDitheringFeaturesEXT[ndx].pNext = DE_NULL; 3461 3462 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3463 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3464 extFeatures.pNext = &deviceLegacyDitheringFeaturesEXT[ndx]; 3465 3466 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3467 } 3468 3469 if (isLegacyDitheringFeaturesEXT) 3470 log << TestLog::Message << deviceLegacyDitheringFeaturesEXT[0] << TestLog::EndMessage; 3471 3472 if (isLegacyDitheringFeaturesEXT && 3473 (deviceLegacyDitheringFeaturesEXT[0].legacyDithering != deviceLegacyDitheringFeaturesEXT[1].legacyDithering)) 3474 { 3475 TCU_FAIL("Mismatch between VkPhysicalDeviceLegacyDitheringFeaturesEXT"); 3476 } 3477 return tcu::TestStatus::pass("Querying succeeded"); 3478} 3479 3480tcu::TestStatus testPhysicalDeviceFeatureMultisampledRenderToSingleSampledFeaturesEXT (Context& context) 3481{ 3482 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3483 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3484 const InstanceDriver& vki (instance.getDriver()); 3485 const int count = 2u; 3486 TestLog& log = context.getTestContext().getLog(); 3487 VkPhysicalDeviceFeatures2 extFeatures; 3488 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3489 3490 VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT deviceMultisampledRenderToSingleSampledFeaturesEXT[count]; 3491 const bool isMultisampledRenderToSingleSampledFeaturesEXT = checkExtension(properties, "VK_EXT_multisampled_render_to_single_sampled"); 3492 3493 for (int ndx = 0; ndx < count; ++ndx) 3494 { 3495 deMemset(&deviceMultisampledRenderToSingleSampledFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT)); 3496 deviceMultisampledRenderToSingleSampledFeaturesEXT[ndx].sType = isMultisampledRenderToSingleSampledFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3497 deviceMultisampledRenderToSingleSampledFeaturesEXT[ndx].pNext = DE_NULL; 3498 3499 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3500 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3501 extFeatures.pNext = &deviceMultisampledRenderToSingleSampledFeaturesEXT[ndx]; 3502 3503 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3504 } 3505 3506 if (isMultisampledRenderToSingleSampledFeaturesEXT) 3507 log << TestLog::Message << deviceMultisampledRenderToSingleSampledFeaturesEXT[0] << TestLog::EndMessage; 3508 3509 if (isMultisampledRenderToSingleSampledFeaturesEXT && 3510 (deviceMultisampledRenderToSingleSampledFeaturesEXT[0].multisampledRenderToSingleSampled != deviceMultisampledRenderToSingleSampledFeaturesEXT[1].multisampledRenderToSingleSampled)) 3511 { 3512 TCU_FAIL("Mismatch between VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT"); 3513 } 3514 return tcu::TestStatus::pass("Querying succeeded"); 3515} 3516 3517tcu::TestStatus testPhysicalDeviceFeaturePipelineProtectedAccessFeaturesEXT (Context& context) 3518{ 3519 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3520 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3521 const InstanceDriver& vki (instance.getDriver()); 3522 const int count = 2u; 3523 TestLog& log = context.getTestContext().getLog(); 3524 VkPhysicalDeviceFeatures2 extFeatures; 3525 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3526 3527 VkPhysicalDevicePipelineProtectedAccessFeaturesEXT devicePipelineProtectedAccessFeaturesEXT[count]; 3528 const bool isPipelineProtectedAccessFeaturesEXT = checkExtension(properties, "VK_EXT_pipeline_protected_access"); 3529 3530 for (int ndx = 0; ndx < count; ++ndx) 3531 { 3532 deMemset(&devicePipelineProtectedAccessFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePipelineProtectedAccessFeaturesEXT)); 3533 devicePipelineProtectedAccessFeaturesEXT[ndx].sType = isPipelineProtectedAccessFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3534 devicePipelineProtectedAccessFeaturesEXT[ndx].pNext = DE_NULL; 3535 3536 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3537 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3538 extFeatures.pNext = &devicePipelineProtectedAccessFeaturesEXT[ndx]; 3539 3540 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3541 } 3542 3543 if (isPipelineProtectedAccessFeaturesEXT) 3544 log << TestLog::Message << devicePipelineProtectedAccessFeaturesEXT[0] << TestLog::EndMessage; 3545 3546 if (isPipelineProtectedAccessFeaturesEXT && 3547 (devicePipelineProtectedAccessFeaturesEXT[0].pipelineProtectedAccess != devicePipelineProtectedAccessFeaturesEXT[1].pipelineProtectedAccess)) 3548 { 3549 TCU_FAIL("Mismatch between VkPhysicalDevicePipelineProtectedAccessFeaturesEXT"); 3550 } 3551 return tcu::TestStatus::pass("Querying succeeded"); 3552} 3553 3554tcu::TestStatus testPhysicalDeviceFeatureYcbcr2Plane444FormatsFeaturesEXT (Context& context) 3555{ 3556 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3557 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3558 const InstanceDriver& vki (instance.getDriver()); 3559 const int count = 2u; 3560 TestLog& log = context.getTestContext().getLog(); 3561 VkPhysicalDeviceFeatures2 extFeatures; 3562 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3563 3564 VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT deviceYcbcr2Plane444FormatsFeaturesEXT[count]; 3565 const bool isYcbcr2Plane444FormatsFeaturesEXT = checkExtension(properties, "VK_EXT_ycbcr_2plane_444_formats"); 3566 3567 for (int ndx = 0; ndx < count; ++ndx) 3568 { 3569 deMemset(&deviceYcbcr2Plane444FormatsFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT)); 3570 deviceYcbcr2Plane444FormatsFeaturesEXT[ndx].sType = isYcbcr2Plane444FormatsFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3571 deviceYcbcr2Plane444FormatsFeaturesEXT[ndx].pNext = DE_NULL; 3572 3573 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3574 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3575 extFeatures.pNext = &deviceYcbcr2Plane444FormatsFeaturesEXT[ndx]; 3576 3577 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3578 } 3579 3580 if (isYcbcr2Plane444FormatsFeaturesEXT) 3581 log << TestLog::Message << deviceYcbcr2Plane444FormatsFeaturesEXT[0] << TestLog::EndMessage; 3582 3583 if (isYcbcr2Plane444FormatsFeaturesEXT && 3584 (deviceYcbcr2Plane444FormatsFeaturesEXT[0].ycbcr2plane444Formats != deviceYcbcr2Plane444FormatsFeaturesEXT[1].ycbcr2plane444Formats)) 3585 { 3586 TCU_FAIL("Mismatch between VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT"); 3587 } 3588 return tcu::TestStatus::pass("Querying succeeded"); 3589} 3590 3591tcu::TestStatus testPhysicalDeviceFeatureProvokingVertexFeaturesEXT (Context& context) 3592{ 3593 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3594 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3595 const InstanceDriver& vki (instance.getDriver()); 3596 const int count = 2u; 3597 TestLog& log = context.getTestContext().getLog(); 3598 VkPhysicalDeviceFeatures2 extFeatures; 3599 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3600 3601 VkPhysicalDeviceProvokingVertexFeaturesEXT deviceProvokingVertexFeaturesEXT[count]; 3602 const bool isProvokingVertexFeaturesEXT = checkExtension(properties, "VK_EXT_provoking_vertex"); 3603 3604 for (int ndx = 0; ndx < count; ++ndx) 3605 { 3606 deMemset(&deviceProvokingVertexFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT)); 3607 deviceProvokingVertexFeaturesEXT[ndx].sType = isProvokingVertexFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3608 deviceProvokingVertexFeaturesEXT[ndx].pNext = DE_NULL; 3609 3610 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3611 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3612 extFeatures.pNext = &deviceProvokingVertexFeaturesEXT[ndx]; 3613 3614 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3615 } 3616 3617 if (isProvokingVertexFeaturesEXT) 3618 log << TestLog::Message << deviceProvokingVertexFeaturesEXT[0] << TestLog::EndMessage; 3619 3620 if (isProvokingVertexFeaturesEXT && 3621 (deviceProvokingVertexFeaturesEXT[0].provokingVertexLast != deviceProvokingVertexFeaturesEXT[1].provokingVertexLast || 3622 deviceProvokingVertexFeaturesEXT[0].transformFeedbackPreservesProvokingVertex != deviceProvokingVertexFeaturesEXT[1].transformFeedbackPreservesProvokingVertex)) 3623 { 3624 TCU_FAIL("Mismatch between VkPhysicalDeviceProvokingVertexFeaturesEXT"); 3625 } 3626 return tcu::TestStatus::pass("Querying succeeded"); 3627} 3628 3629tcu::TestStatus testPhysicalDeviceFeatureDescriptorBufferFeaturesEXT (Context& context) 3630{ 3631 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3632 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3633 const InstanceDriver& vki (instance.getDriver()); 3634 const int count = 2u; 3635 TestLog& log = context.getTestContext().getLog(); 3636 VkPhysicalDeviceFeatures2 extFeatures; 3637 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3638 3639 VkPhysicalDeviceDescriptorBufferFeaturesEXT deviceDescriptorBufferFeaturesEXT[count]; 3640 const bool isDescriptorBufferFeaturesEXT = checkExtension(properties, "VK_EXT_descriptor_buffer"); 3641 3642 for (int ndx = 0; ndx < count; ++ndx) 3643 { 3644 deMemset(&deviceDescriptorBufferFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDescriptorBufferFeaturesEXT)); 3645 deviceDescriptorBufferFeaturesEXT[ndx].sType = isDescriptorBufferFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3646 deviceDescriptorBufferFeaturesEXT[ndx].pNext = DE_NULL; 3647 3648 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3649 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3650 extFeatures.pNext = &deviceDescriptorBufferFeaturesEXT[ndx]; 3651 3652 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3653 } 3654 3655 if (isDescriptorBufferFeaturesEXT) 3656 log << TestLog::Message << deviceDescriptorBufferFeaturesEXT[0] << TestLog::EndMessage; 3657 3658 if (isDescriptorBufferFeaturesEXT && 3659 (deviceDescriptorBufferFeaturesEXT[0].descriptorBuffer != deviceDescriptorBufferFeaturesEXT[1].descriptorBuffer || 3660 deviceDescriptorBufferFeaturesEXT[0].descriptorBufferCaptureReplay != deviceDescriptorBufferFeaturesEXT[1].descriptorBufferCaptureReplay || 3661 deviceDescriptorBufferFeaturesEXT[0].descriptorBufferImageLayoutIgnored != deviceDescriptorBufferFeaturesEXT[1].descriptorBufferImageLayoutIgnored || 3662 deviceDescriptorBufferFeaturesEXT[0].descriptorBufferPushDescriptors != deviceDescriptorBufferFeaturesEXT[1].descriptorBufferPushDescriptors)) 3663 { 3664 TCU_FAIL("Mismatch between VkPhysicalDeviceDescriptorBufferFeaturesEXT"); 3665 } 3666 return tcu::TestStatus::pass("Querying succeeded"); 3667} 3668 3669tcu::TestStatus testPhysicalDeviceFeatureShaderIntegerDotProductFeatures (Context& context) 3670{ 3671 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3672 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3673 const InstanceDriver& vki (instance.getDriver()); 3674 const int count = 2u; 3675 TestLog& log = context.getTestContext().getLog(); 3676 VkPhysicalDeviceFeatures2 extFeatures; 3677 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3678 3679 VkPhysicalDeviceShaderIntegerDotProductFeatures deviceShaderIntegerDotProductFeatures[count]; 3680 const bool isShaderIntegerDotProductFeatures = checkExtension(properties, "VK_KHR_shader_integer_dot_product") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 3681 3682 for (int ndx = 0; ndx < count; ++ndx) 3683 { 3684 deMemset(&deviceShaderIntegerDotProductFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderIntegerDotProductFeatures)); 3685 deviceShaderIntegerDotProductFeatures[ndx].sType = isShaderIntegerDotProductFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 3686 deviceShaderIntegerDotProductFeatures[ndx].pNext = DE_NULL; 3687 3688 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3689 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3690 extFeatures.pNext = &deviceShaderIntegerDotProductFeatures[ndx]; 3691 3692 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3693 } 3694 3695 if (isShaderIntegerDotProductFeatures) 3696 log << TestLog::Message << deviceShaderIntegerDotProductFeatures[0] << TestLog::EndMessage; 3697 3698 if (isShaderIntegerDotProductFeatures && 3699 (deviceShaderIntegerDotProductFeatures[0].shaderIntegerDotProduct != deviceShaderIntegerDotProductFeatures[1].shaderIntegerDotProduct)) 3700 { 3701 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderIntegerDotProductFeatures"); 3702 } 3703 return tcu::TestStatus::pass("Querying succeeded"); 3704} 3705 3706tcu::TestStatus testPhysicalDeviceFeatureFragmentShaderBarycentricFeaturesKHR (Context& context) 3707{ 3708 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3709 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3710 const InstanceDriver& vki (instance.getDriver()); 3711 const int count = 2u; 3712 TestLog& log = context.getTestContext().getLog(); 3713 VkPhysicalDeviceFeatures2 extFeatures; 3714 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3715 3716 VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR deviceFragmentShaderBarycentricFeaturesKHR[count]; 3717 const bool isFragmentShaderBarycentricFeaturesKHR = checkExtension(properties, "VK_KHR_fragment_shader_barycentric"); 3718 3719 for (int ndx = 0; ndx < count; ++ndx) 3720 { 3721 deMemset(&deviceFragmentShaderBarycentricFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR)); 3722 deviceFragmentShaderBarycentricFeaturesKHR[ndx].sType = isFragmentShaderBarycentricFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 3723 deviceFragmentShaderBarycentricFeaturesKHR[ndx].pNext = DE_NULL; 3724 3725 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3726 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3727 extFeatures.pNext = &deviceFragmentShaderBarycentricFeaturesKHR[ndx]; 3728 3729 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3730 } 3731 3732 if (isFragmentShaderBarycentricFeaturesKHR) 3733 log << TestLog::Message << deviceFragmentShaderBarycentricFeaturesKHR[0] << TestLog::EndMessage; 3734 3735 if (isFragmentShaderBarycentricFeaturesKHR && 3736 (deviceFragmentShaderBarycentricFeaturesKHR[0].fragmentShaderBarycentric != deviceFragmentShaderBarycentricFeaturesKHR[1].fragmentShaderBarycentric)) 3737 { 3738 TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR"); 3739 } 3740 return tcu::TestStatus::pass("Querying succeeded"); 3741} 3742 3743tcu::TestStatus testPhysicalDeviceFeatureRGBA10X6FormatsFeaturesEXT (Context& context) 3744{ 3745 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3746 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3747 const InstanceDriver& vki (instance.getDriver()); 3748 const int count = 2u; 3749 TestLog& log = context.getTestContext().getLog(); 3750 VkPhysicalDeviceFeatures2 extFeatures; 3751 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3752 3753 VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT deviceRGBA10X6FormatsFeaturesEXT[count]; 3754 const bool isRGBA10X6FormatsFeaturesEXT = checkExtension(properties, "VK_EXT_rgba10x6_formats"); 3755 3756 for (int ndx = 0; ndx < count; ++ndx) 3757 { 3758 deMemset(&deviceRGBA10X6FormatsFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT)); 3759 deviceRGBA10X6FormatsFeaturesEXT[ndx].sType = isRGBA10X6FormatsFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3760 deviceRGBA10X6FormatsFeaturesEXT[ndx].pNext = DE_NULL; 3761 3762 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3763 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3764 extFeatures.pNext = &deviceRGBA10X6FormatsFeaturesEXT[ndx]; 3765 3766 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3767 } 3768 3769 if (isRGBA10X6FormatsFeaturesEXT) 3770 log << TestLog::Message << deviceRGBA10X6FormatsFeaturesEXT[0] << TestLog::EndMessage; 3771 3772 if (isRGBA10X6FormatsFeaturesEXT && 3773 (deviceRGBA10X6FormatsFeaturesEXT[0].formatRgba10x6WithoutYCbCrSampler != deviceRGBA10X6FormatsFeaturesEXT[1].formatRgba10x6WithoutYCbCrSampler)) 3774 { 3775 TCU_FAIL("Mismatch between VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT"); 3776 } 3777 return tcu::TestStatus::pass("Querying succeeded"); 3778} 3779 3780tcu::TestStatus testPhysicalDeviceFeatureDynamicRenderingFeatures (Context& context) 3781{ 3782 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3783 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3784 const InstanceDriver& vki (instance.getDriver()); 3785 const int count = 2u; 3786 TestLog& log = context.getTestContext().getLog(); 3787 VkPhysicalDeviceFeatures2 extFeatures; 3788 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3789 3790 VkPhysicalDeviceDynamicRenderingFeatures deviceDynamicRenderingFeatures[count]; 3791 const bool isDynamicRenderingFeatures = checkExtension(properties, "VK_KHR_dynamic_rendering") || context.contextSupports(vk::ApiVersion(0, 1, 3, 0)); 3792 3793 for (int ndx = 0; ndx < count; ++ndx) 3794 { 3795 deMemset(&deviceDynamicRenderingFeatures[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDynamicRenderingFeatures)); 3796 deviceDynamicRenderingFeatures[ndx].sType = isDynamicRenderingFeatures ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES : VK_STRUCTURE_TYPE_MAX_ENUM; 3797 deviceDynamicRenderingFeatures[ndx].pNext = DE_NULL; 3798 3799 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3800 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3801 extFeatures.pNext = &deviceDynamicRenderingFeatures[ndx]; 3802 3803 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3804 } 3805 3806 if (isDynamicRenderingFeatures) 3807 log << TestLog::Message << deviceDynamicRenderingFeatures[0] << TestLog::EndMessage; 3808 3809 if (isDynamicRenderingFeatures && 3810 (deviceDynamicRenderingFeatures[0].dynamicRendering != deviceDynamicRenderingFeatures[1].dynamicRendering)) 3811 { 3812 TCU_FAIL("Mismatch between VkPhysicalDeviceDynamicRenderingFeatures"); 3813 } 3814 return tcu::TestStatus::pass("Querying succeeded"); 3815} 3816 3817tcu::TestStatus testPhysicalDeviceFeatureImageViewMinLodFeaturesEXT (Context& context) 3818{ 3819 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3820 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3821 const InstanceDriver& vki (instance.getDriver()); 3822 const int count = 2u; 3823 TestLog& log = context.getTestContext().getLog(); 3824 VkPhysicalDeviceFeatures2 extFeatures; 3825 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3826 3827 VkPhysicalDeviceImageViewMinLodFeaturesEXT deviceImageViewMinLodFeaturesEXT[count]; 3828 const bool isImageViewMinLodFeaturesEXT = checkExtension(properties, "VK_EXT_image_view_min_lod"); 3829 3830 for (int ndx = 0; ndx < count; ++ndx) 3831 { 3832 deMemset(&deviceImageViewMinLodFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImageViewMinLodFeaturesEXT)); 3833 deviceImageViewMinLodFeaturesEXT[ndx].sType = isImageViewMinLodFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3834 deviceImageViewMinLodFeaturesEXT[ndx].pNext = DE_NULL; 3835 3836 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3837 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3838 extFeatures.pNext = &deviceImageViewMinLodFeaturesEXT[ndx]; 3839 3840 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3841 } 3842 3843 if (isImageViewMinLodFeaturesEXT) 3844 log << TestLog::Message << deviceImageViewMinLodFeaturesEXT[0] << TestLog::EndMessage; 3845 3846 if (isImageViewMinLodFeaturesEXT && 3847 (deviceImageViewMinLodFeaturesEXT[0].minLod != deviceImageViewMinLodFeaturesEXT[1].minLod)) 3848 { 3849 TCU_FAIL("Mismatch between VkPhysicalDeviceImageViewMinLodFeaturesEXT"); 3850 } 3851 return tcu::TestStatus::pass("Querying succeeded"); 3852} 3853 3854tcu::TestStatus testPhysicalDeviceFeatureRasterizationOrderAttachmentAccessFeaturesEXT (Context& context) 3855{ 3856 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3857 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3858 const InstanceDriver& vki (instance.getDriver()); 3859 const int count = 2u; 3860 TestLog& log = context.getTestContext().getLog(); 3861 VkPhysicalDeviceFeatures2 extFeatures; 3862 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3863 3864 VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT deviceRasterizationOrderAttachmentAccessFeaturesEXT[count]; 3865 const bool isRasterizationOrderAttachmentAccessFeaturesEXT = checkExtension(properties, "VK_EXT_rasterization_order_attachment_access"); 3866 3867 for (int ndx = 0; ndx < count; ++ndx) 3868 { 3869 deMemset(&deviceRasterizationOrderAttachmentAccessFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT)); 3870 deviceRasterizationOrderAttachmentAccessFeaturesEXT[ndx].sType = isRasterizationOrderAttachmentAccessFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3871 deviceRasterizationOrderAttachmentAccessFeaturesEXT[ndx].pNext = DE_NULL; 3872 3873 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3874 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3875 extFeatures.pNext = &deviceRasterizationOrderAttachmentAccessFeaturesEXT[ndx]; 3876 3877 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3878 } 3879 3880 if (isRasterizationOrderAttachmentAccessFeaturesEXT) 3881 log << TestLog::Message << deviceRasterizationOrderAttachmentAccessFeaturesEXT[0] << TestLog::EndMessage; 3882 3883 if (isRasterizationOrderAttachmentAccessFeaturesEXT && 3884 (deviceRasterizationOrderAttachmentAccessFeaturesEXT[0].rasterizationOrderColorAttachmentAccess != deviceRasterizationOrderAttachmentAccessFeaturesEXT[1].rasterizationOrderColorAttachmentAccess || 3885 deviceRasterizationOrderAttachmentAccessFeaturesEXT[0].rasterizationOrderDepthAttachmentAccess != deviceRasterizationOrderAttachmentAccessFeaturesEXT[1].rasterizationOrderDepthAttachmentAccess || 3886 deviceRasterizationOrderAttachmentAccessFeaturesEXT[0].rasterizationOrderStencilAttachmentAccess != deviceRasterizationOrderAttachmentAccessFeaturesEXT[1].rasterizationOrderStencilAttachmentAccess)) 3887 { 3888 TCU_FAIL("Mismatch between VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT"); 3889 } 3890 return tcu::TestStatus::pass("Querying succeeded"); 3891} 3892 3893tcu::TestStatus testPhysicalDeviceFeatureGraphicsPipelineLibraryFeaturesEXT (Context& context) 3894{ 3895 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3896 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3897 const InstanceDriver& vki (instance.getDriver()); 3898 const int count = 2u; 3899 TestLog& log = context.getTestContext().getLog(); 3900 VkPhysicalDeviceFeatures2 extFeatures; 3901 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3902 3903 VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT deviceGraphicsPipelineLibraryFeaturesEXT[count]; 3904 const bool isGraphicsPipelineLibraryFeaturesEXT = checkExtension(properties, "VK_EXT_graphics_pipeline_library"); 3905 3906 for (int ndx = 0; ndx < count; ++ndx) 3907 { 3908 deMemset(&deviceGraphicsPipelineLibraryFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT)); 3909 deviceGraphicsPipelineLibraryFeaturesEXT[ndx].sType = isGraphicsPipelineLibraryFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3910 deviceGraphicsPipelineLibraryFeaturesEXT[ndx].pNext = DE_NULL; 3911 3912 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3913 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3914 extFeatures.pNext = &deviceGraphicsPipelineLibraryFeaturesEXT[ndx]; 3915 3916 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3917 } 3918 3919 if (isGraphicsPipelineLibraryFeaturesEXT) 3920 log << TestLog::Message << deviceGraphicsPipelineLibraryFeaturesEXT[0] << TestLog::EndMessage; 3921 3922 if (isGraphicsPipelineLibraryFeaturesEXT && 3923 (deviceGraphicsPipelineLibraryFeaturesEXT[0].graphicsPipelineLibrary != deviceGraphicsPipelineLibraryFeaturesEXT[1].graphicsPipelineLibrary)) 3924 { 3925 TCU_FAIL("Mismatch between VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT"); 3926 } 3927 return tcu::TestStatus::pass("Querying succeeded"); 3928} 3929 3930tcu::TestStatus testPhysicalDeviceFeatureShaderModuleIdentifierFeaturesEXT (Context& context) 3931{ 3932 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3933 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3934 const InstanceDriver& vki (instance.getDriver()); 3935 const int count = 2u; 3936 TestLog& log = context.getTestContext().getLog(); 3937 VkPhysicalDeviceFeatures2 extFeatures; 3938 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3939 3940 VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT deviceShaderModuleIdentifierFeaturesEXT[count]; 3941 const bool isShaderModuleIdentifierFeaturesEXT = checkExtension(properties, "VK_EXT_shader_module_identifier"); 3942 3943 for (int ndx = 0; ndx < count; ++ndx) 3944 { 3945 deMemset(&deviceShaderModuleIdentifierFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT)); 3946 deviceShaderModuleIdentifierFeaturesEXT[ndx].sType = isShaderModuleIdentifierFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3947 deviceShaderModuleIdentifierFeaturesEXT[ndx].pNext = DE_NULL; 3948 3949 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3950 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3951 extFeatures.pNext = &deviceShaderModuleIdentifierFeaturesEXT[ndx]; 3952 3953 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3954 } 3955 3956 if (isShaderModuleIdentifierFeaturesEXT) 3957 log << TestLog::Message << deviceShaderModuleIdentifierFeaturesEXT[0] << TestLog::EndMessage; 3958 3959 if (isShaderModuleIdentifierFeaturesEXT && 3960 (deviceShaderModuleIdentifierFeaturesEXT[0].shaderModuleIdentifier != deviceShaderModuleIdentifierFeaturesEXT[1].shaderModuleIdentifier)) 3961 { 3962 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT"); 3963 } 3964 return tcu::TestStatus::pass("Querying succeeded"); 3965} 3966 3967tcu::TestStatus testPhysicalDeviceFeatureImageCompressionControlFeaturesEXT (Context& context) 3968{ 3969 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 3970 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 3971 const InstanceDriver& vki (instance.getDriver()); 3972 const int count = 2u; 3973 TestLog& log = context.getTestContext().getLog(); 3974 VkPhysicalDeviceFeatures2 extFeatures; 3975 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 3976 3977 VkPhysicalDeviceImageCompressionControlFeaturesEXT deviceImageCompressionControlFeaturesEXT[count]; 3978 const bool isImageCompressionControlFeaturesEXT = checkExtension(properties, "VK_EXT_image_compression_control"); 3979 3980 for (int ndx = 0; ndx < count; ++ndx) 3981 { 3982 deMemset(&deviceImageCompressionControlFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImageCompressionControlFeaturesEXT)); 3983 deviceImageCompressionControlFeaturesEXT[ndx].sType = isImageCompressionControlFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 3984 deviceImageCompressionControlFeaturesEXT[ndx].pNext = DE_NULL; 3985 3986 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 3987 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 3988 extFeatures.pNext = &deviceImageCompressionControlFeaturesEXT[ndx]; 3989 3990 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 3991 } 3992 3993 if (isImageCompressionControlFeaturesEXT) 3994 log << TestLog::Message << deviceImageCompressionControlFeaturesEXT[0] << TestLog::EndMessage; 3995 3996 if (isImageCompressionControlFeaturesEXT && 3997 (deviceImageCompressionControlFeaturesEXT[0].imageCompressionControl != deviceImageCompressionControlFeaturesEXT[1].imageCompressionControl)) 3998 { 3999 TCU_FAIL("Mismatch between VkPhysicalDeviceImageCompressionControlFeaturesEXT"); 4000 } 4001 return tcu::TestStatus::pass("Querying succeeded"); 4002} 4003 4004tcu::TestStatus testPhysicalDeviceFeatureImageCompressionControlSwapchainFeaturesEXT (Context& context) 4005{ 4006 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4007 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4008 const InstanceDriver& vki (instance.getDriver()); 4009 const int count = 2u; 4010 TestLog& log = context.getTestContext().getLog(); 4011 VkPhysicalDeviceFeatures2 extFeatures; 4012 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4013 4014 VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT deviceImageCompressionControlSwapchainFeaturesEXT[count]; 4015 const bool isImageCompressionControlSwapchainFeaturesEXT = checkExtension(properties, "VK_EXT_image_compression_control_swapchain"); 4016 4017 for (int ndx = 0; ndx < count; ++ndx) 4018 { 4019 deMemset(&deviceImageCompressionControlSwapchainFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT)); 4020 deviceImageCompressionControlSwapchainFeaturesEXT[ndx].sType = isImageCompressionControlSwapchainFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4021 deviceImageCompressionControlSwapchainFeaturesEXT[ndx].pNext = DE_NULL; 4022 4023 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4024 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4025 extFeatures.pNext = &deviceImageCompressionControlSwapchainFeaturesEXT[ndx]; 4026 4027 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4028 } 4029 4030 if (isImageCompressionControlSwapchainFeaturesEXT) 4031 log << TestLog::Message << deviceImageCompressionControlSwapchainFeaturesEXT[0] << TestLog::EndMessage; 4032 4033 if (isImageCompressionControlSwapchainFeaturesEXT && 4034 (deviceImageCompressionControlSwapchainFeaturesEXT[0].imageCompressionControlSwapchain != deviceImageCompressionControlSwapchainFeaturesEXT[1].imageCompressionControlSwapchain)) 4035 { 4036 TCU_FAIL("Mismatch between VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT"); 4037 } 4038 return tcu::TestStatus::pass("Querying succeeded"); 4039} 4040 4041tcu::TestStatus testPhysicalDeviceFeatureSubpassMergeFeedbackFeaturesEXT (Context& context) 4042{ 4043 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4044 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4045 const InstanceDriver& vki (instance.getDriver()); 4046 const int count = 2u; 4047 TestLog& log = context.getTestContext().getLog(); 4048 VkPhysicalDeviceFeatures2 extFeatures; 4049 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4050 4051 VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT deviceSubpassMergeFeedbackFeaturesEXT[count]; 4052 const bool isSubpassMergeFeedbackFeaturesEXT = checkExtension(properties, "VK_EXT_subpass_merge_feedback"); 4053 4054 for (int ndx = 0; ndx < count; ++ndx) 4055 { 4056 deMemset(&deviceSubpassMergeFeedbackFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT)); 4057 deviceSubpassMergeFeedbackFeaturesEXT[ndx].sType = isSubpassMergeFeedbackFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4058 deviceSubpassMergeFeedbackFeaturesEXT[ndx].pNext = DE_NULL; 4059 4060 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4061 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4062 extFeatures.pNext = &deviceSubpassMergeFeedbackFeaturesEXT[ndx]; 4063 4064 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4065 } 4066 4067 if (isSubpassMergeFeedbackFeaturesEXT) 4068 log << TestLog::Message << deviceSubpassMergeFeedbackFeaturesEXT[0] << TestLog::EndMessage; 4069 4070 if (isSubpassMergeFeedbackFeaturesEXT && 4071 (deviceSubpassMergeFeedbackFeaturesEXT[0].subpassMergeFeedback != deviceSubpassMergeFeedbackFeaturesEXT[1].subpassMergeFeedback)) 4072 { 4073 TCU_FAIL("Mismatch between VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT"); 4074 } 4075 return tcu::TestStatus::pass("Querying succeeded"); 4076} 4077 4078tcu::TestStatus testPhysicalDeviceFeatureOpacityMicromapFeaturesEXT (Context& context) 4079{ 4080 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4081 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4082 const InstanceDriver& vki (instance.getDriver()); 4083 const int count = 2u; 4084 TestLog& log = context.getTestContext().getLog(); 4085 VkPhysicalDeviceFeatures2 extFeatures; 4086 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4087 4088 VkPhysicalDeviceOpacityMicromapFeaturesEXT deviceOpacityMicromapFeaturesEXT[count]; 4089 const bool isOpacityMicromapFeaturesEXT = checkExtension(properties, "VK_EXT_opacity_micromap"); 4090 4091 for (int ndx = 0; ndx < count; ++ndx) 4092 { 4093 deMemset(&deviceOpacityMicromapFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceOpacityMicromapFeaturesEXT)); 4094 deviceOpacityMicromapFeaturesEXT[ndx].sType = isOpacityMicromapFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4095 deviceOpacityMicromapFeaturesEXT[ndx].pNext = DE_NULL; 4096 4097 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4098 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4099 extFeatures.pNext = &deviceOpacityMicromapFeaturesEXT[ndx]; 4100 4101 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4102 } 4103 4104 if (isOpacityMicromapFeaturesEXT) 4105 log << TestLog::Message << deviceOpacityMicromapFeaturesEXT[0] << TestLog::EndMessage; 4106 4107 if (isOpacityMicromapFeaturesEXT && 4108 (deviceOpacityMicromapFeaturesEXT[0].micromap != deviceOpacityMicromapFeaturesEXT[1].micromap || 4109 deviceOpacityMicromapFeaturesEXT[0].micromapCaptureReplay != deviceOpacityMicromapFeaturesEXT[1].micromapCaptureReplay || 4110 deviceOpacityMicromapFeaturesEXT[0].micromapHostCommands != deviceOpacityMicromapFeaturesEXT[1].micromapHostCommands)) 4111 { 4112 TCU_FAIL("Mismatch between VkPhysicalDeviceOpacityMicromapFeaturesEXT"); 4113 } 4114 return tcu::TestStatus::pass("Querying succeeded"); 4115} 4116 4117tcu::TestStatus testPhysicalDeviceFeaturePipelinePropertiesFeaturesEXT (Context& context) 4118{ 4119 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4120 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4121 const InstanceDriver& vki (instance.getDriver()); 4122 const int count = 2u; 4123 TestLog& log = context.getTestContext().getLog(); 4124 VkPhysicalDeviceFeatures2 extFeatures; 4125 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4126 4127 VkPhysicalDevicePipelinePropertiesFeaturesEXT devicePipelinePropertiesFeaturesEXT[count]; 4128 const bool isPipelinePropertiesFeaturesEXT = checkExtension(properties, "VK_EXT_pipeline_properties"); 4129 4130 for (int ndx = 0; ndx < count; ++ndx) 4131 { 4132 deMemset(&devicePipelinePropertiesFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePipelinePropertiesFeaturesEXT)); 4133 devicePipelinePropertiesFeaturesEXT[ndx].sType = isPipelinePropertiesFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4134 devicePipelinePropertiesFeaturesEXT[ndx].pNext = DE_NULL; 4135 4136 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4137 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4138 extFeatures.pNext = &devicePipelinePropertiesFeaturesEXT[ndx]; 4139 4140 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4141 } 4142 4143 if (isPipelinePropertiesFeaturesEXT) 4144 log << TestLog::Message << devicePipelinePropertiesFeaturesEXT[0] << TestLog::EndMessage; 4145 4146 if (isPipelinePropertiesFeaturesEXT && 4147 (devicePipelinePropertiesFeaturesEXT[0].pipelinePropertiesIdentifier != devicePipelinePropertiesFeaturesEXT[1].pipelinePropertiesIdentifier)) 4148 { 4149 TCU_FAIL("Mismatch between VkPhysicalDevicePipelinePropertiesFeaturesEXT"); 4150 } 4151 return tcu::TestStatus::pass("Querying succeeded"); 4152} 4153 4154tcu::TestStatus testPhysicalDeviceFeatureNonSeamlessCubeMapFeaturesEXT (Context& context) 4155{ 4156 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4157 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4158 const InstanceDriver& vki (instance.getDriver()); 4159 const int count = 2u; 4160 TestLog& log = context.getTestContext().getLog(); 4161 VkPhysicalDeviceFeatures2 extFeatures; 4162 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4163 4164 VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT deviceNonSeamlessCubeMapFeaturesEXT[count]; 4165 const bool isNonSeamlessCubeMapFeaturesEXT = checkExtension(properties, "VK_EXT_non_seamless_cube_map"); 4166 4167 for (int ndx = 0; ndx < count; ++ndx) 4168 { 4169 deMemset(&deviceNonSeamlessCubeMapFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT)); 4170 deviceNonSeamlessCubeMapFeaturesEXT[ndx].sType = isNonSeamlessCubeMapFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4171 deviceNonSeamlessCubeMapFeaturesEXT[ndx].pNext = DE_NULL; 4172 4173 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4174 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4175 extFeatures.pNext = &deviceNonSeamlessCubeMapFeaturesEXT[ndx]; 4176 4177 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4178 } 4179 4180 if (isNonSeamlessCubeMapFeaturesEXT) 4181 log << TestLog::Message << deviceNonSeamlessCubeMapFeaturesEXT[0] << TestLog::EndMessage; 4182 4183 if (isNonSeamlessCubeMapFeaturesEXT && 4184 (deviceNonSeamlessCubeMapFeaturesEXT[0].nonSeamlessCubeMap != deviceNonSeamlessCubeMapFeaturesEXT[1].nonSeamlessCubeMap)) 4185 { 4186 TCU_FAIL("Mismatch between VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT"); 4187 } 4188 return tcu::TestStatus::pass("Querying succeeded"); 4189} 4190 4191tcu::TestStatus testPhysicalDeviceFeaturePipelineRobustnessFeaturesEXT (Context& context) 4192{ 4193 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4194 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4195 const InstanceDriver& vki (instance.getDriver()); 4196 const int count = 2u; 4197 TestLog& log = context.getTestContext().getLog(); 4198 VkPhysicalDeviceFeatures2 extFeatures; 4199 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4200 4201 VkPhysicalDevicePipelineRobustnessFeaturesEXT devicePipelineRobustnessFeaturesEXT[count]; 4202 const bool isPipelineRobustnessFeaturesEXT = checkExtension(properties, "VK_EXT_pipeline_robustness"); 4203 4204 for (int ndx = 0; ndx < count; ++ndx) 4205 { 4206 deMemset(&devicePipelineRobustnessFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePipelineRobustnessFeaturesEXT)); 4207 devicePipelineRobustnessFeaturesEXT[ndx].sType = isPipelineRobustnessFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4208 devicePipelineRobustnessFeaturesEXT[ndx].pNext = DE_NULL; 4209 4210 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4211 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4212 extFeatures.pNext = &devicePipelineRobustnessFeaturesEXT[ndx]; 4213 4214 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4215 } 4216 4217 if (isPipelineRobustnessFeaturesEXT) 4218 log << TestLog::Message << devicePipelineRobustnessFeaturesEXT[0] << TestLog::EndMessage; 4219 4220 if (isPipelineRobustnessFeaturesEXT && 4221 (devicePipelineRobustnessFeaturesEXT[0].pipelineRobustness != devicePipelineRobustnessFeaturesEXT[1].pipelineRobustness)) 4222 { 4223 TCU_FAIL("Mismatch between VkPhysicalDevicePipelineRobustnessFeaturesEXT"); 4224 } 4225 return tcu::TestStatus::pass("Querying succeeded"); 4226} 4227 4228tcu::TestStatus testPhysicalDeviceFeatureAmigoProfilingFeaturesSEC (Context& context) 4229{ 4230 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4231 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4232 const InstanceDriver& vki (instance.getDriver()); 4233 const int count = 2u; 4234 TestLog& log = context.getTestContext().getLog(); 4235 VkPhysicalDeviceFeatures2 extFeatures; 4236 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4237 4238 VkPhysicalDeviceAmigoProfilingFeaturesSEC deviceAmigoProfilingFeaturesSEC[count]; 4239 const bool isAmigoProfilingFeaturesSEC = checkExtension(properties, "VK_SEC_amigo_profiling"); 4240 4241 for (int ndx = 0; ndx < count; ++ndx) 4242 { 4243 deMemset(&deviceAmigoProfilingFeaturesSEC[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceAmigoProfilingFeaturesSEC)); 4244 deviceAmigoProfilingFeaturesSEC[ndx].sType = isAmigoProfilingFeaturesSEC ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC : VK_STRUCTURE_TYPE_MAX_ENUM; 4245 deviceAmigoProfilingFeaturesSEC[ndx].pNext = DE_NULL; 4246 4247 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4248 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4249 extFeatures.pNext = &deviceAmigoProfilingFeaturesSEC[ndx]; 4250 4251 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4252 } 4253 4254 if (isAmigoProfilingFeaturesSEC) 4255 log << TestLog::Message << deviceAmigoProfilingFeaturesSEC[0] << TestLog::EndMessage; 4256 4257 if (isAmigoProfilingFeaturesSEC && 4258 (deviceAmigoProfilingFeaturesSEC[0].amigoProfiling != deviceAmigoProfilingFeaturesSEC[1].amigoProfiling)) 4259 { 4260 TCU_FAIL("Mismatch between VkPhysicalDeviceAmigoProfilingFeaturesSEC"); 4261 } 4262 return tcu::TestStatus::pass("Querying succeeded"); 4263} 4264 4265tcu::TestStatus testPhysicalDeviceFeatureAttachmentFeedbackLoopLayoutFeaturesEXT (Context& context) 4266{ 4267 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4268 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4269 const InstanceDriver& vki (instance.getDriver()); 4270 const int count = 2u; 4271 TestLog& log = context.getTestContext().getLog(); 4272 VkPhysicalDeviceFeatures2 extFeatures; 4273 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4274 4275 VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT deviceAttachmentFeedbackLoopLayoutFeaturesEXT[count]; 4276 const bool isAttachmentFeedbackLoopLayoutFeaturesEXT = checkExtension(properties, "VK_EXT_attachment_feedback_loop_layout"); 4277 4278 for (int ndx = 0; ndx < count; ++ndx) 4279 { 4280 deMemset(&deviceAttachmentFeedbackLoopLayoutFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT)); 4281 deviceAttachmentFeedbackLoopLayoutFeaturesEXT[ndx].sType = isAttachmentFeedbackLoopLayoutFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4282 deviceAttachmentFeedbackLoopLayoutFeaturesEXT[ndx].pNext = DE_NULL; 4283 4284 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4285 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4286 extFeatures.pNext = &deviceAttachmentFeedbackLoopLayoutFeaturesEXT[ndx]; 4287 4288 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4289 } 4290 4291 if (isAttachmentFeedbackLoopLayoutFeaturesEXT) 4292 log << TestLog::Message << deviceAttachmentFeedbackLoopLayoutFeaturesEXT[0] << TestLog::EndMessage; 4293 4294 if (isAttachmentFeedbackLoopLayoutFeaturesEXT && 4295 (deviceAttachmentFeedbackLoopLayoutFeaturesEXT[0].attachmentFeedbackLoopLayout != deviceAttachmentFeedbackLoopLayoutFeaturesEXT[1].attachmentFeedbackLoopLayout)) 4296 { 4297 TCU_FAIL("Mismatch between VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT"); 4298 } 4299 return tcu::TestStatus::pass("Querying succeeded"); 4300} 4301 4302tcu::TestStatus testPhysicalDeviceFeatureDepthClampZeroOneFeaturesEXT (Context& context) 4303{ 4304 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4305 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4306 const InstanceDriver& vki (instance.getDriver()); 4307 const int count = 2u; 4308 TestLog& log = context.getTestContext().getLog(); 4309 VkPhysicalDeviceFeatures2 extFeatures; 4310 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4311 4312 VkPhysicalDeviceDepthClampZeroOneFeaturesEXT deviceDepthClampZeroOneFeaturesEXT[count]; 4313 const bool isDepthClampZeroOneFeaturesEXT = checkExtension(properties, "VK_EXT_depth_clamp_zero_one"); 4314 4315 for (int ndx = 0; ndx < count; ++ndx) 4316 { 4317 deMemset(&deviceDepthClampZeroOneFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDepthClampZeroOneFeaturesEXT)); 4318 deviceDepthClampZeroOneFeaturesEXT[ndx].sType = isDepthClampZeroOneFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4319 deviceDepthClampZeroOneFeaturesEXT[ndx].pNext = DE_NULL; 4320 4321 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4322 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4323 extFeatures.pNext = &deviceDepthClampZeroOneFeaturesEXT[ndx]; 4324 4325 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4326 } 4327 4328 if (isDepthClampZeroOneFeaturesEXT) 4329 log << TestLog::Message << deviceDepthClampZeroOneFeaturesEXT[0] << TestLog::EndMessage; 4330 4331 if (isDepthClampZeroOneFeaturesEXT && 4332 (deviceDepthClampZeroOneFeaturesEXT[0].depthClampZeroOne != deviceDepthClampZeroOneFeaturesEXT[1].depthClampZeroOne)) 4333 { 4334 TCU_FAIL("Mismatch between VkPhysicalDeviceDepthClampZeroOneFeaturesEXT"); 4335 } 4336 return tcu::TestStatus::pass("Querying succeeded"); 4337} 4338 4339tcu::TestStatus testPhysicalDeviceFeatureAddressBindingReportFeaturesEXT (Context& context) 4340{ 4341 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4342 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4343 const InstanceDriver& vki (instance.getDriver()); 4344 const int count = 2u; 4345 TestLog& log = context.getTestContext().getLog(); 4346 VkPhysicalDeviceFeatures2 extFeatures; 4347 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4348 4349 VkPhysicalDeviceAddressBindingReportFeaturesEXT deviceAddressBindingReportFeaturesEXT[count]; 4350 const bool isAddressBindingReportFeaturesEXT = checkExtension(properties, "VK_EXT_device_address_binding_report"); 4351 4352 for (int ndx = 0; ndx < count; ++ndx) 4353 { 4354 deMemset(&deviceAddressBindingReportFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceAddressBindingReportFeaturesEXT)); 4355 deviceAddressBindingReportFeaturesEXT[ndx].sType = isAddressBindingReportFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4356 deviceAddressBindingReportFeaturesEXT[ndx].pNext = DE_NULL; 4357 4358 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4359 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4360 extFeatures.pNext = &deviceAddressBindingReportFeaturesEXT[ndx]; 4361 4362 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4363 } 4364 4365 if (isAddressBindingReportFeaturesEXT) 4366 log << TestLog::Message << deviceAddressBindingReportFeaturesEXT[0] << TestLog::EndMessage; 4367 4368 if (isAddressBindingReportFeaturesEXT && 4369 (deviceAddressBindingReportFeaturesEXT[0].reportAddressBinding != deviceAddressBindingReportFeaturesEXT[1].reportAddressBinding)) 4370 { 4371 TCU_FAIL("Mismatch between VkPhysicalDeviceAddressBindingReportFeaturesEXT"); 4372 } 4373 return tcu::TestStatus::pass("Querying succeeded"); 4374} 4375 4376tcu::TestStatus testPhysicalDeviceFeatureFaultFeaturesEXT (Context& context) 4377{ 4378 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4379 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4380 const InstanceDriver& vki (instance.getDriver()); 4381 const int count = 2u; 4382 TestLog& log = context.getTestContext().getLog(); 4383 VkPhysicalDeviceFeatures2 extFeatures; 4384 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4385 4386 VkPhysicalDeviceFaultFeaturesEXT deviceFaultFeaturesEXT[count]; 4387 const bool isFaultFeaturesEXT = checkExtension(properties, "VK_EXT_device_fault"); 4388 4389 for (int ndx = 0; ndx < count; ++ndx) 4390 { 4391 deMemset(&deviceFaultFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceFaultFeaturesEXT)); 4392 deviceFaultFeaturesEXT[ndx].sType = isFaultFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4393 deviceFaultFeaturesEXT[ndx].pNext = DE_NULL; 4394 4395 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4396 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4397 extFeatures.pNext = &deviceFaultFeaturesEXT[ndx]; 4398 4399 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4400 } 4401 4402 if (isFaultFeaturesEXT) 4403 log << TestLog::Message << deviceFaultFeaturesEXT[0] << TestLog::EndMessage; 4404 4405 if (isFaultFeaturesEXT && 4406 (deviceFaultFeaturesEXT[0].deviceFault != deviceFaultFeaturesEXT[1].deviceFault || 4407 deviceFaultFeaturesEXT[0].deviceFaultVendorBinary != deviceFaultFeaturesEXT[1].deviceFaultVendorBinary)) 4408 { 4409 TCU_FAIL("Mismatch between VkPhysicalDeviceFaultFeaturesEXT"); 4410 } 4411 return tcu::TestStatus::pass("Querying succeeded"); 4412} 4413 4414tcu::TestStatus testPhysicalDeviceFeaturePipelineLibraryGroupHandlesFeaturesEXT (Context& context) 4415{ 4416 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4417 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4418 const InstanceDriver& vki (instance.getDriver()); 4419 const int count = 2u; 4420 TestLog& log = context.getTestContext().getLog(); 4421 VkPhysicalDeviceFeatures2 extFeatures; 4422 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4423 4424 VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT devicePipelineLibraryGroupHandlesFeaturesEXT[count]; 4425 const bool isPipelineLibraryGroupHandlesFeaturesEXT = checkExtension(properties, "VK_EXT_pipeline_library_group_handles"); 4426 4427 for (int ndx = 0; ndx < count; ++ndx) 4428 { 4429 deMemset(&devicePipelineLibraryGroupHandlesFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT)); 4430 devicePipelineLibraryGroupHandlesFeaturesEXT[ndx].sType = isPipelineLibraryGroupHandlesFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4431 devicePipelineLibraryGroupHandlesFeaturesEXT[ndx].pNext = DE_NULL; 4432 4433 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4434 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4435 extFeatures.pNext = &devicePipelineLibraryGroupHandlesFeaturesEXT[ndx]; 4436 4437 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4438 } 4439 4440 if (isPipelineLibraryGroupHandlesFeaturesEXT) 4441 log << TestLog::Message << devicePipelineLibraryGroupHandlesFeaturesEXT[0] << TestLog::EndMessage; 4442 4443 if (isPipelineLibraryGroupHandlesFeaturesEXT && 4444 (devicePipelineLibraryGroupHandlesFeaturesEXT[0].pipelineLibraryGroupHandles != devicePipelineLibraryGroupHandlesFeaturesEXT[1].pipelineLibraryGroupHandles)) 4445 { 4446 TCU_FAIL("Mismatch between VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT"); 4447 } 4448 return tcu::TestStatus::pass("Querying succeeded"); 4449} 4450 4451tcu::TestStatus testPhysicalDeviceFeatureDynamicRenderingUnusedAttachmentsFeaturesEXT (Context& context) 4452{ 4453 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4454 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4455 const InstanceDriver& vki (instance.getDriver()); 4456 const int count = 2u; 4457 TestLog& log = context.getTestContext().getLog(); 4458 VkPhysicalDeviceFeatures2 extFeatures; 4459 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4460 4461 VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT deviceDynamicRenderingUnusedAttachmentsFeaturesEXT[count]; 4462 const bool isDynamicRenderingUnusedAttachmentsFeaturesEXT = checkExtension(properties, "VK_EXT_dynamic_rendering_unused_attachments"); 4463 4464 for (int ndx = 0; ndx < count; ++ndx) 4465 { 4466 deMemset(&deviceDynamicRenderingUnusedAttachmentsFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT)); 4467 deviceDynamicRenderingUnusedAttachmentsFeaturesEXT[ndx].sType = isDynamicRenderingUnusedAttachmentsFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4468 deviceDynamicRenderingUnusedAttachmentsFeaturesEXT[ndx].pNext = DE_NULL; 4469 4470 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4471 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4472 extFeatures.pNext = &deviceDynamicRenderingUnusedAttachmentsFeaturesEXT[ndx]; 4473 4474 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4475 } 4476 4477 if (isDynamicRenderingUnusedAttachmentsFeaturesEXT) 4478 log << TestLog::Message << deviceDynamicRenderingUnusedAttachmentsFeaturesEXT[0] << TestLog::EndMessage; 4479 4480 if (isDynamicRenderingUnusedAttachmentsFeaturesEXT && 4481 (deviceDynamicRenderingUnusedAttachmentsFeaturesEXT[0].dynamicRenderingUnusedAttachments != deviceDynamicRenderingUnusedAttachmentsFeaturesEXT[1].dynamicRenderingUnusedAttachments)) 4482 { 4483 TCU_FAIL("Mismatch between VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT"); 4484 } 4485 return tcu::TestStatus::pass("Querying succeeded"); 4486} 4487 4488tcu::TestStatus testPhysicalDeviceFeatureSwapchainMaintenance1FeaturesEXT (Context& context) 4489{ 4490 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4491 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4492 const InstanceDriver& vki (instance.getDriver()); 4493 const int count = 2u; 4494 TestLog& log = context.getTestContext().getLog(); 4495 VkPhysicalDeviceFeatures2 extFeatures; 4496 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4497 4498 VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT deviceSwapchainMaintenance1FeaturesEXT[count]; 4499 const bool isSwapchainMaintenance1FeaturesEXT = checkExtension(properties, "VK_EXT_swapchain_maintenance1"); 4500 4501 for (int ndx = 0; ndx < count; ++ndx) 4502 { 4503 deMemset(&deviceSwapchainMaintenance1FeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT)); 4504 deviceSwapchainMaintenance1FeaturesEXT[ndx].sType = isSwapchainMaintenance1FeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4505 deviceSwapchainMaintenance1FeaturesEXT[ndx].pNext = DE_NULL; 4506 4507 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4508 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4509 extFeatures.pNext = &deviceSwapchainMaintenance1FeaturesEXT[ndx]; 4510 4511 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4512 } 4513 4514 if (isSwapchainMaintenance1FeaturesEXT) 4515 log << TestLog::Message << deviceSwapchainMaintenance1FeaturesEXT[0] << TestLog::EndMessage; 4516 4517 if (isSwapchainMaintenance1FeaturesEXT && 4518 (deviceSwapchainMaintenance1FeaturesEXT[0].swapchainMaintenance1 != deviceSwapchainMaintenance1FeaturesEXT[1].swapchainMaintenance1)) 4519 { 4520 TCU_FAIL("Mismatch between VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT"); 4521 } 4522 return tcu::TestStatus::pass("Querying succeeded"); 4523} 4524 4525tcu::TestStatus testPhysicalDeviceFeatureDepthBiasControlFeaturesEXT (Context& context) 4526{ 4527 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4528 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4529 const InstanceDriver& vki (instance.getDriver()); 4530 const int count = 2u; 4531 TestLog& log = context.getTestContext().getLog(); 4532 VkPhysicalDeviceFeatures2 extFeatures; 4533 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4534 4535 VkPhysicalDeviceDepthBiasControlFeaturesEXT deviceDepthBiasControlFeaturesEXT[count]; 4536 const bool isDepthBiasControlFeaturesEXT = checkExtension(properties, "VK_EXT_depth_bias_control"); 4537 4538 for (int ndx = 0; ndx < count; ++ndx) 4539 { 4540 deMemset(&deviceDepthBiasControlFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceDepthBiasControlFeaturesEXT)); 4541 deviceDepthBiasControlFeaturesEXT[ndx].sType = isDepthBiasControlFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4542 deviceDepthBiasControlFeaturesEXT[ndx].pNext = DE_NULL; 4543 4544 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4545 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4546 extFeatures.pNext = &deviceDepthBiasControlFeaturesEXT[ndx]; 4547 4548 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4549 } 4550 4551 if (isDepthBiasControlFeaturesEXT) 4552 log << TestLog::Message << deviceDepthBiasControlFeaturesEXT[0] << TestLog::EndMessage; 4553 4554 if (isDepthBiasControlFeaturesEXT && 4555 (deviceDepthBiasControlFeaturesEXT[0].depthBiasControl != deviceDepthBiasControlFeaturesEXT[1].depthBiasControl || 4556 deviceDepthBiasControlFeaturesEXT[0].leastRepresentableValueForceUnormRepresentation != deviceDepthBiasControlFeaturesEXT[1].leastRepresentableValueForceUnormRepresentation || 4557 deviceDepthBiasControlFeaturesEXT[0].floatRepresentation != deviceDepthBiasControlFeaturesEXT[1].floatRepresentation || 4558 deviceDepthBiasControlFeaturesEXT[0].depthBiasExact != deviceDepthBiasControlFeaturesEXT[1].depthBiasExact)) 4559 { 4560 TCU_FAIL("Mismatch between VkPhysicalDeviceDepthBiasControlFeaturesEXT"); 4561 } 4562 return tcu::TestStatus::pass("Querying succeeded"); 4563} 4564 4565tcu::TestStatus testPhysicalDeviceFeatureRayTracingPositionFetchFeaturesKHR (Context& context) 4566{ 4567 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4568 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4569 const InstanceDriver& vki (instance.getDriver()); 4570 const int count = 2u; 4571 TestLog& log = context.getTestContext().getLog(); 4572 VkPhysicalDeviceFeatures2 extFeatures; 4573 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4574 4575 VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR deviceRayTracingPositionFetchFeaturesKHR[count]; 4576 const bool isRayTracingPositionFetchFeaturesKHR = checkExtension(properties, "VK_KHR_ray_tracing_position_fetch"); 4577 4578 for (int ndx = 0; ndx < count; ++ndx) 4579 { 4580 deMemset(&deviceRayTracingPositionFetchFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR)); 4581 deviceRayTracingPositionFetchFeaturesKHR[ndx].sType = isRayTracingPositionFetchFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 4582 deviceRayTracingPositionFetchFeaturesKHR[ndx].pNext = DE_NULL; 4583 4584 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4585 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4586 extFeatures.pNext = &deviceRayTracingPositionFetchFeaturesKHR[ndx]; 4587 4588 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4589 } 4590 4591 if (isRayTracingPositionFetchFeaturesKHR) 4592 log << TestLog::Message << deviceRayTracingPositionFetchFeaturesKHR[0] << TestLog::EndMessage; 4593 4594 if (isRayTracingPositionFetchFeaturesKHR && 4595 (deviceRayTracingPositionFetchFeaturesKHR[0].rayTracingPositionFetch != deviceRayTracingPositionFetchFeaturesKHR[1].rayTracingPositionFetch)) 4596 { 4597 TCU_FAIL("Mismatch between VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR"); 4598 } 4599 return tcu::TestStatus::pass("Querying succeeded"); 4600} 4601 4602tcu::TestStatus testPhysicalDeviceFeatureShaderObjectFeaturesEXT (Context& context) 4603{ 4604 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4605 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4606 const InstanceDriver& vki (instance.getDriver()); 4607 const int count = 2u; 4608 TestLog& log = context.getTestContext().getLog(); 4609 VkPhysicalDeviceFeatures2 extFeatures; 4610 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4611 4612 VkPhysicalDeviceShaderObjectFeaturesEXT deviceShaderObjectFeaturesEXT[count]; 4613 const bool isShaderObjectFeaturesEXT = checkExtension(properties, "VK_EXT_shader_object"); 4614 4615 for (int ndx = 0; ndx < count; ++ndx) 4616 { 4617 deMemset(&deviceShaderObjectFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderObjectFeaturesEXT)); 4618 deviceShaderObjectFeaturesEXT[ndx].sType = isShaderObjectFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4619 deviceShaderObjectFeaturesEXT[ndx].pNext = DE_NULL; 4620 4621 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4622 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4623 extFeatures.pNext = &deviceShaderObjectFeaturesEXT[ndx]; 4624 4625 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4626 } 4627 4628 if (isShaderObjectFeaturesEXT) 4629 log << TestLog::Message << deviceShaderObjectFeaturesEXT[0] << TestLog::EndMessage; 4630 4631 if (isShaderObjectFeaturesEXT && 4632 (deviceShaderObjectFeaturesEXT[0].shaderObject != deviceShaderObjectFeaturesEXT[1].shaderObject)) 4633 { 4634 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderObjectFeaturesEXT"); 4635 } 4636 return tcu::TestStatus::pass("Querying succeeded"); 4637} 4638 4639tcu::TestStatus testPhysicalDeviceFeatureShaderTileImageFeaturesEXT (Context& context) 4640{ 4641 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4642 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4643 const InstanceDriver& vki (instance.getDriver()); 4644 const int count = 2u; 4645 TestLog& log = context.getTestContext().getLog(); 4646 VkPhysicalDeviceFeatures2 extFeatures; 4647 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4648 4649 VkPhysicalDeviceShaderTileImageFeaturesEXT deviceShaderTileImageFeaturesEXT[count]; 4650 const bool isShaderTileImageFeaturesEXT = checkExtension(properties, "VK_EXT_shader_tile_image"); 4651 4652 for (int ndx = 0; ndx < count; ++ndx) 4653 { 4654 deMemset(&deviceShaderTileImageFeaturesEXT[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceShaderTileImageFeaturesEXT)); 4655 deviceShaderTileImageFeaturesEXT[ndx].sType = isShaderTileImageFeaturesEXT ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT : VK_STRUCTURE_TYPE_MAX_ENUM; 4656 deviceShaderTileImageFeaturesEXT[ndx].pNext = DE_NULL; 4657 4658 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4659 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4660 extFeatures.pNext = &deviceShaderTileImageFeaturesEXT[ndx]; 4661 4662 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4663 } 4664 4665 if (isShaderTileImageFeaturesEXT) 4666 log << TestLog::Message << deviceShaderTileImageFeaturesEXT[0] << TestLog::EndMessage; 4667 4668 if (isShaderTileImageFeaturesEXT && 4669 (deviceShaderTileImageFeaturesEXT[0].shaderTileImageColorReadAccess != deviceShaderTileImageFeaturesEXT[1].shaderTileImageColorReadAccess || 4670 deviceShaderTileImageFeaturesEXT[0].shaderTileImageDepthReadAccess != deviceShaderTileImageFeaturesEXT[1].shaderTileImageDepthReadAccess || 4671 deviceShaderTileImageFeaturesEXT[0].shaderTileImageStencilReadAccess != deviceShaderTileImageFeaturesEXT[1].shaderTileImageStencilReadAccess)) 4672 { 4673 TCU_FAIL("Mismatch between VkPhysicalDeviceShaderTileImageFeaturesEXT"); 4674 } 4675 return tcu::TestStatus::pass("Querying succeeded"); 4676} 4677 4678tcu::TestStatus testPhysicalDeviceFeatureCooperativeMatrixFeaturesKHR (Context& context) 4679{ 4680 const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); 4681 const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); 4682 const InstanceDriver& vki (instance.getDriver()); 4683 const int count = 2u; 4684 TestLog& log = context.getTestContext().getLog(); 4685 VkPhysicalDeviceFeatures2 extFeatures; 4686 vector<VkExtensionProperties> properties = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL); 4687 4688 VkPhysicalDeviceCooperativeMatrixFeaturesKHR deviceCooperativeMatrixFeaturesKHR[count]; 4689 const bool isCooperativeMatrixFeaturesKHR = checkExtension(properties, "VK_KHR_cooperative_matrix"); 4690 4691 for (int ndx = 0; ndx < count; ++ndx) 4692 { 4693 deMemset(&deviceCooperativeMatrixFeaturesKHR[ndx], 0xFF * ndx, sizeof(VkPhysicalDeviceCooperativeMatrixFeaturesKHR)); 4694 deviceCooperativeMatrixFeaturesKHR[ndx].sType = isCooperativeMatrixFeaturesKHR ? VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR : VK_STRUCTURE_TYPE_MAX_ENUM; 4695 deviceCooperativeMatrixFeaturesKHR[ndx].pNext = DE_NULL; 4696 4697 deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features)); 4698 extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; 4699 extFeatures.pNext = &deviceCooperativeMatrixFeaturesKHR[ndx]; 4700 4701 vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures); 4702 } 4703 4704 if (isCooperativeMatrixFeaturesKHR) 4705 log << TestLog::Message << deviceCooperativeMatrixFeaturesKHR[0] << TestLog::EndMessage; 4706 4707 if (isCooperativeMatrixFeaturesKHR && 4708 (deviceCooperativeMatrixFeaturesKHR[0].cooperativeMatrix != deviceCooperativeMatrixFeaturesKHR[1].cooperativeMatrix || 4709 deviceCooperativeMatrixFeaturesKHR[0].cooperativeMatrixRobustBufferAccess != deviceCooperativeMatrixFeaturesKHR[1].cooperativeMatrixRobustBufferAccess)) 4710 { 4711 TCU_FAIL("Mismatch between VkPhysicalDeviceCooperativeMatrixFeaturesKHR"); 4712 } 4713 return tcu::TestStatus::pass("Querying succeeded"); 4714} 4715 4716tcu::TestStatus createDeviceWithPromoted11Structures (Context& context) 4717{ 4718 if (!context.contextSupports(vk::ApiVersion(0, 1, 1, 0))) 4719 TCU_THROW(NotSupportedError, "Vulkan 1.1 is not supported"); 4720 4721 const PlatformInterface& platformInterface = context.getPlatformInterface(); 4722 const CustomInstance instance (createCustomInstanceFromContext(context)); 4723 const InstanceDriver& instanceDriver (instance.getDriver()); 4724 const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); 4725 const deUint32 queueFamilyIndex = 0; 4726 const deUint32 queueCount = 1; 4727 const deUint32 queueIndex = 0; 4728 const float queuePriority = 1.0f; 4729 4730 const vector<VkQueueFamilyProperties> queueFamilyProperties = getPhysicalDeviceQueueFamilyProperties(instanceDriver, physicalDevice); 4731 4732 const VkDeviceQueueCreateInfo deviceQueueCreateInfo = 4733 { 4734 VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, 4735 DE_NULL, 4736 (VkDeviceQueueCreateFlags)0u, 4737 queueFamilyIndex, //queueFamilyIndex; 4738 queueCount, //queueCount; 4739 &queuePriority, //pQueuePriorities; 4740 }; 4741 4742 VkPhysicalDevice16BitStorageFeatures device16BitStorageFeatures = initVulkanStructure(); 4743 VkPhysicalDeviceMultiviewFeatures deviceMultiviewFeatures = initVulkanStructure(&device16BitStorageFeatures); 4744 VkPhysicalDeviceVariablePointerFeatures deviceVariablePointersFeatures = initVulkanStructure(&deviceMultiviewFeatures); 4745 VkPhysicalDeviceProtectedMemoryFeatures deviceProtectedMemoryFeatures = initVulkanStructure(&deviceVariablePointersFeatures); 4746 VkPhysicalDeviceSamplerYcbcrConversionFeatures deviceSamplerYcbcrConversionFeatures = initVulkanStructure(&deviceProtectedMemoryFeatures); 4747 VkPhysicalDeviceShaderDrawParameterFeatures deviceShaderDrawParametersFeatures = initVulkanStructure(&deviceSamplerYcbcrConversionFeatures); 4748 VkPhysicalDeviceFeatures2 extFeatures = initVulkanStructure(&deviceShaderDrawParametersFeatures); 4749 4750 instanceDriver.getPhysicalDeviceFeatures2 (physicalDevice, &extFeatures); 4751 4752 const VkDeviceCreateInfo deviceCreateInfo = 4753 { 4754 VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //sType; 4755 &extFeatures, //pNext; 4756 (VkDeviceCreateFlags)0u, 4757 1, //queueRecordCount; 4758 &deviceQueueCreateInfo, //pRequestedQueues; 4759 0, //layerCount; 4760 DE_NULL, //ppEnabledLayerNames; 4761 0, //extensionCount; 4762 DE_NULL, //ppEnabledExtensionNames; 4763 DE_NULL, //pEnabledFeatures; 4764 }; 4765 4766 const Unique<VkDevice> device (createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), platformInterface, instance, instanceDriver, physicalDevice, &deviceCreateInfo)); 4767 const DeviceDriver deviceDriver (platformInterface, instance, device.get(), context.getUsedApiVersion()); 4768 const VkQueue queue = getDeviceQueue(deviceDriver, *device, queueFamilyIndex, queueIndex); 4769 4770 VK_CHECK(deviceDriver.queueWaitIdle(queue)); 4771 4772 return tcu::TestStatus::pass("Pass"); 4773} 4774 4775tcu::TestStatus createDeviceWithPromoted12Structures (Context& context) 4776{ 4777 if (!context.contextSupports(vk::ApiVersion(0, 1, 2, 0))) 4778 TCU_THROW(NotSupportedError, "Vulkan 1.2 is not supported"); 4779 4780 const PlatformInterface& platformInterface = context.getPlatformInterface(); 4781 const CustomInstance instance (createCustomInstanceFromContext(context)); 4782 const InstanceDriver& instanceDriver (instance.getDriver()); 4783 const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); 4784 const deUint32 queueFamilyIndex = 0; 4785 const deUint32 queueCount = 1; 4786 const deUint32 queueIndex = 0; 4787 const float queuePriority = 1.0f; 4788 4789 const vector<VkQueueFamilyProperties> queueFamilyProperties = getPhysicalDeviceQueueFamilyProperties(instanceDriver, physicalDevice); 4790 4791 const VkDeviceQueueCreateInfo deviceQueueCreateInfo = 4792 { 4793 VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, 4794 DE_NULL, 4795 (VkDeviceQueueCreateFlags)0u, 4796 queueFamilyIndex, //queueFamilyIndex; 4797 queueCount, //queueCount; 4798 &queuePriority, //pQueuePriorities; 4799 }; 4800 4801 VkPhysicalDevice8BitStorageFeatures device8BitStorageFeatures = initVulkanStructure(); 4802 VkPhysicalDeviceShaderAtomicInt64Features deviceShaderAtomicInt64Features = initVulkanStructure(&device8BitStorageFeatures); 4803 VkPhysicalDeviceShaderFloat16Int8Features deviceShaderFloat16Int8Features = initVulkanStructure(&deviceShaderAtomicInt64Features); 4804 VkPhysicalDeviceDescriptorIndexingFeatures deviceDescriptorIndexingFeatures = initVulkanStructure(&deviceShaderFloat16Int8Features); 4805 VkPhysicalDeviceScalarBlockLayoutFeatures deviceScalarBlockLayoutFeatures = initVulkanStructure(&deviceDescriptorIndexingFeatures); 4806 VkPhysicalDeviceVulkanMemoryModelFeatures deviceVulkanMemoryModelFeatures = initVulkanStructure(&deviceScalarBlockLayoutFeatures); 4807 VkPhysicalDeviceImagelessFramebufferFeatures deviceImagelessFramebufferFeatures = initVulkanStructure(&deviceVulkanMemoryModelFeatures); 4808 VkPhysicalDeviceUniformBufferStandardLayoutFeatures deviceUniformBufferStandardLayoutFeatures = initVulkanStructure(&deviceImagelessFramebufferFeatures); 4809 VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures deviceShaderSubgroupExtendedTypesFeatures = initVulkanStructure(&deviceUniformBufferStandardLayoutFeatures); 4810 VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures deviceSeparateDepthStencilLayoutsFeatures = initVulkanStructure(&deviceShaderSubgroupExtendedTypesFeatures); 4811 VkPhysicalDeviceHostQueryResetFeatures deviceHostQueryResetFeatures = initVulkanStructure(&deviceSeparateDepthStencilLayoutsFeatures); 4812 VkPhysicalDeviceTimelineSemaphoreFeatures deviceTimelineSemaphoreFeatures = initVulkanStructure(&deviceHostQueryResetFeatures); 4813 VkPhysicalDeviceBufferDeviceAddressFeatures deviceBufferDeviceAddressFeatures = initVulkanStructure(&deviceTimelineSemaphoreFeatures); 4814 VkPhysicalDeviceFeatures2 extFeatures = initVulkanStructure(&deviceBufferDeviceAddressFeatures); 4815 4816 instanceDriver.getPhysicalDeviceFeatures2 (physicalDevice, &extFeatures); 4817 4818 const VkDeviceCreateInfo deviceCreateInfo = 4819 { 4820 VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //sType; 4821 &extFeatures, //pNext; 4822 (VkDeviceCreateFlags)0u, 4823 1, //queueRecordCount; 4824 &deviceQueueCreateInfo, //pRequestedQueues; 4825 0, //layerCount; 4826 DE_NULL, //ppEnabledLayerNames; 4827 0, //extensionCount; 4828 DE_NULL, //ppEnabledExtensionNames; 4829 DE_NULL, //pEnabledFeatures; 4830 }; 4831 4832 const Unique<VkDevice> device (createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), platformInterface, instance, instanceDriver, physicalDevice, &deviceCreateInfo)); 4833 const DeviceDriver deviceDriver (platformInterface, instance, device.get(), context.getUsedApiVersion()); 4834 const VkQueue queue = getDeviceQueue(deviceDriver, *device, queueFamilyIndex, queueIndex); 4835 4836 VK_CHECK(deviceDriver.queueWaitIdle(queue)); 4837 4838 return tcu::TestStatus::pass("Pass"); 4839} 4840 4841tcu::TestStatus createDeviceWithPromoted13Structures (Context& context) 4842{ 4843 if (!context.contextSupports(vk::ApiVersion(0, 1, 3, 0))) 4844 TCU_THROW(NotSupportedError, "Vulkan 1.3 is not supported"); 4845 4846 const PlatformInterface& platformInterface = context.getPlatformInterface(); 4847 const CustomInstance instance (createCustomInstanceFromContext(context)); 4848 const InstanceDriver& instanceDriver (instance.getDriver()); 4849 const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); 4850 const deUint32 queueFamilyIndex = 0; 4851 const deUint32 queueCount = 1; 4852 const deUint32 queueIndex = 0; 4853 const float queuePriority = 1.0f; 4854 4855 const vector<VkQueueFamilyProperties> queueFamilyProperties = getPhysicalDeviceQueueFamilyProperties(instanceDriver, physicalDevice); 4856 4857 const VkDeviceQueueCreateInfo deviceQueueCreateInfo = 4858 { 4859 VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, 4860 DE_NULL, 4861 (VkDeviceQueueCreateFlags)0u, 4862 queueFamilyIndex, //queueFamilyIndex; 4863 queueCount, //queueCount; 4864 &queuePriority, //pQueuePriorities; 4865 }; 4866 4867 VkPhysicalDeviceShaderTerminateInvocationFeatures deviceShaderTerminateInvocationFeatures = initVulkanStructure(); 4868 VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures deviceShaderDemoteToHelperInvocationFeatures = initVulkanStructure(&deviceShaderTerminateInvocationFeatures); 4869 VkPhysicalDevicePrivateDataFeatures devicePrivateDataFeatures = initVulkanStructure(&deviceShaderDemoteToHelperInvocationFeatures); 4870 VkPhysicalDevicePipelineCreationCacheControlFeatures devicePipelineCreationCacheControlFeatures = initVulkanStructure(&devicePrivateDataFeatures); 4871 VkPhysicalDeviceSynchronization2Features deviceSynchronization2Features = initVulkanStructure(&devicePipelineCreationCacheControlFeatures); 4872 VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures deviceZeroInitializeWorkgroupMemoryFeatures = initVulkanStructure(&deviceSynchronization2Features); 4873 VkPhysicalDeviceImageRobustnessFeatures deviceImageRobustnessFeatures = initVulkanStructure(&deviceZeroInitializeWorkgroupMemoryFeatures); 4874 VkPhysicalDeviceSubgroupSizeControlFeatures deviceSubgroupSizeControlFeatures = initVulkanStructure(&deviceImageRobustnessFeatures); 4875 VkPhysicalDeviceInlineUniformBlockFeatures deviceInlineUniformBlockFeatures = initVulkanStructure(&deviceSubgroupSizeControlFeatures); 4876 VkPhysicalDeviceTextureCompressionASTCHDRFeatures deviceTextureCompressionASTCHDRFeatures = initVulkanStructure(&deviceInlineUniformBlockFeatures); 4877 VkPhysicalDeviceDynamicRenderingFeatures deviceDynamicRenderingFeatures = initVulkanStructure(&deviceTextureCompressionASTCHDRFeatures); 4878 VkPhysicalDeviceShaderIntegerDotProductFeatures deviceShaderIntegerDotProductFeatures = initVulkanStructure(&deviceDynamicRenderingFeatures); 4879 VkPhysicalDeviceMaintenance4Features deviceMaintenance4Features = initVulkanStructure(&deviceShaderIntegerDotProductFeatures); 4880 VkPhysicalDeviceFeatures2 extFeatures = initVulkanStructure(&deviceMaintenance4Features); 4881 4882 instanceDriver.getPhysicalDeviceFeatures2 (physicalDevice, &extFeatures); 4883 4884 const VkDeviceCreateInfo deviceCreateInfo = 4885 { 4886 VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //sType; 4887 &extFeatures, //pNext; 4888 (VkDeviceCreateFlags)0u, 4889 1, //queueRecordCount; 4890 &deviceQueueCreateInfo, //pRequestedQueues; 4891 0, //layerCount; 4892 DE_NULL, //ppEnabledLayerNames; 4893 0, //extensionCount; 4894 DE_NULL, //ppEnabledExtensionNames; 4895 DE_NULL, //pEnabledFeatures; 4896 }; 4897 4898 const Unique<VkDevice> device (createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), platformInterface, instance, instanceDriver, physicalDevice, &deviceCreateInfo)); 4899 const DeviceDriver deviceDriver (platformInterface, instance, device.get(), context.getUsedApiVersion()); 4900 const VkQueue queue = getDeviceQueue(deviceDriver, *device, queueFamilyIndex, queueIndex); 4901 4902 VK_CHECK(deviceDriver.queueWaitIdle(queue)); 4903 4904 return tcu::TestStatus::pass("Pass"); 4905} 4906 4907void addSeparateFeatureTests (tcu::TestCaseGroup* testGroup) 4908{ 4909 addFunctionCase(testGroup, "private_data_features", testPhysicalDeviceFeaturePrivateDataFeatures); 4910 addFunctionCase(testGroup, "variable_pointers_features", testPhysicalDeviceFeatureVariablePointersFeatures); 4911 addFunctionCase(testGroup, "multiview_features", testPhysicalDeviceFeatureMultiviewFeatures); 4912 addFunctionCase(testGroup, "present_id_features_khr", testPhysicalDeviceFeaturePresentIdFeaturesKHR); 4913 addFunctionCase(testGroup, "present_wait_features_khr", testPhysicalDeviceFeaturePresentWaitFeaturesKHR); 4914 addFunctionCase(testGroup, "16_bit_storage_features", testPhysicalDeviceFeature16BitStorageFeatures); 4915 addFunctionCase(testGroup, "shader_subgroup_extended_types_features", testPhysicalDeviceFeatureShaderSubgroupExtendedTypesFeatures); 4916 addFunctionCase(testGroup, "sampler_ycbcr_conversion_features", testPhysicalDeviceFeatureSamplerYcbcrConversionFeatures); 4917 addFunctionCase(testGroup, "protected_memory_features", testPhysicalDeviceFeatureProtectedMemoryFeatures); 4918 addFunctionCase(testGroup, "blend_operation_advanced_features_ext", testPhysicalDeviceFeatureBlendOperationAdvancedFeaturesEXT); 4919 addFunctionCase(testGroup, "multi_draw_features_ext", testPhysicalDeviceFeatureMultiDrawFeaturesEXT); 4920 addFunctionCase(testGroup, "inline_uniform_block_features", testPhysicalDeviceFeatureInlineUniformBlockFeatures); 4921 addFunctionCase(testGroup, "maintenance4_features", testPhysicalDeviceFeatureMaintenance4Features); 4922 addFunctionCase(testGroup, "maintenance5_features_khr", testPhysicalDeviceFeatureMaintenance5FeaturesKHR); 4923 addFunctionCase(testGroup, "shader_draw_parameters_features", testPhysicalDeviceFeatureShaderDrawParametersFeatures); 4924 addFunctionCase(testGroup, "shader_float16_int8_features", testPhysicalDeviceFeatureShaderFloat16Int8Features); 4925 addFunctionCase(testGroup, "host_query_reset_features", testPhysicalDeviceFeatureHostQueryResetFeatures); 4926 addFunctionCase(testGroup, "global_priority_query_features_khr", testPhysicalDeviceFeatureGlobalPriorityQueryFeaturesKHR); 4927 addFunctionCase(testGroup, "device_memory_report_features_ext", testPhysicalDeviceFeatureDeviceMemoryReportFeaturesEXT); 4928 addFunctionCase(testGroup, "descriptor_indexing_features", testPhysicalDeviceFeatureDescriptorIndexingFeatures); 4929 addFunctionCase(testGroup, "timeline_semaphore_features", testPhysicalDeviceFeatureTimelineSemaphoreFeatures); 4930 addFunctionCase(testGroup, "8_bit_storage_features", testPhysicalDeviceFeature8BitStorageFeatures); 4931 addFunctionCase(testGroup, "conditional_rendering_features_ext", testPhysicalDeviceFeatureConditionalRenderingFeaturesEXT); 4932 addFunctionCase(testGroup, "vulkan_memory_model_features", testPhysicalDeviceFeatureVulkanMemoryModelFeatures); 4933 addFunctionCase(testGroup, "shader_atomic_int64_features", testPhysicalDeviceFeatureShaderAtomicInt64Features); 4934 addFunctionCase(testGroup, "shader_atomic_float_features_ext", testPhysicalDeviceFeatureShaderAtomicFloatFeaturesEXT); 4935 addFunctionCase(testGroup, "shader_atomic_float2_features_ext", testPhysicalDeviceFeatureShaderAtomicFloat2FeaturesEXT); 4936 addFunctionCase(testGroup, "vertex_attribute_divisor_features_ext", testPhysicalDeviceFeatureVertexAttributeDivisorFeaturesEXT); 4937 addFunctionCase(testGroup, "astc_decode_features_ext", testPhysicalDeviceFeatureASTCDecodeFeaturesEXT); 4938 addFunctionCase(testGroup, "transform_feedback_features_ext", testPhysicalDeviceFeatureTransformFeedbackFeaturesEXT); 4939 addFunctionCase(testGroup, "mesh_shader_features_ext", testPhysicalDeviceFeatureMeshShaderFeaturesEXT); 4940 addFunctionCase(testGroup, "acceleration_structure_features_khr", testPhysicalDeviceFeatureAccelerationStructureFeaturesKHR); 4941 addFunctionCase(testGroup, "ray_tracing_pipeline_features_khr", testPhysicalDeviceFeatureRayTracingPipelineFeaturesKHR); 4942 addFunctionCase(testGroup, "ray_query_features_khr", testPhysicalDeviceFeatureRayQueryFeaturesKHR); 4943 addFunctionCase(testGroup, "ray_tracing_maintenance1_features_khr", testPhysicalDeviceFeatureRayTracingMaintenance1FeaturesKHR); 4944 addFunctionCase(testGroup, "fragment_density_map_features_ext", testPhysicalDeviceFeatureFragmentDensityMapFeaturesEXT); 4945 addFunctionCase(testGroup, "fragment_density_map2_features_ext", testPhysicalDeviceFeatureFragmentDensityMap2FeaturesEXT); 4946 addFunctionCase(testGroup, "scalar_block_layout_features", testPhysicalDeviceFeatureScalarBlockLayoutFeatures); 4947 addFunctionCase(testGroup, "uniform_buffer_standard_layout_features", testPhysicalDeviceFeatureUniformBufferStandardLayoutFeatures); 4948 addFunctionCase(testGroup, "depth_clip_enable_features_ext", testPhysicalDeviceFeatureDepthClipEnableFeaturesEXT); 4949 addFunctionCase(testGroup, "memory_priority_features_ext", testPhysicalDeviceFeatureMemoryPriorityFeaturesEXT); 4950 addFunctionCase(testGroup, "pageable_device_local_memory_features_ext", testPhysicalDeviceFeaturePageableDeviceLocalMemoryFeaturesEXT); 4951 addFunctionCase(testGroup, "buffer_device_address_features", testPhysicalDeviceFeatureBufferDeviceAddressFeatures); 4952 addFunctionCase(testGroup, "buffer_device_address_features_ext", testPhysicalDeviceFeatureBufferDeviceAddressFeaturesEXT); 4953 addFunctionCase(testGroup, "imageless_framebuffer_features", testPhysicalDeviceFeatureImagelessFramebufferFeatures); 4954 addFunctionCase(testGroup, "texture_compression_astchdr_features", testPhysicalDeviceFeatureTextureCompressionASTCHDRFeatures); 4955 addFunctionCase(testGroup, "ycbcr_image_arrays_features_ext", testPhysicalDeviceFeatureYcbcrImageArraysFeaturesEXT); 4956 addFunctionCase(testGroup, "performance_query_features_khr", testPhysicalDeviceFeaturePerformanceQueryFeaturesKHR); 4957 addFunctionCase(testGroup, "shader_clock_features_khr", testPhysicalDeviceFeatureShaderClockFeaturesKHR); 4958 addFunctionCase(testGroup, "index_type_uint8_features_ext", testPhysicalDeviceFeatureIndexTypeUint8FeaturesEXT); 4959 addFunctionCase(testGroup, "fragment_shader_interlock_features_ext", testPhysicalDeviceFeatureFragmentShaderInterlockFeaturesEXT); 4960 addFunctionCase(testGroup, "separate_depth_stencil_layouts_features", testPhysicalDeviceFeatureSeparateDepthStencilLayoutsFeatures); 4961 addFunctionCase(testGroup, "primitive_topology_list_restart_features_ext", testPhysicalDeviceFeaturePrimitiveTopologyListRestartFeaturesEXT); 4962 addFunctionCase(testGroup, "pipeline_executable_properties_features_khr", testPhysicalDeviceFeaturePipelineExecutablePropertiesFeaturesKHR); 4963 addFunctionCase(testGroup, "shader_demote_to_helper_invocation_features", testPhysicalDeviceFeatureShaderDemoteToHelperInvocationFeatures); 4964 addFunctionCase(testGroup, "texel_buffer_alignment_features_ext", testPhysicalDeviceFeatureTexelBufferAlignmentFeaturesEXT); 4965 addFunctionCase(testGroup, "subgroup_size_control_features", testPhysicalDeviceFeatureSubgroupSizeControlFeatures); 4966 addFunctionCase(testGroup, "line_rasterization_features_ext", testPhysicalDeviceFeatureLineRasterizationFeaturesEXT); 4967 addFunctionCase(testGroup, "pipeline_creation_cache_control_features", testPhysicalDeviceFeaturePipelineCreationCacheControlFeatures); 4968 addFunctionCase(testGroup, "vulkan11_features", testPhysicalDeviceFeatureVulkan11Features); 4969 addFunctionCase(testGroup, "vulkan12_features", testPhysicalDeviceFeatureVulkan12Features); 4970 addFunctionCase(testGroup, "vulkan13_features", testPhysicalDeviceFeatureVulkan13Features); 4971 addFunctionCase(testGroup, "custom_border_color_features_ext", testPhysicalDeviceFeatureCustomBorderColorFeaturesEXT); 4972 addFunctionCase(testGroup, "border_color_swizzle_features_ext", testPhysicalDeviceFeatureBorderColorSwizzleFeaturesEXT); 4973 addFunctionCase(testGroup, "extended_dynamic_state_features_ext", testPhysicalDeviceFeatureExtendedDynamicStateFeaturesEXT); 4974 addFunctionCase(testGroup, "extended_dynamic_state2_features_ext", testPhysicalDeviceFeatureExtendedDynamicState2FeaturesEXT); 4975 addFunctionCase(testGroup, "extended_dynamic_state3_features_ext", testPhysicalDeviceFeatureExtendedDynamicState3FeaturesEXT); 4976 addFunctionCase(testGroup, "zero_initialize_workgroup_memory_features", testPhysicalDeviceFeatureZeroInitializeWorkgroupMemoryFeatures); 4977 addFunctionCase(testGroup, "shader_subgroup_uniform_control_flow_features_khr", testPhysicalDeviceFeatureShaderSubgroupUniformControlFlowFeaturesKHR); 4978 addFunctionCase(testGroup, "robustness2_features_ext", testPhysicalDeviceFeatureRobustness2FeaturesEXT); 4979 addFunctionCase(testGroup, "image_robustness_features", testPhysicalDeviceFeatureImageRobustnessFeatures); 4980 addFunctionCase(testGroup, "workgroup_memory_explicit_layout_features_khr", testPhysicalDeviceFeatureWorkgroupMemoryExplicitLayoutFeaturesKHR); 4981 addFunctionCase(testGroup, "portability_subset_features_khr", testPhysicalDeviceFeaturePortabilitySubsetFeaturesKHR); 4982 addFunctionCase(testGroup, "4444_formats_features_ext", testPhysicalDeviceFeature4444FormatsFeaturesEXT); 4983 addFunctionCase(testGroup, "shader_image_atomic_int64_features_ext", testPhysicalDeviceFeatureShaderImageAtomicInt64FeaturesEXT); 4984 addFunctionCase(testGroup, "fragment_shading_rate_features_khr", testPhysicalDeviceFeatureFragmentShadingRateFeaturesKHR); 4985 addFunctionCase(testGroup, "shader_terminate_invocation_features", testPhysicalDeviceFeatureShaderTerminateInvocationFeatures); 4986 addFunctionCase(testGroup, "image_2d_view_of_3d_features_ext", testPhysicalDeviceFeatureImage2DViewOf3DFeaturesEXT); 4987 addFunctionCase(testGroup, "image_sliced_view_of_3d_features_ext", testPhysicalDeviceFeatureImageSlicedViewOf3DFeaturesEXT); 4988 addFunctionCase(testGroup, "attachment_feedback_loop_dynamic_state_features_ext", testPhysicalDeviceFeatureAttachmentFeedbackLoopDynamicStateFeaturesEXT); 4989 addFunctionCase(testGroup, "mutable_descriptor_type_features_ext", testPhysicalDeviceFeatureMutableDescriptorTypeFeaturesEXT); 4990 addFunctionCase(testGroup, "depth_clip_control_features_ext", testPhysicalDeviceFeatureDepthClipControlFeaturesEXT); 4991 addFunctionCase(testGroup, "vertex_input_dynamic_state_features_ext", testPhysicalDeviceFeatureVertexInputDynamicStateFeaturesEXT); 4992 addFunctionCase(testGroup, "color_write_enable_features_ext", testPhysicalDeviceFeatureColorWriteEnableFeaturesEXT); 4993 addFunctionCase(testGroup, "synchronization2_features", testPhysicalDeviceFeatureSynchronization2Features); 4994 addFunctionCase(testGroup, "host_image_copy_features_ext", testPhysicalDeviceFeatureHostImageCopyFeaturesEXT); 4995 addFunctionCase(testGroup, "primitives_generated_query_features_ext", testPhysicalDeviceFeaturePrimitivesGeneratedQueryFeaturesEXT); 4996 addFunctionCase(testGroup, "legacy_dithering_features_ext", testPhysicalDeviceFeatureLegacyDitheringFeaturesEXT); 4997 addFunctionCase(testGroup, "multisampled_render_to_single_sampled_features_ext", testPhysicalDeviceFeatureMultisampledRenderToSingleSampledFeaturesEXT); 4998 addFunctionCase(testGroup, "pipeline_protected_access_features_ext", testPhysicalDeviceFeaturePipelineProtectedAccessFeaturesEXT); 4999 addFunctionCase(testGroup, "ycbcr2_plane444_formats_features_ext", testPhysicalDeviceFeatureYcbcr2Plane444FormatsFeaturesEXT); 5000 addFunctionCase(testGroup, "provoking_vertex_features_ext", testPhysicalDeviceFeatureProvokingVertexFeaturesEXT); 5001 addFunctionCase(testGroup, "descriptor_buffer_features_ext", testPhysicalDeviceFeatureDescriptorBufferFeaturesEXT); 5002 addFunctionCase(testGroup, "shader_integer_dot_product_features", testPhysicalDeviceFeatureShaderIntegerDotProductFeatures); 5003 addFunctionCase(testGroup, "fragment_shader_barycentric_features_khr", testPhysicalDeviceFeatureFragmentShaderBarycentricFeaturesKHR); 5004 addFunctionCase(testGroup, "rgba10_x6_formats_features_ext", testPhysicalDeviceFeatureRGBA10X6FormatsFeaturesEXT); 5005 addFunctionCase(testGroup, "dynamic_rendering_features", testPhysicalDeviceFeatureDynamicRenderingFeatures); 5006 addFunctionCase(testGroup, "image_view_min_lod_features_ext", testPhysicalDeviceFeatureImageViewMinLodFeaturesEXT); 5007 addFunctionCase(testGroup, "rasterization_order_attachment_access_features_ext", testPhysicalDeviceFeatureRasterizationOrderAttachmentAccessFeaturesEXT); 5008 addFunctionCase(testGroup, "graphics_pipeline_library_features_ext", testPhysicalDeviceFeatureGraphicsPipelineLibraryFeaturesEXT); 5009 addFunctionCase(testGroup, "shader_module_identifier_features_ext", testPhysicalDeviceFeatureShaderModuleIdentifierFeaturesEXT); 5010 addFunctionCase(testGroup, "image_compression_control_features_ext", testPhysicalDeviceFeatureImageCompressionControlFeaturesEXT); 5011 addFunctionCase(testGroup, "image_compression_control_swapchain_features_ext", testPhysicalDeviceFeatureImageCompressionControlSwapchainFeaturesEXT); 5012 addFunctionCase(testGroup, "subpass_merge_feedback_features_ext", testPhysicalDeviceFeatureSubpassMergeFeedbackFeaturesEXT); 5013 addFunctionCase(testGroup, "opacity_micromap_features_ext", testPhysicalDeviceFeatureOpacityMicromapFeaturesEXT); 5014 addFunctionCase(testGroup, "pipeline_properties_features_ext", testPhysicalDeviceFeaturePipelinePropertiesFeaturesEXT); 5015 addFunctionCase(testGroup, "non_seamless_cube_map_features_ext", testPhysicalDeviceFeatureNonSeamlessCubeMapFeaturesEXT); 5016 addFunctionCase(testGroup, "pipeline_robustness_features_ext", testPhysicalDeviceFeaturePipelineRobustnessFeaturesEXT); 5017 addFunctionCase(testGroup, "amigo_profiling_features_sec", testPhysicalDeviceFeatureAmigoProfilingFeaturesSEC); 5018 addFunctionCase(testGroup, "attachment_feedback_loop_layout_features_ext", testPhysicalDeviceFeatureAttachmentFeedbackLoopLayoutFeaturesEXT); 5019 addFunctionCase(testGroup, "depth_clamp_zero_one_features_ext", testPhysicalDeviceFeatureDepthClampZeroOneFeaturesEXT); 5020 addFunctionCase(testGroup, "address_binding_report_features_ext", testPhysicalDeviceFeatureAddressBindingReportFeaturesEXT); 5021 addFunctionCase(testGroup, "fault_features_ext", testPhysicalDeviceFeatureFaultFeaturesEXT); 5022 addFunctionCase(testGroup, "pipeline_library_group_handles_features_ext", testPhysicalDeviceFeaturePipelineLibraryGroupHandlesFeaturesEXT); 5023 addFunctionCase(testGroup, "dynamic_rendering_unused_attachments_features_ext", testPhysicalDeviceFeatureDynamicRenderingUnusedAttachmentsFeaturesEXT); 5024 addFunctionCase(testGroup, "swapchain_maintenance1_features_ext", testPhysicalDeviceFeatureSwapchainMaintenance1FeaturesEXT); 5025 addFunctionCase(testGroup, "depth_bias_control_features_ext", testPhysicalDeviceFeatureDepthBiasControlFeaturesEXT); 5026 addFunctionCase(testGroup, "ray_tracing_position_fetch_features_khr", testPhysicalDeviceFeatureRayTracingPositionFetchFeaturesKHR); 5027 addFunctionCase(testGroup, "shader_object_features_ext", testPhysicalDeviceFeatureShaderObjectFeaturesEXT); 5028 addFunctionCase(testGroup, "shader_tile_image_features_ext", testPhysicalDeviceFeatureShaderTileImageFeaturesEXT); 5029 addFunctionCase(testGroup, "cooperative_matrix_features_khr", testPhysicalDeviceFeatureCooperativeMatrixFeaturesKHR); 5030 addFunctionCase(testGroup, "create_device_with_promoted11_structures", createDeviceWithPromoted11Structures); 5031 addFunctionCase(testGroup, "create_device_with_promoted12_structures", createDeviceWithPromoted12Structures); 5032 addFunctionCase(testGroup, "create_device_with_promoted13_structures", createDeviceWithPromoted13Structures); 5033} 5034 5035