// GENERATED FILE - DO NOT EDIT.
// Generated by generate_entry_points.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.
//
// frame_capture_utils_autogen.cpp:
//   ANGLE Frame capture types and helper functions.

#include "libANGLE/frame_capture_utils_autogen.h"

#include "libANGLE/FrameCapture.h"

namespace angle
{
void WriteParamTypeToStream(std::ostream &os, ParamType paramType, const ParamValue &paramValue)
{
    switch (paramType)
    {
        case ParamType::TAlphaTestFunc:
            WriteParamValueToStream<ParamType::TAlphaTestFunc>(os, paramValue.AlphaTestFuncVal);
            break;
        case ParamType::TBufferBinding:
            WriteParamValueToStream<ParamType::TBufferBinding>(os, paramValue.BufferBindingVal);
            break;
        case ParamType::TBufferID:
            WriteParamValueToStream<ParamType::TBufferID>(os, paramValue.BufferIDVal);
            break;
        case ParamType::TBufferIDConstPointer:
            WriteParamValueToStream<ParamType::TBufferIDConstPointer>(
                os, paramValue.BufferIDConstPointerVal);
            break;
        case ParamType::TBufferIDPointer:
            WriteParamValueToStream<ParamType::TBufferIDPointer>(os, paramValue.BufferIDPointerVal);
            break;
        case ParamType::TBufferUsage:
            WriteParamValueToStream<ParamType::TBufferUsage>(os, paramValue.BufferUsageVal);
            break;
        case ParamType::TClientVertexArrayType:
            WriteParamValueToStream<ParamType::TClientVertexArrayType>(
                os, paramValue.ClientVertexArrayTypeVal);
            break;
        case ParamType::TCullFaceMode:
            WriteParamValueToStream<ParamType::TCullFaceMode>(os, paramValue.CullFaceModeVal);
            break;
        case ParamType::TDrawElementsType:
            WriteParamValueToStream<ParamType::TDrawElementsType>(os,
                                                                  paramValue.DrawElementsTypeVal);
            break;
        case ParamType::TFenceNVID:
            WriteParamValueToStream<ParamType::TFenceNVID>(os, paramValue.FenceNVIDVal);
            break;
        case ParamType::TFenceNVIDConstPointer:
            WriteParamValueToStream<ParamType::TFenceNVIDConstPointer>(
                os, paramValue.FenceNVIDConstPointerVal);
            break;
        case ParamType::TFenceNVIDPointer:
            WriteParamValueToStream<ParamType::TFenceNVIDPointer>(os,
                                                                  paramValue.FenceNVIDPointerVal);
            break;
        case ParamType::TFramebufferID:
            WriteParamValueToStream<ParamType::TFramebufferID>(os, paramValue.FramebufferIDVal);
            break;
        case ParamType::TFramebufferIDConstPointer:
            WriteParamValueToStream<ParamType::TFramebufferIDConstPointer>(
                os, paramValue.FramebufferIDConstPointerVal);
            break;
        case ParamType::TFramebufferIDPointer:
            WriteParamValueToStream<ParamType::TFramebufferIDPointer>(
                os, paramValue.FramebufferIDPointerVal);
            break;
        case ParamType::TGLDEBUGPROC:
            WriteParamValueToStream<ParamType::TGLDEBUGPROC>(os, paramValue.GLDEBUGPROCVal);
            break;
        case ParamType::TGLDEBUGPROCKHR:
            WriteParamValueToStream<ParamType::TGLDEBUGPROCKHR>(os, paramValue.GLDEBUGPROCKHRVal);
            break;
        case ParamType::TGLbitfield:
            WriteParamValueToStream<ParamType::TGLbitfield>(os, paramValue.GLbitfieldVal);
            break;
        case ParamType::TGLboolean:
            WriteParamValueToStream<ParamType::TGLboolean>(os, paramValue.GLbooleanVal);
            break;
        case ParamType::TGLbooleanConstPointer:
            WriteParamValueToStream<ParamType::TGLbooleanConstPointer>(
                os, paramValue.GLbooleanConstPointerVal);
            break;
        case ParamType::TGLbooleanPointer:
            WriteParamValueToStream<ParamType::TGLbooleanPointer>(os,
                                                                  paramValue.GLbooleanPointerVal);
            break;
        case ParamType::TGLbyte:
            WriteParamValueToStream<ParamType::TGLbyte>(os, paramValue.GLbyteVal);
            break;
        case ParamType::TGLbyteConstPointer:
            WriteParamValueToStream<ParamType::TGLbyteConstPointer>(
                os, paramValue.GLbyteConstPointerVal);
            break;
        case ParamType::TGLcharConstPointer:
            WriteParamValueToStream<ParamType::TGLcharConstPointer>(
                os, paramValue.GLcharConstPointerVal);
            break;
        case ParamType::TGLcharConstPointerPointer:
            WriteParamValueToStream<ParamType::TGLcharConstPointerPointer>(
                os, paramValue.GLcharConstPointerPointerVal);
            break;
        case ParamType::TGLcharPointer:
            WriteParamValueToStream<ParamType::TGLcharPointer>(os, paramValue.GLcharPointerVal);
            break;
        case ParamType::TGLclampx:
            WriteParamValueToStream<ParamType::TGLclampx>(os, paramValue.GLclampxVal);
            break;
        case ParamType::TGLdouble:
            WriteParamValueToStream<ParamType::TGLdouble>(os, paramValue.GLdoubleVal);
            break;
        case ParamType::TGLdoubleConstPointer:
            WriteParamValueToStream<ParamType::TGLdoubleConstPointer>(
                os, paramValue.GLdoubleConstPointerVal);
            break;
        case ParamType::TGLdoublePointer:
            WriteParamValueToStream<ParamType::TGLdoublePointer>(os, paramValue.GLdoublePointerVal);
            break;
        case ParamType::TGLeglImageOES:
            WriteParamValueToStream<ParamType::TGLeglImageOES>(os, paramValue.GLeglImageOESVal);
            break;
        case ParamType::TGLenum:
            WriteParamValueToStream<ParamType::TGLenum>(os, paramValue.GLenumVal);
            break;
        case ParamType::TGLenumConstPointer:
            WriteParamValueToStream<ParamType::TGLenumConstPointer>(
                os, paramValue.GLenumConstPointerVal);
            break;
        case ParamType::TGLenumPointer:
            WriteParamValueToStream<ParamType::TGLenumPointer>(os, paramValue.GLenumPointerVal);
            break;
        case ParamType::TGLfixed:
            WriteParamValueToStream<ParamType::TGLfixed>(os, paramValue.GLfixedVal);
            break;
        case ParamType::TGLfixedConstPointer:
            WriteParamValueToStream<ParamType::TGLfixedConstPointer>(
                os, paramValue.GLfixedConstPointerVal);
            break;
        case ParamType::TGLfixedPointer:
            WriteParamValueToStream<ParamType::TGLfixedPointer>(os, paramValue.GLfixedPointerVal);
            break;
        case ParamType::TGLfloat:
            WriteParamValueToStream<ParamType::TGLfloat>(os, paramValue.GLfloatVal);
            break;
        case ParamType::TGLfloatConstPointer:
            WriteParamValueToStream<ParamType::TGLfloatConstPointer>(
                os, paramValue.GLfloatConstPointerVal);
            break;
        case ParamType::TGLfloatPointer:
            WriteParamValueToStream<ParamType::TGLfloatPointer>(os, paramValue.GLfloatPointerVal);
            break;
        case ParamType::TGLint:
            WriteParamValueToStream<ParamType::TGLint>(os, paramValue.GLintVal);
            break;
        case ParamType::TGLint64Pointer:
            WriteParamValueToStream<ParamType::TGLint64Pointer>(os, paramValue.GLint64PointerVal);
            break;
        case ParamType::TGLintConstPointer:
            WriteParamValueToStream<ParamType::TGLintConstPointer>(os,
                                                                   paramValue.GLintConstPointerVal);
            break;
        case ParamType::TGLintPointer:
            WriteParamValueToStream<ParamType::TGLintPointer>(os, paramValue.GLintPointerVal);
            break;
        case ParamType::TGLintptr:
            WriteParamValueToStream<ParamType::TGLintptr>(os, paramValue.GLintptrVal);
            break;
        case ParamType::TGLintptrConstPointer:
            WriteParamValueToStream<ParamType::TGLintptrConstPointer>(
                os, paramValue.GLintptrConstPointerVal);
            break;
        case ParamType::TGLshort:
            WriteParamValueToStream<ParamType::TGLshort>(os, paramValue.GLshortVal);
            break;
        case ParamType::TGLshortConstPointer:
            WriteParamValueToStream<ParamType::TGLshortConstPointer>(
                os, paramValue.GLshortConstPointerVal);
            break;
        case ParamType::TGLsizei:
            WriteParamValueToStream<ParamType::TGLsizei>(os, paramValue.GLsizeiVal);
            break;
        case ParamType::TGLsizeiConstPointer:
            WriteParamValueToStream<ParamType::TGLsizeiConstPointer>(
                os, paramValue.GLsizeiConstPointerVal);
            break;
        case ParamType::TGLsizeiPointer:
            WriteParamValueToStream<ParamType::TGLsizeiPointer>(os, paramValue.GLsizeiPointerVal);
            break;
        case ParamType::TGLsizeiptr:
            WriteParamValueToStream<ParamType::TGLsizeiptr>(os, paramValue.GLsizeiptrVal);
            break;
        case ParamType::TGLsizeiptrConstPointer:
            WriteParamValueToStream<ParamType::TGLsizeiptrConstPointer>(
                os, paramValue.GLsizeiptrConstPointerVal);
            break;
        case ParamType::TGLsync:
            WriteParamValueToStream<ParamType::TGLsync>(os, paramValue.GLsyncVal);
            break;
        case ParamType::TGLubyte:
            WriteParamValueToStream<ParamType::TGLubyte>(os, paramValue.GLubyteVal);
            break;
        case ParamType::TGLubyteConstPointer:
            WriteParamValueToStream<ParamType::TGLubyteConstPointer>(
                os, paramValue.GLubyteConstPointerVal);
            break;
        case ParamType::TGLubytePointer:
            WriteParamValueToStream<ParamType::TGLubytePointer>(os, paramValue.GLubytePointerVal);
            break;
        case ParamType::TGLuint:
            WriteParamValueToStream<ParamType::TGLuint>(os, paramValue.GLuintVal);
            break;
        case ParamType::TGLuint64:
            WriteParamValueToStream<ParamType::TGLuint64>(os, paramValue.GLuint64Val);
            break;
        case ParamType::TGLuint64ConstPointer:
            WriteParamValueToStream<ParamType::TGLuint64ConstPointer>(
                os, paramValue.GLuint64ConstPointerVal);
            break;
        case ParamType::TGLuint64Pointer:
            WriteParamValueToStream<ParamType::TGLuint64Pointer>(os, paramValue.GLuint64PointerVal);
            break;
        case ParamType::TGLuintConstPointer:
            WriteParamValueToStream<ParamType::TGLuintConstPointer>(
                os, paramValue.GLuintConstPointerVal);
            break;
        case ParamType::TGLuintPointer:
            WriteParamValueToStream<ParamType::TGLuintPointer>(os, paramValue.GLuintPointerVal);
            break;
        case ParamType::TGLushort:
            WriteParamValueToStream<ParamType::TGLushort>(os, paramValue.GLushortVal);
            break;
        case ParamType::TGLushortConstPointer:
            WriteParamValueToStream<ParamType::TGLushortConstPointer>(
                os, paramValue.GLushortConstPointerVal);
            break;
        case ParamType::TGLushortPointer:
            WriteParamValueToStream<ParamType::TGLushortPointer>(os, paramValue.GLushortPointerVal);
            break;
        case ParamType::TGLvoidConstPointer:
            WriteParamValueToStream<ParamType::TGLvoidConstPointer>(
                os, paramValue.GLvoidConstPointerVal);
            break;
        case ParamType::TGLvoidConstPointerPointer:
            WriteParamValueToStream<ParamType::TGLvoidConstPointerPointer>(
                os, paramValue.GLvoidConstPointerPointerVal);
            break;
        case ParamType::TGraphicsResetStatus:
            WriteParamValueToStream<ParamType::TGraphicsResetStatus>(
                os, paramValue.GraphicsResetStatusVal);
            break;
        case ParamType::THandleType:
            WriteParamValueToStream<ParamType::THandleType>(os, paramValue.HandleTypeVal);
            break;
        case ParamType::TLightParameter:
            WriteParamValueToStream<ParamType::TLightParameter>(os, paramValue.LightParameterVal);
            break;
        case ParamType::TLogicalOperation:
            WriteParamValueToStream<ParamType::TLogicalOperation>(os,
                                                                  paramValue.LogicalOperationVal);
            break;
        case ParamType::TMaterialParameter:
            WriteParamValueToStream<ParamType::TMaterialParameter>(os,
                                                                   paramValue.MaterialParameterVal);
            break;
        case ParamType::TMatrixType:
            WriteParamValueToStream<ParamType::TMatrixType>(os, paramValue.MatrixTypeVal);
            break;
        case ParamType::TMemoryObjectID:
            WriteParamValueToStream<ParamType::TMemoryObjectID>(os, paramValue.MemoryObjectIDVal);
            break;
        case ParamType::TMemoryObjectIDConstPointer:
            WriteParamValueToStream<ParamType::TMemoryObjectIDConstPointer>(
                os, paramValue.MemoryObjectIDConstPointerVal);
            break;
        case ParamType::TMemoryObjectIDPointer:
            WriteParamValueToStream<ParamType::TMemoryObjectIDPointer>(
                os, paramValue.MemoryObjectIDPointerVal);
            break;
        case ParamType::TPathID:
            WriteParamValueToStream<ParamType::TPathID>(os, paramValue.PathIDVal);
            break;
        case ParamType::TPointParameter:
            WriteParamValueToStream<ParamType::TPointParameter>(os, paramValue.PointParameterVal);
            break;
        case ParamType::TPrimitiveMode:
            WriteParamValueToStream<ParamType::TPrimitiveMode>(os, paramValue.PrimitiveModeVal);
            break;
        case ParamType::TProgramPipelineID:
            WriteParamValueToStream<ParamType::TProgramPipelineID>(os,
                                                                   paramValue.ProgramPipelineIDVal);
            break;
        case ParamType::TProgramPipelineIDConstPointer:
            WriteParamValueToStream<ParamType::TProgramPipelineIDConstPointer>(
                os, paramValue.ProgramPipelineIDConstPointerVal);
            break;
        case ParamType::TProgramPipelineIDPointer:
            WriteParamValueToStream<ParamType::TProgramPipelineIDPointer>(
                os, paramValue.ProgramPipelineIDPointerVal);
            break;
        case ParamType::TProvokingVertexConvention:
            WriteParamValueToStream<ParamType::TProvokingVertexConvention>(
                os, paramValue.ProvokingVertexConventionVal);
            break;
        case ParamType::TQueryID:
            WriteParamValueToStream<ParamType::TQueryID>(os, paramValue.QueryIDVal);
            break;
        case ParamType::TQueryIDConstPointer:
            WriteParamValueToStream<ParamType::TQueryIDConstPointer>(
                os, paramValue.QueryIDConstPointerVal);
            break;
        case ParamType::TQueryIDPointer:
            WriteParamValueToStream<ParamType::TQueryIDPointer>(os, paramValue.QueryIDPointerVal);
            break;
        case ParamType::TQueryType:
            WriteParamValueToStream<ParamType::TQueryType>(os, paramValue.QueryTypeVal);
            break;
        case ParamType::TRenderbufferID:
            WriteParamValueToStream<ParamType::TRenderbufferID>(os, paramValue.RenderbufferIDVal);
            break;
        case ParamType::TRenderbufferIDConstPointer:
            WriteParamValueToStream<ParamType::TRenderbufferIDConstPointer>(
                os, paramValue.RenderbufferIDConstPointerVal);
            break;
        case ParamType::TRenderbufferIDPointer:
            WriteParamValueToStream<ParamType::TRenderbufferIDPointer>(
                os, paramValue.RenderbufferIDPointerVal);
            break;
        case ParamType::TSamplerID:
            WriteParamValueToStream<ParamType::TSamplerID>(os, paramValue.SamplerIDVal);
            break;
        case ParamType::TSamplerIDConstPointer:
            WriteParamValueToStream<ParamType::TSamplerIDConstPointer>(
                os, paramValue.SamplerIDConstPointerVal);
            break;
        case ParamType::TSamplerIDPointer:
            WriteParamValueToStream<ParamType::TSamplerIDPointer>(os,
                                                                  paramValue.SamplerIDPointerVal);
            break;
        case ParamType::TSemaphoreID:
            WriteParamValueToStream<ParamType::TSemaphoreID>(os, paramValue.SemaphoreIDVal);
            break;
        case ParamType::TSemaphoreIDConstPointer:
            WriteParamValueToStream<ParamType::TSemaphoreIDConstPointer>(
                os, paramValue.SemaphoreIDConstPointerVal);
            break;
        case ParamType::TSemaphoreIDPointer:
            WriteParamValueToStream<ParamType::TSemaphoreIDPointer>(
                os, paramValue.SemaphoreIDPointerVal);
            break;
        case ParamType::TShaderProgramID:
            WriteParamValueToStream<ParamType::TShaderProgramID>(os, paramValue.ShaderProgramIDVal);
            break;
        case ParamType::TShaderProgramIDConstPointer:
            WriteParamValueToStream<ParamType::TShaderProgramIDConstPointer>(
                os, paramValue.ShaderProgramIDConstPointerVal);
            break;
        case ParamType::TShaderProgramIDPointer:
            WriteParamValueToStream<ParamType::TShaderProgramIDPointer>(
                os, paramValue.ShaderProgramIDPointerVal);
            break;
        case ParamType::TShaderType:
            WriteParamValueToStream<ParamType::TShaderType>(os, paramValue.ShaderTypeVal);
            break;
        case ParamType::TShadingModel:
            WriteParamValueToStream<ParamType::TShadingModel>(os, paramValue.ShadingModelVal);
            break;
        case ParamType::TTextureEnvParameter:
            WriteParamValueToStream<ParamType::TTextureEnvParameter>(
                os, paramValue.TextureEnvParameterVal);
            break;
        case ParamType::TTextureEnvTarget:
            WriteParamValueToStream<ParamType::TTextureEnvTarget>(os,
                                                                  paramValue.TextureEnvTargetVal);
            break;
        case ParamType::TTextureID:
            WriteParamValueToStream<ParamType::TTextureID>(os, paramValue.TextureIDVal);
            break;
        case ParamType::TTextureIDConstPointer:
            WriteParamValueToStream<ParamType::TTextureIDConstPointer>(
                os, paramValue.TextureIDConstPointerVal);
            break;
        case ParamType::TTextureIDPointer:
            WriteParamValueToStream<ParamType::TTextureIDPointer>(os,
                                                                  paramValue.TextureIDPointerVal);
            break;
        case ParamType::TTextureTarget:
            WriteParamValueToStream<ParamType::TTextureTarget>(os, paramValue.TextureTargetVal);
            break;
        case ParamType::TTextureType:
            WriteParamValueToStream<ParamType::TTextureType>(os, paramValue.TextureTypeVal);
            break;
        case ParamType::TTransformFeedbackID:
            WriteParamValueToStream<ParamType::TTransformFeedbackID>(
                os, paramValue.TransformFeedbackIDVal);
            break;
        case ParamType::TTransformFeedbackIDConstPointer:
            WriteParamValueToStream<ParamType::TTransformFeedbackIDConstPointer>(
                os, paramValue.TransformFeedbackIDConstPointerVal);
            break;
        case ParamType::TTransformFeedbackIDPointer:
            WriteParamValueToStream<ParamType::TTransformFeedbackIDPointer>(
                os, paramValue.TransformFeedbackIDPointerVal);
            break;
        case ParamType::TVertexArrayID:
            WriteParamValueToStream<ParamType::TVertexArrayID>(os, paramValue.VertexArrayIDVal);
            break;
        case ParamType::TVertexArrayIDConstPointer:
            WriteParamValueToStream<ParamType::TVertexArrayIDConstPointer>(
                os, paramValue.VertexArrayIDConstPointerVal);
            break;
        case ParamType::TVertexArrayIDPointer:
            WriteParamValueToStream<ParamType::TVertexArrayIDPointer>(
                os, paramValue.VertexArrayIDPointerVal);
            break;
        case ParamType::TVertexAttribType:
            WriteParamValueToStream<ParamType::TVertexAttribType>(os,
                                                                  paramValue.VertexAttribTypeVal);
            break;
        case ParamType::TvoidConstPointer:
            WriteParamValueToStream<ParamType::TvoidConstPointer>(os,
                                                                  paramValue.voidConstPointerVal);
            break;
        case ParamType::TvoidConstPointerPointer:
            WriteParamValueToStream<ParamType::TvoidConstPointerPointer>(
                os, paramValue.voidConstPointerPointerVal);
            break;
        case ParamType::TvoidPointer:
            WriteParamValueToStream<ParamType::TvoidPointer>(os, paramValue.voidPointerVal);
            break;
        case ParamType::TvoidPointerPointer:
            WriteParamValueToStream<ParamType::TvoidPointerPointer>(
                os, paramValue.voidPointerPointerVal);
            break;
        default:
            os << "unknown";
            break;
    }
}

const char *ParamTypeToString(ParamType paramType)
{
    switch (paramType)
    {
        case ParamType::TAlphaTestFunc:
            return "GLenum";
        case ParamType::TBufferBinding:
            return "GLenum";
        case ParamType::TBufferID:
            return "GLuint";
        case ParamType::TBufferIDConstPointer:
            return "const GLuint *";
        case ParamType::TBufferIDPointer:
            return "GLuint *";
        case ParamType::TBufferUsage:
            return "GLenum";
        case ParamType::TClientVertexArrayType:
            return "GLenum";
        case ParamType::TCullFaceMode:
            return "GLenum";
        case ParamType::TDrawElementsType:
            return "GLenum";
        case ParamType::TFenceNVID:
            return "GLuint";
        case ParamType::TFenceNVIDConstPointer:
            return "const GLuint *";
        case ParamType::TFenceNVIDPointer:
            return "GLuint *";
        case ParamType::TFramebufferID:
            return "GLuint";
        case ParamType::TFramebufferIDConstPointer:
            return "const GLuint *";
        case ParamType::TFramebufferIDPointer:
            return "GLuint *";
        case ParamType::TGLDEBUGPROC:
            return "GLDEBUGPROC";
        case ParamType::TGLDEBUGPROCKHR:
            return "GLDEBUGPROCKHR";
        case ParamType::TGLbitfield:
            return "GLbitfield";
        case ParamType::TGLboolean:
            return "GLboolean";
        case ParamType::TGLbooleanConstPointer:
            return "const GLboolean *";
        case ParamType::TGLbooleanPointer:
            return "GLboolean *";
        case ParamType::TGLbyte:
            return "GLbyte";
        case ParamType::TGLbyteConstPointer:
            return "const GLbyte *";
        case ParamType::TGLcharConstPointer:
            return "const GLchar *";
        case ParamType::TGLcharConstPointerPointer:
            return "const GLchar * const *";
        case ParamType::TGLcharPointer:
            return "GLchar *";
        case ParamType::TGLclampx:
            return "GLclampx";
        case ParamType::TGLdouble:
            return "GLdouble";
        case ParamType::TGLdoubleConstPointer:
            return "const GLdouble *";
        case ParamType::TGLdoublePointer:
            return "GLdouble *";
        case ParamType::TGLeglImageOES:
            return "GLeglImageOES";
        case ParamType::TGLenum:
            return "GLenum";
        case ParamType::TGLenumConstPointer:
            return "const GLenum *";
        case ParamType::TGLenumPointer:
            return "GLenum *";
        case ParamType::TGLfixed:
            return "GLfixed";
        case ParamType::TGLfixedConstPointer:
            return "const GLfixed *";
        case ParamType::TGLfixedPointer:
            return "GLfixed *";
        case ParamType::TGLfloat:
            return "GLfloat";
        case ParamType::TGLfloatConstPointer:
            return "const GLfloat *";
        case ParamType::TGLfloatPointer:
            return "GLfloat *";
        case ParamType::TGLint:
            return "GLint";
        case ParamType::TGLint64Pointer:
            return "GLint64 *";
        case ParamType::TGLintConstPointer:
            return "const GLint *";
        case ParamType::TGLintPointer:
            return "GLint *";
        case ParamType::TGLintptr:
            return "GLintptr";
        case ParamType::TGLintptrConstPointer:
            return "const GLintptr *";
        case ParamType::TGLshort:
            return "GLshort";
        case ParamType::TGLshortConstPointer:
            return "const GLshort *";
        case ParamType::TGLsizei:
            return "GLsizei";
        case ParamType::TGLsizeiConstPointer:
            return "const GLsizei *";
        case ParamType::TGLsizeiPointer:
            return "GLsizei *";
        case ParamType::TGLsizeiptr:
            return "GLsizeiptr";
        case ParamType::TGLsizeiptrConstPointer:
            return "const GLsizeiptr *";
        case ParamType::TGLsync:
            return "GLsync";
        case ParamType::TGLubyte:
            return "GLubyte";
        case ParamType::TGLubyteConstPointer:
            return "const GLubyte *";
        case ParamType::TGLubytePointer:
            return "GLubyte *";
        case ParamType::TGLuint:
            return "GLuint";
        case ParamType::TGLuint64:
            return "GLuint64";
        case ParamType::TGLuint64ConstPointer:
            return "const GLuint64 *";
        case ParamType::TGLuint64Pointer:
            return "GLuint64 *";
        case ParamType::TGLuintConstPointer:
            return "const GLuint *";
        case ParamType::TGLuintPointer:
            return "GLuint *";
        case ParamType::TGLushort:
            return "GLushort";
        case ParamType::TGLushortConstPointer:
            return "const GLushort *";
        case ParamType::TGLushortPointer:
            return "GLushort *";
        case ParamType::TGLvoidConstPointer:
            return "const GLvoid *";
        case ParamType::TGLvoidConstPointerPointer:
            return "const GLvoid * const *";
        case ParamType::TGraphicsResetStatus:
            return "GLenum";
        case ParamType::THandleType:
            return "GLenum";
        case ParamType::TLightParameter:
            return "GLenum";
        case ParamType::TLogicalOperation:
            return "GLenum";
        case ParamType::TMaterialParameter:
            return "GLenum";
        case ParamType::TMatrixType:
            return "GLenum";
        case ParamType::TMemoryObjectID:
            return "GLuint";
        case ParamType::TMemoryObjectIDConstPointer:
            return "const GLuint *";
        case ParamType::TMemoryObjectIDPointer:
            return "GLuint *";
        case ParamType::TPathID:
            return "GLuint";
        case ParamType::TPointParameter:
            return "GLenum";
        case ParamType::TPrimitiveMode:
            return "GLenum";
        case ParamType::TProgramPipelineID:
            return "GLuint";
        case ParamType::TProgramPipelineIDConstPointer:
            return "const GLuint *";
        case ParamType::TProgramPipelineIDPointer:
            return "GLuint *";
        case ParamType::TProvokingVertexConvention:
            return "GLenum";
        case ParamType::TQueryID:
            return "GLuint";
        case ParamType::TQueryIDConstPointer:
            return "const GLuint *";
        case ParamType::TQueryIDPointer:
            return "GLuint *";
        case ParamType::TQueryType:
            return "GLenum";
        case ParamType::TRenderbufferID:
            return "GLuint";
        case ParamType::TRenderbufferIDConstPointer:
            return "const GLuint *";
        case ParamType::TRenderbufferIDPointer:
            return "GLuint *";
        case ParamType::TSamplerID:
            return "GLuint";
        case ParamType::TSamplerIDConstPointer:
            return "const GLuint *";
        case ParamType::TSamplerIDPointer:
            return "GLuint *";
        case ParamType::TSemaphoreID:
            return "GLuint";
        case ParamType::TSemaphoreIDConstPointer:
            return "const GLuint *";
        case ParamType::TSemaphoreIDPointer:
            return "GLuint *";
        case ParamType::TShaderProgramID:
            return "GLuint";
        case ParamType::TShaderProgramIDConstPointer:
            return "const GLuint *";
        case ParamType::TShaderProgramIDPointer:
            return "GLuint *";
        case ParamType::TShaderType:
            return "GLenum";
        case ParamType::TShadingModel:
            return "GLenum";
        case ParamType::TTextureEnvParameter:
            return "GLenum";
        case ParamType::TTextureEnvTarget:
            return "GLenum";
        case ParamType::TTextureID:
            return "GLuint";
        case ParamType::TTextureIDConstPointer:
            return "const GLuint *";
        case ParamType::TTextureIDPointer:
            return "GLuint *";
        case ParamType::TTextureTarget:
            return "GLenum";
        case ParamType::TTextureType:
            return "GLenum";
        case ParamType::TTransformFeedbackID:
            return "GLuint";
        case ParamType::TTransformFeedbackIDConstPointer:
            return "const GLuint *";
        case ParamType::TTransformFeedbackIDPointer:
            return "GLuint *";
        case ParamType::TVertexArrayID:
            return "GLuint";
        case ParamType::TVertexArrayIDConstPointer:
            return "const GLuint *";
        case ParamType::TVertexArrayIDPointer:
            return "GLuint *";
        case ParamType::TVertexAttribType:
            return "GLenum";
        case ParamType::TvoidConstPointer:
            return "const void *";
        case ParamType::TvoidConstPointerPointer:
            return "const void * const *";
        case ParamType::TvoidPointer:
            return "void *";
        case ParamType::TvoidPointerPointer:
            return "void **";
        default:
            UNREACHABLE();
            return "unknown";
    }
}

ResourceIDType GetResourceIDTypeFromParamType(ParamType paramType)
{
    switch (paramType)
    {
        case ParamType::TBufferID:
            return ResourceIDType::Buffer;
        case ParamType::TBufferIDConstPointer:
            return ResourceIDType::Buffer;
        case ParamType::TBufferIDPointer:
            return ResourceIDType::Buffer;
        case ParamType::TFenceNVID:
            return ResourceIDType::FenceNV;
        case ParamType::TFenceNVIDConstPointer:
            return ResourceIDType::FenceNV;
        case ParamType::TFenceNVIDPointer:
            return ResourceIDType::FenceNV;
        case ParamType::TFramebufferID:
            return ResourceIDType::Framebuffer;
        case ParamType::TFramebufferIDConstPointer:
            return ResourceIDType::Framebuffer;
        case ParamType::TFramebufferIDPointer:
            return ResourceIDType::Framebuffer;
        case ParamType::TMemoryObjectID:
            return ResourceIDType::MemoryObject;
        case ParamType::TMemoryObjectIDConstPointer:
            return ResourceIDType::MemoryObject;
        case ParamType::TMemoryObjectIDPointer:
            return ResourceIDType::MemoryObject;
        case ParamType::TPathID:
            return ResourceIDType::Path;
        case ParamType::TProgramPipelineID:
            return ResourceIDType::ProgramPipeline;
        case ParamType::TProgramPipelineIDConstPointer:
            return ResourceIDType::ProgramPipeline;
        case ParamType::TProgramPipelineIDPointer:
            return ResourceIDType::ProgramPipeline;
        case ParamType::TQueryID:
            return ResourceIDType::Query;
        case ParamType::TQueryIDConstPointer:
            return ResourceIDType::Query;
        case ParamType::TQueryIDPointer:
            return ResourceIDType::Query;
        case ParamType::TRenderbufferID:
            return ResourceIDType::Renderbuffer;
        case ParamType::TRenderbufferIDConstPointer:
            return ResourceIDType::Renderbuffer;
        case ParamType::TRenderbufferIDPointer:
            return ResourceIDType::Renderbuffer;
        case ParamType::TSamplerID:
            return ResourceIDType::Sampler;
        case ParamType::TSamplerIDConstPointer:
            return ResourceIDType::Sampler;
        case ParamType::TSamplerIDPointer:
            return ResourceIDType::Sampler;
        case ParamType::TSemaphoreID:
            return ResourceIDType::Semaphore;
        case ParamType::TSemaphoreIDConstPointer:
            return ResourceIDType::Semaphore;
        case ParamType::TSemaphoreIDPointer:
            return ResourceIDType::Semaphore;
        case ParamType::TShaderProgramID:
            return ResourceIDType::ShaderProgram;
        case ParamType::TShaderProgramIDConstPointer:
            return ResourceIDType::ShaderProgram;
        case ParamType::TShaderProgramIDPointer:
            return ResourceIDType::ShaderProgram;
        case ParamType::TTextureID:
            return ResourceIDType::Texture;
        case ParamType::TTextureIDConstPointer:
            return ResourceIDType::Texture;
        case ParamType::TTextureIDPointer:
            return ResourceIDType::Texture;
        case ParamType::TTransformFeedbackID:
            return ResourceIDType::TransformFeedback;
        case ParamType::TTransformFeedbackIDConstPointer:
            return ResourceIDType::TransformFeedback;
        case ParamType::TTransformFeedbackIDPointer:
            return ResourceIDType::TransformFeedback;
        case ParamType::TVertexArrayID:
            return ResourceIDType::VertexArray;
        case ParamType::TVertexArrayIDConstPointer:
            return ResourceIDType::VertexArray;
        case ParamType::TVertexArrayIDPointer:
            return ResourceIDType::VertexArray;
        default:
            return ResourceIDType::InvalidEnum;
    }
}

const char *GetResourceIDTypeName(ResourceIDType resourceIDType)
{
    switch (resourceIDType)
    {
        case ResourceIDType::Buffer:
            return "Buffer";
        case ResourceIDType::FenceNV:
            return "FenceNV";
        case ResourceIDType::Framebuffer:
            return "Framebuffer";
        case ResourceIDType::MemoryObject:
            return "MemoryObject";
        case ResourceIDType::Path:
            return "Path";
        case ResourceIDType::ProgramPipeline:
            return "ProgramPipeline";
        case ResourceIDType::Query:
            return "Query";
        case ResourceIDType::Renderbuffer:
            return "Renderbuffer";
        case ResourceIDType::Sampler:
            return "Sampler";
        case ResourceIDType::Semaphore:
            return "Semaphore";
        case ResourceIDType::ShaderProgram:
            return "ShaderProgram";
        case ResourceIDType::Texture:
            return "Texture";
        case ResourceIDType::TransformFeedback:
            return "TransformFeedback";
        case ResourceIDType::VertexArray:
            return "VertexArray";
        default:
            UNREACHABLE();
            return "GetResourceIDTypeName error";
    }
}
}  // namespace angle
