// 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 LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
#define LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_

#include <ostream>
#include <string>

#include "common/PackedGLEnums_autogen.h"

namespace gl
{

enum class GLenumGroup
{
    AccumOp,
    AlphaFunction,
    AtomicCounterBufferPName,
    AttribMask,
    AttributeType,
    BindTransformFeedbackTarget,
    BlendEquationModeEXT,
    BlendingFactor,
    BlitFramebufferFilter,
    Boolean,
    Buffer,
    BufferAccessARB,
    BufferAccessMask,
    BufferBitQCOM,
    BufferStorageTarget,
    BufferTargetARB,
    BufferUsageARB,
    CheckFramebufferStatusTarget,
    ClearBufferMask,
    ClientAttribMask,
    ClipControlDepth,
    ClipControlOrigin,
    ClipPlaneName,
    ColorBuffer,
    ColorMaterialFace,
    ColorMaterialParameter,
    ColorPointerType,
    ColorTableParameterPNameSGI,
    ColorTableTarget,
    ColorTableTargetSGI,
    ContextFlagMask,
    ContextProfileMask,
    ConvolutionBorderModeEXT,
    ConvolutionParameterEXT,
    ConvolutionTarget,
    ConvolutionTargetEXT,
    CopyBufferSubDataTarget,
    CullFaceMode,
    DataType,
    DebugSeverity,
    DebugSource,
    DebugType,
    DefaultGroup,
    DepthFunction,
    DrawBufferMode,
    DrawElementsType,
    EnableCap,
    ErrorCode,
    ExternalHandleType,
    FeedBackToken,
    FeedbackType,
    FfdMaskSGIX,
    FfdTargetSGIX,
    FogCoordinatePointerType,
    FogMode,
    FogPName,
    FogParameter,
    FogPointerTypeEXT,
    FogPointerTypeIBM,
    FragmentLightModelParameterSGIX,
    FragmentOpATI,
    FramebufferAttachment,
    FramebufferAttachmentParameterName,
    FramebufferFetchNoncoherent,
    FramebufferParameterName,
    FramebufferStatus,
    FramebufferTarget,
    FrontFaceDirection,
    GetColorTableParameterPNameSGI,
    GetConvolutionParameter,
    GetFramebufferParameter,
    GetHistogramParameterPNameEXT,
    GetMapQuery,
    GetMinmaxParameterPNameEXT,
    GetPName,
    GetPixelMap,
    GetPointervPName,
    GetTextureParameter,
    GraphicsResetStatus,
    HintMode,
    HintTarget,
    HistogramTargetEXT,
    IndexPointerType,
    InterleavedArrayFormat,
    InternalFormat,
    InternalFormatPName,
    LightEnvModeSGIX,
    LightEnvParameterSGIX,
    LightModelColorControl,
    LightModelParameter,
    LightName,
    LightParameter,
    ListMode,
    ListNameType,
    ListParameterName,
    LogicOp,
    MapBufferUsageMask,
    MapQuery,
    MapTarget,
    MapTextureFormatINTEL,
    MaterialFace,
    MaterialParameter,
    MatrixMode,
    MemoryBarrierMask,
    MemoryObjectParameterName,
    MeshMode1,
    MeshMode2,
    MinmaxTargetEXT,
    NormalPointerType,
    ObjectIdentifier,
    OcclusionQueryEventMaskAMD,
    PatchParameterName,
    PathColor,
    PathCoverMode,
    PathElementType,
    PathFillMode,
    PathFontStyle,
    PathFontTarget,
    PathGenMode,
    PathHandleMissingGlyphs,
    PathListMode,
    PathMetricMask,
    PathParameter,
    PathStringFormat,
    PathTransformType,
    PipelineParameterName,
    PixelCopyType,
    PixelFormat,
    PixelMap,
    PixelStoreParameter,
    PixelStoreResampleMode,
    PixelStoreSubsampleRate,
    PixelTexGenMode,
    PixelTexGenParameterNameSGIS,
    PixelTransferParameter,
    PixelType,
    PointParameterNameSGIS,
    PolygonMode,
    PrecisionType,
    PrimitiveType,
    ProgramInterface,
    ProgramInterfacePName,
    ProgramParameterPName,
    ProgramPropertyARB,
    ProgramStagePName,
    QueryObjectParameterName,
    QueryParameterName,
    QueryTarget,
    ReadBufferMode,
    RenderbufferParameterName,
    RenderbufferTarget,
    RenderingMode,
    SamplePatternSGIS,
    SamplerParameterName,
    SemaphoreParameterName,
    SeparableTargetEXT,
    ShaderParameterName,
    ShaderType,
    ShadingModel,
    StencilFaceDirection,
    StencilFunction,
    StencilOp,
    StringName,
    SubroutineParameterName,
    SyncCondition,
    SyncObjectMask,
    SyncParameterName,
    SyncStatus,
    TexCoordPointerType,
    TextureCoordName,
    TextureEnvMode,
    TextureEnvParameter,
    TextureEnvTarget,
    TextureFilterFuncSGIS,
    TextureGenMode,
    TextureGenParameter,
    TextureLayout,
    TextureMagFilter,
    TextureMinFilter,
    TextureParameterName,
    TextureStorageMaskAMD,
    TextureTarget,
    TextureUnit,
    TextureWrapMode,
    TransformFeedbackPName,
    TypeEnum,
    UniformBlockPName,
    UniformPName,
    UseProgramStageMask,
    VertexArrayPName,
    VertexAttribEnum,
    VertexAttribPointerType,
    VertexAttribType,
    VertexBufferObjectParameter,
    VertexBufferObjectUsage,
    VertexPointerType,
    VertexProvokingMode
};

const char *GLbooleanToString(unsigned int value);

const char *GLenumToString(GLenumGroup enumGroup, unsigned int value);

std::string GLbitfieldToString(GLenumGroup enumGroup, unsigned int value);

void OutputGLenumString(std::ostream &out, GLenumGroup enumGroup, unsigned int value);

void OutputGLbitfieldString(std::ostream &out, GLenumGroup enumGroup, unsigned int value);

}  // namespace gl

#endif  // LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
