<?xml version="1.0"?>
<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">

<OpenGLAPI>

<category name="GL_KHR_debug" number="119">
  <enum name="DEBUG_OUTPUT"                               value="0x92E0"/>
  <enum name="DEBUG_OUTPUT_SYNCHRONOUS"                   value="0x8242"/>

  <enum name="CONTEXT_FLAG_DEBUG_BIT"                     value="0x00000002"/>

  <enum name="MAX_DEBUG_MESSAGE_LENGTH" count="1"         value="0x9143">
    <size name="Get" mode="get"/>
  </enum>
  <enum name="MAX_DEBUG_LOGGED_MESSAGES" count="1"        value="0x9144">
    <size name="Get" mode="get"/>
  </enum>
  <enum name="DEBUG_LOGGED_MESSAGES" count="1"            value="0x9145">
    <size name="Get" mode="get"/>
  </enum>
  <enum name="DEBUG_NEXT_LOGGED_MESSAGE_LENGTH" count="1" value="0x8243">
    <size name="Get" mode="get"/>
  </enum>
  <enum name="MAX_DEBUG_GROUP_STACK_DEPTH" count="1"      value="0x826C">
    <size name="Get" mode="get"/>
  </enum>
  <enum name="DEBUG_GROUP_STACK_DEPTH" count="1"          value="0x826D">
    <size name="Get" mode="get"/>
  </enum>
  <enum name="MAX_LABEL_LENGTH" count="1"                 value="0x82E8">
    <size name="Get" mode="get"/>
  </enum>

  <enum name="DEBUG_CALLBACK_FUNCTION" count="1"          value="0x8244">
     <size name="GetPointerv" mode="get"/>
  </enum>
  <enum name="DEBUG_CALLBACK_USER_PARAM" count="1"        value="0x8245">
    <size name="GetPointerv" mode="get"/>
  </enum>

  <enum name="DEBUG_SOURCE_API"                           value="0x8246"/>
  <enum name="DEBUG_SOURCE_WINDOW_SYSTEM"                 value="0x8247"/>
  <enum name="DEBUG_SOURCE_SHADER_COMPILER"               value="0x8248"/>
  <enum name="DEBUG_SOURCE_THIRD_PARTY"                   value="0x8249"/>
  <enum name="DEBUG_SOURCE_APPLICATION"                   value="0x824A"/>
  <enum name="DEBUG_SOURCE_OTHER"                         value="0x824B"/>

  <enum name="DEBUG_TYPE_ERROR"                           value="0x824C"/>
  <enum name="DEBUG_TYPE_DEPRECATED_BEHAVIOR"             value="0x824D"/>
  <enum name="DEBUG_TYPE_UNDEFINED_BEHAVIOR"              value="0x824E"/>
  <enum name="DEBUG_TYPE_PORTABILITY"                     value="0x824F"/>
  <enum name="DEBUG_TYPE_PERFORMANCE"                     value="0x8250"/>
  <enum name="DEBUG_TYPE_OTHER"                           value="0x8251"/>
  <enum name="DEBUG_TYPE_MARKER"                          value="0x8268"/>

  <enum name="DEBUG_TYPE_PUSH_GROUP"                      value="0x8269"/>
  <enum name="DEBUG_TYPE_POP_GROUP"                       value="0x826A"/>

  <enum name="DEBUG_SEVERITY_HIGH"                        value="0x9146"/>
  <enum name="DEBUG_SEVERITY_MEDIUM"                      value="0x9147"/>
  <enum name="DEBUG_SEVERITY_LOW"                         value="0x9148"/>
  <enum name="DEBUG_SEVERITY_NOTIFICATION"                value="0x826B"/>

  <enum name="STACK_UNDERFLOW"                            value="0x0504"/>
  <enum name="STACK_OVERFLOW"                             value="0x0503"/>

  <enum name="BUFFER"                                     value="0x82E0"/>
  <enum name="SHADER"                                     value="0x82E1"/>
  <enum name="PROGRAM"                                    value="0x82E2"/>
  <enum name="QUERY"                                      value="0x82E3"/>
  <enum name="PROGRAM_PIPELINE"                           value="0x82E4"/>
  <enum name="SAMPLER"                                    value="0x82E6"/>
  <!-- Compatibility Profile -->
  <enum name="DISPLAY_LIST"                               value="0x82E7"/>

  <function name="DebugMessageControl" es2="3.2">
    <param name="source" type="GLenum"/>
    <param name="type" type="GLenum"/>
    <param name="severity" type="GLenum"/>
    <param name="count" type="GLsizei" counter="true"/>
    <param name="ids" type="const GLuint *" count="count"/>
    <param name="enabled" type="GLboolean"/>
  </function>

  <function name="DebugMessageInsert" es2="3.2">
    <param name="source" type="GLenum"/>
    <param name="type" type="GLenum"/>
    <param name="id" type="GLuint"/>
    <param name="severity" type="GLenum"/>
    <param name="length" type="GLsizei"/>
    <param name="buf" type="const GLchar *"/>
  </function>

  <function name="DebugMessageCallback" es2="3.2">
    <param name="callback" type="GLDEBUGPROC"/>
    <param name="userParam" type="const GLvoid *"/>
  </function>

  <function name="GetDebugMessageLog" es2="3.2">
    <return type="GLuint"/>
    <param name="count" type="GLuint"/>
    <param name="bufsize" type="GLsizei"/>
    <param name="sources" type="GLenum *" output="true"/>
    <param name="types" type="GLenum *" output="true"/>
    <param name="ids" type="GLuint *" output="true"/>
    <param name="severities" type="GLenum *" output="true"/>
    <param name="lengths" type="GLsizei *" output="true"/>
    <param name="messageLog" type="GLchar *" output="true"/>
  </function>

  <function name="PushDebugGroup" es2="3.2">
    <param name="source" type="GLenum"/>
    <param name="id" type="GLuint"/>
    <param name="length" type="GLsizei"/>
    <param name="message" type="const GLchar *"/>
  </function>

  <function name="PopDebugGroup" es2="3.2" />

  <function name="ObjectLabel" es2="3.2">
    <param name="identifier" type="GLenum"/>
    <param name="name" type="GLuint"/>
    <param name="length" type="GLsizei"/>
    <param name="label" type="const GLchar *"/>
  </function>

  <function name="GetObjectLabel" es2="3.2">
    <param name="identifier" type="GLenum"/>
    <param name="name" type="GLuint"/>
    <param name="bufSize" type="GLsizei"/>
    <param name="length" type="GLsizei *"/>
    <param name="label" type="GLchar *"/>
  </function>

  <function name="ObjectPtrLabel" es2="3.2">
    <param name="ptr" type="const GLvoid *"/>
    <param name="length" type="GLsizei"/>
    <param name="label" type="const GLchar *"/>
  </function>

  <function name="GetObjectPtrLabel" es2="3.2">
    <param name="ptr" type="const GLvoid *"/>
    <param name="bufSize" type="GLsizei"/>
    <param name="length" type="GLsizei *"/>
    <param name="label" type="GLchar *"/>
  </function>

  <!-- ES extension has different suffixes -->
  <function name="DebugMessageControlKHR" alias="DebugMessageControl" es1="1.1" es2="2.0">
    <param name="source" type="GLenum"/>
    <param name="type" type="GLenum"/>
    <param name="severity" type="GLenum"/>
    <param name="count" type="GLsizei" counter="true"/>
    <param name="ids" type="const GLuint *" count="count"/>
    <param name="enabled" type="GLboolean"/>
  </function>

  <function name="DebugMessageInsertKHR" alias="DebugMessageInsert" es1="1.1" es2="2.0">
    <param name="source" type="GLenum"/>
    <param name="type" type="GLenum"/>
    <param name="id" type="GLuint"/>
    <param name="severity" type="GLenum"/>
    <param name="length" type="GLsizei"/>
    <param name="buf" type="const GLchar *"/>
  </function>

  <function name="DebugMessageCallbackKHR" alias="DebugMessageCallback" es1="1.1" es2="2.0">
    <param name="callback" type="GLDEBUGPROC"/>
    <param name="userParam" type="const GLvoid *"/>
  </function>

  <function name="GetDebugMessageLogKHR" alias="GetDebugMessageLog" es1="1.1" es2="2.0">
    <return type="GLuint"/>
    <param name="count" type="GLuint"/>
    <param name="bufsize" type="GLsizei"/>
    <param name="sources" type="GLenum *" output="true"/>
    <param name="types" type="GLenum *" output="true"/>
    <param name="ids" type="GLuint *" output="true"/>
    <param name="severities" type="GLenum *" output="true"/>
    <param name="lengths" type="GLsizei *" output="true"/>
    <param name="messageLog" type="GLchar *" output="true"/>
  </function>

  <function name="GetPointervKHR" alias="GetPointerv" es1="1.1" es2="2.0">
    <param name="pname" type="GLenum"/>
    <param name="params" type="GLvoid **" output="true"/>
  </function>

  <function name="PushDebugGroupKHR" alias="PushDebugGroup" es1="1.1" es2="2.0">
    <param name="source" type="GLenum"/>
    <param name="id" type="GLuint"/>
    <param name="length" type="GLsizei"/>
    <param name="message" type="const GLchar *"/>
  </function>

  <function name="PopDebugGroupKHR" alias="PopDebugGroup" es1="1.1" es2="2.0"/>

  <function name="ObjectLabelKHR" alias="ObjectLabel" es1="1.1" es2="2.0">
    <param name="identifier" type="GLenum"/>
    <param name="name" type="GLuint"/>
    <param name="length" type="GLsizei"/>
    <param name="label" type="const GLchar *"/>
  </function>

  <function name="GetObjectLabelKHR" alias="GetObjectLabel" es1="1.1" es2="2.0">
    <param name="identifier" type="GLenum"/>
    <param name="name" type="GLuint"/>
    <param name="bufSize" type="GLsizei"/>
    <param name="length" type="GLsizei *"/>
    <param name="label" type="GLchar *"/>
  </function>

  <function name="ObjectPtrLabelKHR" alias="ObjectPtrLabel" es1="1.1" es2="2.0">
    <param name="ptr" type="const GLvoid *"/>
    <param name="length" type="GLsizei"/>
    <param name="label" type="const GLchar *"/>
  </function>

  <function name="GetObjectPtrLabelKHR" alias="GetObjectPtrLabel" es1="1.1" es2="2.0">
    <param name="ptr" type="const GLvoid *"/>
    <param name="bufSize" type="GLsizei"/>
    <param name="length" type="GLsizei *"/>
    <param name="label" type="GLchar *"/>
  </function>

</category>

</OpenGLAPI>