// 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_2_autogen.h: Creates a macro for interfaces in Context.

#ifndef ANGLE_CONTEXT_GL_4_2_AUTOGEN_H_
#define ANGLE_CONTEXT_GL_4_2_AUTOGEN_H_

#define ANGLE_GL_4_2_CONTEXT_API                                                           \
    void drawElementsInstancedBaseInstance(GLenum mode, GLsizei count, GLenum type,        \
                                           const void *indices, GLsizei instancecount,     \
                                           GLuint baseinstance);                           \
    void drawTransformFeedbackInstanced(GLenum mode, TransformFeedbackID idPacked,         \
                                        GLsizei instancecount);                            \
    void drawTransformFeedbackStreamInstanced(GLenum mode, TransformFeedbackID idPacked,   \
                                              GLuint stream, GLsizei instancecount);       \
    void getActiveAtomicCounterBufferiv(ShaderProgramID programPacked, GLuint bufferIndex, \
                                        GLenum pname, GLint *params);

#endif  // ANGLE_CONTEXT_API_4_2_AUTOGEN_H_
