// GENERATED FILE - DO NOT EDIT.
// Generated by gen_gl_enum_utils.py using data from gl.xml and gl_angle_ext.xml.
//
// Copyright 2019 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.
//
// gl_enum_utils_autogen.h:
//   mapping of GLenum value to string.

#ifndef COMMON_GL_ENUM_UTILS_AUTOGEN_H_
#define COMMON_GL_ENUM_UTILS_AUTOGEN_H_

namespace gl
{
enum class GLESEnum
{
    AccumOp,
    AllEnums,
    AlphaFunction,
    AtomicCounterBufferPName,
    AttribMask,
    AttributeType,
    BindTransformFeedbackTarget,
    BinormalPointerTypeEXT,
    BlendEquationModeEXT,
    BlendingFactor,
    BlitFramebufferFilter,
    Boolean,
    Buffer,
    BufferAccessARB,
    BufferBitQCOM,
    BufferPNameARB,
    BufferPointerNameARB,
    BufferStorageMask,
    BufferStorageTarget,
    BufferTargetARB,
    BufferUsageARB,
    ClampColorModeARB,
    ClearBufferMask,
    ClipPlaneName,
    ColorBuffer,
    ColorMaterialParameter,
    ColorPointerType,
    CombinerBiasNV,
    CombinerComponentUsageNV,
    CombinerPortionNV,
    CombinerScaleNV,
    ContainerType,
    ContextFlagMask,
    CopyBufferSubDataTarget,
    CopyImageSubDataTarget,
    DebugSeverity,
    DebugSource,
    DebugType,
    DepthFunction,
    DepthStencilTextureMode,
    DrawBufferMode,
    DrawElementsType,
    ElementPointerTypeATI,
    EnableCap,
    ErrorCode,
    EvalMapsModeNV,
    ExternalHandleType,
    FenceConditionNV,
    FenceParameterNameNV,
    FogCoordinatePointerType,
    FogMode,
    FogPName,
    FogParameter,
    FogPointerTypeEXT,
    FogPointerTypeIBM,
    FoveationConfigBitQCOM,
    FragmentLightParameterSGIX,
    FragmentShaderDestMaskATI,
    FragmentShaderDestModMaskATI,
    FragmentShaderGenericSourceATI,
    FragmentShaderTextureSourceATI,
    FragmentShaderValueRepATI,
    FramebufferAttachment,
    FramebufferAttachmentParameterName,
    FramebufferParameterName,
    FramebufferStatus,
    FramebufferTarget,
    FrontFaceDirection,
    GetFramebufferParameter,
    GetMultisamplePNameNV,
    GetPName,
    GetPointervPName,
    GetTextureParameter,
    GraphicsResetStatus,
    HintMode,
    HintTarget,
    IndexFunctionEXT,
    IndexPointerType,
    InternalFormat,
    InternalFormatPName,
    InvalidateFramebufferAttachment,
    LightEnvModeSGIX,
    LightModelParameter,
    LightName,
    LightParameter,
    ListNameType,
    LogicOp,
    MapBufferAccessMask,
    MapTypeNV,
    MaterialParameter,
    MatrixIndexPointerTypeARB,
    MatrixMode,
    MemoryBarrierMask,
    MemoryObjectParameterName,
    NormalPointerType,
    ObjectIdentifier,
    PLSPlaneParameterName,
    PatchParameterName,
    PathColor,
    PathColorFormat,
    PathFillMode,
    PathFontStyle,
    PathGenMode,
    PathTransformType,
    PipelineParameterName,
    PixelCopyType,
    PixelFormat,
    PixelStoreParameter,
    PixelTexGenModeSGIX,
    PixelTransferParameter,
    PixelType,
    PointParameterNameARB,
    PolygonMode,
    PrecisionType,
    PrimitiveType,
    ProgramInterface,
    ProgramInterfacePName,
    ProgramParameterPName,
    ProgramPropertyARB,
    ProgramResourceProperty,
    QueryCounterTarget,
    QueryObjectParameterName,
    QueryParameterName,
    QueryTarget,
    ReadBufferMode,
    RenderbufferParameterName,
    RenderbufferTarget,
    ReplacementCodeTypeSUN,
    SamplerParameterF,
    SamplerParameterI,
    ScalarType,
    SecondaryColorPointerTypeIBM,
    SemaphoreParameterName,
    ShaderBinaryFormat,
    ShaderParameterName,
    ShaderType,
    ShadingModel,
    ShadingRate,
    ShadingRateCombinerOp,
    ShadingRateQCOM,
    SizedInternalFormat,
    StencilFunction,
    StencilOp,
    StringName,
    SubroutineParameterName,
    SyncBehaviorFlags,
    SyncCondition,
    SyncObjectMask,
    SyncParameterName,
    SyncStatus,
    TangentPointerTypeEXT,
    TexCoordPointerType,
    TexStorageAttribs,
    TextureCompareMode,
    TextureCoordName,
    TextureEnvMode,
    TextureEnvParameter,
    TextureEnvTarget,
    TextureGenParameter,
    TextureImageParameterName,
    TextureLayout,
    TextureMagFilter,
    TextureMinFilter,
    TextureParameterName,
    TextureSwizzle,
    TextureTarget,
    TextureUnit,
    TextureWrapMode,
    TransformFeedbackBufferMode,
    TransformFeedbackPName,
    TriangleFace,
    UniformBlockPName,
    UniformPName,
    UniformType,
    UseProgramStageMask,
    VertexArrayPName,
    VertexAttribEnum,
    VertexAttribIType,
    VertexAttribPointerPropertyARB,
    VertexAttribPointerType,
    VertexAttribPropertyARB,
    VertexAttribType,
    VertexPointerType,
    VertexProvokingMode,
    VertexShaderTextureUnitParameter,
    VertexShaderWriteMaskEXT,
    VertexWeightPointerTypeEXT,
    WeightPointerTypeARB
};
}  // namespace gl

#endif  // COMMON_GL_ENUM_UTILS_AUTOGEN_H_
