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 validate_roadmap_2022(Context& context) 7{ 8 const VkBool32 checkAlways = true; 9 bool oneOrMoreChecksFailed = false; 10 auto pd = context.getPhysicalDevice(); 11 const auto &vki = context.getInstanceInterface(); 12 TestLog& log = context.getTestContext().getLog(); 13 14 VkPhysicalDeviceVulkan11Features vkVulkan11Features = initVulkanStructure(); 15 VkPhysicalDeviceVulkan12Features vkVulkan12Features = initVulkanStructure(&vkVulkan11Features); 16 VkPhysicalDeviceVulkan13Features vkVulkan13Features = initVulkanStructure(&vkVulkan12Features); 17 18 VkPhysicalDeviceFeatures2 vkFeatures2 = initVulkanStructure(&vkVulkan13Features); 19 auto& vkFeatures = vkFeatures2.features; 20 vki.getPhysicalDeviceFeatures2(pd, &vkFeatures2); 21 22 VkPhysicalDeviceVulkan11Properties vkVulkan11Properties = initVulkanStructure(); 23 VkPhysicalDeviceVulkan12Properties vkVulkan12Properties = initVulkanStructure(&vkVulkan11Properties); 24 VkPhysicalDeviceVulkan13Properties vkVulkan13Properties = initVulkanStructure(&vkVulkan12Properties); 25 26 VkPhysicalDeviceProperties2 vkProperties2 = initVulkanStructure(&vkVulkan13Properties); 27 auto& vkProperties = vkProperties2.properties; 28 vki.getPhysicalDeviceProperties2(pd, &vkProperties2); 29 30 const std::vector<FeatureEntry> featureTable { 31 // vulkan10requirements 32 ROADMAP_FEATURE_ITEM(vkFeatures, robustBufferAccess), 33 34 // vulkan10requirements_roadmap2022 35 ROADMAP_FEATURE_ITEM(vkFeatures, fullDrawIndexUint32), 36 ROADMAP_FEATURE_ITEM(vkFeatures, imageCubeArray), 37 ROADMAP_FEATURE_ITEM(vkFeatures, independentBlend), 38 ROADMAP_FEATURE_ITEM(vkFeatures, sampleRateShading), 39 ROADMAP_FEATURE_ITEM(vkFeatures, drawIndirectFirstInstance), 40 ROADMAP_FEATURE_ITEM(vkFeatures, depthClamp), 41 ROADMAP_FEATURE_ITEM(vkFeatures, depthBiasClamp), 42 ROADMAP_FEATURE_ITEM(vkFeatures, samplerAnisotropy), 43 ROADMAP_FEATURE_ITEM(vkFeatures, occlusionQueryPrecise), 44 ROADMAP_FEATURE_ITEM(vkFeatures, fragmentStoresAndAtomics), 45 ROADMAP_FEATURE_ITEM(vkFeatures, shaderStorageImageExtendedFormats), 46 ROADMAP_FEATURE_ITEM(vkFeatures, shaderUniformBufferArrayDynamicIndexing), 47 ROADMAP_FEATURE_ITEM(vkFeatures, shaderSampledImageArrayDynamicIndexing), 48 ROADMAP_FEATURE_ITEM(vkFeatures, shaderStorageBufferArrayDynamicIndexing), 49 ROADMAP_FEATURE_ITEM(vkFeatures, shaderStorageImageArrayDynamicIndexing), 50 51 // vulkan11requirements 52 ROADMAP_FEATURE_ITEM(vkVulkan11Features, multiview), 53 54 // vulkan11requirements_roadmap2022 55 ROADMAP_FEATURE_ITEM(vkVulkan11Features, samplerYcbcrConversion), 56 57 // vulkan12requirements 58 ROADMAP_FEATURE_ITEM(vkVulkan12Features, uniformBufferStandardLayout), 59 ROADMAP_FEATURE_ITEM(vkVulkan12Features, subgroupBroadcastDynamicId), 60 ROADMAP_FEATURE_ITEM(vkVulkan12Features, imagelessFramebuffer), 61 ROADMAP_FEATURE_ITEM(vkVulkan12Features, separateDepthStencilLayouts), 62 ROADMAP_FEATURE_ITEM(vkVulkan12Features, hostQueryReset), 63 ROADMAP_FEATURE_ITEM(vkVulkan12Features, timelineSemaphore), 64 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderSubgroupExtendedTypes), 65 66 // vulkan12requirements_roadmap2022 67 ROADMAP_FEATURE_ITEM(vkVulkan12Features, samplerMirrorClampToEdge), 68 ROADMAP_FEATURE_ITEM(vkVulkan12Features, descriptorIndexing), 69 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderUniformTexelBufferArrayDynamicIndexing), 70 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderStorageTexelBufferArrayDynamicIndexing), 71 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderUniformBufferArrayNonUniformIndexing), 72 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderSampledImageArrayNonUniformIndexing), 73 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderStorageBufferArrayNonUniformIndexing), 74 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderStorageImageArrayNonUniformIndexing), 75 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderUniformTexelBufferArrayNonUniformIndexing), 76 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderStorageTexelBufferArrayNonUniformIndexing), 77 ROADMAP_FEATURE_ITEM(vkVulkan12Features, descriptorBindingSampledImageUpdateAfterBind), 78 ROADMAP_FEATURE_ITEM(vkVulkan12Features, descriptorBindingStorageImageUpdateAfterBind), 79 ROADMAP_FEATURE_ITEM(vkVulkan12Features, descriptorBindingStorageBufferUpdateAfterBind), 80 ROADMAP_FEATURE_ITEM(vkVulkan12Features, descriptorBindingUniformTexelBufferUpdateAfterBind), 81 ROADMAP_FEATURE_ITEM(vkVulkan12Features, descriptorBindingStorageTexelBufferUpdateAfterBind), 82 ROADMAP_FEATURE_ITEM(vkVulkan12Features, descriptorBindingUpdateUnusedWhilePending), 83 ROADMAP_FEATURE_ITEM(vkVulkan12Features, descriptorBindingPartiallyBound), 84 ROADMAP_FEATURE_ITEM(vkVulkan12Features, descriptorBindingVariableDescriptorCount), 85 ROADMAP_FEATURE_ITEM(vkVulkan12Features, runtimeDescriptorArray), 86 ROADMAP_FEATURE_ITEM(vkVulkan12Features, scalarBlockLayout), 87 88 // vulkan13requirements 89 ROADMAP_FEATURE_ITEM(vkVulkan12Features, vulkanMemoryModel), 90 ROADMAP_FEATURE_ITEM(vkVulkan12Features, vulkanMemoryModelDeviceScope), 91 ROADMAP_FEATURE_ITEM(vkVulkan12Features, bufferDeviceAddress), 92 93 ROADMAP_FEATURE_ITEM(vkVulkan13Features, robustImageAccess), 94 ROADMAP_FEATURE_ITEM(vkVulkan13Features, shaderTerminateInvocation), 95 ROADMAP_FEATURE_ITEM(vkVulkan13Features, shaderZeroInitializeWorkgroupMemory), 96 ROADMAP_FEATURE_ITEM(vkVulkan13Features, synchronization2), 97 ROADMAP_FEATURE_ITEM(vkVulkan13Features, shaderIntegerDotProduct), 98 ROADMAP_FEATURE_ITEM(vkVulkan13Features, maintenance4), 99 ROADMAP_FEATURE_ITEM(vkVulkan13Features, pipelineCreationCacheControl), 100 ROADMAP_FEATURE_ITEM(vkVulkan13Features, subgroupSizeControl), 101 ROADMAP_FEATURE_ITEM(vkVulkan13Features, computeFullSubgroups), 102 ROADMAP_FEATURE_ITEM(vkVulkan13Features, shaderDemoteToHelperInvocation), 103 ROADMAP_FEATURE_ITEM(vkVulkan13Features, inlineUniformBlock), 104 ROADMAP_FEATURE_ITEM(vkVulkan13Features, dynamicRendering), 105 106 // vulkan13requirements_roadmap2022 107 ROADMAP_FEATURE_ITEM(vkVulkan13Features, descriptorBindingInlineUniformBlockUpdateAfterBind), 108 109 // vulkan10optionals_roadmap2022 110 ROADMAP_FEATURE_ITEM(vkFeatures, largePoints), 111 ROADMAP_FEATURE_ITEM(vkFeatures, wideLines), 112 }; 113 for (const auto &testedFeature : featureTable) 114 { 115 if (!testedFeature.fieldPtr[0]) 116 { 117 log << TestLog::Message 118 << "Feature " << testedFeature.fieldName << " is not supported" 119 << TestLog::EndMessage; 120 oneOrMoreChecksFailed = true; 121 } 122 } 123 124 const std::vector<FeatureLimitTableItem> propertyTable { 125 // vulkan10requirements_roadmap2022 126 { PN(checkAlways), PN(vkProperties.limits.maxImageDimension1D), LIM_MIN_UINT32(8192) }, 127 { PN(checkAlways), PN(vkProperties.limits.maxImageDimension2D), LIM_MIN_UINT32(8192) }, 128 { PN(checkAlways), PN(vkProperties.limits.maxImageDimensionCube), LIM_MIN_UINT32(8192) }, 129 { PN(checkAlways), PN(vkProperties.limits.maxImageArrayLayers), LIM_MIN_UINT32(2048) }, 130 { PN(checkAlways), PN(vkProperties.limits.maxUniformBufferRange), LIM_MIN_UINT32(65536) }, 131 { PN(checkAlways), PN(vkProperties.limits.bufferImageGranularity), LIM_MAX_UINT32(4096) }, 132 { PN(checkAlways), PN(vkProperties.limits.maxPerStageDescriptorSamplers), LIM_MIN_UINT32(64) }, 133 { PN(checkAlways), PN(vkProperties.limits.maxPerStageDescriptorUniformBuffers), LIM_MIN_UINT32(15) }, 134 { PN(checkAlways), PN(vkProperties.limits.maxPerStageDescriptorStorageBuffers), LIM_MIN_UINT32(30) }, 135 { PN(checkAlways), PN(vkProperties.limits.maxPerStageDescriptorSampledImages), LIM_MIN_UINT32(200) }, 136 { PN(checkAlways), PN(vkProperties.limits.maxPerStageDescriptorStorageImages), LIM_MIN_UINT32(16) }, 137 { PN(checkAlways), PN(vkProperties.limits.maxPerStageResources), LIM_MIN_UINT32(200) }, 138 { PN(checkAlways), PN(vkProperties.limits.maxDescriptorSetSamplers), LIM_MIN_UINT32(576) }, 139 { PN(checkAlways), PN(vkProperties.limits.maxDescriptorSetUniformBuffers), LIM_MIN_UINT32(90) }, 140 { PN(checkAlways), PN(vkProperties.limits.maxDescriptorSetStorageBuffers), LIM_MIN_UINT32(96) }, 141 { PN(checkAlways), PN(vkProperties.limits.maxDescriptorSetSampledImages), LIM_MIN_UINT32(1800) }, 142 { PN(checkAlways), PN(vkProperties.limits.maxDescriptorSetStorageImages), LIM_MIN_UINT32(144) }, 143 { PN(checkAlways), PN(vkProperties.limits.maxFragmentCombinedOutputResources), LIM_MIN_UINT32(16) }, 144 { PN(checkAlways), PN(vkProperties.limits.maxComputeWorkGroupInvocations), LIM_MIN_UINT32(256) }, 145 { PN(checkAlways), PN(vkProperties.limits.maxComputeWorkGroupSize[0]), LIM_MIN_UINT32(256) }, 146 { PN(checkAlways), PN(vkProperties.limits.maxComputeWorkGroupSize[1]), LIM_MIN_UINT32(256) }, 147 { PN(checkAlways), PN(vkProperties.limits.maxComputeWorkGroupSize[2]), LIM_MIN_UINT32(64) }, 148 { PN(checkAlways), PN(vkProperties.limits.subTexelPrecisionBits), LIM_MIN_UINT32(8) }, 149 { PN(checkAlways), PN(vkProperties.limits.mipmapPrecisionBits), LIM_MIN_UINT32(6) }, 150 { PN(checkAlways), PN(vkProperties.limits.maxSamplerLodBias), LIM_MIN_FLOAT(14) }, 151 { PN(checkAlways), PN(vkProperties.limits.standardSampleLocations), LIM_MIN_UINT32(true) }, 152 { PN(checkAlways), PN(vkProperties.limits.maxColorAttachments), LIM_MIN_UINT32(7) }, 153 154 // vulkan11requirements 155 { PN(checkAlways), PN(vkVulkan11Properties.maxMultiviewViewCount), LIM_MIN_UINT32(6) }, 156 { PN(checkAlways), PN(vkVulkan11Properties.maxMultiviewInstanceIndex), LIM_MIN_UINT32(134217727) }, 157 158 // vulkan11requirements_roadmap2022 159 { PN(checkAlways), PN(vkVulkan11Properties.subgroupSize), LIM_MIN_UINT32(4) }, 160 { PN(checkAlways), PN(vkVulkan11Properties.subgroupSupportedStages), LIM_MIN_UINT32(VK_SHADER_STAGE_COMPUTE_BIT|VK_SHADER_STAGE_FRAGMENT_BIT) }, 161 { PN(checkAlways), PN(vkVulkan11Properties.subgroupSupportedOperations), LIM_MIN_UINT32(VK_SUBGROUP_FEATURE_BASIC_BIT|VK_SUBGROUP_FEATURE_VOTE_BIT|VK_SUBGROUP_FEATURE_ARITHMETIC_BIT|VK_SUBGROUP_FEATURE_BALLOT_BIT|VK_SUBGROUP_FEATURE_SHUFFLE_BIT|VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT|VK_SUBGROUP_FEATURE_QUAD_BIT) }, 162 163 // vulkan12requirements 164 { PN(checkAlways), PN(vkVulkan12Properties.maxTimelineSemaphoreValueDifference), LIM_MIN_UINT32(2147483647) }, 165 166 // vulkan12requirements_roadmap2022 167 { PN(checkAlways), PN(vkVulkan12Properties.shaderSignedZeroInfNanPreserveFloat16), LIM_MIN_UINT32(true) }, 168 { PN(checkAlways), PN(vkVulkan12Properties.shaderSignedZeroInfNanPreserveFloat32), LIM_MIN_UINT32(true) }, 169 { PN(checkAlways), PN(vkVulkan12Properties.maxPerStageDescriptorUpdateAfterBindSamplers), LIM_MIN_UINT32(500000) }, 170 { PN(checkAlways), PN(vkVulkan12Properties.maxPerStageDescriptorUpdateAfterBindUniformBuffers), LIM_MIN_UINT32(12) }, 171 { PN(checkAlways), PN(vkVulkan12Properties.maxPerStageDescriptorUpdateAfterBindStorageBuffers), LIM_MIN_UINT32(500000) }, 172 { PN(checkAlways), PN(vkVulkan12Properties.maxPerStageDescriptorUpdateAfterBindSampledImages), LIM_MIN_UINT32(500000) }, 173 { PN(checkAlways), PN(vkVulkan12Properties.maxPerStageDescriptorUpdateAfterBindStorageImages), LIM_MIN_UINT32(500000) }, 174 { PN(checkAlways), PN(vkVulkan12Properties.maxPerStageDescriptorUpdateAfterBindInputAttachments), LIM_MIN_UINT32(7) }, 175 { PN(checkAlways), PN(vkVulkan12Properties.maxPerStageUpdateAfterBindResources), LIM_MIN_UINT32(500000) }, 176 { PN(checkAlways), PN(vkVulkan12Properties.maxDescriptorSetUpdateAfterBindSamplers), LIM_MIN_UINT32(500000) }, 177 { PN(checkAlways), PN(vkVulkan12Properties.maxDescriptorSetUpdateAfterBindUniformBuffers), LIM_MIN_UINT32(72) }, 178 { PN(checkAlways), PN(vkVulkan12Properties.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic), LIM_MIN_UINT32(8) }, 179 { PN(checkAlways), PN(vkVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageBuffers), LIM_MIN_UINT32(500000) }, 180 { PN(checkAlways), PN(vkVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic), LIM_MIN_UINT32(4) }, 181 { PN(checkAlways), PN(vkVulkan12Properties.maxDescriptorSetUpdateAfterBindSampledImages), LIM_MIN_UINT32(500000) }, 182 { PN(checkAlways), PN(vkVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageImages), LIM_MIN_UINT32(500000) }, 183 { PN(checkAlways), PN(vkVulkan12Properties.maxDescriptorSetUpdateAfterBindInputAttachments), LIM_MIN_UINT32(7) }, 184 185 // vulkan13requirements 186 { PN(checkAlways), PN(vkVulkan13Properties.maxBufferSize), LIM_MIN_DEVSIZE(1073741824) }, 187 { PN(checkAlways), PN(vkVulkan13Properties.maxInlineUniformBlockSize), LIM_MIN_UINT32(256) }, 188 { PN(checkAlways), PN(vkVulkan13Properties.maxPerStageDescriptorInlineUniformBlocks), LIM_MIN_UINT32(4) }, 189 { PN(checkAlways), PN(vkVulkan13Properties.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks), LIM_MIN_UINT32(4) }, 190 { PN(checkAlways), PN(vkVulkan13Properties.maxDescriptorSetInlineUniformBlocks), LIM_MIN_UINT32(4) }, 191 { PN(checkAlways), PN(vkVulkan13Properties.maxDescriptorSetUpdateAfterBindInlineUniformBlocks), LIM_MIN_UINT32(4) }, 192 { PN(checkAlways), PN(vkVulkan13Properties.maxInlineUniformTotalSize), LIM_MIN_UINT32(256) }, 193 194 // vulkan10optionals_roadmap2022 195 { PN(checkAlways), PN(vkProperties.limits.pointSizeGranularity), LIM_MAX_FLOAT(0.125) }, 196 { PN(checkAlways), PN(vkProperties.limits.lineWidthGranularity), LIM_MAX_FLOAT(0.5) }, 197 }; 198 for (const auto& testedProperty : propertyTable) 199 oneOrMoreChecksFailed |= !validateLimit(testedProperty, log); 200 201 std::vector<std::string> extensionList { 202 "VK_KHR_global_priority" 203 }; 204 const auto deviceExtensions = enumerateDeviceExtensionProperties(vki, pd, nullptr); 205 for (const auto& testedExtension : extensionList) 206 { 207 if (isExtensionStructSupported(deviceExtensions, RequiredExtension(testedExtension)) || 208 context.isInstanceFunctionalitySupported(testedExtension)) 209 continue; 210 log << TestLog::Message 211 << testedExtension << " is not supported" 212 << TestLog::EndMessage; 213 oneOrMoreChecksFailed = true; 214 } 215 216 if (oneOrMoreChecksFailed) 217 TCU_THROW(NotSupportedError, "Profile not supported"); 218 return tcu::TestStatus::pass("Profile supported"); 219} 220 221tcu::TestStatus validate_roadmap_2024(Context& context) 222{ 223 const VkBool32 checkAlways = true; 224 bool oneOrMoreChecksFailed = false; 225 auto pd = context.getPhysicalDevice(); 226 const auto &vki = context.getInstanceInterface(); 227 TestLog& log = context.getTestContext().getLog(); 228 229 VkPhysicalDeviceVulkan11Features vkVulkan11Features = initVulkanStructure(); 230 VkPhysicalDeviceVulkan12Features vkVulkan12Features = initVulkanStructure(&vkVulkan11Features); 231 232 VkPhysicalDeviceFeatures2 vkFeatures2 = initVulkanStructure(&vkVulkan12Features); 233 auto& vkFeatures = vkFeatures2.features; 234 vki.getPhysicalDeviceFeatures2(pd, &vkFeatures2); 235 236 VkPhysicalDeviceVulkan12Properties vkVulkan12Properties = initVulkanStructure(); 237 238 VkPhysicalDeviceProperties2 vkProperties2 = initVulkanStructure(&vkVulkan12Properties); 239 auto& vkProperties = vkProperties2.properties; 240 vki.getPhysicalDeviceProperties2(pd, &vkProperties2); 241 242 const std::vector<FeatureEntry> featureTable { 243 // vulkan10requirements_roadmap2024 244 ROADMAP_FEATURE_ITEM(vkFeatures, multiDrawIndirect), 245 ROADMAP_FEATURE_ITEM(vkFeatures, shaderInt16), 246 ROADMAP_FEATURE_ITEM(vkFeatures, shaderImageGatherExtended), 247 248 // vulkan11requirements_roadmap2024 249 ROADMAP_FEATURE_ITEM(vkVulkan11Features, shaderDrawParameters), 250 ROADMAP_FEATURE_ITEM(vkVulkan11Features, storageBuffer16BitAccess), 251 252 // vulkan12requirements_roadmap2024 253 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderInt8), 254 ROADMAP_FEATURE_ITEM(vkVulkan12Features, shaderFloat16), 255 ROADMAP_FEATURE_ITEM(vkVulkan12Features, storageBuffer8BitAccess), 256 }; 257 for (const auto &testedFeature : featureTable) 258 { 259 if (!testedFeature.fieldPtr[0]) 260 { 261 log << TestLog::Message 262 << "Feature " << testedFeature.fieldName << " is not supported" 263 << TestLog::EndMessage; 264 oneOrMoreChecksFailed = true; 265 } 266 } 267 268 const std::vector<FeatureLimitTableItem> propertyTable { 269 // vulkan10requirements_roadmap2024 270 { PN(checkAlways), PN(vkProperties.limits.timestampComputeAndGraphics), LIM_MIN_UINT32(true) }, 271 { PN(checkAlways), PN(vkProperties.limits.maxColorAttachments), LIM_MIN_UINT32(8) }, 272 { PN(checkAlways), PN(vkProperties.limits.maxBoundDescriptorSets), LIM_MIN_UINT32(7) }, 273 274 // vulkan12requirements_roadmap2024 275 { PN(checkAlways), PN(vkVulkan12Properties.shaderRoundingModeRTEFloat16), LIM_MIN_UINT32(true) }, 276 { PN(checkAlways), PN(vkVulkan12Properties.shaderRoundingModeRTEFloat32), LIM_MIN_UINT32(true) }, 277 }; 278 for (const auto& testedProperty : propertyTable) 279 oneOrMoreChecksFailed |= !validateLimit(testedProperty, log); 280 281 std::vector<std::string> extensionList { 282 "VK_KHR_dynamic_rendering_local_read", 283 "VK_KHR_load_store_op_none", 284 "VK_KHR_shader_quad_control", 285 "VK_KHR_shader_maximal_reconvergence", 286 "VK_KHR_shader_subgroup_uniform_control_flow", 287 "VK_KHR_shader_subgroup_rotate", 288 "VK_KHR_shader_float_controls2", 289 "VK_KHR_shader_expect_assume", 290 "VK_KHR_line_rasterization", 291 "VK_KHR_vertex_attribute_divisor", 292 "VK_KHR_index_type_uint8", 293 "VK_KHR_map_memory2", 294 "VK_KHR_maintenance5", 295 "VK_KHR_push_descriptor" 296 }; 297 const auto deviceExtensions = enumerateDeviceExtensionProperties(vki, pd, nullptr); 298 for (const auto& testedExtension : extensionList) 299 { 300 if (isExtensionStructSupported(deviceExtensions, RequiredExtension(testedExtension)) || 301 context.isInstanceFunctionalitySupported(testedExtension)) 302 continue; 303 log << TestLog::Message 304 << testedExtension << " is not supported" 305 << TestLog::EndMessage; 306 oneOrMoreChecksFailed = true; 307 } 308 309 if (oneOrMoreChecksFailed) 310 TCU_THROW(NotSupportedError, "Profile not supported"); 311 return tcu::TestStatus::pass("Profile supported"); 312} 313 314static const std::vector<ProfileEntry> profileEntries { 315 { "roadmap_2022", checkApiVersionSupport<1, 3>, validate_roadmap_2022 }, 316 { "roadmap_2024", checkApiVersionSupport<1, 3>, validate_roadmap_2024 }, 317}; 318