// GENERATED FILE - DO NOT EDIT.
// Generated by generate_entry_points.py using data from gl.xml and gl_angle_ext.xml.
//
// Copyright 2020 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.h:
//   ANGLE Frame capture types and helper functions.

#ifndef LIBANGLE_FRAME_CAPTURE_UTILS_AUTOGEN_H_
#define LIBANGLE_FRAME_CAPTURE_UTILS_AUTOGEN_H_

#include "common/PackedEnums.h"

namespace angle
{
enum class ParamType
{
    TAlphaTestFunc,
    TBufferBinding,
    TBufferID,
    TBufferIDConstPointer,
    TBufferIDPointer,
    TBufferUsage,
    TClientVertexArrayType,
    TCullFaceMode,
    TDrawElementsType,
    TFenceNVID,
    TFenceNVIDConstPointer,
    TFenceNVIDPointer,
    TFramebufferID,
    TFramebufferIDConstPointer,
    TFramebufferIDPointer,
    TGLDEBUGPROC,
    TGLDEBUGPROCKHR,
    TGLbitfield,
    TGLboolean,
    TGLbooleanConstPointer,
    TGLbooleanPointer,
    TGLbyte,
    TGLbyteConstPointer,
    TGLcharConstPointer,
    TGLcharConstPointerPointer,
    TGLcharPointer,
    TGLclampx,
    TGLdouble,
    TGLdoubleConstPointer,
    TGLdoublePointer,
    TGLeglClientBufferEXT,
    TGLeglImageOES,
    TGLenum,
    TGLenumConstPointer,
    TGLenumPointer,
    TGLfixed,
    TGLfixedConstPointer,
    TGLfixedPointer,
    TGLfloat,
    TGLfloatConstPointer,
    TGLfloatPointer,
    TGLint,
    TGLint64Pointer,
    TGLintConstPointer,
    TGLintPointer,
    TGLintptr,
    TGLintptrConstPointer,
    TGLshort,
    TGLshortConstPointer,
    TGLsizei,
    TGLsizeiConstPointer,
    TGLsizeiPointer,
    TGLsizeiptr,
    TGLsizeiptrConstPointer,
    TGLsync,
    TGLubyte,
    TGLubyteConstPointer,
    TGLubytePointer,
    TGLuint,
    TGLuint64,
    TGLuint64ConstPointer,
    TGLuint64Pointer,
    TGLuintConstPointer,
    TGLuintPointer,
    TGLushort,
    TGLushortConstPointer,
    TGLushortPointer,
    TGLvoidConstPointer,
    TGLvoidConstPointerPointer,
    TGraphicsResetStatus,
    THandleType,
    TLightParameter,
    TLogicalOperation,
    TMaterialParameter,
    TMatrixType,
    TMemoryObjectID,
    TMemoryObjectIDConstPointer,
    TMemoryObjectIDPointer,
    TPointParameter,
    TPrimitiveMode,
    TProgramPipelineID,
    TProgramPipelineIDConstPointer,
    TProgramPipelineIDPointer,
    TProvokingVertexConvention,
    TQueryID,
    TQueryIDConstPointer,
    TQueryIDPointer,
    TQueryType,
    TRenderbufferID,
    TRenderbufferIDConstPointer,
    TRenderbufferIDPointer,
    TSamplerID,
    TSamplerIDConstPointer,
    TSamplerIDPointer,
    TSemaphoreID,
    TSemaphoreIDConstPointer,
    TSemaphoreIDPointer,
    TShaderProgramID,
    TShaderProgramIDConstPointer,
    TShaderProgramIDPointer,
    TShaderType,
    TShadingModel,
    TTextureEnvParameter,
    TTextureEnvTarget,
    TTextureID,
    TTextureIDConstPointer,
    TTextureIDPointer,
    TTextureTarget,
    TTextureType,
    TTransformFeedbackID,
    TTransformFeedbackIDConstPointer,
    TTransformFeedbackIDPointer,
    TUniformLocation,
    TVertexArrayID,
    TVertexArrayIDConstPointer,
    TVertexArrayIDPointer,
    TVertexAttribType,
    TvoidConstPointer,
    TvoidConstPointerPointer,
    TvoidPointer,
    TvoidPointerPointer,
};

constexpr uint32_t kParamTypeCount = 121;

union ParamValue
{
    gl::AlphaTestFunc AlphaTestFuncVal;
    gl::BufferBinding BufferBindingVal;
    gl::BufferID BufferIDVal;
    const gl::BufferID *BufferIDConstPointerVal;
    gl::BufferID *BufferIDPointerVal;
    gl::BufferUsage BufferUsageVal;
    gl::ClientVertexArrayType ClientVertexArrayTypeVal;
    gl::CullFaceMode CullFaceModeVal;
    gl::DrawElementsType DrawElementsTypeVal;
    gl::FenceNVID FenceNVIDVal;
    const gl::FenceNVID *FenceNVIDConstPointerVal;
    gl::FenceNVID *FenceNVIDPointerVal;
    gl::FramebufferID FramebufferIDVal;
    const gl::FramebufferID *FramebufferIDConstPointerVal;
    gl::FramebufferID *FramebufferIDPointerVal;
    GLDEBUGPROC GLDEBUGPROCVal;
    GLDEBUGPROCKHR GLDEBUGPROCKHRVal;
    GLbitfield GLbitfieldVal;
    GLboolean GLbooleanVal;
    const GLboolean *GLbooleanConstPointerVal;
    GLboolean *GLbooleanPointerVal;
    GLbyte GLbyteVal;
    const GLbyte *GLbyteConstPointerVal;
    const GLchar *GLcharConstPointerVal;
    const GLchar *const *GLcharConstPointerPointerVal;
    GLchar *GLcharPointerVal;
    GLclampx GLclampxVal;
    GLdouble GLdoubleVal;
    const GLdouble *GLdoubleConstPointerVal;
    GLdouble *GLdoublePointerVal;
    GLeglClientBufferEXT GLeglClientBufferEXTVal;
    GLeglImageOES GLeglImageOESVal;
    GLenum GLenumVal;
    const GLenum *GLenumConstPointerVal;
    GLenum *GLenumPointerVal;
    GLfixed GLfixedVal;
    const GLfixed *GLfixedConstPointerVal;
    GLfixed *GLfixedPointerVal;
    GLfloat GLfloatVal;
    const GLfloat *GLfloatConstPointerVal;
    GLfloat *GLfloatPointerVal;
    GLint GLintVal;
    GLint64 *GLint64PointerVal;
    const GLint *GLintConstPointerVal;
    GLint *GLintPointerVal;
    GLintptr GLintptrVal;
    const GLintptr *GLintptrConstPointerVal;
    GLshort GLshortVal;
    const GLshort *GLshortConstPointerVal;
    GLsizei GLsizeiVal;
    const GLsizei *GLsizeiConstPointerVal;
    GLsizei *GLsizeiPointerVal;
    GLsizeiptr GLsizeiptrVal;
    const GLsizeiptr *GLsizeiptrConstPointerVal;
    GLsync GLsyncVal;
    GLubyte GLubyteVal;
    const GLubyte *GLubyteConstPointerVal;
    GLubyte *GLubytePointerVal;
    GLuint GLuintVal;
    GLuint64 GLuint64Val;
    const GLuint64 *GLuint64ConstPointerVal;
    GLuint64 *GLuint64PointerVal;
    const GLuint *GLuintConstPointerVal;
    GLuint *GLuintPointerVal;
    GLushort GLushortVal;
    const GLushort *GLushortConstPointerVal;
    GLushort *GLushortPointerVal;
    const GLvoid *GLvoidConstPointerVal;
    const GLvoid *const *GLvoidConstPointerPointerVal;
    gl::GraphicsResetStatus GraphicsResetStatusVal;
    gl::HandleType HandleTypeVal;
    gl::LightParameter LightParameterVal;
    gl::LogicalOperation LogicalOperationVal;
    gl::MaterialParameter MaterialParameterVal;
    gl::MatrixType MatrixTypeVal;
    gl::MemoryObjectID MemoryObjectIDVal;
    const gl::MemoryObjectID *MemoryObjectIDConstPointerVal;
    gl::MemoryObjectID *MemoryObjectIDPointerVal;
    gl::PointParameter PointParameterVal;
    gl::PrimitiveMode PrimitiveModeVal;
    gl::ProgramPipelineID ProgramPipelineIDVal;
    const gl::ProgramPipelineID *ProgramPipelineIDConstPointerVal;
    gl::ProgramPipelineID *ProgramPipelineIDPointerVal;
    gl::ProvokingVertexConvention ProvokingVertexConventionVal;
    gl::QueryID QueryIDVal;
    const gl::QueryID *QueryIDConstPointerVal;
    gl::QueryID *QueryIDPointerVal;
    gl::QueryType QueryTypeVal;
    gl::RenderbufferID RenderbufferIDVal;
    const gl::RenderbufferID *RenderbufferIDConstPointerVal;
    gl::RenderbufferID *RenderbufferIDPointerVal;
    gl::SamplerID SamplerIDVal;
    const gl::SamplerID *SamplerIDConstPointerVal;
    gl::SamplerID *SamplerIDPointerVal;
    gl::SemaphoreID SemaphoreIDVal;
    const gl::SemaphoreID *SemaphoreIDConstPointerVal;
    gl::SemaphoreID *SemaphoreIDPointerVal;
    gl::ShaderProgramID ShaderProgramIDVal;
    const gl::ShaderProgramID *ShaderProgramIDConstPointerVal;
    gl::ShaderProgramID *ShaderProgramIDPointerVal;
    gl::ShaderType ShaderTypeVal;
    gl::ShadingModel ShadingModelVal;
    gl::TextureEnvParameter TextureEnvParameterVal;
    gl::TextureEnvTarget TextureEnvTargetVal;
    gl::TextureID TextureIDVal;
    const gl::TextureID *TextureIDConstPointerVal;
    gl::TextureID *TextureIDPointerVal;
    gl::TextureTarget TextureTargetVal;
    gl::TextureType TextureTypeVal;
    gl::TransformFeedbackID TransformFeedbackIDVal;
    const gl::TransformFeedbackID *TransformFeedbackIDConstPointerVal;
    gl::TransformFeedbackID *TransformFeedbackIDPointerVal;
    gl::UniformLocation UniformLocationVal;
    gl::VertexArrayID VertexArrayIDVal;
    const gl::VertexArrayID *VertexArrayIDConstPointerVal;
    gl::VertexArrayID *VertexArrayIDPointerVal;
    gl::VertexAttribType VertexAttribTypeVal;
    const void *voidConstPointerVal;
    const void *const *voidConstPointerPointerVal;
    void *voidPointerVal;
    void **voidPointerPointerVal;
};

template <ParamType PType, typename T>
T GetParamVal(const ParamValue &value);

template <>
inline gl::AlphaTestFunc GetParamVal<ParamType::TAlphaTestFunc, gl::AlphaTestFunc>(
    const ParamValue &value)
{
    return value.AlphaTestFuncVal;
}

template <>
inline gl::BufferBinding GetParamVal<ParamType::TBufferBinding, gl::BufferBinding>(
    const ParamValue &value)
{
    return value.BufferBindingVal;
}

template <>
inline gl::BufferID GetParamVal<ParamType::TBufferID, gl::BufferID>(const ParamValue &value)
{
    return value.BufferIDVal;
}

template <>
inline const gl::BufferID *GetParamVal<ParamType::TBufferIDConstPointer, const gl::BufferID *>(
    const ParamValue &value)
{
    return value.BufferIDConstPointerVal;
}

template <>
inline gl::BufferID *GetParamVal<ParamType::TBufferIDPointer, gl::BufferID *>(
    const ParamValue &value)
{
    return value.BufferIDPointerVal;
}

template <>
inline gl::BufferUsage GetParamVal<ParamType::TBufferUsage, gl::BufferUsage>(
    const ParamValue &value)
{
    return value.BufferUsageVal;
}

template <>
inline gl::ClientVertexArrayType
GetParamVal<ParamType::TClientVertexArrayType, gl::ClientVertexArrayType>(const ParamValue &value)
{
    return value.ClientVertexArrayTypeVal;
}

template <>
inline gl::CullFaceMode GetParamVal<ParamType::TCullFaceMode, gl::CullFaceMode>(
    const ParamValue &value)
{
    return value.CullFaceModeVal;
}

template <>
inline gl::DrawElementsType GetParamVal<ParamType::TDrawElementsType, gl::DrawElementsType>(
    const ParamValue &value)
{
    return value.DrawElementsTypeVal;
}

template <>
inline gl::FenceNVID GetParamVal<ParamType::TFenceNVID, gl::FenceNVID>(const ParamValue &value)
{
    return value.FenceNVIDVal;
}

template <>
inline const gl::FenceNVID *GetParamVal<ParamType::TFenceNVIDConstPointer, const gl::FenceNVID *>(
    const ParamValue &value)
{
    return value.FenceNVIDConstPointerVal;
}

template <>
inline gl::FenceNVID *GetParamVal<ParamType::TFenceNVIDPointer, gl::FenceNVID *>(
    const ParamValue &value)
{
    return value.FenceNVIDPointerVal;
}

template <>
inline gl::FramebufferID GetParamVal<ParamType::TFramebufferID, gl::FramebufferID>(
    const ParamValue &value)
{
    return value.FramebufferIDVal;
}

template <>
inline const gl::FramebufferID *GetParamVal<ParamType::TFramebufferIDConstPointer,
                                            const gl::FramebufferID *>(const ParamValue &value)
{
    return value.FramebufferIDConstPointerVal;
}

template <>
inline gl::FramebufferID *GetParamVal<ParamType::TFramebufferIDPointer, gl::FramebufferID *>(
    const ParamValue &value)
{
    return value.FramebufferIDPointerVal;
}

template <>
inline GLDEBUGPROC GetParamVal<ParamType::TGLDEBUGPROC, GLDEBUGPROC>(const ParamValue &value)
{
    return value.GLDEBUGPROCVal;
}

template <>
inline GLDEBUGPROCKHR GetParamVal<ParamType::TGLDEBUGPROCKHR, GLDEBUGPROCKHR>(
    const ParamValue &value)
{
    return value.GLDEBUGPROCKHRVal;
}

template <>
inline GLbitfield GetParamVal<ParamType::TGLbitfield, GLbitfield>(const ParamValue &value)
{
    return value.GLbitfieldVal;
}

template <>
inline GLboolean GetParamVal<ParamType::TGLboolean, GLboolean>(const ParamValue &value)
{
    return value.GLbooleanVal;
}

template <>
inline const GLboolean *GetParamVal<ParamType::TGLbooleanConstPointer, const GLboolean *>(
    const ParamValue &value)
{
    return value.GLbooleanConstPointerVal;
}

template <>
inline GLboolean *GetParamVal<ParamType::TGLbooleanPointer, GLboolean *>(const ParamValue &value)
{
    return value.GLbooleanPointerVal;
}

template <>
inline GLbyte GetParamVal<ParamType::TGLbyte, GLbyte>(const ParamValue &value)
{
    return value.GLbyteVal;
}

template <>
inline const GLbyte *GetParamVal<ParamType::TGLbyteConstPointer, const GLbyte *>(
    const ParamValue &value)
{
    return value.GLbyteConstPointerVal;
}

template <>
inline const GLchar *GetParamVal<ParamType::TGLcharConstPointer, const GLchar *>(
    const ParamValue &value)
{
    return value.GLcharConstPointerVal;
}

template <>
inline const GLchar *const *
GetParamVal<ParamType::TGLcharConstPointerPointer, const GLchar *const *>(const ParamValue &value)
{
    return value.GLcharConstPointerPointerVal;
}

template <>
inline GLchar *GetParamVal<ParamType::TGLcharPointer, GLchar *>(const ParamValue &value)
{
    return value.GLcharPointerVal;
}

template <>
inline GLclampx GetParamVal<ParamType::TGLclampx, GLclampx>(const ParamValue &value)
{
    return value.GLclampxVal;
}

template <>
inline GLdouble GetParamVal<ParamType::TGLdouble, GLdouble>(const ParamValue &value)
{
    return value.GLdoubleVal;
}

template <>
inline const GLdouble *GetParamVal<ParamType::TGLdoubleConstPointer, const GLdouble *>(
    const ParamValue &value)
{
    return value.GLdoubleConstPointerVal;
}

template <>
inline GLdouble *GetParamVal<ParamType::TGLdoublePointer, GLdouble *>(const ParamValue &value)
{
    return value.GLdoublePointerVal;
}

template <>
inline GLeglClientBufferEXT GetParamVal<ParamType::TGLeglClientBufferEXT, GLeglClientBufferEXT>(
    const ParamValue &value)
{
    return value.GLeglClientBufferEXTVal;
}

template <>
inline GLeglImageOES GetParamVal<ParamType::TGLeglImageOES, GLeglImageOES>(const ParamValue &value)
{
    return value.GLeglImageOESVal;
}

template <>
inline GLenum GetParamVal<ParamType::TGLenum, GLenum>(const ParamValue &value)
{
    return value.GLenumVal;
}

template <>
inline const GLenum *GetParamVal<ParamType::TGLenumConstPointer, const GLenum *>(
    const ParamValue &value)
{
    return value.GLenumConstPointerVal;
}

template <>
inline GLenum *GetParamVal<ParamType::TGLenumPointer, GLenum *>(const ParamValue &value)
{
    return value.GLenumPointerVal;
}

template <>
inline GLfixed GetParamVal<ParamType::TGLfixed, GLfixed>(const ParamValue &value)
{
    return value.GLfixedVal;
}

template <>
inline const GLfixed *GetParamVal<ParamType::TGLfixedConstPointer, const GLfixed *>(
    const ParamValue &value)
{
    return value.GLfixedConstPointerVal;
}

template <>
inline GLfixed *GetParamVal<ParamType::TGLfixedPointer, GLfixed *>(const ParamValue &value)
{
    return value.GLfixedPointerVal;
}

template <>
inline GLfloat GetParamVal<ParamType::TGLfloat, GLfloat>(const ParamValue &value)
{
    return value.GLfloatVal;
}

template <>
inline const GLfloat *GetParamVal<ParamType::TGLfloatConstPointer, const GLfloat *>(
    const ParamValue &value)
{
    return value.GLfloatConstPointerVal;
}

template <>
inline GLfloat *GetParamVal<ParamType::TGLfloatPointer, GLfloat *>(const ParamValue &value)
{
    return value.GLfloatPointerVal;
}

template <>
inline GLint GetParamVal<ParamType::TGLint, GLint>(const ParamValue &value)
{
    return value.GLintVal;
}

template <>
inline GLint64 *GetParamVal<ParamType::TGLint64Pointer, GLint64 *>(const ParamValue &value)
{
    return value.GLint64PointerVal;
}

template <>
inline const GLint *GetParamVal<ParamType::TGLintConstPointer, const GLint *>(
    const ParamValue &value)
{
    return value.GLintConstPointerVal;
}

template <>
inline GLint *GetParamVal<ParamType::TGLintPointer, GLint *>(const ParamValue &value)
{
    return value.GLintPointerVal;
}

template <>
inline GLintptr GetParamVal<ParamType::TGLintptr, GLintptr>(const ParamValue &value)
{
    return value.GLintptrVal;
}

template <>
inline const GLintptr *GetParamVal<ParamType::TGLintptrConstPointer, const GLintptr *>(
    const ParamValue &value)
{
    return value.GLintptrConstPointerVal;
}

template <>
inline GLshort GetParamVal<ParamType::TGLshort, GLshort>(const ParamValue &value)
{
    return value.GLshortVal;
}

template <>
inline const GLshort *GetParamVal<ParamType::TGLshortConstPointer, const GLshort *>(
    const ParamValue &value)
{
    return value.GLshortConstPointerVal;
}

template <>
inline GLsizei GetParamVal<ParamType::TGLsizei, GLsizei>(const ParamValue &value)
{
    return value.GLsizeiVal;
}

template <>
inline const GLsizei *GetParamVal<ParamType::TGLsizeiConstPointer, const GLsizei *>(
    const ParamValue &value)
{
    return value.GLsizeiConstPointerVal;
}

template <>
inline GLsizei *GetParamVal<ParamType::TGLsizeiPointer, GLsizei *>(const ParamValue &value)
{
    return value.GLsizeiPointerVal;
}

template <>
inline GLsizeiptr GetParamVal<ParamType::TGLsizeiptr, GLsizeiptr>(const ParamValue &value)
{
    return value.GLsizeiptrVal;
}

template <>
inline const GLsizeiptr *GetParamVal<ParamType::TGLsizeiptrConstPointer, const GLsizeiptr *>(
    const ParamValue &value)
{
    return value.GLsizeiptrConstPointerVal;
}

template <>
inline GLsync GetParamVal<ParamType::TGLsync, GLsync>(const ParamValue &value)
{
    return value.GLsyncVal;
}

template <>
inline GLubyte GetParamVal<ParamType::TGLubyte, GLubyte>(const ParamValue &value)
{
    return value.GLubyteVal;
}

template <>
inline const GLubyte *GetParamVal<ParamType::TGLubyteConstPointer, const GLubyte *>(
    const ParamValue &value)
{
    return value.GLubyteConstPointerVal;
}

template <>
inline GLubyte *GetParamVal<ParamType::TGLubytePointer, GLubyte *>(const ParamValue &value)
{
    return value.GLubytePointerVal;
}

template <>
inline GLuint GetParamVal<ParamType::TGLuint, GLuint>(const ParamValue &value)
{
    return value.GLuintVal;
}

template <>
inline GLuint64 GetParamVal<ParamType::TGLuint64, GLuint64>(const ParamValue &value)
{
    return value.GLuint64Val;
}

template <>
inline const GLuint64 *GetParamVal<ParamType::TGLuint64ConstPointer, const GLuint64 *>(
    const ParamValue &value)
{
    return value.GLuint64ConstPointerVal;
}

template <>
inline GLuint64 *GetParamVal<ParamType::TGLuint64Pointer, GLuint64 *>(const ParamValue &value)
{
    return value.GLuint64PointerVal;
}

template <>
inline const GLuint *GetParamVal<ParamType::TGLuintConstPointer, const GLuint *>(
    const ParamValue &value)
{
    return value.GLuintConstPointerVal;
}

template <>
inline GLuint *GetParamVal<ParamType::TGLuintPointer, GLuint *>(const ParamValue &value)
{
    return value.GLuintPointerVal;
}

template <>
inline GLushort GetParamVal<ParamType::TGLushort, GLushort>(const ParamValue &value)
{
    return value.GLushortVal;
}

template <>
inline const GLushort *GetParamVal<ParamType::TGLushortConstPointer, const GLushort *>(
    const ParamValue &value)
{
    return value.GLushortConstPointerVal;
}

template <>
inline GLushort *GetParamVal<ParamType::TGLushortPointer, GLushort *>(const ParamValue &value)
{
    return value.GLushortPointerVal;
}

template <>
inline const GLvoid *GetParamVal<ParamType::TGLvoidConstPointer, const GLvoid *>(
    const ParamValue &value)
{
    return value.GLvoidConstPointerVal;
}

template <>
inline const GLvoid *const *
GetParamVal<ParamType::TGLvoidConstPointerPointer, const GLvoid *const *>(const ParamValue &value)
{
    return value.GLvoidConstPointerPointerVal;
}

template <>
inline gl::GraphicsResetStatus
GetParamVal<ParamType::TGraphicsResetStatus, gl::GraphicsResetStatus>(const ParamValue &value)
{
    return value.GraphicsResetStatusVal;
}

template <>
inline gl::HandleType GetParamVal<ParamType::THandleType, gl::HandleType>(const ParamValue &value)
{
    return value.HandleTypeVal;
}

template <>
inline gl::LightParameter GetParamVal<ParamType::TLightParameter, gl::LightParameter>(
    const ParamValue &value)
{
    return value.LightParameterVal;
}

template <>
inline gl::LogicalOperation GetParamVal<ParamType::TLogicalOperation, gl::LogicalOperation>(
    const ParamValue &value)
{
    return value.LogicalOperationVal;
}

template <>
inline gl::MaterialParameter GetParamVal<ParamType::TMaterialParameter, gl::MaterialParameter>(
    const ParamValue &value)
{
    return value.MaterialParameterVal;
}

template <>
inline gl::MatrixType GetParamVal<ParamType::TMatrixType, gl::MatrixType>(const ParamValue &value)
{
    return value.MatrixTypeVal;
}

template <>
inline gl::MemoryObjectID GetParamVal<ParamType::TMemoryObjectID, gl::MemoryObjectID>(
    const ParamValue &value)
{
    return value.MemoryObjectIDVal;
}

template <>
inline const gl::MemoryObjectID *GetParamVal<ParamType::TMemoryObjectIDConstPointer,
                                             const gl::MemoryObjectID *>(const ParamValue &value)
{
    return value.MemoryObjectIDConstPointerVal;
}

template <>
inline gl::MemoryObjectID *GetParamVal<ParamType::TMemoryObjectIDPointer, gl::MemoryObjectID *>(
    const ParamValue &value)
{
    return value.MemoryObjectIDPointerVal;
}

template <>
inline gl::PointParameter GetParamVal<ParamType::TPointParameter, gl::PointParameter>(
    const ParamValue &value)
{
    return value.PointParameterVal;
}

template <>
inline gl::PrimitiveMode GetParamVal<ParamType::TPrimitiveMode, gl::PrimitiveMode>(
    const ParamValue &value)
{
    return value.PrimitiveModeVal;
}

template <>
inline gl::ProgramPipelineID GetParamVal<ParamType::TProgramPipelineID, gl::ProgramPipelineID>(
    const ParamValue &value)
{
    return value.ProgramPipelineIDVal;
}

template <>
inline const gl::ProgramPipelineID *
GetParamVal<ParamType::TProgramPipelineIDConstPointer, const gl::ProgramPipelineID *>(
    const ParamValue &value)
{
    return value.ProgramPipelineIDConstPointerVal;
}

template <>
inline gl::ProgramPipelineID *
GetParamVal<ParamType::TProgramPipelineIDPointer, gl::ProgramPipelineID *>(const ParamValue &value)
{
    return value.ProgramPipelineIDPointerVal;
}

template <>
inline gl::ProvokingVertexConvention
GetParamVal<ParamType::TProvokingVertexConvention, gl::ProvokingVertexConvention>(
    const ParamValue &value)
{
    return value.ProvokingVertexConventionVal;
}

template <>
inline gl::QueryID GetParamVal<ParamType::TQueryID, gl::QueryID>(const ParamValue &value)
{
    return value.QueryIDVal;
}

template <>
inline const gl::QueryID *GetParamVal<ParamType::TQueryIDConstPointer, const gl::QueryID *>(
    const ParamValue &value)
{
    return value.QueryIDConstPointerVal;
}

template <>
inline gl::QueryID *GetParamVal<ParamType::TQueryIDPointer, gl::QueryID *>(const ParamValue &value)
{
    return value.QueryIDPointerVal;
}

template <>
inline gl::QueryType GetParamVal<ParamType::TQueryType, gl::QueryType>(const ParamValue &value)
{
    return value.QueryTypeVal;
}

template <>
inline gl::RenderbufferID GetParamVal<ParamType::TRenderbufferID, gl::RenderbufferID>(
    const ParamValue &value)
{
    return value.RenderbufferIDVal;
}

template <>
inline const gl::RenderbufferID *GetParamVal<ParamType::TRenderbufferIDConstPointer,
                                             const gl::RenderbufferID *>(const ParamValue &value)
{
    return value.RenderbufferIDConstPointerVal;
}

template <>
inline gl::RenderbufferID *GetParamVal<ParamType::TRenderbufferIDPointer, gl::RenderbufferID *>(
    const ParamValue &value)
{
    return value.RenderbufferIDPointerVal;
}

template <>
inline gl::SamplerID GetParamVal<ParamType::TSamplerID, gl::SamplerID>(const ParamValue &value)
{
    return value.SamplerIDVal;
}

template <>
inline const gl::SamplerID *GetParamVal<ParamType::TSamplerIDConstPointer, const gl::SamplerID *>(
    const ParamValue &value)
{
    return value.SamplerIDConstPointerVal;
}

template <>
inline gl::SamplerID *GetParamVal<ParamType::TSamplerIDPointer, gl::SamplerID *>(
    const ParamValue &value)
{
    return value.SamplerIDPointerVal;
}

template <>
inline gl::SemaphoreID GetParamVal<ParamType::TSemaphoreID, gl::SemaphoreID>(
    const ParamValue &value)
{
    return value.SemaphoreIDVal;
}

template <>
inline const gl::SemaphoreID *
GetParamVal<ParamType::TSemaphoreIDConstPointer, const gl::SemaphoreID *>(const ParamValue &value)
{
    return value.SemaphoreIDConstPointerVal;
}

template <>
inline gl::SemaphoreID *GetParamVal<ParamType::TSemaphoreIDPointer, gl::SemaphoreID *>(
    const ParamValue &value)
{
    return value.SemaphoreIDPointerVal;
}

template <>
inline gl::ShaderProgramID GetParamVal<ParamType::TShaderProgramID, gl::ShaderProgramID>(
    const ParamValue &value)
{
    return value.ShaderProgramIDVal;
}

template <>
inline const gl::ShaderProgramID *GetParamVal<ParamType::TShaderProgramIDConstPointer,
                                              const gl::ShaderProgramID *>(const ParamValue &value)
{
    return value.ShaderProgramIDConstPointerVal;
}

template <>
inline gl::ShaderProgramID *GetParamVal<ParamType::TShaderProgramIDPointer, gl::ShaderProgramID *>(
    const ParamValue &value)
{
    return value.ShaderProgramIDPointerVal;
}

template <>
inline gl::ShaderType GetParamVal<ParamType::TShaderType, gl::ShaderType>(const ParamValue &value)
{
    return value.ShaderTypeVal;
}

template <>
inline gl::ShadingModel GetParamVal<ParamType::TShadingModel, gl::ShadingModel>(
    const ParamValue &value)
{
    return value.ShadingModelVal;
}

template <>
inline gl::TextureEnvParameter
GetParamVal<ParamType::TTextureEnvParameter, gl::TextureEnvParameter>(const ParamValue &value)
{
    return value.TextureEnvParameterVal;
}

template <>
inline gl::TextureEnvTarget GetParamVal<ParamType::TTextureEnvTarget, gl::TextureEnvTarget>(
    const ParamValue &value)
{
    return value.TextureEnvTargetVal;
}

template <>
inline gl::TextureID GetParamVal<ParamType::TTextureID, gl::TextureID>(const ParamValue &value)
{
    return value.TextureIDVal;
}

template <>
inline const gl::TextureID *GetParamVal<ParamType::TTextureIDConstPointer, const gl::TextureID *>(
    const ParamValue &value)
{
    return value.TextureIDConstPointerVal;
}

template <>
inline gl::TextureID *GetParamVal<ParamType::TTextureIDPointer, gl::TextureID *>(
    const ParamValue &value)
{
    return value.TextureIDPointerVal;
}

template <>
inline gl::TextureTarget GetParamVal<ParamType::TTextureTarget, gl::TextureTarget>(
    const ParamValue &value)
{
    return value.TextureTargetVal;
}

template <>
inline gl::TextureType GetParamVal<ParamType::TTextureType, gl::TextureType>(
    const ParamValue &value)
{
    return value.TextureTypeVal;
}

template <>
inline gl::TransformFeedbackID
GetParamVal<ParamType::TTransformFeedbackID, gl::TransformFeedbackID>(const ParamValue &value)
{
    return value.TransformFeedbackIDVal;
}

template <>
inline const gl::TransformFeedbackID *
GetParamVal<ParamType::TTransformFeedbackIDConstPointer, const gl::TransformFeedbackID *>(
    const ParamValue &value)
{
    return value.TransformFeedbackIDConstPointerVal;
}

template <>
inline gl::TransformFeedbackID *GetParamVal<ParamType::TTransformFeedbackIDPointer,
                                            gl::TransformFeedbackID *>(const ParamValue &value)
{
    return value.TransformFeedbackIDPointerVal;
}

template <>
inline gl::UniformLocation GetParamVal<ParamType::TUniformLocation, gl::UniformLocation>(
    const ParamValue &value)
{
    return value.UniformLocationVal;
}

template <>
inline gl::VertexArrayID GetParamVal<ParamType::TVertexArrayID, gl::VertexArrayID>(
    const ParamValue &value)
{
    return value.VertexArrayIDVal;
}

template <>
inline const gl::VertexArrayID *GetParamVal<ParamType::TVertexArrayIDConstPointer,
                                            const gl::VertexArrayID *>(const ParamValue &value)
{
    return value.VertexArrayIDConstPointerVal;
}

template <>
inline gl::VertexArrayID *GetParamVal<ParamType::TVertexArrayIDPointer, gl::VertexArrayID *>(
    const ParamValue &value)
{
    return value.VertexArrayIDPointerVal;
}

template <>
inline gl::VertexAttribType GetParamVal<ParamType::TVertexAttribType, gl::VertexAttribType>(
    const ParamValue &value)
{
    return value.VertexAttribTypeVal;
}

template <>
inline const void *GetParamVal<ParamType::TvoidConstPointer, const void *>(const ParamValue &value)
{
    return value.voidConstPointerVal;
}

template <>
inline const void *const *GetParamVal<ParamType::TvoidConstPointerPointer, const void *const *>(
    const ParamValue &value)
{
    return value.voidConstPointerPointerVal;
}

template <>
inline void *GetParamVal<ParamType::TvoidPointer, void *>(const ParamValue &value)
{
    return value.voidPointerVal;
}

template <>
inline void **GetParamVal<ParamType::TvoidPointerPointer, void **>(const ParamValue &value)
{
    return value.voidPointerPointerVal;
}

template <ParamType PType, typename T>
T GetParamVal(const ParamValue &value)
{
    UNREACHABLE();
    return T();
}

template <typename T>
T AccessParamValue(ParamType paramType, const ParamValue &value)
{
    switch (paramType)
    {
        case ParamType::TAlphaTestFunc:
            return GetParamVal<ParamType::TAlphaTestFunc, T>(value);
        case ParamType::TBufferBinding:
            return GetParamVal<ParamType::TBufferBinding, T>(value);
        case ParamType::TBufferID:
            return GetParamVal<ParamType::TBufferID, T>(value);
        case ParamType::TBufferIDConstPointer:
            return GetParamVal<ParamType::TBufferIDConstPointer, T>(value);
        case ParamType::TBufferIDPointer:
            return GetParamVal<ParamType::TBufferIDPointer, T>(value);
        case ParamType::TBufferUsage:
            return GetParamVal<ParamType::TBufferUsage, T>(value);
        case ParamType::TClientVertexArrayType:
            return GetParamVal<ParamType::TClientVertexArrayType, T>(value);
        case ParamType::TCullFaceMode:
            return GetParamVal<ParamType::TCullFaceMode, T>(value);
        case ParamType::TDrawElementsType:
            return GetParamVal<ParamType::TDrawElementsType, T>(value);
        case ParamType::TFenceNVID:
            return GetParamVal<ParamType::TFenceNVID, T>(value);
        case ParamType::TFenceNVIDConstPointer:
            return GetParamVal<ParamType::TFenceNVIDConstPointer, T>(value);
        case ParamType::TFenceNVIDPointer:
            return GetParamVal<ParamType::TFenceNVIDPointer, T>(value);
        case ParamType::TFramebufferID:
            return GetParamVal<ParamType::TFramebufferID, T>(value);
        case ParamType::TFramebufferIDConstPointer:
            return GetParamVal<ParamType::TFramebufferIDConstPointer, T>(value);
        case ParamType::TFramebufferIDPointer:
            return GetParamVal<ParamType::TFramebufferIDPointer, T>(value);
        case ParamType::TGLDEBUGPROC:
            return GetParamVal<ParamType::TGLDEBUGPROC, T>(value);
        case ParamType::TGLDEBUGPROCKHR:
            return GetParamVal<ParamType::TGLDEBUGPROCKHR, T>(value);
        case ParamType::TGLbitfield:
            return GetParamVal<ParamType::TGLbitfield, T>(value);
        case ParamType::TGLboolean:
            return GetParamVal<ParamType::TGLboolean, T>(value);
        case ParamType::TGLbooleanConstPointer:
            return GetParamVal<ParamType::TGLbooleanConstPointer, T>(value);
        case ParamType::TGLbooleanPointer:
            return GetParamVal<ParamType::TGLbooleanPointer, T>(value);
        case ParamType::TGLbyte:
            return GetParamVal<ParamType::TGLbyte, T>(value);
        case ParamType::TGLbyteConstPointer:
            return GetParamVal<ParamType::TGLbyteConstPointer, T>(value);
        case ParamType::TGLcharConstPointer:
            return GetParamVal<ParamType::TGLcharConstPointer, T>(value);
        case ParamType::TGLcharConstPointerPointer:
            return GetParamVal<ParamType::TGLcharConstPointerPointer, T>(value);
        case ParamType::TGLcharPointer:
            return GetParamVal<ParamType::TGLcharPointer, T>(value);
        case ParamType::TGLclampx:
            return GetParamVal<ParamType::TGLclampx, T>(value);
        case ParamType::TGLdouble:
            return GetParamVal<ParamType::TGLdouble, T>(value);
        case ParamType::TGLdoubleConstPointer:
            return GetParamVal<ParamType::TGLdoubleConstPointer, T>(value);
        case ParamType::TGLdoublePointer:
            return GetParamVal<ParamType::TGLdoublePointer, T>(value);
        case ParamType::TGLeglClientBufferEXT:
            return GetParamVal<ParamType::TGLeglClientBufferEXT, T>(value);
        case ParamType::TGLeglImageOES:
            return GetParamVal<ParamType::TGLeglImageOES, T>(value);
        case ParamType::TGLenum:
            return GetParamVal<ParamType::TGLenum, T>(value);
        case ParamType::TGLenumConstPointer:
            return GetParamVal<ParamType::TGLenumConstPointer, T>(value);
        case ParamType::TGLenumPointer:
            return GetParamVal<ParamType::TGLenumPointer, T>(value);
        case ParamType::TGLfixed:
            return GetParamVal<ParamType::TGLfixed, T>(value);
        case ParamType::TGLfixedConstPointer:
            return GetParamVal<ParamType::TGLfixedConstPointer, T>(value);
        case ParamType::TGLfixedPointer:
            return GetParamVal<ParamType::TGLfixedPointer, T>(value);
        case ParamType::TGLfloat:
            return GetParamVal<ParamType::TGLfloat, T>(value);
        case ParamType::TGLfloatConstPointer:
            return GetParamVal<ParamType::TGLfloatConstPointer, T>(value);
        case ParamType::TGLfloatPointer:
            return GetParamVal<ParamType::TGLfloatPointer, T>(value);
        case ParamType::TGLint:
            return GetParamVal<ParamType::TGLint, T>(value);
        case ParamType::TGLint64Pointer:
            return GetParamVal<ParamType::TGLint64Pointer, T>(value);
        case ParamType::TGLintConstPointer:
            return GetParamVal<ParamType::TGLintConstPointer, T>(value);
        case ParamType::TGLintPointer:
            return GetParamVal<ParamType::TGLintPointer, T>(value);
        case ParamType::TGLintptr:
            return GetParamVal<ParamType::TGLintptr, T>(value);
        case ParamType::TGLintptrConstPointer:
            return GetParamVal<ParamType::TGLintptrConstPointer, T>(value);
        case ParamType::TGLshort:
            return GetParamVal<ParamType::TGLshort, T>(value);
        case ParamType::TGLshortConstPointer:
            return GetParamVal<ParamType::TGLshortConstPointer, T>(value);
        case ParamType::TGLsizei:
            return GetParamVal<ParamType::TGLsizei, T>(value);
        case ParamType::TGLsizeiConstPointer:
            return GetParamVal<ParamType::TGLsizeiConstPointer, T>(value);
        case ParamType::TGLsizeiPointer:
            return GetParamVal<ParamType::TGLsizeiPointer, T>(value);
        case ParamType::TGLsizeiptr:
            return GetParamVal<ParamType::TGLsizeiptr, T>(value);
        case ParamType::TGLsizeiptrConstPointer:
            return GetParamVal<ParamType::TGLsizeiptrConstPointer, T>(value);
        case ParamType::TGLsync:
            return GetParamVal<ParamType::TGLsync, T>(value);
        case ParamType::TGLubyte:
            return GetParamVal<ParamType::TGLubyte, T>(value);
        case ParamType::TGLubyteConstPointer:
            return GetParamVal<ParamType::TGLubyteConstPointer, T>(value);
        case ParamType::TGLubytePointer:
            return GetParamVal<ParamType::TGLubytePointer, T>(value);
        case ParamType::TGLuint:
            return GetParamVal<ParamType::TGLuint, T>(value);
        case ParamType::TGLuint64:
            return GetParamVal<ParamType::TGLuint64, T>(value);
        case ParamType::TGLuint64ConstPointer:
            return GetParamVal<ParamType::TGLuint64ConstPointer, T>(value);
        case ParamType::TGLuint64Pointer:
            return GetParamVal<ParamType::TGLuint64Pointer, T>(value);
        case ParamType::TGLuintConstPointer:
            return GetParamVal<ParamType::TGLuintConstPointer, T>(value);
        case ParamType::TGLuintPointer:
            return GetParamVal<ParamType::TGLuintPointer, T>(value);
        case ParamType::TGLushort:
            return GetParamVal<ParamType::TGLushort, T>(value);
        case ParamType::TGLushortConstPointer:
            return GetParamVal<ParamType::TGLushortConstPointer, T>(value);
        case ParamType::TGLushortPointer:
            return GetParamVal<ParamType::TGLushortPointer, T>(value);
        case ParamType::TGLvoidConstPointer:
            return GetParamVal<ParamType::TGLvoidConstPointer, T>(value);
        case ParamType::TGLvoidConstPointerPointer:
            return GetParamVal<ParamType::TGLvoidConstPointerPointer, T>(value);
        case ParamType::TGraphicsResetStatus:
            return GetParamVal<ParamType::TGraphicsResetStatus, T>(value);
        case ParamType::THandleType:
            return GetParamVal<ParamType::THandleType, T>(value);
        case ParamType::TLightParameter:
            return GetParamVal<ParamType::TLightParameter, T>(value);
        case ParamType::TLogicalOperation:
            return GetParamVal<ParamType::TLogicalOperation, T>(value);
        case ParamType::TMaterialParameter:
            return GetParamVal<ParamType::TMaterialParameter, T>(value);
        case ParamType::TMatrixType:
            return GetParamVal<ParamType::TMatrixType, T>(value);
        case ParamType::TMemoryObjectID:
            return GetParamVal<ParamType::TMemoryObjectID, T>(value);
        case ParamType::TMemoryObjectIDConstPointer:
            return GetParamVal<ParamType::TMemoryObjectIDConstPointer, T>(value);
        case ParamType::TMemoryObjectIDPointer:
            return GetParamVal<ParamType::TMemoryObjectIDPointer, T>(value);
        case ParamType::TPointParameter:
            return GetParamVal<ParamType::TPointParameter, T>(value);
        case ParamType::TPrimitiveMode:
            return GetParamVal<ParamType::TPrimitiveMode, T>(value);
        case ParamType::TProgramPipelineID:
            return GetParamVal<ParamType::TProgramPipelineID, T>(value);
        case ParamType::TProgramPipelineIDConstPointer:
            return GetParamVal<ParamType::TProgramPipelineIDConstPointer, T>(value);
        case ParamType::TProgramPipelineIDPointer:
            return GetParamVal<ParamType::TProgramPipelineIDPointer, T>(value);
        case ParamType::TProvokingVertexConvention:
            return GetParamVal<ParamType::TProvokingVertexConvention, T>(value);
        case ParamType::TQueryID:
            return GetParamVal<ParamType::TQueryID, T>(value);
        case ParamType::TQueryIDConstPointer:
            return GetParamVal<ParamType::TQueryIDConstPointer, T>(value);
        case ParamType::TQueryIDPointer:
            return GetParamVal<ParamType::TQueryIDPointer, T>(value);
        case ParamType::TQueryType:
            return GetParamVal<ParamType::TQueryType, T>(value);
        case ParamType::TRenderbufferID:
            return GetParamVal<ParamType::TRenderbufferID, T>(value);
        case ParamType::TRenderbufferIDConstPointer:
            return GetParamVal<ParamType::TRenderbufferIDConstPointer, T>(value);
        case ParamType::TRenderbufferIDPointer:
            return GetParamVal<ParamType::TRenderbufferIDPointer, T>(value);
        case ParamType::TSamplerID:
            return GetParamVal<ParamType::TSamplerID, T>(value);
        case ParamType::TSamplerIDConstPointer:
            return GetParamVal<ParamType::TSamplerIDConstPointer, T>(value);
        case ParamType::TSamplerIDPointer:
            return GetParamVal<ParamType::TSamplerIDPointer, T>(value);
        case ParamType::TSemaphoreID:
            return GetParamVal<ParamType::TSemaphoreID, T>(value);
        case ParamType::TSemaphoreIDConstPointer:
            return GetParamVal<ParamType::TSemaphoreIDConstPointer, T>(value);
        case ParamType::TSemaphoreIDPointer:
            return GetParamVal<ParamType::TSemaphoreIDPointer, T>(value);
        case ParamType::TShaderProgramID:
            return GetParamVal<ParamType::TShaderProgramID, T>(value);
        case ParamType::TShaderProgramIDConstPointer:
            return GetParamVal<ParamType::TShaderProgramIDConstPointer, T>(value);
        case ParamType::TShaderProgramIDPointer:
            return GetParamVal<ParamType::TShaderProgramIDPointer, T>(value);
        case ParamType::TShaderType:
            return GetParamVal<ParamType::TShaderType, T>(value);
        case ParamType::TShadingModel:
            return GetParamVal<ParamType::TShadingModel, T>(value);
        case ParamType::TTextureEnvParameter:
            return GetParamVal<ParamType::TTextureEnvParameter, T>(value);
        case ParamType::TTextureEnvTarget:
            return GetParamVal<ParamType::TTextureEnvTarget, T>(value);
        case ParamType::TTextureID:
            return GetParamVal<ParamType::TTextureID, T>(value);
        case ParamType::TTextureIDConstPointer:
            return GetParamVal<ParamType::TTextureIDConstPointer, T>(value);
        case ParamType::TTextureIDPointer:
            return GetParamVal<ParamType::TTextureIDPointer, T>(value);
        case ParamType::TTextureTarget:
            return GetParamVal<ParamType::TTextureTarget, T>(value);
        case ParamType::TTextureType:
            return GetParamVal<ParamType::TTextureType, T>(value);
        case ParamType::TTransformFeedbackID:
            return GetParamVal<ParamType::TTransformFeedbackID, T>(value);
        case ParamType::TTransformFeedbackIDConstPointer:
            return GetParamVal<ParamType::TTransformFeedbackIDConstPointer, T>(value);
        case ParamType::TTransformFeedbackIDPointer:
            return GetParamVal<ParamType::TTransformFeedbackIDPointer, T>(value);
        case ParamType::TUniformLocation:
            return GetParamVal<ParamType::TUniformLocation, T>(value);
        case ParamType::TVertexArrayID:
            return GetParamVal<ParamType::TVertexArrayID, T>(value);
        case ParamType::TVertexArrayIDConstPointer:
            return GetParamVal<ParamType::TVertexArrayIDConstPointer, T>(value);
        case ParamType::TVertexArrayIDPointer:
            return GetParamVal<ParamType::TVertexArrayIDPointer, T>(value);
        case ParamType::TVertexAttribType:
            return GetParamVal<ParamType::TVertexAttribType, T>(value);
        case ParamType::TvoidConstPointer:
            return GetParamVal<ParamType::TvoidConstPointer, T>(value);
        case ParamType::TvoidConstPointerPointer:
            return GetParamVal<ParamType::TvoidConstPointerPointer, T>(value);
        case ParamType::TvoidPointer:
            return GetParamVal<ParamType::TvoidPointer, T>(value);
        case ParamType::TvoidPointerPointer:
            return GetParamVal<ParamType::TvoidPointerPointer, T>(value);
    }
}

template <ParamType PType, typename T>
void SetParamVal(T valueIn, ParamValue *valueOut);

template <>
inline void SetParamVal<ParamType::TAlphaTestFunc>(gl::AlphaTestFunc valueIn, ParamValue *valueOut)
{
    valueOut->AlphaTestFuncVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TBufferBinding>(gl::BufferBinding valueIn, ParamValue *valueOut)
{
    valueOut->BufferBindingVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TBufferID>(gl::BufferID valueIn, ParamValue *valueOut)
{
    valueOut->BufferIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TBufferIDConstPointer>(const gl::BufferID *valueIn,
                                                          ParamValue *valueOut)
{
    valueOut->BufferIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TBufferIDPointer>(gl::BufferID *valueIn, ParamValue *valueOut)
{
    valueOut->BufferIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TBufferUsage>(gl::BufferUsage valueIn, ParamValue *valueOut)
{
    valueOut->BufferUsageVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TClientVertexArrayType>(gl::ClientVertexArrayType valueIn,
                                                           ParamValue *valueOut)
{
    valueOut->ClientVertexArrayTypeVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TCullFaceMode>(gl::CullFaceMode valueIn, ParamValue *valueOut)
{
    valueOut->CullFaceModeVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TDrawElementsType>(gl::DrawElementsType valueIn,
                                                      ParamValue *valueOut)
{
    valueOut->DrawElementsTypeVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TFenceNVID>(gl::FenceNVID valueIn, ParamValue *valueOut)
{
    valueOut->FenceNVIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TFenceNVIDConstPointer>(const gl::FenceNVID *valueIn,
                                                           ParamValue *valueOut)
{
    valueOut->FenceNVIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TFenceNVIDPointer>(gl::FenceNVID *valueIn, ParamValue *valueOut)
{
    valueOut->FenceNVIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TFramebufferID>(gl::FramebufferID valueIn, ParamValue *valueOut)
{
    valueOut->FramebufferIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TFramebufferIDConstPointer>(const gl::FramebufferID *valueIn,
                                                               ParamValue *valueOut)
{
    valueOut->FramebufferIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TFramebufferIDPointer>(gl::FramebufferID *valueIn,
                                                          ParamValue *valueOut)
{
    valueOut->FramebufferIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLDEBUGPROC>(GLDEBUGPROC valueIn, ParamValue *valueOut)
{
    valueOut->GLDEBUGPROCVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLDEBUGPROCKHR>(GLDEBUGPROCKHR valueIn, ParamValue *valueOut)
{
    valueOut->GLDEBUGPROCKHRVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLbitfield>(GLbitfield valueIn, ParamValue *valueOut)
{
    valueOut->GLbitfieldVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLboolean>(GLboolean valueIn, ParamValue *valueOut)
{
    valueOut->GLbooleanVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLbooleanConstPointer>(const GLboolean *valueIn,
                                                           ParamValue *valueOut)
{
    valueOut->GLbooleanConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLbooleanPointer>(GLboolean *valueIn, ParamValue *valueOut)
{
    valueOut->GLbooleanPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLbyte>(GLbyte valueIn, ParamValue *valueOut)
{
    valueOut->GLbyteVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLbyteConstPointer>(const GLbyte *valueIn, ParamValue *valueOut)
{
    valueOut->GLbyteConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLcharConstPointer>(const GLchar *valueIn, ParamValue *valueOut)
{
    valueOut->GLcharConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLcharConstPointerPointer>(const GLchar *const *valueIn,
                                                               ParamValue *valueOut)
{
    valueOut->GLcharConstPointerPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLcharPointer>(GLchar *valueIn, ParamValue *valueOut)
{
    valueOut->GLcharPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLclampx>(GLclampx valueIn, ParamValue *valueOut)
{
    valueOut->GLclampxVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLdouble>(GLdouble valueIn, ParamValue *valueOut)
{
    valueOut->GLdoubleVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLdoubleConstPointer>(const GLdouble *valueIn,
                                                          ParamValue *valueOut)
{
    valueOut->GLdoubleConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLdoublePointer>(GLdouble *valueIn, ParamValue *valueOut)
{
    valueOut->GLdoublePointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLeglClientBufferEXT>(GLeglClientBufferEXT valueIn,
                                                          ParamValue *valueOut)
{
    valueOut->GLeglClientBufferEXTVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLeglImageOES>(GLeglImageOES valueIn, ParamValue *valueOut)
{
    valueOut->GLeglImageOESVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLenum>(GLenum valueIn, ParamValue *valueOut)
{
    valueOut->GLenumVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLenumConstPointer>(const GLenum *valueIn, ParamValue *valueOut)
{
    valueOut->GLenumConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLenumPointer>(GLenum *valueIn, ParamValue *valueOut)
{
    valueOut->GLenumPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLfixed>(GLfixed valueIn, ParamValue *valueOut)
{
    valueOut->GLfixedVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLfixedConstPointer>(const GLfixed *valueIn,
                                                         ParamValue *valueOut)
{
    valueOut->GLfixedConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLfixedPointer>(GLfixed *valueIn, ParamValue *valueOut)
{
    valueOut->GLfixedPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLfloat>(GLfloat valueIn, ParamValue *valueOut)
{
    valueOut->GLfloatVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLfloatConstPointer>(const GLfloat *valueIn,
                                                         ParamValue *valueOut)
{
    valueOut->GLfloatConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLfloatPointer>(GLfloat *valueIn, ParamValue *valueOut)
{
    valueOut->GLfloatPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLint>(GLint valueIn, ParamValue *valueOut)
{
    valueOut->GLintVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLint64Pointer>(GLint64 *valueIn, ParamValue *valueOut)
{
    valueOut->GLint64PointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLintConstPointer>(const GLint *valueIn, ParamValue *valueOut)
{
    valueOut->GLintConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLintPointer>(GLint *valueIn, ParamValue *valueOut)
{
    valueOut->GLintPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLintptr>(GLintptr valueIn, ParamValue *valueOut)
{
    valueOut->GLintptrVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLintptrConstPointer>(const GLintptr *valueIn,
                                                          ParamValue *valueOut)
{
    valueOut->GLintptrConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLshort>(GLshort valueIn, ParamValue *valueOut)
{
    valueOut->GLshortVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLshortConstPointer>(const GLshort *valueIn,
                                                         ParamValue *valueOut)
{
    valueOut->GLshortConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLsizei>(GLsizei valueIn, ParamValue *valueOut)
{
    valueOut->GLsizeiVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLsizeiConstPointer>(const GLsizei *valueIn,
                                                         ParamValue *valueOut)
{
    valueOut->GLsizeiConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLsizeiPointer>(GLsizei *valueIn, ParamValue *valueOut)
{
    valueOut->GLsizeiPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLsizeiptr>(GLsizeiptr valueIn, ParamValue *valueOut)
{
    valueOut->GLsizeiptrVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLsizeiptrConstPointer>(const GLsizeiptr *valueIn,
                                                            ParamValue *valueOut)
{
    valueOut->GLsizeiptrConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLsync>(GLsync valueIn, ParamValue *valueOut)
{
    valueOut->GLsyncVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLubyte>(GLubyte valueIn, ParamValue *valueOut)
{
    valueOut->GLubyteVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLubyteConstPointer>(const GLubyte *valueIn,
                                                         ParamValue *valueOut)
{
    valueOut->GLubyteConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLubytePointer>(GLubyte *valueIn, ParamValue *valueOut)
{
    valueOut->GLubytePointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLuint>(GLuint valueIn, ParamValue *valueOut)
{
    valueOut->GLuintVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLuint64>(GLuint64 valueIn, ParamValue *valueOut)
{
    valueOut->GLuint64Val = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLuint64ConstPointer>(const GLuint64 *valueIn,
                                                          ParamValue *valueOut)
{
    valueOut->GLuint64ConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLuint64Pointer>(GLuint64 *valueIn, ParamValue *valueOut)
{
    valueOut->GLuint64PointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLuintConstPointer>(const GLuint *valueIn, ParamValue *valueOut)
{
    valueOut->GLuintConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLuintPointer>(GLuint *valueIn, ParamValue *valueOut)
{
    valueOut->GLuintPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLushort>(GLushort valueIn, ParamValue *valueOut)
{
    valueOut->GLushortVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLushortConstPointer>(const GLushort *valueIn,
                                                          ParamValue *valueOut)
{
    valueOut->GLushortConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLushortPointer>(GLushort *valueIn, ParamValue *valueOut)
{
    valueOut->GLushortPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLvoidConstPointer>(const GLvoid *valueIn, ParamValue *valueOut)
{
    valueOut->GLvoidConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGLvoidConstPointerPointer>(const GLvoid *const *valueIn,
                                                               ParamValue *valueOut)
{
    valueOut->GLvoidConstPointerPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TGraphicsResetStatus>(gl::GraphicsResetStatus valueIn,
                                                         ParamValue *valueOut)
{
    valueOut->GraphicsResetStatusVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::THandleType>(gl::HandleType valueIn, ParamValue *valueOut)
{
    valueOut->HandleTypeVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TLightParameter>(gl::LightParameter valueIn,
                                                    ParamValue *valueOut)
{
    valueOut->LightParameterVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TLogicalOperation>(gl::LogicalOperation valueIn,
                                                      ParamValue *valueOut)
{
    valueOut->LogicalOperationVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TMaterialParameter>(gl::MaterialParameter valueIn,
                                                       ParamValue *valueOut)
{
    valueOut->MaterialParameterVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TMatrixType>(gl::MatrixType valueIn, ParamValue *valueOut)
{
    valueOut->MatrixTypeVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TMemoryObjectID>(gl::MemoryObjectID valueIn,
                                                    ParamValue *valueOut)
{
    valueOut->MemoryObjectIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TMemoryObjectIDConstPointer>(const gl::MemoryObjectID *valueIn,
                                                                ParamValue *valueOut)
{
    valueOut->MemoryObjectIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TMemoryObjectIDPointer>(gl::MemoryObjectID *valueIn,
                                                           ParamValue *valueOut)
{
    valueOut->MemoryObjectIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TPointParameter>(gl::PointParameter valueIn,
                                                    ParamValue *valueOut)
{
    valueOut->PointParameterVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TPrimitiveMode>(gl::PrimitiveMode valueIn, ParamValue *valueOut)
{
    valueOut->PrimitiveModeVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TProgramPipelineID>(gl::ProgramPipelineID valueIn,
                                                       ParamValue *valueOut)
{
    valueOut->ProgramPipelineIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TProgramPipelineIDConstPointer>(
    const gl::ProgramPipelineID *valueIn,
    ParamValue *valueOut)
{
    valueOut->ProgramPipelineIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TProgramPipelineIDPointer>(gl::ProgramPipelineID *valueIn,
                                                              ParamValue *valueOut)
{
    valueOut->ProgramPipelineIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TProvokingVertexConvention>(
    gl::ProvokingVertexConvention valueIn,
    ParamValue *valueOut)
{
    valueOut->ProvokingVertexConventionVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TQueryID>(gl::QueryID valueIn, ParamValue *valueOut)
{
    valueOut->QueryIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TQueryIDConstPointer>(const gl::QueryID *valueIn,
                                                         ParamValue *valueOut)
{
    valueOut->QueryIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TQueryIDPointer>(gl::QueryID *valueIn, ParamValue *valueOut)
{
    valueOut->QueryIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TQueryType>(gl::QueryType valueIn, ParamValue *valueOut)
{
    valueOut->QueryTypeVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TRenderbufferID>(gl::RenderbufferID valueIn,
                                                    ParamValue *valueOut)
{
    valueOut->RenderbufferIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TRenderbufferIDConstPointer>(const gl::RenderbufferID *valueIn,
                                                                ParamValue *valueOut)
{
    valueOut->RenderbufferIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TRenderbufferIDPointer>(gl::RenderbufferID *valueIn,
                                                           ParamValue *valueOut)
{
    valueOut->RenderbufferIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TSamplerID>(gl::SamplerID valueIn, ParamValue *valueOut)
{
    valueOut->SamplerIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TSamplerIDConstPointer>(const gl::SamplerID *valueIn,
                                                           ParamValue *valueOut)
{
    valueOut->SamplerIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TSamplerIDPointer>(gl::SamplerID *valueIn, ParamValue *valueOut)
{
    valueOut->SamplerIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TSemaphoreID>(gl::SemaphoreID valueIn, ParamValue *valueOut)
{
    valueOut->SemaphoreIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TSemaphoreIDConstPointer>(const gl::SemaphoreID *valueIn,
                                                             ParamValue *valueOut)
{
    valueOut->SemaphoreIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TSemaphoreIDPointer>(gl::SemaphoreID *valueIn,
                                                        ParamValue *valueOut)
{
    valueOut->SemaphoreIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TShaderProgramID>(gl::ShaderProgramID valueIn,
                                                     ParamValue *valueOut)
{
    valueOut->ShaderProgramIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TShaderProgramIDConstPointer>(const gl::ShaderProgramID *valueIn,
                                                                 ParamValue *valueOut)
{
    valueOut->ShaderProgramIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TShaderProgramIDPointer>(gl::ShaderProgramID *valueIn,
                                                            ParamValue *valueOut)
{
    valueOut->ShaderProgramIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TShaderType>(gl::ShaderType valueIn, ParamValue *valueOut)
{
    valueOut->ShaderTypeVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TShadingModel>(gl::ShadingModel valueIn, ParamValue *valueOut)
{
    valueOut->ShadingModelVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TTextureEnvParameter>(gl::TextureEnvParameter valueIn,
                                                         ParamValue *valueOut)
{
    valueOut->TextureEnvParameterVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TTextureEnvTarget>(gl::TextureEnvTarget valueIn,
                                                      ParamValue *valueOut)
{
    valueOut->TextureEnvTargetVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TTextureID>(gl::TextureID valueIn, ParamValue *valueOut)
{
    valueOut->TextureIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TTextureIDConstPointer>(const gl::TextureID *valueIn,
                                                           ParamValue *valueOut)
{
    valueOut->TextureIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TTextureIDPointer>(gl::TextureID *valueIn, ParamValue *valueOut)
{
    valueOut->TextureIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TTextureTarget>(gl::TextureTarget valueIn, ParamValue *valueOut)
{
    valueOut->TextureTargetVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TTextureType>(gl::TextureType valueIn, ParamValue *valueOut)
{
    valueOut->TextureTypeVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TTransformFeedbackID>(gl::TransformFeedbackID valueIn,
                                                         ParamValue *valueOut)
{
    valueOut->TransformFeedbackIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TTransformFeedbackIDConstPointer>(
    const gl::TransformFeedbackID *valueIn,
    ParamValue *valueOut)
{
    valueOut->TransformFeedbackIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TTransformFeedbackIDPointer>(gl::TransformFeedbackID *valueIn,
                                                                ParamValue *valueOut)
{
    valueOut->TransformFeedbackIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TUniformLocation>(gl::UniformLocation valueIn,
                                                     ParamValue *valueOut)
{
    valueOut->UniformLocationVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TVertexArrayID>(gl::VertexArrayID valueIn, ParamValue *valueOut)
{
    valueOut->VertexArrayIDVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TVertexArrayIDConstPointer>(const gl::VertexArrayID *valueIn,
                                                               ParamValue *valueOut)
{
    valueOut->VertexArrayIDConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TVertexArrayIDPointer>(gl::VertexArrayID *valueIn,
                                                          ParamValue *valueOut)
{
    valueOut->VertexArrayIDPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TVertexAttribType>(gl::VertexAttribType valueIn,
                                                      ParamValue *valueOut)
{
    valueOut->VertexAttribTypeVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TvoidConstPointer>(const void *valueIn, ParamValue *valueOut)
{
    valueOut->voidConstPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TvoidConstPointerPointer>(const void *const *valueIn,
                                                             ParamValue *valueOut)
{
    valueOut->voidConstPointerPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TvoidPointer>(void *valueIn, ParamValue *valueOut)
{
    valueOut->voidPointerVal = valueIn;
}

template <>
inline void SetParamVal<ParamType::TvoidPointerPointer>(void **valueIn, ParamValue *valueOut)
{
    valueOut->voidPointerPointerVal = valueIn;
}

template <ParamType PType, typename T>
void SetParamVal(T valueIn, ParamValue *valueOut)
{
    UNREACHABLE();
}

template <typename T>
void InitParamValue(ParamType paramType, T valueIn, ParamValue *valueOut)
{
    switch (paramType)
    {
        case ParamType::TAlphaTestFunc:
            SetParamVal<ParamType::TAlphaTestFunc>(valueIn, valueOut);
            break;
        case ParamType::TBufferBinding:
            SetParamVal<ParamType::TBufferBinding>(valueIn, valueOut);
            break;
        case ParamType::TBufferID:
            SetParamVal<ParamType::TBufferID>(valueIn, valueOut);
            break;
        case ParamType::TBufferIDConstPointer:
            SetParamVal<ParamType::TBufferIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TBufferIDPointer:
            SetParamVal<ParamType::TBufferIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TBufferUsage:
            SetParamVal<ParamType::TBufferUsage>(valueIn, valueOut);
            break;
        case ParamType::TClientVertexArrayType:
            SetParamVal<ParamType::TClientVertexArrayType>(valueIn, valueOut);
            break;
        case ParamType::TCullFaceMode:
            SetParamVal<ParamType::TCullFaceMode>(valueIn, valueOut);
            break;
        case ParamType::TDrawElementsType:
            SetParamVal<ParamType::TDrawElementsType>(valueIn, valueOut);
            break;
        case ParamType::TFenceNVID:
            SetParamVal<ParamType::TFenceNVID>(valueIn, valueOut);
            break;
        case ParamType::TFenceNVIDConstPointer:
            SetParamVal<ParamType::TFenceNVIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TFenceNVIDPointer:
            SetParamVal<ParamType::TFenceNVIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TFramebufferID:
            SetParamVal<ParamType::TFramebufferID>(valueIn, valueOut);
            break;
        case ParamType::TFramebufferIDConstPointer:
            SetParamVal<ParamType::TFramebufferIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TFramebufferIDPointer:
            SetParamVal<ParamType::TFramebufferIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLDEBUGPROC:
            SetParamVal<ParamType::TGLDEBUGPROC>(valueIn, valueOut);
            break;
        case ParamType::TGLDEBUGPROCKHR:
            SetParamVal<ParamType::TGLDEBUGPROCKHR>(valueIn, valueOut);
            break;
        case ParamType::TGLbitfield:
            SetParamVal<ParamType::TGLbitfield>(valueIn, valueOut);
            break;
        case ParamType::TGLboolean:
            SetParamVal<ParamType::TGLboolean>(valueIn, valueOut);
            break;
        case ParamType::TGLbooleanConstPointer:
            SetParamVal<ParamType::TGLbooleanConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLbooleanPointer:
            SetParamVal<ParamType::TGLbooleanPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLbyte:
            SetParamVal<ParamType::TGLbyte>(valueIn, valueOut);
            break;
        case ParamType::TGLbyteConstPointer:
            SetParamVal<ParamType::TGLbyteConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLcharConstPointer:
            SetParamVal<ParamType::TGLcharConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLcharConstPointerPointer:
            SetParamVal<ParamType::TGLcharConstPointerPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLcharPointer:
            SetParamVal<ParamType::TGLcharPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLclampx:
            SetParamVal<ParamType::TGLclampx>(valueIn, valueOut);
            break;
        case ParamType::TGLdouble:
            SetParamVal<ParamType::TGLdouble>(valueIn, valueOut);
            break;
        case ParamType::TGLdoubleConstPointer:
            SetParamVal<ParamType::TGLdoubleConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLdoublePointer:
            SetParamVal<ParamType::TGLdoublePointer>(valueIn, valueOut);
            break;
        case ParamType::TGLeglClientBufferEXT:
            SetParamVal<ParamType::TGLeglClientBufferEXT>(valueIn, valueOut);
            break;
        case ParamType::TGLeglImageOES:
            SetParamVal<ParamType::TGLeglImageOES>(valueIn, valueOut);
            break;
        case ParamType::TGLenum:
            SetParamVal<ParamType::TGLenum>(valueIn, valueOut);
            break;
        case ParamType::TGLenumConstPointer:
            SetParamVal<ParamType::TGLenumConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLenumPointer:
            SetParamVal<ParamType::TGLenumPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLfixed:
            SetParamVal<ParamType::TGLfixed>(valueIn, valueOut);
            break;
        case ParamType::TGLfixedConstPointer:
            SetParamVal<ParamType::TGLfixedConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLfixedPointer:
            SetParamVal<ParamType::TGLfixedPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLfloat:
            SetParamVal<ParamType::TGLfloat>(valueIn, valueOut);
            break;
        case ParamType::TGLfloatConstPointer:
            SetParamVal<ParamType::TGLfloatConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLfloatPointer:
            SetParamVal<ParamType::TGLfloatPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLint:
            SetParamVal<ParamType::TGLint>(valueIn, valueOut);
            break;
        case ParamType::TGLint64Pointer:
            SetParamVal<ParamType::TGLint64Pointer>(valueIn, valueOut);
            break;
        case ParamType::TGLintConstPointer:
            SetParamVal<ParamType::TGLintConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLintPointer:
            SetParamVal<ParamType::TGLintPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLintptr:
            SetParamVal<ParamType::TGLintptr>(valueIn, valueOut);
            break;
        case ParamType::TGLintptrConstPointer:
            SetParamVal<ParamType::TGLintptrConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLshort:
            SetParamVal<ParamType::TGLshort>(valueIn, valueOut);
            break;
        case ParamType::TGLshortConstPointer:
            SetParamVal<ParamType::TGLshortConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLsizei:
            SetParamVal<ParamType::TGLsizei>(valueIn, valueOut);
            break;
        case ParamType::TGLsizeiConstPointer:
            SetParamVal<ParamType::TGLsizeiConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLsizeiPointer:
            SetParamVal<ParamType::TGLsizeiPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLsizeiptr:
            SetParamVal<ParamType::TGLsizeiptr>(valueIn, valueOut);
            break;
        case ParamType::TGLsizeiptrConstPointer:
            SetParamVal<ParamType::TGLsizeiptrConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLsync:
            SetParamVal<ParamType::TGLsync>(valueIn, valueOut);
            break;
        case ParamType::TGLubyte:
            SetParamVal<ParamType::TGLubyte>(valueIn, valueOut);
            break;
        case ParamType::TGLubyteConstPointer:
            SetParamVal<ParamType::TGLubyteConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLubytePointer:
            SetParamVal<ParamType::TGLubytePointer>(valueIn, valueOut);
            break;
        case ParamType::TGLuint:
            SetParamVal<ParamType::TGLuint>(valueIn, valueOut);
            break;
        case ParamType::TGLuint64:
            SetParamVal<ParamType::TGLuint64>(valueIn, valueOut);
            break;
        case ParamType::TGLuint64ConstPointer:
            SetParamVal<ParamType::TGLuint64ConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLuint64Pointer:
            SetParamVal<ParamType::TGLuint64Pointer>(valueIn, valueOut);
            break;
        case ParamType::TGLuintConstPointer:
            SetParamVal<ParamType::TGLuintConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLuintPointer:
            SetParamVal<ParamType::TGLuintPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLushort:
            SetParamVal<ParamType::TGLushort>(valueIn, valueOut);
            break;
        case ParamType::TGLushortConstPointer:
            SetParamVal<ParamType::TGLushortConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLushortPointer:
            SetParamVal<ParamType::TGLushortPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLvoidConstPointer:
            SetParamVal<ParamType::TGLvoidConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TGLvoidConstPointerPointer:
            SetParamVal<ParamType::TGLvoidConstPointerPointer>(valueIn, valueOut);
            break;
        case ParamType::TGraphicsResetStatus:
            SetParamVal<ParamType::TGraphicsResetStatus>(valueIn, valueOut);
            break;
        case ParamType::THandleType:
            SetParamVal<ParamType::THandleType>(valueIn, valueOut);
            break;
        case ParamType::TLightParameter:
            SetParamVal<ParamType::TLightParameter>(valueIn, valueOut);
            break;
        case ParamType::TLogicalOperation:
            SetParamVal<ParamType::TLogicalOperation>(valueIn, valueOut);
            break;
        case ParamType::TMaterialParameter:
            SetParamVal<ParamType::TMaterialParameter>(valueIn, valueOut);
            break;
        case ParamType::TMatrixType:
            SetParamVal<ParamType::TMatrixType>(valueIn, valueOut);
            break;
        case ParamType::TMemoryObjectID:
            SetParamVal<ParamType::TMemoryObjectID>(valueIn, valueOut);
            break;
        case ParamType::TMemoryObjectIDConstPointer:
            SetParamVal<ParamType::TMemoryObjectIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TMemoryObjectIDPointer:
            SetParamVal<ParamType::TMemoryObjectIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TPointParameter:
            SetParamVal<ParamType::TPointParameter>(valueIn, valueOut);
            break;
        case ParamType::TPrimitiveMode:
            SetParamVal<ParamType::TPrimitiveMode>(valueIn, valueOut);
            break;
        case ParamType::TProgramPipelineID:
            SetParamVal<ParamType::TProgramPipelineID>(valueIn, valueOut);
            break;
        case ParamType::TProgramPipelineIDConstPointer:
            SetParamVal<ParamType::TProgramPipelineIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TProgramPipelineIDPointer:
            SetParamVal<ParamType::TProgramPipelineIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TProvokingVertexConvention:
            SetParamVal<ParamType::TProvokingVertexConvention>(valueIn, valueOut);
            break;
        case ParamType::TQueryID:
            SetParamVal<ParamType::TQueryID>(valueIn, valueOut);
            break;
        case ParamType::TQueryIDConstPointer:
            SetParamVal<ParamType::TQueryIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TQueryIDPointer:
            SetParamVal<ParamType::TQueryIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TQueryType:
            SetParamVal<ParamType::TQueryType>(valueIn, valueOut);
            break;
        case ParamType::TRenderbufferID:
            SetParamVal<ParamType::TRenderbufferID>(valueIn, valueOut);
            break;
        case ParamType::TRenderbufferIDConstPointer:
            SetParamVal<ParamType::TRenderbufferIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TRenderbufferIDPointer:
            SetParamVal<ParamType::TRenderbufferIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TSamplerID:
            SetParamVal<ParamType::TSamplerID>(valueIn, valueOut);
            break;
        case ParamType::TSamplerIDConstPointer:
            SetParamVal<ParamType::TSamplerIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TSamplerIDPointer:
            SetParamVal<ParamType::TSamplerIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TSemaphoreID:
            SetParamVal<ParamType::TSemaphoreID>(valueIn, valueOut);
            break;
        case ParamType::TSemaphoreIDConstPointer:
            SetParamVal<ParamType::TSemaphoreIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TSemaphoreIDPointer:
            SetParamVal<ParamType::TSemaphoreIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TShaderProgramID:
            SetParamVal<ParamType::TShaderProgramID>(valueIn, valueOut);
            break;
        case ParamType::TShaderProgramIDConstPointer:
            SetParamVal<ParamType::TShaderProgramIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TShaderProgramIDPointer:
            SetParamVal<ParamType::TShaderProgramIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TShaderType:
            SetParamVal<ParamType::TShaderType>(valueIn, valueOut);
            break;
        case ParamType::TShadingModel:
            SetParamVal<ParamType::TShadingModel>(valueIn, valueOut);
            break;
        case ParamType::TTextureEnvParameter:
            SetParamVal<ParamType::TTextureEnvParameter>(valueIn, valueOut);
            break;
        case ParamType::TTextureEnvTarget:
            SetParamVal<ParamType::TTextureEnvTarget>(valueIn, valueOut);
            break;
        case ParamType::TTextureID:
            SetParamVal<ParamType::TTextureID>(valueIn, valueOut);
            break;
        case ParamType::TTextureIDConstPointer:
            SetParamVal<ParamType::TTextureIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TTextureIDPointer:
            SetParamVal<ParamType::TTextureIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TTextureTarget:
            SetParamVal<ParamType::TTextureTarget>(valueIn, valueOut);
            break;
        case ParamType::TTextureType:
            SetParamVal<ParamType::TTextureType>(valueIn, valueOut);
            break;
        case ParamType::TTransformFeedbackID:
            SetParamVal<ParamType::TTransformFeedbackID>(valueIn, valueOut);
            break;
        case ParamType::TTransformFeedbackIDConstPointer:
            SetParamVal<ParamType::TTransformFeedbackIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TTransformFeedbackIDPointer:
            SetParamVal<ParamType::TTransformFeedbackIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TUniformLocation:
            SetParamVal<ParamType::TUniformLocation>(valueIn, valueOut);
            break;
        case ParamType::TVertexArrayID:
            SetParamVal<ParamType::TVertexArrayID>(valueIn, valueOut);
            break;
        case ParamType::TVertexArrayIDConstPointer:
            SetParamVal<ParamType::TVertexArrayIDConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TVertexArrayIDPointer:
            SetParamVal<ParamType::TVertexArrayIDPointer>(valueIn, valueOut);
            break;
        case ParamType::TVertexAttribType:
            SetParamVal<ParamType::TVertexAttribType>(valueIn, valueOut);
            break;
        case ParamType::TvoidConstPointer:
            SetParamVal<ParamType::TvoidConstPointer>(valueIn, valueOut);
            break;
        case ParamType::TvoidConstPointerPointer:
            SetParamVal<ParamType::TvoidConstPointerPointer>(valueIn, valueOut);
            break;
        case ParamType::TvoidPointer:
            SetParamVal<ParamType::TvoidPointer>(valueIn, valueOut);
            break;
        case ParamType::TvoidPointerPointer:
            SetParamVal<ParamType::TvoidPointerPointer>(valueIn, valueOut);
            break;
    }
}

struct CallCapture;
struct ParamCapture;

void WriteParamCaptureReplay(std::ostream &os, const CallCapture &call, const ParamCapture &param);
const char *ParamTypeToString(ParamType paramType);

enum class ResourceIDType
{
    Buffer,
    FenceNV,
    Framebuffer,
    MemoryObject,
    ProgramPipeline,
    Query,
    Renderbuffer,
    Sampler,
    Semaphore,
    ShaderProgram,
    Texture,
    TransformFeedback,
    VertexArray,
    EnumCount,
    InvalidEnum = EnumCount
};

ResourceIDType GetResourceIDTypeFromParamType(ParamType paramType);
const char *GetResourceIDTypeName(ResourceIDType resourceIDType);
}  // namespace angle

#endif  // LIBANGLE_FRAME_CAPTURE_UTILS_AUTOGEN_H_
