// GENERATED FILE - DO NOT EDIT.
// Generated by generate_entry_points.py using data from gl.xml.
//
// Copyright 2019 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Context_gl_4_6_autogen.h: Creates a macro for interfaces in Context.

#ifndef ANGLE_CONTEXT_GL_4_6_AUTOGEN_H_
#define ANGLE_CONTEXT_GL_4_6_AUTOGEN_H_

#define ANGLE_GL_4_6_CONTEXT_API                                                                   \
    void multiDrawArraysIndirectCount(GLenum mode, const void *indirect, GLintptr drawcount,       \
                                      GLsizei maxdrawcount, GLsizei stride);                       \
    void multiDrawElementsIndirectCount(GLenum mode, GLenum type, const void *indirect,            \
                                        GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); \
    void polygonOffsetClamp(GLfloat factor, GLfloat units, GLfloat clamp);                         \
    void specializeShader(GLuint shader, const GLchar *pEntryPoint,                                \
                          GLuint numSpecializationConstants, const GLuint *pConstantIndex,         \
                          const GLuint *pConstantValue);

#endif  // ANGLE_CONTEXT_API_4_6_AUTOGEN_H_
