// 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
{
  protected:
    TSymbolTableBase()                                  = default;
    TStructure *mVar_gl_DepthRangeParameters            = nullptr;
    TVariable *mVar_gl_DepthRange                       = nullptr;
    TVariable *mVar_gl_MaxVertexAttribs                 = nullptr;
    TVariable *mVar_gl_MaxVertexUniformVectors          = nullptr;
    TVariable *mVar_gl_MaxVertexTextureImageUnits       = nullptr;
    TVariable *mVar_gl_MaxCombinedTextureImageUnits     = nullptr;
    TVariable *mVar_gl_MaxTextureImageUnits             = nullptr;
    TVariable *mVar_gl_MaxFragmentUniformVectors        = nullptr;
    TVariable *mVar_gl_MaxVaryingVectors                = nullptr;
    TVariable *mVar_gl_MaxDrawBuffers                   = nullptr;
    TVariable *mVar_gl_MaxDualSourceDrawBuffersEXT      = nullptr;
    TVariable *mVar_gl_MaxVertexOutputVectors           = nullptr;
    TVariable *mVar_gl_MaxFragmentInputVectors          = nullptr;
    TVariable *mVar_gl_MinProgramTexelOffset            = nullptr;
    TVariable *mVar_gl_MaxProgramTexelOffset            = nullptr;
    TVariable *mVar_gl_MaxImageUnits                    = nullptr;
    TVariable *mVar_gl_MaxVertexImageUniforms           = nullptr;
    TVariable *mVar_gl_MaxFragmentImageUniforms         = nullptr;
    TVariable *mVar_gl_MaxComputeImageUniforms          = nullptr;
    TVariable *mVar_gl_MaxCombinedImageUniforms         = nullptr;
    TVariable *mVar_gl_MaxCombinedShaderOutputResources = nullptr;
    TVariable *mVar_gl_MaxComputeWorkGroupCount         = nullptr;
    TVariable *mVar_gl_MaxComputeWorkGroupSize          = nullptr;
    TVariable *mVar_gl_MaxComputeUniformComponents      = nullptr;
    TVariable *mVar_gl_MaxComputeTextureImageUnits      = nullptr;
    TVariable *mVar_gl_MaxComputeAtomicCounters         = nullptr;
    TVariable *mVar_gl_MaxComputeAtomicCounterBuffers   = nullptr;
    TVariable *mVar_gl_MaxVertexAtomicCounters          = nullptr;
    TVariable *mVar_gl_MaxFragmentAtomicCounters        = nullptr;
    TVariable *mVar_gl_MaxCombinedAtomicCounters        = nullptr;
    TVariable *mVar_gl_MaxAtomicCounterBindings         = nullptr;
    TVariable *mVar_gl_MaxVertexAtomicCounterBuffers    = nullptr;
    TVariable *mVar_gl_MaxFragmentAtomicCounterBuffers  = nullptr;
    TVariable *mVar_gl_MaxCombinedAtomicCounterBuffers  = nullptr;
    TVariable *mVar_gl_MaxAtomicCounterBufferSize       = nullptr;
    TVariable *mVar_gl_MaxGeometryInputComponents       = nullptr;
    TVariable *mVar_gl_MaxGeometryOutputComponents      = nullptr;
    TVariable *mVar_gl_MaxGeometryImageUniforms         = nullptr;
    TVariable *mVar_gl_MaxGeometryTextureImageUnits     = nullptr;
    TVariable *mVar_gl_MaxGeometryOutputVertices        = nullptr;
    TVariable *mVar_gl_MaxGeometryTotalOutputComponents = nullptr;
    TVariable *mVar_gl_MaxGeometryUniformComponents     = nullptr;
    TVariable *mVar_gl_MaxGeometryAtomicCounters        = nullptr;
    TVariable *mVar_gl_MaxGeometryAtomicCounterBuffers  = nullptr;
    TVariable *mVar_gl_FragData                         = nullptr;
    TVariable *mVar_gl_SecondaryFragDataEXT             = nullptr;
    TVariable *mVar_gl_FragDepthEXT                     = nullptr;
    TVariable *mVar_gl_LastFragData                     = nullptr;
    TVariable *mVar_gl_LastFragDataNV                   = nullptr;
    TInterfaceBlock *mVar_gl_PerVertex                  = nullptr;
    TVariable *mVar_gl_in                               = nullptr;
    TVariable *mVar_gl_PositionGS                       = nullptr;
};

}  // namespace sh

#endif  // COMPILER_TRANSLATOR_SYMBOLTABLE_AUTOGEN_H_
