void API_ENTRY(glBlendBarrierKHR)(void) {
    CALL_GL_API(glBlendBarrierKHR);
}
void API_ENTRY(glDebugMessageControlKHR)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled) {
    CALL_GL_API(glDebugMessageControlKHR, source, type, severity, count, ids, enabled);
}
void API_ENTRY(glDebugMessageInsertKHR)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf) {
    CALL_GL_API(glDebugMessageInsertKHR, source, type, id, severity, length, buf);
}
void API_ENTRY(glDebugMessageCallbackKHR)(GLDEBUGPROCKHR callback, const void * userParam) {
    CALL_GL_API(glDebugMessageCallbackKHR, callback, userParam);
}
GLuint API_ENTRY(glGetDebugMessageLogKHR)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog) {
    CALL_GL_API_RETURN(glGetDebugMessageLogKHR, count, bufSize, sources, types, ids, severities, lengths, messageLog);
}
void API_ENTRY(glPushDebugGroupKHR)(GLenum source, GLuint id, GLsizei length, const GLchar * message) {
    CALL_GL_API(glPushDebugGroupKHR, source, id, length, message);
}
void API_ENTRY(glPopDebugGroupKHR)(void) {
    CALL_GL_API(glPopDebugGroupKHR);
}
void API_ENTRY(glObjectLabelKHR)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label) {
    CALL_GL_API(glObjectLabelKHR, identifier, name, length, label);
}
void API_ENTRY(glGetObjectLabelKHR)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label) {
    CALL_GL_API(glGetObjectLabelKHR, identifier, name, bufSize, length, label);
}
void API_ENTRY(glObjectPtrLabelKHR)(const void * ptr, GLsizei length, const GLchar * label) {
    CALL_GL_API(glObjectPtrLabelKHR, ptr, length, label);
}
void API_ENTRY(glGetObjectPtrLabelKHR)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label) {
    CALL_GL_API(glGetObjectPtrLabelKHR, ptr, bufSize, length, label);
}
void API_ENTRY(glGetPointervKHR)(GLenum pname, void ** params) {
    CALL_GL_API(glGetPointervKHR, pname, params);
}
void API_ENTRY(glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image) {
    CALL_GL_API(glEGLImageTargetTexture2DOES, target, image);
}
void API_ENTRY(glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image) {
    CALL_GL_API(glEGLImageTargetRenderbufferStorageOES, target, image);
}
void API_ENTRY(glGetProgramBinaryOES)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary) {
    CALL_GL_API(glGetProgramBinaryOES, program, bufSize, length, binaryFormat, binary);
}
void API_ENTRY(glProgramBinaryOES)(GLuint program, GLenum binaryFormat, const void * binary, GLint length) {
    CALL_GL_API(glProgramBinaryOES, program, binaryFormat, binary, length);
}
void * API_ENTRY(glMapBufferOES)(GLenum target, GLenum access) {
    CALL_GL_API_RETURN(glMapBufferOES, target, access);
}
GLboolean API_ENTRY(glUnmapBufferOES)(GLenum target) {
    CALL_GL_API_RETURN(glUnmapBufferOES, target);
}
void API_ENTRY(glGetBufferPointervOES)(GLenum target, GLenum pname, void ** params) {
    CALL_GL_API(glGetBufferPointervOES, target, pname, params);
}
void API_ENTRY(glMinSampleShadingOES)(GLfloat value) {
    CALL_GL_API(glMinSampleShadingOES, value);
}
void API_ENTRY(glTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels) {
    CALL_GL_API(glTexImage3DOES, target, level, internalformat, width, height, depth, border, format, type, pixels);
}
void API_ENTRY(glTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels) {
    CALL_GL_API(glTexSubImage3DOES, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
}
void API_ENTRY(glCopyTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
    CALL_GL_API(glCopyTexSubImage3DOES, target, level, xoffset, yoffset, zoffset, x, y, width, height);
}
void API_ENTRY(glCompressedTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data) {
    CALL_GL_API(glCompressedTexImage3DOES, target, level, internalformat, width, height, depth, border, imageSize, data);
}
void API_ENTRY(glCompressedTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data) {
    CALL_GL_API(glCompressedTexSubImage3DOES, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
}
void API_ENTRY(glFramebufferTexture3DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {
    CALL_GL_API(glFramebufferTexture3DOES, target, attachment, textarget, texture, level, zoffset);
}
void API_ENTRY(glTexStorage3DMultisampleOES)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) {
    CALL_GL_API(glTexStorage3DMultisampleOES, target, samples, internalformat, width, height, depth, fixedsamplelocations);
}
void API_ENTRY(glBindVertexArrayOES)(GLuint array) {
    CALL_GL_API(glBindVertexArrayOES, array);
}
void API_ENTRY(glDeleteVertexArraysOES)(GLsizei n, const GLuint * arrays) {
    CALL_GL_API(glDeleteVertexArraysOES, n, arrays);
}
void API_ENTRY(glGenVertexArraysOES)(GLsizei n, GLuint * arrays) {
    CALL_GL_API(glGenVertexArraysOES, n, arrays);
}
GLboolean API_ENTRY(glIsVertexArrayOES)(GLuint array) {
    CALL_GL_API_RETURN(glIsVertexArrayOES, array);
}
void API_ENTRY(glGetPerfMonitorGroupsAMD)(GLint * numGroups, GLsizei groupsSize, GLuint * groups) {
    CALL_GL_API(glGetPerfMonitorGroupsAMD, numGroups, groupsSize, groups);
}
void API_ENTRY(glGetPerfMonitorCountersAMD)(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters) {
    CALL_GL_API(glGetPerfMonitorCountersAMD, group, numCounters, maxActiveCounters, counterSize, counters);
}
void API_ENTRY(glGetPerfMonitorGroupStringAMD)(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString) {
    CALL_GL_API(glGetPerfMonitorGroupStringAMD, group, bufSize, length, groupString);
}
void API_ENTRY(glGetPerfMonitorCounterStringAMD)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString) {
    CALL_GL_API(glGetPerfMonitorCounterStringAMD, group, counter, bufSize, length, counterString);
}
void API_ENTRY(glGetPerfMonitorCounterInfoAMD)(GLuint group, GLuint counter, GLenum pname, void * data) {
    CALL_GL_API(glGetPerfMonitorCounterInfoAMD, group, counter, pname, data);
}
void API_ENTRY(glGenPerfMonitorsAMD)(GLsizei n, GLuint * monitors) {
    CALL_GL_API(glGenPerfMonitorsAMD, n, monitors);
}
void API_ENTRY(glDeletePerfMonitorsAMD)(GLsizei n, GLuint * monitors) {
    CALL_GL_API(glDeletePerfMonitorsAMD, n, monitors);
}
void API_ENTRY(glSelectPerfMonitorCountersAMD)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList) {
    CALL_GL_API(glSelectPerfMonitorCountersAMD, monitor, enable, group, numCounters, counterList);
}
void API_ENTRY(glBeginPerfMonitorAMD)(GLuint monitor) {
    CALL_GL_API(glBeginPerfMonitorAMD, monitor);
}
void API_ENTRY(glEndPerfMonitorAMD)(GLuint monitor) {
    CALL_GL_API(glEndPerfMonitorAMD, monitor);
}
void API_ENTRY(glGetPerfMonitorCounterDataAMD)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten) {
    CALL_GL_API(glGetPerfMonitorCounterDataAMD, monitor, pname, dataSize, data, bytesWritten);
}
void API_ENTRY(glBlitFramebufferANGLE)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
    CALL_GL_API(glBlitFramebufferANGLE, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
void API_ENTRY(glRenderbufferStorageMultisampleANGLE)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glRenderbufferStorageMultisampleANGLE, target, samples, internalformat, width, height);
}
void API_ENTRY(glDrawArraysInstancedANGLE)(GLenum mode, GLint first, GLsizei count, GLsizei primcount) {
    CALL_GL_API(glDrawArraysInstancedANGLE, mode, first, count, primcount);
}
void API_ENTRY(glDrawElementsInstancedANGLE)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount) {
    CALL_GL_API(glDrawElementsInstancedANGLE, mode, count, type, indices, primcount);
}
void API_ENTRY(glVertexAttribDivisorANGLE)(GLuint index, GLuint divisor) {
    CALL_GL_API(glVertexAttribDivisorANGLE, index, divisor);
}
void API_ENTRY(glGetTranslatedShaderSourceANGLE)(GLuint shader, GLsizei bufsize, GLsizei * length, GLchar * source) {
    CALL_GL_API(glGetTranslatedShaderSourceANGLE, shader, bufsize, length, source);
}
void API_ENTRY(glCopyTextureLevelsAPPLE)(GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount) {
    CALL_GL_API(glCopyTextureLevelsAPPLE, destinationTexture, sourceTexture, sourceBaseLevel, sourceLevelCount);
}
void API_ENTRY(glRenderbufferStorageMultisampleAPPLE)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glRenderbufferStorageMultisampleAPPLE, target, samples, internalformat, width, height);
}
void API_ENTRY(glResolveMultisampleFramebufferAPPLE)(void) {
    CALL_GL_API(glResolveMultisampleFramebufferAPPLE);
}
GLsync API_ENTRY(glFenceSyncAPPLE)(GLenum condition, GLbitfield flags) {
    CALL_GL_API_RETURN(glFenceSyncAPPLE, condition, flags);
}
GLboolean API_ENTRY(glIsSyncAPPLE)(GLsync sync) {
    CALL_GL_API_RETURN(glIsSyncAPPLE, sync);
}
void API_ENTRY(glDeleteSyncAPPLE)(GLsync sync) {
    CALL_GL_API(glDeleteSyncAPPLE, sync);
}
GLenum API_ENTRY(glClientWaitSyncAPPLE)(GLsync sync, GLbitfield flags, GLuint64 timeout) {
    CALL_GL_API_RETURN(glClientWaitSyncAPPLE, sync, flags, timeout);
}
void API_ENTRY(glWaitSyncAPPLE)(GLsync sync, GLbitfield flags, GLuint64 timeout) {
    CALL_GL_API(glWaitSyncAPPLE, sync, flags, timeout);
}
void API_ENTRY(glGetInteger64vAPPLE)(GLenum pname, GLint64 * params) {
    CALL_GL_API(glGetInteger64vAPPLE, pname, params);
}
void API_ENTRY(glGetSyncivAPPLE)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values) {
    CALL_GL_API(glGetSyncivAPPLE, sync, pname, bufSize, length, values);
}
void API_ENTRY(glCopyImageSubDataEXT)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) {
    CALL_GL_API(glCopyImageSubDataEXT, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);
}
void API_ENTRY(glLabelObjectEXT)(GLenum type, GLuint object, GLsizei length, const GLchar * label) {
    CALL_GL_API(glLabelObjectEXT, type, object, length, label);
}
void API_ENTRY(glGetObjectLabelEXT)(GLenum type, GLuint object, GLsizei bufSize, GLsizei * length, GLchar * label) {
    CALL_GL_API(glGetObjectLabelEXT, type, object, bufSize, length, label);
}
void API_ENTRY(glInsertEventMarkerEXT)(GLsizei length, const GLchar * marker) {
    CALL_GL_API(glInsertEventMarkerEXT, length, marker);
}
void API_ENTRY(glPushGroupMarkerEXT)(GLsizei length, const GLchar * marker) {
    CALL_GL_API(glPushGroupMarkerEXT, length, marker);
}
void API_ENTRY(glPopGroupMarkerEXT)(void) {
    CALL_GL_API(glPopGroupMarkerEXT);
}
void API_ENTRY(glDiscardFramebufferEXT)(GLenum target, GLsizei numAttachments, const GLenum * attachments) {
    CALL_GL_API(glDiscardFramebufferEXT, target, numAttachments, attachments);
}
void API_ENTRY(glGenQueriesEXT)(GLsizei n, GLuint * ids) {
    CALL_GL_API(glGenQueriesEXT, n, ids);
}
void API_ENTRY(glDeleteQueriesEXT)(GLsizei n, const GLuint * ids) {
    CALL_GL_API(glDeleteQueriesEXT, n, ids);
}
GLboolean API_ENTRY(glIsQueryEXT)(GLuint id) {
    CALL_GL_API_RETURN(glIsQueryEXT, id);
}
void API_ENTRY(glBeginQueryEXT)(GLenum target, GLuint id) {
    CALL_GL_API(glBeginQueryEXT, target, id);
}
void API_ENTRY(glEndQueryEXT)(GLenum target) {
    CALL_GL_API(glEndQueryEXT, target);
}
void API_ENTRY(glQueryCounterEXT)(GLuint id, GLenum target) {
    CALL_GL_API(glQueryCounterEXT, id, target);
}
void API_ENTRY(glGetQueryivEXT)(GLenum target, GLenum pname, GLint * params) {
    CALL_GL_API(glGetQueryivEXT, target, pname, params);
}
void API_ENTRY(glGetQueryObjectivEXT)(GLuint id, GLenum pname, GLint * params) {
    CALL_GL_API(glGetQueryObjectivEXT, id, pname, params);
}
void API_ENTRY(glGetQueryObjectuivEXT)(GLuint id, GLenum pname, GLuint * params) {
    CALL_GL_API(glGetQueryObjectuivEXT, id, pname, params);
}
void API_ENTRY(glGetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64 * params) {
    CALL_GL_API(glGetQueryObjecti64vEXT, id, pname, params);
}
void API_ENTRY(glGetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64 * params) {
    CALL_GL_API(glGetQueryObjectui64vEXT, id, pname, params);
}
void API_ENTRY(glDrawBuffersEXT)(GLsizei n, const GLenum * bufs) {
    CALL_GL_API(glDrawBuffersEXT, n, bufs);
}
void API_ENTRY(glEnableiEXT)(GLenum target, GLuint index) {
    CALL_GL_API(glEnableiEXT, target, index);
}
void API_ENTRY(glDisableiEXT)(GLenum target, GLuint index) {
    CALL_GL_API(glDisableiEXT, target, index);
}
void API_ENTRY(glBlendEquationiEXT)(GLuint buf, GLenum mode) {
    CALL_GL_API(glBlendEquationiEXT, buf, mode);
}
void API_ENTRY(glBlendEquationSeparateiEXT)(GLuint buf, GLenum modeRGB, GLenum modeAlpha) {
    CALL_GL_API(glBlendEquationSeparateiEXT, buf, modeRGB, modeAlpha);
}
void API_ENTRY(glBlendFunciEXT)(GLuint buf, GLenum src, GLenum dst) {
    CALL_GL_API(glBlendFunciEXT, buf, src, dst);
}
void API_ENTRY(glBlendFuncSeparateiEXT)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
    CALL_GL_API(glBlendFuncSeparateiEXT, buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
}
void API_ENTRY(glColorMaskiEXT)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) {
    CALL_GL_API(glColorMaskiEXT, index, r, g, b, a);
}
GLboolean API_ENTRY(glIsEnablediEXT)(GLenum target, GLuint index) {
    CALL_GL_API_RETURN(glIsEnablediEXT, target, index);
}
void API_ENTRY(glDrawArraysInstancedEXT)(GLenum mode, GLint start, GLsizei count, GLsizei primcount) {
    CALL_GL_API(glDrawArraysInstancedEXT, mode, start, count, primcount);
}
void API_ENTRY(glDrawElementsInstancedEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount) {
    CALL_GL_API(glDrawElementsInstancedEXT, mode, count, type, indices, primcount);
}
void API_ENTRY(glFramebufferTextureEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level) {
    CALL_GL_API(glFramebufferTextureEXT, target, attachment, texture, level);
}
void API_ENTRY(glVertexAttribDivisorEXT)(GLuint index, GLuint divisor) {
    CALL_GL_API(glVertexAttribDivisorEXT, index, divisor);
}
void * API_ENTRY(glMapBufferRangeEXT)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) {
    CALL_GL_API_RETURN(glMapBufferRangeEXT, target, offset, length, access);
}
void API_ENTRY(glFlushMappedBufferRangeEXT)(GLenum target, GLintptr offset, GLsizeiptr length) {
    CALL_GL_API(glFlushMappedBufferRangeEXT, target, offset, length);
}
void API_ENTRY(glMultiDrawArraysEXT)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount) {
    CALL_GL_API(glMultiDrawArraysEXT, mode, first, count, primcount);
}
void API_ENTRY(glMultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount) {
    CALL_GL_API(glMultiDrawElementsEXT, mode, count, type, indices, primcount);
}
void API_ENTRY(glRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glRenderbufferStorageMultisampleEXT, target, samples, internalformat, width, height);
}
void API_ENTRY(glFramebufferTexture2DMultisampleEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) {
    CALL_GL_API(glFramebufferTexture2DMultisampleEXT, target, attachment, textarget, texture, level, samples);
}
void API_ENTRY(glReadBufferIndexedEXT)(GLenum src, GLint index) {
    CALL_GL_API(glReadBufferIndexedEXT, src, index);
}
void API_ENTRY(glDrawBuffersIndexedEXT)(GLint n, const GLenum * location, const GLint * indices) {
    CALL_GL_API(glDrawBuffersIndexedEXT, n, location, indices);
}
void API_ENTRY(glGetIntegeri_vEXT)(GLenum target, GLuint index, GLint * data) {
    CALL_GL_API(glGetIntegeri_vEXT, target, index, data);
}
void API_ENTRY(glPrimitiveBoundingBoxEXT)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW) {
    CALL_GL_API(glPrimitiveBoundingBoxEXT, minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
}
GLenum API_ENTRY(glGetGraphicsResetStatusEXT)(void) {
    CALL_GL_API_RETURN(glGetGraphicsResetStatusEXT);
}
void API_ENTRY(glReadnPixelsEXT)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data) {
    CALL_GL_API(glReadnPixelsEXT, x, y, width, height, format, type, bufSize, data);
}
void API_ENTRY(glGetnUniformfvEXT)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params) {
    CALL_GL_API(glGetnUniformfvEXT, program, location, bufSize, params);
}
void API_ENTRY(glGetnUniformivEXT)(GLuint program, GLint location, GLsizei bufSize, GLint * params) {
    CALL_GL_API(glGetnUniformivEXT, program, location, bufSize, params);
}
void API_ENTRY(glActiveShaderProgramEXT)(GLuint pipeline, GLuint program) {
    CALL_GL_API(glActiveShaderProgramEXT, pipeline, program);
}
void API_ENTRY(glBindProgramPipelineEXT)(GLuint pipeline) {
    CALL_GL_API(glBindProgramPipelineEXT, pipeline);
}
GLuint API_ENTRY(glCreateShaderProgramvEXT)(GLenum type, GLsizei count, const GLchar ** strings) {
    CALL_GL_API_RETURN(glCreateShaderProgramvEXT, type, count, strings);
}
void API_ENTRY(glDeleteProgramPipelinesEXT)(GLsizei n, const GLuint * pipelines) {
    CALL_GL_API(glDeleteProgramPipelinesEXT, n, pipelines);
}
void API_ENTRY(glGenProgramPipelinesEXT)(GLsizei n, GLuint * pipelines) {
    CALL_GL_API(glGenProgramPipelinesEXT, n, pipelines);
}
void API_ENTRY(glGetProgramPipelineInfoLogEXT)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {
    CALL_GL_API(glGetProgramPipelineInfoLogEXT, pipeline, bufSize, length, infoLog);
}
void API_ENTRY(glGetProgramPipelineivEXT)(GLuint pipeline, GLenum pname, GLint * params) {
    CALL_GL_API(glGetProgramPipelineivEXT, pipeline, pname, params);
}
GLboolean API_ENTRY(glIsProgramPipelineEXT)(GLuint pipeline) {
    CALL_GL_API_RETURN(glIsProgramPipelineEXT, pipeline);
}
void API_ENTRY(glProgramParameteriEXT)(GLuint program, GLenum pname, GLint value) {
    CALL_GL_API(glProgramParameteriEXT, program, pname, value);
}
void API_ENTRY(glProgramUniform1fEXT)(GLuint program, GLint location, GLfloat v0) {
    CALL_GL_API(glProgramUniform1fEXT, program, location, v0);
}
void API_ENTRY(glProgramUniform1fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value) {
    CALL_GL_API(glProgramUniform1fvEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform1iEXT)(GLuint program, GLint location, GLint v0) {
    CALL_GL_API(glProgramUniform1iEXT, program, location, v0);
}
void API_ENTRY(glProgramUniform1ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value) {
    CALL_GL_API(glProgramUniform1ivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform2fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1) {
    CALL_GL_API(glProgramUniform2fEXT, program, location, v0, v1);
}
void API_ENTRY(glProgramUniform2fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value) {
    CALL_GL_API(glProgramUniform2fvEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform2iEXT)(GLuint program, GLint location, GLint v0, GLint v1) {
    CALL_GL_API(glProgramUniform2iEXT, program, location, v0, v1);
}
void API_ENTRY(glProgramUniform2ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value) {
    CALL_GL_API(glProgramUniform2ivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform3fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {
    CALL_GL_API(glProgramUniform3fEXT, program, location, v0, v1, v2);
}
void API_ENTRY(glProgramUniform3fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value) {
    CALL_GL_API(glProgramUniform3fvEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform3iEXT)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2) {
    CALL_GL_API(glProgramUniform3iEXT, program, location, v0, v1, v2);
}
void API_ENTRY(glProgramUniform3ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value) {
    CALL_GL_API(glProgramUniform3ivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform4fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {
    CALL_GL_API(glProgramUniform4fEXT, program, location, v0, v1, v2, v3);
}
void API_ENTRY(glProgramUniform4fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value) {
    CALL_GL_API(glProgramUniform4fvEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform4iEXT)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {
    CALL_GL_API(glProgramUniform4iEXT, program, location, v0, v1, v2, v3);
}
void API_ENTRY(glProgramUniform4ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value) {
    CALL_GL_API(glProgramUniform4ivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniformMatrix2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glProgramUniformMatrix2fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glProgramUniformMatrix3fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glProgramUniformMatrix4fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glUseProgramStagesEXT)(GLuint pipeline, GLbitfield stages, GLuint program) {
    CALL_GL_API(glUseProgramStagesEXT, pipeline, stages, program);
}
void API_ENTRY(glValidateProgramPipelineEXT)(GLuint pipeline) {
    CALL_GL_API(glValidateProgramPipelineEXT, pipeline);
}
void API_ENTRY(glProgramUniform1uiEXT)(GLuint program, GLint location, GLuint v0) {
    CALL_GL_API(glProgramUniform1uiEXT, program, location, v0);
}
void API_ENTRY(glProgramUniform2uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1) {
    CALL_GL_API(glProgramUniform2uiEXT, program, location, v0, v1);
}
void API_ENTRY(glProgramUniform3uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) {
    CALL_GL_API(glProgramUniform3uiEXT, program, location, v0, v1, v2);
}
void API_ENTRY(glProgramUniform4uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {
    CALL_GL_API(glProgramUniform4uiEXT, program, location, v0, v1, v2, v3);
}
void API_ENTRY(glProgramUniform1uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value) {
    CALL_GL_API(glProgramUniform1uivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform2uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value) {
    CALL_GL_API(glProgramUniform2uivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform3uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value) {
    CALL_GL_API(glProgramUniform3uivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform4uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value) {
    CALL_GL_API(glProgramUniform4uivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniformMatrix2x3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glProgramUniformMatrix2x3fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix3x2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glProgramUniformMatrix3x2fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix2x4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glProgramUniformMatrix2x4fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix4x2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glProgramUniformMatrix4x2fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix3x4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glProgramUniformMatrix3x4fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix4x3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glProgramUniformMatrix4x3fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glPatchParameteriEXT)(GLenum pname, GLint value) {
    CALL_GL_API(glPatchParameteriEXT, pname, value);
}
void API_ENTRY(glTexParameterIivEXT)(GLenum target, GLenum pname, const GLint * params) {
    CALL_GL_API(glTexParameterIivEXT, target, pname, params);
}
void API_ENTRY(glTexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint * params) {
    CALL_GL_API(glTexParameterIuivEXT, target, pname, params);
}
void API_ENTRY(glGetTexParameterIivEXT)(GLenum target, GLenum pname, GLint * params) {
    CALL_GL_API(glGetTexParameterIivEXT, target, pname, params);
}
void API_ENTRY(glGetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint * params) {
    CALL_GL_API(glGetTexParameterIuivEXT, target, pname, params);
}
void API_ENTRY(glSamplerParameterIivEXT)(GLuint sampler, GLenum pname, const GLint * param) {
    CALL_GL_API(glSamplerParameterIivEXT, sampler, pname, param);
}
void API_ENTRY(glSamplerParameterIuivEXT)(GLuint sampler, GLenum pname, const GLuint * param) {
    CALL_GL_API(glSamplerParameterIuivEXT, sampler, pname, param);
}
void API_ENTRY(glGetSamplerParameterIivEXT)(GLuint sampler, GLenum pname, GLint * params) {
    CALL_GL_API(glGetSamplerParameterIivEXT, sampler, pname, params);
}
void API_ENTRY(glGetSamplerParameterIuivEXT)(GLuint sampler, GLenum pname, GLuint * params) {
    CALL_GL_API(glGetSamplerParameterIuivEXT, sampler, pname, params);
}
void API_ENTRY(glTexBufferEXT)(GLenum target, GLenum internalformat, GLuint buffer) {
    CALL_GL_API(glTexBufferEXT, target, internalformat, buffer);
}
void API_ENTRY(glTexBufferRangeEXT)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) {
    CALL_GL_API(glTexBufferRangeEXT, target, internalformat, buffer, offset, size);
}
void API_ENTRY(glTexStorage1DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) {
    CALL_GL_API(glTexStorage1DEXT, target, levels, internalformat, width);
}
void API_ENTRY(glTexStorage2DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glTexStorage2DEXT, target, levels, internalformat, width, height);
}
void API_ENTRY(glTexStorage3DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {
    CALL_GL_API(glTexStorage3DEXT, target, levels, internalformat, width, height, depth);
}
void API_ENTRY(glTextureStorage1DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) {
    CALL_GL_API(glTextureStorage1DEXT, texture, target, levels, internalformat, width);
}
void API_ENTRY(glTextureStorage2DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glTextureStorage2DEXT, texture, target, levels, internalformat, width, height);
}
void API_ENTRY(glTextureStorage3DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {
    CALL_GL_API(glTextureStorage3DEXT, texture, target, levels, internalformat, width, height, depth);
}
void API_ENTRY(glTextureViewEXT)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) {
    CALL_GL_API(glTextureViewEXT, texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers);
}
void API_ENTRY(glRenderbufferStorageMultisampleIMG)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glRenderbufferStorageMultisampleIMG, target, samples, internalformat, width, height);
}
void API_ENTRY(glFramebufferTexture2DMultisampleIMG)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) {
    CALL_GL_API(glFramebufferTexture2DMultisampleIMG, target, attachment, textarget, texture, level, samples);
}
void API_ENTRY(glBeginPerfQueryINTEL)(GLuint queryHandle) {
    CALL_GL_API(glBeginPerfQueryINTEL, queryHandle);
}
void API_ENTRY(glCreatePerfQueryINTEL)(GLuint queryId, GLuint * queryHandle) {
    CALL_GL_API(glCreatePerfQueryINTEL, queryId, queryHandle);
}
void API_ENTRY(glDeletePerfQueryINTEL)(GLuint queryHandle) {
    CALL_GL_API(glDeletePerfQueryINTEL, queryHandle);
}
void API_ENTRY(glEndPerfQueryINTEL)(GLuint queryHandle) {
    CALL_GL_API(glEndPerfQueryINTEL, queryHandle);
}
void API_ENTRY(glGetFirstPerfQueryIdINTEL)(GLuint * queryId) {
    CALL_GL_API(glGetFirstPerfQueryIdINTEL, queryId);
}
void API_ENTRY(glGetNextPerfQueryIdINTEL)(GLuint queryId, GLuint * nextQueryId) {
    CALL_GL_API(glGetNextPerfQueryIdINTEL, queryId, nextQueryId);
}
void API_ENTRY(glGetPerfCounterInfoINTEL)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue) {
    CALL_GL_API(glGetPerfCounterInfoINTEL, queryId, counterId, counterNameLength, counterName, counterDescLength, counterDesc, counterOffset, counterDataSize, counterTypeEnum, counterDataTypeEnum, rawCounterMaxValue);
}
void API_ENTRY(glGetPerfQueryDataINTEL)(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten) {
    CALL_GL_API(glGetPerfQueryDataINTEL, queryHandle, flags, dataSize, data, bytesWritten);
}
void API_ENTRY(glGetPerfQueryIdByNameINTEL)(GLchar * queryName, GLuint * queryId) {
    CALL_GL_API(glGetPerfQueryIdByNameINTEL, queryName, queryId);
}
void API_ENTRY(glGetPerfQueryInfoINTEL)(GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask) {
    CALL_GL_API(glGetPerfQueryInfoINTEL, queryId, queryNameLength, queryName, dataSize, noCounters, noInstances, capsMask);
}
void API_ENTRY(glBlendParameteriNV)(GLenum pname, GLint value) {
    CALL_GL_API(glBlendParameteriNV, pname, value);
}
void API_ENTRY(glBlendBarrierNV)(void) {
    CALL_GL_API(glBlendBarrierNV);
}
void API_ENTRY(glCopyBufferSubDataNV)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) {
    CALL_GL_API(glCopyBufferSubDataNV, readTarget, writeTarget, readOffset, writeOffset, size);
}
void API_ENTRY(glCoverageMaskNV)(GLboolean mask) {
    CALL_GL_API(glCoverageMaskNV, mask);
}
void API_ENTRY(glCoverageOperationNV)(GLenum operation) {
    CALL_GL_API(glCoverageOperationNV, operation);
}
void API_ENTRY(glDrawBuffersNV)(GLsizei n, const GLenum * bufs) {
    CALL_GL_API(glDrawBuffersNV, n, bufs);
}
void API_ENTRY(glDrawArraysInstancedNV)(GLenum mode, GLint first, GLsizei count, GLsizei primcount) {
    CALL_GL_API(glDrawArraysInstancedNV, mode, first, count, primcount);
}
void API_ENTRY(glDrawElementsInstancedNV)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount) {
    CALL_GL_API(glDrawElementsInstancedNV, mode, count, type, indices, primcount);
}
void API_ENTRY(glDeleteFencesNV)(GLsizei n, const GLuint * fences) {
    CALL_GL_API(glDeleteFencesNV, n, fences);
}
void API_ENTRY(glGenFencesNV)(GLsizei n, GLuint * fences) {
    CALL_GL_API(glGenFencesNV, n, fences);
}
GLboolean API_ENTRY(glIsFenceNV)(GLuint fence) {
    CALL_GL_API_RETURN(glIsFenceNV, fence);
}
GLboolean API_ENTRY(glTestFenceNV)(GLuint fence) {
    CALL_GL_API_RETURN(glTestFenceNV, fence);
}
void API_ENTRY(glGetFenceivNV)(GLuint fence, GLenum pname, GLint * params) {
    CALL_GL_API(glGetFenceivNV, fence, pname, params);
}
void API_ENTRY(glFinishFenceNV)(GLuint fence) {
    CALL_GL_API(glFinishFenceNV, fence);
}
void API_ENTRY(glSetFenceNV)(GLuint fence, GLenum condition) {
    CALL_GL_API(glSetFenceNV, fence, condition);
}
void API_ENTRY(glBlitFramebufferNV)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
    CALL_GL_API(glBlitFramebufferNV, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
void API_ENTRY(glRenderbufferStorageMultisampleNV)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glRenderbufferStorageMultisampleNV, target, samples, internalformat, width, height);
}
void API_ENTRY(glVertexAttribDivisorNV)(GLuint index, GLuint divisor) {
    CALL_GL_API(glVertexAttribDivisorNV, index, divisor);
}
void API_ENTRY(glUniformMatrix2x3fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glUniformMatrix2x3fvNV, location, count, transpose, value);
}
void API_ENTRY(glUniformMatrix3x2fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glUniformMatrix3x2fvNV, location, count, transpose, value);
}
void API_ENTRY(glUniformMatrix2x4fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glUniformMatrix2x4fvNV, location, count, transpose, value);
}
void API_ENTRY(glUniformMatrix4x2fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glUniformMatrix4x2fvNV, location, count, transpose, value);
}
void API_ENTRY(glUniformMatrix3x4fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glUniformMatrix3x4fvNV, location, count, transpose, value);
}
void API_ENTRY(glUniformMatrix4x3fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
    CALL_GL_API(glUniformMatrix4x3fvNV, location, count, transpose, value);
}
void API_ENTRY(glReadBufferNV)(GLenum mode) {
    CALL_GL_API(glReadBufferNV, mode);
}
void API_ENTRY(glAlphaFuncQCOM)(GLenum func, GLclampf ref) {
    CALL_GL_API(glAlphaFuncQCOM, func, ref);
}
void API_ENTRY(glGetDriverControlsQCOM)(GLint * num, GLsizei size, GLuint * driverControls) {
    CALL_GL_API(glGetDriverControlsQCOM, num, size, driverControls);
}
void API_ENTRY(glGetDriverControlStringQCOM)(GLuint driverControl, GLsizei bufSize, GLsizei * length, GLchar * driverControlString) {
    CALL_GL_API(glGetDriverControlStringQCOM, driverControl, bufSize, length, driverControlString);
}
void API_ENTRY(glEnableDriverControlQCOM)(GLuint driverControl) {
    CALL_GL_API(glEnableDriverControlQCOM, driverControl);
}
void API_ENTRY(glDisableDriverControlQCOM)(GLuint driverControl) {
    CALL_GL_API(glDisableDriverControlQCOM, driverControl);
}
void API_ENTRY(glExtGetTexturesQCOM)(GLuint * textures, GLint maxTextures, GLint * numTextures) {
    CALL_GL_API(glExtGetTexturesQCOM, textures, maxTextures, numTextures);
}
void API_ENTRY(glExtGetBuffersQCOM)(GLuint * buffers, GLint maxBuffers, GLint * numBuffers) {
    CALL_GL_API(glExtGetBuffersQCOM, buffers, maxBuffers, numBuffers);
}
void API_ENTRY(glExtGetRenderbuffersQCOM)(GLuint * renderbuffers, GLint maxRenderbuffers, GLint * numRenderbuffers) {
    CALL_GL_API(glExtGetRenderbuffersQCOM, renderbuffers, maxRenderbuffers, numRenderbuffers);
}
void API_ENTRY(glExtGetFramebuffersQCOM)(GLuint * framebuffers, GLint maxFramebuffers, GLint * numFramebuffers) {
    CALL_GL_API(glExtGetFramebuffersQCOM, framebuffers, maxFramebuffers, numFramebuffers);
}
void API_ENTRY(glExtGetTexLevelParameterivQCOM)(GLuint texture, GLenum face, GLint level, GLenum pname, GLint * params) {
    CALL_GL_API(glExtGetTexLevelParameterivQCOM, texture, face, level, pname, params);
}
void API_ENTRY(glExtTexObjectStateOverrideiQCOM)(GLenum target, GLenum pname, GLint param) {
    CALL_GL_API(glExtTexObjectStateOverrideiQCOM, target, pname, param);
}
void API_ENTRY(glExtGetTexSubImageQCOM)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void * texels) {
    CALL_GL_API(glExtGetTexSubImageQCOM, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels);
}
void API_ENTRY(glExtGetBufferPointervQCOM)(GLenum target, void ** params) {
    CALL_GL_API(glExtGetBufferPointervQCOM, target, params);
}
void API_ENTRY(glExtGetShadersQCOM)(GLuint * shaders, GLint maxShaders, GLint * numShaders) {
    CALL_GL_API(glExtGetShadersQCOM, shaders, maxShaders, numShaders);
}
void API_ENTRY(glExtGetProgramsQCOM)(GLuint * programs, GLint maxPrograms, GLint * numPrograms) {
    CALL_GL_API(glExtGetProgramsQCOM, programs, maxPrograms, numPrograms);
}
GLboolean API_ENTRY(glExtIsProgramBinaryQCOM)(GLuint program) {
    CALL_GL_API_RETURN(glExtIsProgramBinaryQCOM, program);
}
void API_ENTRY(glExtGetProgramBinarySourceQCOM)(GLuint program, GLenum shadertype, GLchar * source, GLint * length) {
    CALL_GL_API(glExtGetProgramBinarySourceQCOM, program, shadertype, source, length);
}
void API_ENTRY(glStartTilingQCOM)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask) {
    CALL_GL_API(glStartTilingQCOM, x, y, width, height, preserveMask);
}
void API_ENTRY(glEndTilingQCOM)(GLbitfield preserveMask) {
    CALL_GL_API(glEndTilingQCOM, preserveMask);
}
