// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
// DO NOT EDIT!

#ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_AUTOGEN_H_

static std::string GetStringAttachment(uint32 value);
static std::string GetStringBackbufferAttachment(uint32 value);
static std::string GetStringBlitFilter(uint32 value);
static std::string GetStringBufferParameter(uint32 value);
static std::string GetStringBufferTarget(uint32 value);
static std::string GetStringBufferUsage(uint32 value);
static std::string GetStringCapability(uint32 value);
static std::string GetStringCmpFunction(uint32 value);
static std::string GetStringCompressedTextureFormat(uint32 value);
static std::string GetStringDrawMode(uint32 value);
static std::string GetStringDstBlendFactor(uint32 value);
static std::string GetStringEquation(uint32 value);
static std::string GetStringFaceMode(uint32 value);
static std::string GetStringFaceType(uint32 value);
static std::string GetStringFrameBufferParameter(uint32 value);
static std::string GetStringFrameBufferTarget(uint32 value);
static std::string GetStringGLState(uint32 value);
static std::string GetStringGetMaxIndexType(uint32 value);
static std::string GetStringGetTexParamTarget(uint32 value);
static std::string GetStringHintMode(uint32 value);
static std::string GetStringHintTarget(uint32 value);
static std::string GetStringIndexType(uint32 value);
static std::string GetStringPixelStore(uint32 value);
static std::string GetStringPixelType(uint32 value);
static std::string GetStringProgramParameter(uint32 value);
static std::string GetStringQueryObjectParameter(uint32 value);
static std::string GetStringQueryParameter(uint32 value);
static std::string GetStringQueryTarget(uint32 value);
static std::string GetStringReadPixelFormat(uint32 value);
static std::string GetStringReadPixelType(uint32 value);
static std::string GetStringRenderBufferFormat(uint32 value);
static std::string GetStringRenderBufferParameter(uint32 value);
static std::string GetStringRenderBufferTarget(uint32 value);
static std::string GetStringResetStatus(uint32 value);
static std::string GetStringShaderBinaryFormat(uint32 value);
static std::string GetStringShaderParameter(uint32 value);
static std::string GetStringShaderPrecision(uint32 value);
static std::string GetStringShaderType(uint32 value);
static std::string GetStringSrcBlendFactor(uint32 value);
static std::string GetStringStencilOp(uint32 value);
static std::string GetStringStringType(uint32 value);
static std::string GetStringTextureBindTarget(uint32 value);
static std::string GetStringTextureFormat(uint32 value);
static std::string GetStringTextureInternalFormat(uint32 value);
static std::string GetStringTextureInternalFormatStorage(uint32 value);
static std::string GetStringTextureMagFilterMode(uint32 value);
static std::string GetStringTextureMinFilterMode(uint32 value);
static std::string GetStringTextureParameter(uint32 value);
static std::string GetStringTexturePool(uint32 value);
static std::string GetStringTextureTarget(uint32 value);
static std::string GetStringTextureUsage(uint32 value);
static std::string GetStringTextureWrapMode(uint32 value);
static std::string GetStringVertexAttribType(uint32 value);
static std::string GetStringVertexAttribute(uint32 value);
static std::string GetStringVertexPointer(uint32 value);

#endif  // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_AUTOGEN_H_

