// GENERATED FILE - DO NOT EDIT.
// Generated by gen_features.py using data from *_features.json.
//
// Copyright 2022 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// angle_features_autogen.cpp: List of ANGLE features to help enable/disable them in tests.

#include "angle_features_autogen.h"

#include "common/PackedEnums.h"

namespace angle
{
namespace
{
constexpr PackedEnumMap<Feature, const char *> kFeatureNames = {{
    {Feature::AddAndTrueToLoopCondition, "addAndTrueToLoopCondition"},
    {Feature::AddFramebufferFetchBarrierOnUseMidRenderPass, "addFramebufferFetchBarrierOnUseMidRenderPass"},
    {Feature::AddMockTextureNoRenderTarget, "addMockTextureNoRenderTarget"},
    {Feature::AdjustClearColorPrecision, "adjustClearColorPrecision"},
    {Feature::AdjustSrcDstRegionForBlitFramebuffer, "adjustSrcDstRegionForBlitFramebuffer"},
    {Feature::AllocateNonZeroMemory, "allocateNonZeroMemory"},
    {Feature::AllocateNonZeroTextures, "allocateNonZeroTextures"},
    {Feature::AllowAstcFormats, "allowAstcFormats"},
    {Feature::AllowBufferReadWrite, "allowBufferReadWrite"},
    {Feature::AllowClearForRobustResourceInit, "allowClearForRobustResourceInit"},
    {Feature::AllowCompressedFormats, "allowCompressedFormats"},
    {Feature::AllowES3OnFL100, "allowES3OnFL100"},
    {Feature::AllowETCFormats, "allowETCFormats"},
    {Feature::AllowExtensionDisableAfterNonPpTokens, "allowExtensionDisableAfterNonPpTokens"},
    {Feature::AllowGenerateMipmapWithCompute, "allowGenerateMipmapWithCompute"},
    {Feature::AllowGenMultipleMipsPerPass, "allowGenMultipleMipsPerPass"},
    {Feature::AllowHostImageCopyAfterInitialUpload, "allowHostImageCopyAfterInitialUpload"},
    {Feature::AllowHostImageCopyDespiteNonIdenticalLayout, "allowHostImageCopyDespiteNonIdenticalLayout"},
    {Feature::AllowInlineConstVertexData, "allowInlineConstVertexData"},
    {Feature::AllowMultisampledRenderToTextureEmulation, "allowMultisampledRenderToTextureEmulation"},
    {Feature::AllowMultisampleStoreAndResolve, "allowMultisampleStoreAndResolve"},
    {Feature::AllowPipelineStatisticsForPrimitivesGeneratedQuery, "allowPipelineStatisticsForPrimitivesGeneratedQuery"},
    {Feature::AllowRenderpassWithoutAttachment, "allowRenderpassWithoutAttachment"},
    {Feature::AllowRuntimeSamplerCompareMode, "allowRuntimeSamplerCompareMode"},
    {Feature::AllowSamplerCompareGradient, "allowSamplerCompareGradient"},
    {Feature::AllowSeparateDepthStencilBuffers, "allowSeparateDepthStencilBuffers"},
    {Feature::AllowTranslateUniformBlockToStructuredBuffer, "allowTranslateUniformBlockToStructuredBuffer"},
    {Feature::AlwaysCallUseProgramAfterLink, "alwaysCallUseProgramAfterLink"},
    {Feature::AlwaysEnableEmulatedMultidrawExtensions, "alwaysEnableEmulatedMultidrawExtensions"},
    {Feature::AlwaysPreferStagedTextureUploads, "alwaysPreferStagedTextureUploads"},
    {Feature::AlwaysRunLinkSubJobsThreaded, "alwaysRunLinkSubJobsThreaded"},
    {Feature::AlwaysUnbindFramebufferTexture2D, "alwaysUnbindFramebufferTexture2D"},
    {Feature::AlwaysUseManagedStorageModeForBuffers, "alwaysUseManagedStorageModeForBuffers"},
    {Feature::AlwaysUseSharedStorageModeForBuffers, "alwaysUseSharedStorageModeForBuffers"},
    {Feature::AlwaysUseStagedBufferUpdates, "alwaysUseStagedBufferUpdates"},
    {Feature::AppendAliasedMemoryDecorations, "appendAliasedMemoryDecorations"},
    {Feature::AsyncCommandBufferReset, "asyncCommandBufferReset"},
    {Feature::AsyncGarbageCleanup, "asyncGarbageCleanup"},
    {Feature::Avoid1BitAlphaTextureFormats, "avoid1BitAlphaTextureFormats"},
    {Feature::AvoidBindFragDataLocation, "avoidBindFragDataLocation"},
    {Feature::AvoidComplexExpressionsInStructConstructor, "avoidComplexExpressionsInStructConstructor"},
    {Feature::AvoidImageGhostOutsideRenderPass, "avoidImageGhostOutsideRenderPass"},
    {Feature::AvoidInvisibleWindowSwapchainRecreate, "avoidInvisibleWindowSwapchainRecreate"},
    {Feature::AvoidOpSelectWithMismatchingRelaxedPrecision, "avoidOpSelectWithMismatchingRelaxedPrecision"},
    {Feature::AvoidStencilTextureSwizzle, "avoidStencilTextureSwizzle"},
    {Feature::AvoidWaitAny, "avoidWaitAny"},
    {Feature::BgraTexImageFormatsBroken, "bgraTexImageFormatsBroken"},
    {Feature::BindCompleteFramebufferForTimerQueries, "bindCompleteFramebufferForTimerQueries"},
    {Feature::BindTransformFeedbackBufferBeforeBindBufferRange, "bindTransformFeedbackBufferBeforeBindBufferRange"},
    {Feature::BottomLeftOriginPresentRegionRectangles, "bottomLeftOriginPresentRegionRectangles"},
    {Feature::BresenhamLineRasterization, "bresenhamLineRasterization"},
    {Feature::CacheCompiledShader, "cacheCompiledShader"},
    {Feature::CallClearTwice, "callClearTwice"},
    {Feature::ClampArrayAccess, "clampArrayAccess"},
    {Feature::ClampFragDepth, "clampFragDepth"},
    {Feature::ClampMscRate, "clampMscRate"},
    {Feature::ClampPointSize, "clampPointSize"},
    {Feature::ClBestUniformFitWGS, "clBestUniformFitWGS"},
    {Feature::ClDumpVkSpirv, "clDumpVkSpirv"},
    {Feature::ClearsWithGapsNeedFlush, "clearsWithGapsNeedFlush"},
    {Feature::ClipCullDistanceBrokenWithPassthroughShaders, "clipCullDistanceBrokenWithPassthroughShaders"},
    {Feature::ClipSrcRegionForBlitFramebuffer, "clipSrcRegionForBlitFramebuffer"},
    {Feature::ClSerializedExecution, "clSerializedExecution"},
    {Feature::CompileJobIsThreadSafe, "compileJobIsThreadSafe"},
    {Feature::CompressProgramBinaryBlob, "compressProgramBinaryBlob"},
    {Feature::ConvertLowpAndMediumpFloatUniformsTo16Bits, "convertLowpAndMediumpFloatUniformsTo16Bits"},
    {Feature::CopyIOSurfaceToNonIOSurfaceForReadOptimization, "copyIOSurfaceToNonIOSurfaceForReadOptimization"},
    {Feature::CopyTextureToBufferForReadOptimization, "copyTextureToBufferForReadOptimization"},
    {Feature::CorruptProgramBinaryForTesting, "corruptProgramBinaryForTesting"},
    {Feature::DebugClDumpCommandStream, "debugClDumpCommandStream"},
    {Feature::DecodeEncodeSRGBForGenerateMipmap, "decodeEncodeSRGBForGenerateMipmap"},
    {Feature::DepthStencilBlitExtraCopy, "depthStencilBlitExtraCopy"},
    {Feature::DescriptorSetCache, "descriptorSetCache"},
    {Feature::DestroyOldSwapchainInSharedPresentMode, "destroyOldSwapchainInSharedPresentMode"},
    {Feature::DisableAnisotropicFiltering, "disableAnisotropicFiltering"},
    {Feature::DisableB5G6R5Support, "disableB5G6R5Support"},
    {Feature::DisableBaseInstanceVertex, "disableBaseInstanceVertex"},
    {Feature::DisableBlendEquationAdvanced, "disableBlendEquationAdvanced"},
    {Feature::DisableClearTexImageForRobustInit, "disableClearTexImageForRobustInit"},
    {Feature::DisableClearTexture, "disableClearTexture"},
    {Feature::DisableClipControl, "disableClipControl"},
    {Feature::DisableDepthStencilResolveThroughAttachment, "disableDepthStencilResolveThroughAttachment"},
    {Feature::DisableDrawBuffersIndexed, "disableDrawBuffersIndexed"},
    {Feature::DisableGPUSwitchingSupport, "disableGPUSwitchingSupport"},
    {Feature::DisableMetalOnNvidia, "disableMetalOnNvidia"},
    {Feature::DisableMSAASampleCount1, "disableMSAASampleCount1"},
    {Feature::DisableMultisampledRenderToTexture, "disableMultisampledRenderToTexture"},
    {Feature::DisableNativeParallelCompile, "disableNativeParallelCompile"},
    {Feature::DisablePassthroughShaders, "disablePassthroughShaders"},
    {Feature::DisablePipelineCacheLoadForTesting, "disablePipelineCacheLoadForTesting"},
    {Feature::DisableProgramBinary, "disableProgramBinary"},
    {Feature::DisableProgramCaching, "disableProgramCaching"},
    {Feature::DisableProgramCachingForTransformFeedback, "disableProgramCachingForTransformFeedback"},
    {Feature::DisableProgrammableBlending, "disableProgrammableBlending"},
    {Feature::DisableRasterizerOrderViews, "disableRasterizerOrderViews"},
    {Feature::DisableRasterOrderGroups, "disableRasterOrderGroups"},
    {Feature::DisableRenderSnorm, "disableRenderSnorm"},
    {Feature::DisableRWTextureTier2Support, "disableRWTextureTier2Support"},
    {Feature::DisableSemaphoreFd, "disableSemaphoreFd"},
    {Feature::DisableSeparateShaderObjects, "disableSeparateShaderObjects"},
    {Feature::DisableStagedInitializationOfPackedTextureFormats, "disableStagedInitializationOfPackedTextureFormats"},
    {Feature::DisableSubmitCommandsOnSyncStatusCheckForTesting, "disableSubmitCommandsOnSyncStatusCheckForTesting"},
    {Feature::DisableSyncControlSupport, "disableSyncControlSupport"},
    {Feature::DisableTextureClampToBorder, "disableTextureClampToBorder"},
    {Feature::DisableTextureMirrorClampToEdge, "disableTextureMirrorClampToEdge"},
    {Feature::DisableTiledRendering, "disableTiledRendering"},
    {Feature::DisableTimestampQueries, "disableTimestampQueries"},
    {Feature::DisallowMixedDepthStencilLoadOpNoneAndLoad, "disallowMixedDepthStencilLoadOpNoneAndLoad"},
    {Feature::DoesSRGBClearsOnLinearFramebufferAttachments, "doesSRGBClearsOnLinearFramebufferAttachments"},
    {Feature::DontInitializeUninitializedLocals, "dontInitializeUninitializedLocals"},
    {Feature::DontInvalidateIncompleteFBOs, "dontInvalidateIncompleteFBOs"},
    {Feature::DontUseLoopsToInitializeVariables, "dontUseLoopsToInitializeVariables"},
    {Feature::DoubleDepthBiasConstantFactor, "doubleDepthBiasConstantFactor"},
    {Feature::DropDepthStencilClearOnInvalidate, "dropDepthStencilClearOnInvalidate"},
    {Feature::DumpShaderSource, "dumpShaderSource"},
    {Feature::DumpTranslatedShaders, "dumpTranslatedShaders"},
    {Feature::EglColorspaceAttributePassthrough, "eglColorspaceAttributePassthrough"},
    {Feature::EmitMaxGlsl400ForTesting, "emitMaxGlsl400ForTesting"},
    {Feature::EmulateAbsIntFunction, "emulateAbsIntFunction"},
    {Feature::EmulateAdvancedBlendEquations, "emulateAdvancedBlendEquations"},
    {Feature::EmulateAlphaToCoverage, "emulateAlphaToCoverage"},
    {Feature::EmulateAtan2Float, "emulateAtan2Float"},
    {Feature::EmulateClipDistanceState, "emulateClipDistanceState"},
    {Feature::EmulateClipOrigin, "emulateClipOrigin"},
    {Feature::EmulateCopyTexImage2D, "emulateCopyTexImage2D"},
    {Feature::EmulateCopyTexImage2DFromRenderbuffers, "emulateCopyTexImage2DFromRenderbuffers"},
    {Feature::EmulateDithering, "emulateDithering"},
    {Feature::EmulateDontCareLoadWithRandomClear, "emulateDontCareLoadWithRandomClear"},
    {Feature::EmulatedPrerotation180, "emulatedPrerotation180"},
    {Feature::EmulatedPrerotation270, "emulatedPrerotation270"},
    {Feature::EmulatedPrerotation90, "emulatedPrerotation90"},
    {Feature::EmulateImmutableCompressedTexture3D, "emulateImmutableCompressedTexture3D"},
    {Feature::EmulateIsnanFloat, "emulateIsnanFloat"},
    {Feature::EmulateMaxVertexAttribStride, "emulateMaxVertexAttribStride"},
    {Feature::EmulatePackSkipRowsAndPackSkipPixels, "emulatePackSkipRowsAndPackSkipPixels"},
    {Feature::EmulatePixelLocalStorage, "emulatePixelLocalStorage"},
    {Feature::EmulatePrimitiveRestartFixedIndex, "emulatePrimitiveRestartFixedIndex"},
    {Feature::EmulateR32fImageAtomicExchange, "emulateR32fImageAtomicExchange"},
    {Feature::EmulateRGB10, "emulateRGB10"},
    {Feature::EmulateTinyStencilTextures, "emulateTinyStencilTextures"},
    {Feature::EmulateTransformFeedback, "emulateTransformFeedback"},
    {Feature::EnableAdditionalBlendFactorsForDithering, "enableAdditionalBlendFactorsForDithering"},
    {Feature::EnableAsyncPipelineCacheCompression, "enableAsyncPipelineCacheCompression"},
    {Feature::EnableCaptureLimits, "enableCaptureLimits"},
    {Feature::EnableCreateContextBackwardsCompatible, "enableCreateContextBackwardsCompatible"},
    {Feature::EnableExtraSubmitFence, "enableExtraSubmitFence"},
    {Feature::EnableInMemoryMtlLibraryCache, "enableInMemoryMtlLibraryCache"},
    {Feature::EnableMergeClientAttribBuffer, "enableMergeClientAttribBuffer"},
    {Feature::EnableMultisampledRenderToTexture, "enableMultisampledRenderToTexture"},
    {Feature::EnableMultisampledRenderToTextureOnNonTilers, "enableMultisampledRenderToTextureOnNonTilers"},
    {Feature::EnableParallelCompileAndLink, "enableParallelCompileAndLink"},
    {Feature::EnableParallelMtlLibraryCompilation, "enableParallelMtlLibraryCompilation"},
    {Feature::EnablePipelineCacheDataCompression, "enablePipelineCacheDataCompression"},
    {Feature::EnablePortabilityEnumeration, "enablePortabilityEnumeration"},
    {Feature::EnablePrecisionQualifiers, "enablePrecisionQualifiers"},
    {Feature::EnableProgramBinaryForCapture, "enableProgramBinaryForCapture"},
    {Feature::EnableShaderSubstitution, "enableShaderSubstitution"},
    {Feature::EnableTimestampQueries, "enableTimestampQueries"},
    {Feature::EnableTranslatedShaderSubstitution, "enableTranslatedShaderSubstitution"},
    {Feature::EnsureLoopForwardProgress, "ensureLoopForwardProgress"},
    {Feature::EnsureNonEmptyBufferIsBoundForDraw, "ensureNonEmptyBufferIsBoundForDraw"},
    {Feature::ExpandFragmentOutputsToVec4, "expandFragmentOutputsToVec4"},
    {Feature::ExpandIntegerPowExpressions, "expandIntegerPowExpressions"},
    {Feature::ExplicitFragmentLocations, "explicitFragmentLocations"},
    {Feature::ExplicitlyEnablePerSampleShading, "explicitlyEnablePerSampleShading"},
    {Feature::ExposeES32ForTesting, "exposeES32ForTesting"},
    {Feature::ExposeNonConformantExtensionsAndVersions, "exposeNonConformantExtensionsAndVersions"},
    {Feature::ExternallySynchronizePipelineCacheAccess, "externallySynchronizePipelineCacheAccess"},
    {Feature::FinishDoesNotCauseQueriesToBeAvailable, "finishDoesNotCauseQueriesToBeAvailable"},
    {Feature::FlushAfterEndingTransformFeedback, "flushAfterEndingTransformFeedback"},
    {Feature::FlushAfterStreamVertexData, "flushAfterStreamVertexData"},
    {Feature::FlushBeforeDeleteTextureIfCopiedTo, "flushBeforeDeleteTextureIfCopiedTo"},
    {Feature::FlushOnFramebufferChange, "flushOnFramebufferChange"},
    {Feature::FlushQueriesBeforeDeletingOrUnbindingFbo, "flushQueriesBeforeDeletingOrUnbindingFbo"},
    {Feature::ForceAtomicValueResolution, "forceAtomicValueResolution"},
    {Feature::ForceBufferGPUStorage, "forceBufferGPUStorage"},
    {Feature::ForceContinuousRefreshOnSharedPresent, "forceContinuousRefreshOnSharedPresent"},
    {Feature::ForceD16TexFilter, "forceD16TexFilter"},
    {Feature::ForceD24S8AsUnsupported, "forceD24S8AsUnsupported"},
    {Feature::ForceDebugContexts, "forceDebugContexts"},
    {Feature::ForceDepthAttachmentInitOnClear, "forceDepthAttachmentInitOnClear"},
    {Feature::ForceDisableFullScreenExclusive, "forceDisableFullScreenExclusive"},
    {Feature::ForceFallbackFormat, "forceFallbackFormat"},
    {Feature::ForceFlushAfterDrawcallUsingShadowmap, "forceFlushAfterDrawcallUsingShadowmap"},
    {Feature::ForceGlErrorChecking, "forceGlErrorChecking"},
    {Feature::ForceHostImageCopyForLuma, "forceHostImageCopyForLuma"},
    {Feature::ForceInitShaderVariables, "forceInitShaderVariables"},
    {Feature::ForceLumaWorkaroundForSameTextureCopyTexImage2D, "forceLumaWorkaroundForSameTextureCopyTexImage2D"},
    {Feature::ForceMaxCombinedShaderOutputResources, "forceMaxCombinedShaderOutputResources"},
    {Feature::ForceMaxUniformBufferSize16KB, "forceMaxUniformBufferSize16KB"},
    {Feature::ForceMinimumMaxVertexAttributes, "forceMinimumMaxVertexAttributes"},
    {Feature::ForceNearestFiltering, "forceNearestFiltering"},
    {Feature::ForceNearestMipFiltering, "forceNearestMipFiltering"},
    {Feature::ForceNonCSBaseMipmapGeneration, "forceNonCSBaseMipmapGeneration"},
    {Feature::ForcePassthroughShaders, "forcePassthroughShaders"},
    {Feature::ForceRenderableFallbackFormat, "forceRenderableFallbackFormat"},
    {Feature::ForceRobustResourceInit, "forceRobustResourceInit"},
    {Feature::ForceSampleUsageForAhbBackedImages, "forceSampleUsageForAhbBackedImages"},
    {Feature::ForceSizePointerForBoundVertexBuffers, "forceSizePointerForBoundVertexBuffers"},
    {Feature::ForceSubmitExceptionsAtFBOBoundary, "forceSubmitExceptionsAtFBOBoundary"},
    {Feature::ForceSubmitImmutableTextureUpdates, "forceSubmitImmutableTextureUpdates"},
    {Feature::ForceTextureLodOffset1, "forceTextureLodOffset1"},
    {Feature::ForceTextureLodOffset2, "forceTextureLodOffset2"},
    {Feature::ForceTextureLodOffset3, "forceTextureLodOffset3"},
    {Feature::ForceTextureLodOffset4, "forceTextureLodOffset4"},
    {Feature::ForceWaitForSubmissionToCompleteForQueryResult, "forceWaitForSubmissionToCompleteForQueryResult"},
    {Feature::GenerateFragmentShadingRateAttchementWithCpu, "generateFragmentShadingRateAttchementWithCpu"},
    {Feature::GenerateShareableShaders, "generateShareableShaders"},
    {Feature::GetDimensionsIgnoresBaseLevel, "getDimensionsIgnoresBaseLevel"},
    {Feature::HasBaseVertexInstancedDraw, "hasBaseVertexInstancedDraw"},
    {Feature::HasBlobCacheThatEvictsOldItemsFirst, "hasBlobCacheThatEvictsOldItemsFirst"},
    {Feature::HasCheapRenderPass, "hasCheapRenderPass"},
    {Feature::HasDepthAutoResolve, "hasDepthAutoResolve"},
    {Feature::HasEvents, "hasEvents"},
    {Feature::HasExplicitMemBarrier, "hasExplicitMemBarrier"},
    {Feature::HasNonUniformDispatch, "hasNonUniformDispatch"},
    {Feature::HasShaderStencilOutput, "hasShaderStencilOutput"},
    {Feature::HasStencilAutoResolve, "hasStencilAutoResolve"},
    {Feature::HasTextureSwizzle, "hasTextureSwizzle"},
    {Feature::InitFragmentOutputVariables, "initFragmentOutputVariables"},
    {Feature::InitializeColorAttachmentWithWhite, "initializeColorAttachmentWithWhite"},
    {Feature::InitializeCurrentVertexAttributes, "initializeCurrentVertexAttributes"},
    {Feature::InjectAsmStatementIntoLoopBodies, "injectAsmStatementIntoLoopBodies"},
    {Feature::IsVertexSyncDeferred, "isVertexSyncDeferred"},
    {Feature::KeepBufferShadowCopy, "keepBufferShadowCopy"},
    {Feature::LimitMax3dArrayTextureSizeTo1024, "limitMax3dArrayTextureSizeTo1024"},
    {Feature::LimitMaxBufferBytesTo1MB, "limitMaxBufferBytesTo1MB"},
    {Feature::LimitMaxBufferSizeTo1gb, "limitMaxBufferSizeTo1gb"},
    {Feature::LimitMaxColorTargetBitsForTesting, "limitMaxColorTargetBitsForTesting"},
    {Feature::LimitMaxDrawBuffersForTesting, "limitMaxDrawBuffersForTesting"},
    {Feature::LimitMaxMSAASamplesTo4, "limitMaxMSAASamplesTo4"},
    {Feature::LimitMaxStorageBufferSize, "limitMaxStorageBufferSize"},
    {Feature::LimitMaxTextureBytesTo1MB, "limitMaxTextureBytesTo1MB"},
    {Feature::LimitOutputVaryingsTo256AtCompileTime, "limitOutputVaryingsTo256AtCompileTime"},
    {Feature::LimitSampleCountTo2, "limitSampleCountTo2"},
    {Feature::LimitWebglMaxTextureSizeTo4096, "limitWebglMaxTextureSizeTo4096"},
    {Feature::LimitWebglMaxTextureSizeTo8192, "limitWebglMaxTextureSizeTo8192"},
    {Feature::LinkJobIsThreadSafe, "linkJobIsThreadSafe"},
    {Feature::LogMemoryReportCallbacks, "logMemoryReportCallbacks"},
    {Feature::LogMemoryReportStats, "logMemoryReportStats"},
    {Feature::LoseContextOnOutOfMemory, "loseContextOnOutOfMemory"},
    {Feature::MapUnspecifiedColorSpaceToPassThrough, "mapUnspecifiedColorSpaceToPassThrough"},
    {Feature::MergeProgramPipelineCachesToGlobalCache, "mergeProgramPipelineCachesToGlobalCache"},
    {Feature::MrtPerfWorkaround, "mrtPerfWorkaround"},
    {Feature::MultisampleColorFormatShaderReadWorkaround, "multisampleColorFormatShaderReadWorkaround"},
    {Feature::MultiviewViaViewportArray, "multiviewViaViewportArray"},
    {Feature::MutableMipmapTextureUpload, "mutableMipmapTextureUpload"},
    {Feature::NoperspectiveInterpolationBrokenWithPassthroughShaders, "noperspectiveInterpolationBrokenWithPassthroughShaders"},
    {Feature::OverrideSurfaceFormatRGB8ToRGBA8, "overrideSurfaceFormatRGB8ToRGBA8"},
    {Feature::PackLargeRowLengthSeparatelyPackBuffer, "packLargeRowLengthSeparatelyPackBuffer"},
    {Feature::PackLastRowSeparatelyForPaddingInclusion, "packLastRowSeparatelyForPaddingInclusion"},
    {Feature::PackOverlappingRowsSeparatelyPackBuffer, "packOverlappingRowsSeparatelyPackBuffer"},
    {Feature::PadBuffersToMaxVertexAttribStride, "padBuffersToMaxVertexAttribStride"},
    {Feature::PassHighpToPackUnormSnormBuiltins, "passHighpToPackUnormSnormBuiltins"},
    {Feature::PermanentlySwitchToFramebufferFetchMode, "permanentlySwitchToFramebufferFetchMode"},
    {Feature::PersistentlyMappedBuffers, "persistentlyMappedBuffers"},
    {Feature::PreAddTexelFetchOffsets, "preAddTexelFetchOffsets"},
    {Feature::PreemptivelyStartProvokingVertexCommandBuffer, "preemptivelyStartProvokingVertexCommandBuffer"},
    {Feature::PreferAggregateBarrierCalls, "preferAggregateBarrierCalls"},
    {Feature::PreferBGR565ToRGB565, "preferBGR565ToRGB565"},
    {Feature::PreferCachedNoncoherentForDynamicStreamBufferUsage, "preferCachedNoncoherentForDynamicStreamBufferUsage"},
    {Feature::PreferCpuForBuffersubdata, "preferCpuForBuffersubdata"},
    {Feature::PreferCPUForBufferSubData, "preferCPUForBufferSubData"},
    {Feature::PreferDeviceLocalMemoryHostVisible, "preferDeviceLocalMemoryHostVisible"},
    {Feature::PreferDoubleBufferSwapchainOnFifoMode, "preferDoubleBufferSwapchainOnFifoMode"},
    {Feature::PreferDrawClearOverVkCmdClearAttachments, "preferDrawClearOverVkCmdClearAttachments"},
    {Feature::PreferDynamicRendering, "preferDynamicRendering"},
    {Feature::PreferGlobalPipelineCache, "preferGlobalPipelineCache"},
    {Feature::PreferGPUForCopyBufferSubData, "preferGPUForCopyBufferSubData"},
    {Feature::PreferHostCachedForNonStaticBufferUsage, "preferHostCachedForNonStaticBufferUsage"},
    {Feature::PreferLinearFilterForYUV, "preferLinearFilterForYUV"},
    {Feature::PreferMonolithicPipelinesOverLibraries, "preferMonolithicPipelinesOverLibraries"},
    {Feature::PreferMSRTSSFlagByDefault, "preferMSRTSSFlagByDefault"},
    {Feature::PreferSkippingInvalidateForEmulatedFormats, "preferSkippingInvalidateForEmulatedFormats"},
    {Feature::PreferSubmitAtFBOBoundary, "preferSubmitAtFBOBoundary"},
    {Feature::PreferSubmitOnAnySamplesPassedQueryEnd, "preferSubmitOnAnySamplesPassedQueryEnd"},
    {Feature::PreTransformTextureCubeGradDerivatives, "preTransformTextureCubeGradDerivatives"},
    {Feature::PromotePackedFormatsTo8BitPerChannel, "promotePackedFormatsTo8BitPerChannel"},
    {Feature::ProvokingVertex, "provokingVertex"},
    {Feature::QueryCounterBitsGeneratesErrors, "queryCounterBitsGeneratesErrors"},
    {Feature::ReadPixelsUsingImplementationColorReadFormatForNorm16, "readPixelsUsingImplementationColorReadFormatForNorm16"},
    {Feature::ReapplyUBOBindingsAfterUsingBinaryProgram, "reapplyUBOBindingsAfterUsingBinaryProgram"},
    {Feature::ReattachFboDepthStencilOnReallocation, "reattachFboDepthStencilOnReallocation"},
    {Feature::ReattachTextureToFboAfterLayerIncrease, "reattachTextureToFboAfterLayerIncrease"},
    {Feature::RecreateImmutableTextureOnBaseLevelIncrease, "recreateImmutableTextureOnBaseLevelIncrease"},
    {Feature::RecreateMipmapLevelsBeforeGenerate, "recreateMipmapLevelsBeforeGenerate"},
    {Feature::RecycleVkEvent, "recycleVkEvent"},
    {Feature::RemoveDynamicIndexingOfSwizzledVector, "removeDynamicIndexingOfSwizzledVector"},
    {Feature::RemoveInvariantAndCentroidForESSL3, "removeInvariantAndCentroidForESSL3"},
    {Feature::RequireGpuFamily2, "requireGpuFamily2"},
    {Feature::RescopeGlobalVariables, "rescopeGlobalVariables"},
    {Feature::ResetBaseLevelForASTCSubImage, "resetBaseLevelForASTCSubImage"},
    {Feature::ResetSampleCoverageOnFBOChange, "resetSampleCoverageOnFBOChange"},
    {Feature::ResetTexImage2DBaseLevel, "resetTexImage2DBaseLevel"},
    {Feature::ResyncDepthRangeOnClipControl, "resyncDepthRangeOnClipControl"},
    {Feature::RetainSPIRVDebugInfo, "retainSPIRVDebugInfo"},
    {Feature::RewriteRepeatedAssignToSwizzled, "rewriteRepeatedAssignToSwizzled"},
    {Feature::RewriteRowMajorMatrices, "rewriteRowMajorMatrices"},
    {Feature::RewriteUnaryMinusOperator, "rewriteUnaryMinusOperator"},
    {Feature::RGBA4IsNotSupportedForColorRendering, "RGBA4IsNotSupportedForColorRendering"},
    {Feature::RGBDXT1TexturesSampleZeroAlpha, "RGBDXT1TexturesSampleZeroAlpha"},
    {Feature::RoundOutputAfterDithering, "roundOutputAfterDithering"},
    {Feature::SanitizeAMDGPURendererString, "sanitizeAMDGPURendererString"},
    {Feature::ScalarizeVecAndMatConstructorArgs, "scalarizeVecAndMatConstructorArgs"},
    {Feature::SelectViewInGeometryShader, "selectViewInGeometryShader"},
    {Feature::SetDataFasterThanImageUpload, "setDataFasterThanImageUpload"},
    {Feature::SetNeedInitOnInvalidation, "setNeedInitOnInvalidation"},
    {Feature::SetPrimitiveRestartFixedIndexForDrawArrays, "setPrimitiveRestartFixedIndexForDrawArrays"},
    {Feature::SetZeroLevelBeforeGenerateMipmap, "setZeroLevelBeforeGenerateMipmap"},
    {Feature::ShiftInstancedArrayDataWithOffset, "shiftInstancedArrayDataWithOffset"},
    {Feature::SimulateTileMemoryForTesting, "simulateTileMemoryForTesting"},
    {Feature::SingleThreadedTextureDecompression, "singleThreadedTextureDecompression"},
    {Feature::SkipPipelineCacheSerialization, "skipPipelineCacheSerialization"},
    {Feature::SkipVSConstantRegisterZero, "skipVSConstantRegisterZero"},
    {Feature::SlowDownMonolithicPipelineCreationForTesting, "slowDownMonolithicPipelineCreationForTesting"},
    {Feature::SplitLevel0PboFullSubImage2D, "splitLevel0PboFullSubImage2D"},
    {Feature::SrgbBlendingBroken, "srgbBlendingBroken"},
    {Feature::SupportFragmentShadingRateExtExtensions, "supportFragmentShadingRateExtExtensions"},
    {Feature::Supports16BitInputOutput, "supports16BitInputOutput"},
    {Feature::Supports16BitPushConstant, "supports16BitPushConstant"},
    {Feature::Supports16BitStorageBuffer, "supports16BitStorageBuffer"},
    {Feature::Supports16BitUniformAndStorageBuffer, "supports16BitUniformAndStorageBuffer"},
    {Feature::Supports8BitPushConstant, "supports8BitPushConstant"},
    {Feature::Supports8BitStorageBuffer, "supports8BitStorageBuffer"},
    {Feature::Supports8BitUniformAndStorageBuffer, "supports8BitUniformAndStorageBuffer"},
    {Feature::SupportsAmdShaderCoreProperties, "supportsAmdShaderCoreProperties"},
    {Feature::SupportsAndroidHardwareBuffer, "supportsAndroidHardwareBuffer"},
    {Feature::SupportsAndroidNativeFenceSync, "supportsAndroidNativeFenceSync"},
    {Feature::SupportsAngleRgbxInternalFormat, "supportsAngleRgbxInternalFormat"},
    {Feature::SupportsAppleClipDistance, "supportsAppleClipDistance"},
    {Feature::SupportsAstc3d, "supportsAstc3d"},
    {Feature::SupportsAstcDecodeMode, "supportsAstcDecodeMode"},
    {Feature::SupportsAstcDecodeModeRgb9e5, "supportsAstcDecodeModeRgb9e5"},
    {Feature::SupportsAstcHdr3dTextures, "supportsAstcHdr3dTextures"},
    {Feature::SupportsAstcSliced3d, "supportsAstcSliced3d"},
    {Feature::SupportsBindMemory2, "supportsBindMemory2"},
    {Feature::SupportsBindVertexBuffers2, "supportsBindVertexBuffers2"},
    {Feature::SupportsBlendOperationAdvanced, "supportsBlendOperationAdvanced"},
    {Feature::SupportsBlendOperationAdvancedCoherent, "supportsBlendOperationAdvancedCoherent"},
    {Feature::SupportsBufferDeviceAddress, "supportsBufferDeviceAddress"},
    {Feature::SupportsClipCullDistanceInGSAndTS, "supportsClipCullDistanceInGSAndTS"},
    {Feature::SupportsClKhrSubgroups, "supportsClKhrSubgroups"},
    {Feature::SupportsColorWriteEnable, "supportsColorWriteEnable"},
    {Feature::SupportsComputeTranscodeEtcToBc, "supportsComputeTranscodeEtcToBc"},
    {Feature::SupportsCustomBorderColor, "supportsCustomBorderColor"},
    {Feature::SupportsDenormFtzFp16, "supportsDenormFtzFp16"},
    {Feature::SupportsDenormFtzFp32, "supportsDenormFtzFp32"},
    {Feature::SupportsDenormFtzFp64, "supportsDenormFtzFp64"},
    {Feature::SupportsDenormPreserveFp16, "supportsDenormPreserveFp16"},
    {Feature::SupportsDenormPreserveFp32, "supportsDenormPreserveFp32"},
    {Feature::SupportsDenormPreserveFp64, "supportsDenormPreserveFp64"},
    {Feature::SupportsDepthClampZeroOne, "supportsDepthClampZeroOne"},
    {Feature::SupportsDepthClipControl, "supportsDepthClipControl"},
    {Feature::SupportsDepthStencilIndependentResolveNone, "supportsDepthStencilIndependentResolveNone"},
    {Feature::SupportsDepthStencilResolve, "supportsDepthStencilResolve"},
    {Feature::SupportsDeviceFault, "supportsDeviceFault"},
    {Feature::SupportsDynamicRendering, "supportsDynamicRendering"},
    {Feature::SupportsDynamicRenderingLocalRead, "supportsDynamicRenderingLocalRead"},
    {Feature::SupportsExtendedDynamicState, "supportsExtendedDynamicState"},
    {Feature::SupportsExtendedDynamicState2, "supportsExtendedDynamicState2"},
    {Feature::SupportsExternalFenceCapabilities, "supportsExternalFenceCapabilities"},
    {Feature::SupportsExternalFenceFd, "supportsExternalFenceFd"},
    {Feature::SupportsExternalFormatResolve, "supportsExternalFormatResolve"},
    {Feature::SupportsExternalMemoryDmaBuf, "supportsExternalMemoryDmaBuf"},
    {Feature::SupportsExternalMemoryFd, "supportsExternalMemoryFd"},
    {Feature::SupportsExternalMemoryFuchsia, "supportsExternalMemoryFuchsia"},
    {Feature::SupportsExternalMemoryHost, "supportsExternalMemoryHost"},
    {Feature::SupportsExternalSemaphoreCapabilities, "supportsExternalSemaphoreCapabilities"},
    {Feature::SupportsExternalSemaphoreFd, "supportsExternalSemaphoreFd"},
    {Feature::SupportsExternalSemaphoreFuchsia, "supportsExternalSemaphoreFuchsia"},
    {Feature::SupportsFormatFeatureFlags2, "supportsFormatFeatureFlags2"},
    {Feature::SupportsFoveatedRendering, "supportsFoveatedRendering"},
    {Feature::SupportsFragmentShaderInterlockARB, "supportsFragmentShaderInterlockARB"},
    {Feature::SupportsFragmentShaderInterlockNV, "supportsFragmentShaderInterlockNV"},
    {Feature::SupportsFragmentShaderOrderingINTEL, "supportsFragmentShaderOrderingINTEL"},
    {Feature::SupportsFragmentShaderPixelInterlock, "supportsFragmentShaderPixelInterlock"},
    {Feature::SupportsFragmentShadingRate, "supportsFragmentShadingRate"},
    {Feature::SupportsFullScreenExclusive, "supportsFullScreenExclusive"},
    {Feature::SupportsGeometryStreamsCapability, "supportsGeometryStreamsCapability"},
    {Feature::SupportsGetMemoryRequirements2, "supportsGetMemoryRequirements2"},
    {Feature::SupportsGlobalPriority, "supportsGlobalPriority"},
    {Feature::SupportsGlobalPriorityQuery, "supportsGlobalPriorityQuery"},
    {Feature::SupportsGraphicsPipelineLibrary, "supportsGraphicsPipelineLibrary"},
    {Feature::SupportShaderPixelLocalStorageAngle, "supportShaderPixelLocalStorageAngle"},
    {Feature::SupportsHostImageCopy, "supportsHostImageCopy"},
    {Feature::SupportsHostQueryReset, "supportsHostQueryReset"},
    {Feature::SupportsImage2dViewOf3d, "supportsImage2dViewOf3d"},
    {Feature::SupportsImageCompressionControl, "supportsImageCompressionControl"},
    {Feature::SupportsImageCompressionControlSwapchain, "supportsImageCompressionControlSwapchain"},
    {Feature::SupportsImageCubeArray, "supportsImageCubeArray"},
    {Feature::SupportsImageDrmFormatModifier, "supportsImageDrmFormatModifier"},
    {Feature::SupportsImageFormatList, "supportsImageFormatList"},
    {Feature::SupportsImagelessFramebuffer, "supportsImagelessFramebuffer"},
    {Feature::SupportsIncrementalPresent, "supportsIncrementalPresent"},
    {Feature::SupportsIndexTypeUint8, "supportsIndexTypeUint8"},
    {Feature::SupportsLegacyDithering, "supportsLegacyDithering"},
    {Feature::SupportsLockSurfaceExtension, "supportsLockSurfaceExtension"},
    {Feature::SupportsLogicOpDynamicState, "supportsLogicOpDynamicState"},
    {Feature::SupportsMaintenance5, "supportsMaintenance5"},
    {Feature::SupportsMaintenance9, "supportsMaintenance9"},
    {Feature::SupportsMemoryBudget, "supportsMemoryBudget"},
    {Feature::SupportsMultiDrawIndirect, "supportsMultiDrawIndirect"},
    {Feature::SupportsMultisampledRenderToSingleSampled, "supportsMultisampledRenderToSingleSampled"},
    {Feature::SupportsMultiview, "supportsMultiview"},
    {Feature::SupportsMultiviewMultisampleRenderToTexture, "supportsMultiviewMultisampleRenderToTexture"},
    {Feature::SupportsPipelineCreationFeedback, "supportsPipelineCreationFeedback"},
    {Feature::SupportsPipelineProtectedAccess, "supportsPipelineProtectedAccess"},
    {Feature::SupportsPipelineRobustness, "supportsPipelineRobustness"},
    {Feature::SupportsPipelineStatisticsQuery, "supportsPipelineStatisticsQuery"},
    {Feature::SupportsPortabilityEnumeration, "supportsPortabilityEnumeration"},
    {Feature::SupportsPresentation, "supportsPresentation"},
    {Feature::SupportsPrimitiveFragmentShadingRate, "supportsPrimitiveFragmentShadingRate"},
    {Feature::SupportsPrimitivesGeneratedQuery, "supportsPrimitivesGeneratedQuery"},
    {Feature::SupportsPrimitiveTopologyListRestart, "supportsPrimitiveTopologyListRestart"},
    {Feature::SupportsProtectedMemory, "supportsProtectedMemory"},
    {Feature::SupportsRasterizationOrderAttachmentAccess, "supportsRasterizationOrderAttachmentAccess"},
    {Feature::SupportsRenderpass2, "supportsRenderpass2"},
    {Feature::SupportsRenderPassLoadStoreOpNone, "supportsRenderPassLoadStoreOpNone"},
    {Feature::SupportsRenderPassStoreOpNone, "supportsRenderPassStoreOpNone"},
    {Feature::SupportsRoundingModeRteFp16, "supportsRoundingModeRteFp16"},
    {Feature::SupportsRoundingModeRteFp32, "supportsRoundingModeRteFp32"},
    {Feature::SupportsRoundingModeRteFp64, "supportsRoundingModeRteFp64"},
    {Feature::SupportsRoundingModeRtzFp16, "supportsRoundingModeRtzFp16"},
    {Feature::SupportsRoundingModeRtzFp32, "supportsRoundingModeRtzFp32"},
    {Feature::SupportsRoundingModeRtzFp64, "supportsRoundingModeRtzFp64"},
    {Feature::SupportsSampler2dViewOf3d, "supportsSampler2dViewOf3d"},
    {Feature::SupportsSamplerMirrorClampToEdge, "supportsSamplerMirrorClampToEdge"},
    {Feature::SupportsShaderAtomicInt64, "supportsShaderAtomicInt64"},
    {Feature::SupportsShaderDemoteToHelperInvocation, "supportsShaderDemoteToHelperInvocation"},
    {Feature::SupportsShaderFloat16, "supportsShaderFloat16"},
    {Feature::SupportsShaderFloat64, "supportsShaderFloat64"},
    {Feature::SupportsShaderFramebufferFetch, "supportsShaderFramebufferFetch"},
    {Feature::SupportsShaderFramebufferFetchDepthStencil, "supportsShaderFramebufferFetchDepthStencil"},
    {Feature::SupportsShaderFramebufferFetchEXT, "supportsShaderFramebufferFetchEXT"},
    {Feature::SupportsShaderFramebufferFetchNonCoherent, "supportsShaderFramebufferFetchNonCoherent"},
    {Feature::SupportsShaderFramebufferFetchNonCoherentEXT, "supportsShaderFramebufferFetchNonCoherentEXT"},
    {Feature::SupportsShaderInt8, "supportsShaderInt8"},
    {Feature::SupportsShaderIntegerDotProduct, "supportsShaderIntegerDotProduct"},
    {Feature::SupportsShaderNonSemanticInfo, "supportsShaderNonSemanticInfo"},
    {Feature::SupportsShaderStencilExport, "supportsShaderStencilExport"},
    {Feature::SupportsSharedPresentableImageExtension, "supportsSharedPresentableImageExtension"},
    {Feature::SupportsSignedZeroInfNanPreserveFp16, "supportsSignedZeroInfNanPreserveFp16"},
    {Feature::SupportsSignedZeroInfNanPreserveFp32, "supportsSignedZeroInfNanPreserveFp32"},
    {Feature::SupportsSignedZeroInfNanPreserveFp64, "supportsSignedZeroInfNanPreserveFp64"},
    {Feature::SupportsSPIRV14, "supportsSPIRV14"},
    {Feature::SupportsSurfaceCapabilities2Extension, "supportsSurfaceCapabilities2Extension"},
    {Feature::SupportsSurfacelessQueryExtension, "supportsSurfacelessQueryExtension"},
    {Feature::SupportsSurfaceMaintenance1, "supportsSurfaceMaintenance1"},
    {Feature::SupportsSurfaceProtectedCapabilitiesExtension, "supportsSurfaceProtectedCapabilitiesExtension"},
    {Feature::SupportsSurfaceProtectedSwapchains, "supportsSurfaceProtectedSwapchains"},
    {Feature::SupportsSwapchainMaintenance1, "supportsSwapchainMaintenance1"},
    {Feature::SupportsSwapchainMutableFormat, "supportsSwapchainMutableFormat"},
    {Feature::SupportsSynchronization2, "supportsSynchronization2"},
    {Feature::SupportsTextureCompressionAstcHdr, "supportsTextureCompressionAstcHdr"},
    {Feature::SupportsTileMemoryHeap, "supportsTileMemoryHeap"},
    {Feature::SupportsTimelineSemaphore, "supportsTimelineSemaphore"},
    {Feature::SupportsTimestampSurfaceAttribute, "supportsTimestampSurfaceAttribute"},
    {Feature::SupportsTransformFeedbackExtension, "supportsTransformFeedbackExtension"},
    {Feature::SupportsUnifiedImageLayouts, "supportsUnifiedImageLayouts"},
    {Feature::SupportsUniformBufferStandardLayout, "supportsUniformBufferStandardLayout"},
    {Feature::SupportsVertexInputDynamicState, "supportsVertexInputDynamicState"},
    {Feature::SupportsYUVSamplerConversion, "supportsYUVSamplerConversion"},
    {Feature::SupportsYuvTarget, "supportsYuvTarget"},
    {Feature::SwapbuffersOnFlushOrFinishWithSingleBuffer, "swapbuffersOnFlushOrFinishWithSingleBuffer"},
    {Feature::SwapchainDeferredMemoryAllocation, "swapchainDeferredMemoryAllocation"},
    {Feature::SyncAllVertexArraysToDefault, "syncAllVertexArraysToDefault"},
    {Feature::SyncDefaultVertexArraysToDefault, "syncDefaultVertexArraysToDefault"},
    {Feature::SyncMonolithicPipelinesToBlobCache, "syncMonolithicPipelinesToBlobCache"},
    {Feature::SyncPipelineCacheToBlobCacheEveryFrame, "syncPipelineCacheToBlobCacheEveryFrame"},
    {Feature::UnbindFBOBeforeSwitchingContext, "unbindFBOBeforeSwitchingContext"},
    {Feature::UncurrentEglSurfaceUponSurfaceDestroy, "uncurrentEglSurfaceUponSurfaceDestroy"},
    {Feature::UnfoldShortCircuits, "unfoldShortCircuits"},
    {Feature::UnpackLastRowSeparatelyForPaddingInclusion, "unpackLastRowSeparatelyForPaddingInclusion"},
    {Feature::UnpackOverlappingRowsSeparatelyUnpackBuffer, "unpackOverlappingRowsSeparatelyUnpackBuffer"},
    {Feature::UnsizedSRGBReadPixelsDoesntTransform, "unsizedSRGBReadPixelsDoesntTransform"},
    {Feature::UploadDataToIosurfacesWithStagingBuffers, "uploadDataToIosurfacesWithStagingBuffers"},
    {Feature::UploadTextureDataInChunks, "uploadTextureDataInChunks"},
    {Feature::UseCullModeDynamicState, "useCullModeDynamicState"},
    {Feature::UseDepthBiasEnableDynamicState, "useDepthBiasEnableDynamicState"},
    {Feature::UseDepthCompareOpDynamicState, "useDepthCompareOpDynamicState"},
    {Feature::UseDepthTestEnableDynamicState, "useDepthTestEnableDynamicState"},
    {Feature::UseDepthWriteEnableDynamicState, "useDepthWriteEnableDynamicState"},
    {Feature::UseDualPipelineBlobCacheSlots, "useDualPipelineBlobCacheSlots"},
    {Feature::UseEmptyBlobsToEraseOldPipelineCacheFromBlobCache, "useEmptyBlobsToEraseOldPipelineCacheFromBlobCache"},
    {Feature::UseFrontFaceDynamicState, "useFrontFaceDynamicState"},
    {Feature::UseIntermediateTextureForGenerateMipmap, "useIntermediateTextureForGenerateMipmap"},
    {Feature::UseIr, "useIr"},
    {Feature::UseLargeSizeForDynamicBuffers, "useLargeSizeForDynamicBuffers"},
    {Feature::UseMultipleDescriptorsForExternalFormats, "useMultipleDescriptorsForExternalFormats"},
    {Feature::UseNonZeroStencilWriteMaskStaticState, "useNonZeroStencilWriteMaskStaticState"},
    {Feature::UsePrimitiveRestartEnableDynamicState, "usePrimitiveRestartEnableDynamicState"},
    {Feature::UsePrimitiveTopologyDynamicState, "usePrimitiveTopologyDynamicState"},
    {Feature::UseRasterizerDiscardEnableDynamicState, "useRasterizerDiscardEnableDynamicState"},
    {Feature::UseResetCommandBufferBitForSecondaryPools, "useResetCommandBufferBitForSecondaryPools"},
    {Feature::UseShadowBuffersWhenAppropriate, "useShadowBuffersWhenAppropriate"},
    {Feature::UsesNativeBuiltinClKernel, "usesNativeBuiltinClKernel"},
    {Feature::UsesSecondComponentForStencilBorderColor, "usesSecondComponentForStencilBorderColor"},
    {Feature::UseStencilOpDynamicState, "useStencilOpDynamicState"},
    {Feature::UseStencilTestEnableDynamicState, "useStencilTestEnableDynamicState"},
    {Feature::UseSystemMemoryForConstantBuffers, "useSystemMemoryForConstantBuffers"},
    {Feature::UseTempForNonZeroBaseLevelGenMipmapUsingCopyImageSubData, "useTempForNonZeroBaseLevelGenMipmapUsingCopyImageSubData"},
    {Feature::UseUnusedBlocksWithStandardOrSharedLayout, "useUnusedBlocksWithStandardOrSharedLayout"},
    {Feature::UseVertexInputBindingStrideDynamicState, "useVertexInputBindingStrideDynamicState"},
    {Feature::UseVkEventForBufferBarrier, "useVkEventForBufferBarrier"},
    {Feature::UseVkEventForImageBarrier, "useVkEventForImageBarrier"},
    {Feature::UseVmaForImageSuballocation, "useVmaForImageSuballocation"},
    {Feature::ValidateMaxPerStageUniformBlocksAtCompileTime, "validateMaxPerStageUniformBlocksAtCompileTime"},
    {Feature::VaryingsRequireMatchingPrecisionInSpirv, "varyingsRequireMatchingPrecisionInSpirv"},
    {Feature::VerifyPipelineCacheInBlobCache, "verifyPipelineCacheInBlobCache"},
    {Feature::VertexIDDoesNotIncludeBaseVertex, "vertexIDDoesNotIncludeBaseVertex"},
    {Feature::WarmUpPipelineCacheAtLink, "warmUpPipelineCacheAtLink"},
    {Feature::WrapSwitchInIfTrue, "wrapSwitchInIfTrue"},
    {Feature::WriteHelperSampleMask, "writeHelperSampleMask"},
}};
}  // anonymous namespace

const char *GetFeatureName(Feature feature)
{
    return kFeatureNames[feature];
}

}  // namespace angle
