// GENERATED FILE - DO NOT EDIT.
// Generated by gen_builtin_symbols.py using data from builtin_variables.json and
// builtin_function_declarations.txt.
//
// 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.
//
// SymbolTable_autogen.h:
//   Autogenerated member variables of TSymbolTable.

#ifndef COMPILER_TRANSLATOR_SYMBOLTABLE_AUTOGEN_H_
#define COMPILER_TRANSLATOR_SYMBOLTABLE_AUTOGEN_H_

namespace sh
{

class TSymbolTableBase
{
  public:
    TSymbolTableBase()                             = default;
    TSymbol *m_gl_DepthRangeParameters             = nullptr;
    TSymbol *m_gl_DepthRange                       = nullptr;
    TSymbol *m_gl_MaxVertexAttribs                 = nullptr;
    TSymbol *m_gl_MaxVertexUniformVectors          = nullptr;
    TSymbol *m_gl_MaxVertexTextureImageUnits       = nullptr;
    TSymbol *m_gl_MaxCombinedTextureImageUnits     = nullptr;
    TSymbol *m_gl_MaxTextureImageUnits             = nullptr;
    TSymbol *m_gl_MaxFragmentUniformVectors        = nullptr;
    TSymbol *m_gl_MaxVaryingVectors                = nullptr;
    TSymbol *m_gl_MaxDrawBuffers                   = nullptr;
    TSymbol *m_gl_MaxDualSourceDrawBuffersEXT      = nullptr;
    TSymbol *m_gl_MaxVertexOutputVectors           = nullptr;
    TSymbol *m_gl_MaxFragmentInputVectors          = nullptr;
    TSymbol *m_gl_MinProgramTexelOffset            = nullptr;
    TSymbol *m_gl_MaxProgramTexelOffset            = nullptr;
    TSymbol *m_gl_MaxImageUnits                    = nullptr;
    TSymbol *m_gl_MaxVertexImageUniforms           = nullptr;
    TSymbol *m_gl_MaxFragmentImageUniforms         = nullptr;
    TSymbol *m_gl_MaxComputeImageUniforms          = nullptr;
    TSymbol *m_gl_MaxCombinedImageUniforms         = nullptr;
    TSymbol *m_gl_MaxCombinedShaderOutputResources = nullptr;
    TSymbol *m_gl_MaxComputeWorkGroupCount         = nullptr;
    TSymbol *m_gl_MaxComputeWorkGroupSize          = nullptr;
    TSymbol *m_gl_MaxComputeUniformComponents      = nullptr;
    TSymbol *m_gl_MaxComputeTextureImageUnits      = nullptr;
    TSymbol *m_gl_MaxComputeAtomicCounters         = nullptr;
    TSymbol *m_gl_MaxComputeAtomicCounterBuffers   = nullptr;
    TSymbol *m_gl_MaxVertexAtomicCounters          = nullptr;
    TSymbol *m_gl_MaxFragmentAtomicCounters        = nullptr;
    TSymbol *m_gl_MaxCombinedAtomicCounters        = nullptr;
    TSymbol *m_gl_MaxAtomicCounterBindings         = nullptr;
    TSymbol *m_gl_MaxVertexAtomicCounterBuffers    = nullptr;
    TSymbol *m_gl_MaxFragmentAtomicCounterBuffers  = nullptr;
    TSymbol *m_gl_MaxCombinedAtomicCounterBuffers  = nullptr;
    TSymbol *m_gl_MaxAtomicCounterBufferSize       = nullptr;
    TSymbol *m_gl_MaxGeometryInputComponents       = nullptr;
    TSymbol *m_gl_MaxGeometryOutputComponents      = nullptr;
    TSymbol *m_gl_MaxGeometryImageUniforms         = nullptr;
    TSymbol *m_gl_MaxGeometryTextureImageUnits     = nullptr;
    TSymbol *m_gl_MaxGeometryOutputVertices        = nullptr;
    TSymbol *m_gl_MaxGeometryTotalOutputComponents = nullptr;
    TSymbol *m_gl_MaxGeometryUniformComponents     = nullptr;
    TSymbol *m_gl_MaxGeometryAtomicCounters        = nullptr;
    TSymbol *m_gl_MaxGeometryAtomicCounterBuffers  = nullptr;
    TSymbol *m_gl_FragData                         = nullptr;
    TSymbol *m_gl_SecondaryFragDataEXT             = nullptr;
    TSymbol *m_gl_FragDepthEXT                     = nullptr;
    TSymbol *m_gl_LastFragData                     = nullptr;
    TSymbol *m_gl_LastFragDataNV                   = nullptr;
    TSymbol *m_gl_PerVertex                        = nullptr;
    TSymbol *m_gl_in                               = nullptr;
    TSymbol *m_gl_PositionGS                       = nullptr;
};

}  // namespace sh

#endif  // COMPILER_TRANSLATOR_SYMBOLTABLE_AUTOGEN_H_
