1848b8605Smrg/*
2848b8605Smrg * Mesa 3-D graphics library
3848b8605Smrg *
4848b8605Smrg * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
5848b8605Smrg * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.
6848b8605Smrg *
7848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a
8848b8605Smrg * copy of this software and associated documentation files (the "Software"),
9848b8605Smrg * to deal in the Software without restriction, including without limitation
10848b8605Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11848b8605Smrg * and/or sell copies of the Software, and to permit persons to whom the
12848b8605Smrg * Software is furnished to do so, subject to the following conditions:
13848b8605Smrg *
14848b8605Smrg * The above copyright notice and this permission notice shall be included
15848b8605Smrg * in all copies or substantial portions of the Software.
16848b8605Smrg *
17848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18848b8605Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19848b8605Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20848b8605Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21848b8605Smrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22848b8605Smrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23848b8605Smrg * OTHER DEALINGS IN THE SOFTWARE.
24848b8605Smrg */
25848b8605Smrg
26848b8605Smrg
27848b8605Smrg#ifndef VARRAY_H
28848b8605Smrg#define VARRAY_H
29848b8605Smrg
30848b8605Smrg#include "bufferobj.h"
31848b8605Smrg
32b8e80941Smrgvoid
33b8e80941Smrg_mesa_set_vertex_format(struct gl_vertex_format *vertex_format,
34b8e80941Smrg                        GLubyte size, GLenum16 type, GLenum16 format,
35b8e80941Smrg                        GLboolean normalized, GLboolean integer,
36b8e80941Smrg                        GLboolean doubles);
37848b8605Smrg
38848b8605Smrg
39848b8605Smrg/**
40848b8605Smrg * Returns a pointer to the vertex attribute data in a client array,
41848b8605Smrg * or the offset into the vertex buffer for an array that resides in
42848b8605Smrg * a vertex buffer.
43848b8605Smrg */
44848b8605Smrgstatic inline const GLubyte *
45b8e80941Smrg_mesa_vertex_attrib_address(const struct gl_array_attributes *array,
46848b8605Smrg                            const struct gl_vertex_buffer_binding *binding)
47848b8605Smrg{
48848b8605Smrg   if (_mesa_is_bufferobj(binding->BufferObj))
49848b8605Smrg      return (const GLubyte *) (binding->Offset + array->RelativeOffset);
50848b8605Smrg   else
51b8e80941Smrg      return array->Ptr;
52848b8605Smrg}
53848b8605Smrg
54b8e80941Smrg
55b8e80941Smrgstatic inline bool
56b8e80941Smrg_mesa_attr_zero_aliases_vertex(const struct gl_context *ctx)
57848b8605Smrg{
58b8e80941Smrg   return ctx->_AttribZeroAliasesVertex;
59848b8605Smrg}
60848b8605Smrg
61b8e80941Smrg
62b8e80941Smrgextern void
63b8e80941Smrg_mesa_update_array_format(struct gl_context *ctx,
64b8e80941Smrg                          struct gl_vertex_array_object *vao,
65b8e80941Smrg                          gl_vert_attrib attrib, GLint size, GLenum type,
66b8e80941Smrg                          GLenum format, GLboolean normalized,
67b8e80941Smrg                          GLboolean integer, GLboolean doubles,
68b8e80941Smrg                          GLuint relativeOffset);
69b8e80941Smrg
70b8e80941Smrgextern void
71b8e80941Smrg_mesa_enable_vertex_array_attribs(struct gl_context *ctx,
72b8e80941Smrg                                 struct gl_vertex_array_object *vao,
73b8e80941Smrg                                 GLbitfield attrib_bits);
74b8e80941Smrg
75b8e80941Smrgstatic inline void
76b8e80941Smrg_mesa_enable_vertex_array_attrib(struct gl_context *ctx,
77b8e80941Smrg                                 struct gl_vertex_array_object *vao,
78b8e80941Smrg                                 gl_vert_attrib attrib)
79848b8605Smrg{
80b8e80941Smrg   assert(attrib < VERT_ATTRIB_MAX);
81b8e80941Smrg   _mesa_enable_vertex_array_attribs(ctx, vao, VERT_BIT(attrib));
82b8e80941Smrg}
83848b8605Smrg
84b8e80941Smrg
85b8e80941Smrgextern void
86b8e80941Smrg_mesa_disable_vertex_array_attribs(struct gl_context *ctx,
87b8e80941Smrg                                   struct gl_vertex_array_object *vao,
88b8e80941Smrg                                   GLbitfield attrib_bits);
89b8e80941Smrg
90b8e80941Smrgstatic inline void
91b8e80941Smrg_mesa_disable_vertex_array_attrib(struct gl_context *ctx,
92b8e80941Smrg                                  struct gl_vertex_array_object *vao,
93b8e80941Smrg                                  gl_vert_attrib attrib)
94b8e80941Smrg{
95b8e80941Smrg   assert(attrib < VERT_ATTRIB_MAX);
96b8e80941Smrg   _mesa_disable_vertex_array_attribs(ctx, vao, VERT_BIT(attrib));
97848b8605Smrg}
98848b8605Smrg
99b8e80941Smrg
100b8e80941Smrgextern void
101b8e80941Smrg_mesa_vertex_attrib_binding(struct gl_context *ctx,
102b8e80941Smrg                            struct gl_vertex_array_object *vao,
103b8e80941Smrg                            gl_vert_attrib attribIndex,
104b8e80941Smrg                            GLuint bindingIndex);
105b8e80941Smrg
106b8e80941Smrg
107b8e80941Smrgextern void
108b8e80941Smrg_mesa_bind_vertex_buffer(struct gl_context *ctx,
109b8e80941Smrg                         struct gl_vertex_array_object *vao,
110b8e80941Smrg                         GLuint index,
111b8e80941Smrg                         struct gl_buffer_object *vbo,
112b8e80941Smrg                         GLintptr offset, GLsizei stride);
113b8e80941Smrg
114b8e80941Smrgextern void GLAPIENTRY
115b8e80941Smrg_mesa_VertexPointer_no_error(GLint size, GLenum type, GLsizei stride,
116b8e80941Smrg                             const GLvoid *ptr);
117848b8605Smrgextern void GLAPIENTRY
118848b8605Smrg_mesa_VertexPointer(GLint size, GLenum type, GLsizei stride,
119848b8605Smrg                    const GLvoid *ptr);
120848b8605Smrg
121b8e80941Smrgextern void GLAPIENTRY
122b8e80941Smrg_mesa_NormalPointer_no_error(GLenum type, GLsizei stride, const GLvoid *ptr);
123848b8605Smrgextern void GLAPIENTRY
124848b8605Smrg_mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
125848b8605Smrg
126b8e80941Smrgextern void GLAPIENTRY
127b8e80941Smrg_mesa_ColorPointer_no_error(GLint size, GLenum type, GLsizei stride,
128b8e80941Smrg                            const GLvoid *ptr);
129848b8605Smrgextern void GLAPIENTRY
130848b8605Smrg_mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
131848b8605Smrg
132848b8605Smrg
133b8e80941Smrgextern void GLAPIENTRY
134b8e80941Smrg_mesa_IndexPointer_no_error(GLenum type, GLsizei stride, const GLvoid *ptr);
135848b8605Smrgextern void GLAPIENTRY
136848b8605Smrg_mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
137848b8605Smrg
138848b8605Smrg
139b8e80941Smrgextern void GLAPIENTRY
140b8e80941Smrg_mesa_TexCoordPointer_no_error(GLint size, GLenum type, GLsizei stride,
141b8e80941Smrg                               const GLvoid *ptr);
142848b8605Smrgextern void GLAPIENTRY
143848b8605Smrg_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
144848b8605Smrg                      const GLvoid *ptr);
145848b8605Smrg
146848b8605Smrg
147b8e80941Smrgextern void GLAPIENTRY
148b8e80941Smrg_mesa_EdgeFlagPointer_no_error(GLsizei stride, const GLvoid *ptr);
149848b8605Smrgextern void GLAPIENTRY
150848b8605Smrg_mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr);
151848b8605Smrg
152848b8605Smrg
153848b8605Smrgextern void GLAPIENTRY
154848b8605Smrg_mesa_VertexPointerEXT(GLint size, GLenum type, GLsizei stride,
155848b8605Smrg                       GLsizei count, const GLvoid *ptr);
156848b8605Smrg
157848b8605Smrg
158848b8605Smrgextern void GLAPIENTRY
159848b8605Smrg_mesa_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count,
160848b8605Smrg                       const GLvoid *ptr);
161848b8605Smrg
162848b8605Smrg
163848b8605Smrgextern void GLAPIENTRY
164848b8605Smrg_mesa_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count,
165848b8605Smrg                      const GLvoid *ptr);
166848b8605Smrg
167848b8605Smrg
168848b8605Smrgextern void GLAPIENTRY
169848b8605Smrg_mesa_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count,
170848b8605Smrg                      const GLvoid *ptr);
171848b8605Smrg
172848b8605Smrg
173848b8605Smrgextern void GLAPIENTRY
174848b8605Smrg_mesa_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride,
175848b8605Smrg                         GLsizei count, const GLvoid *ptr);
176848b8605Smrg
177848b8605Smrg
178848b8605Smrgextern void GLAPIENTRY
179848b8605Smrg_mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr);
180848b8605Smrg
181b8e80941Smrgextern void GLAPIENTRY
182b8e80941Smrg_mesa_FogCoordPointer_no_error(GLenum type, GLsizei stride,
183b8e80941Smrg                               const GLvoid *ptr);
184848b8605Smrgextern void GLAPIENTRY
185848b8605Smrg_mesa_FogCoordPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
186848b8605Smrg
187848b8605Smrg
188b8e80941Smrgextern void GLAPIENTRY
189b8e80941Smrg_mesa_SecondaryColorPointer_no_error(GLint size, GLenum type,
190b8e80941Smrg                                     GLsizei stride, const GLvoid *ptr);
191848b8605Smrgextern void GLAPIENTRY
192848b8605Smrg_mesa_SecondaryColorPointer(GLint size, GLenum type,
193b8e80941Smrg                            GLsizei stride, const GLvoid *ptr);
194848b8605Smrg
195848b8605Smrg
196b8e80941Smrgextern void GLAPIENTRY
197b8e80941Smrg_mesa_PointSizePointerOES_no_error(GLenum type, GLsizei stride,
198b8e80941Smrg                                   const GLvoid *ptr);
199848b8605Smrgextern void GLAPIENTRY
200848b8605Smrg_mesa_PointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *ptr);
201848b8605Smrg
202848b8605Smrg
203b8e80941Smrgextern void GLAPIENTRY
204b8e80941Smrg_mesa_VertexAttribPointer_no_error(GLuint index, GLint size, GLenum type,
205b8e80941Smrg                                   GLboolean normalized, GLsizei stride,
206b8e80941Smrg                                   const GLvoid *pointer);
207848b8605Smrgextern void GLAPIENTRY
208848b8605Smrg_mesa_VertexAttribPointer(GLuint index, GLint size, GLenum type,
209b8e80941Smrg                          GLboolean normalized, GLsizei stride,
210b8e80941Smrg                          const GLvoid *pointer);
211848b8605Smrg
212848b8605Smrgvoid GLAPIENTRY
213b8e80941Smrg_mesa_VertexAttribIPointer_no_error(GLuint index, GLint size, GLenum type,
214b8e80941Smrg                                    GLsizei stride, const GLvoid *ptr);
215b8e80941Smrgvoid GLAPIENTRY
216848b8605Smrg_mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type,
217848b8605Smrg                           GLsizei stride, const GLvoid *ptr);
218848b8605Smrg
219b8e80941Smrgextern void GLAPIENTRY
220b8e80941Smrg_mesa_VertexAttribLPointer_no_error(GLuint index, GLint size, GLenum type,
221b8e80941Smrg                                    GLsizei stride, const GLvoid *pointer);
222b8e80941Smrgextern void GLAPIENTRY
223b8e80941Smrg_mesa_VertexAttribLPointer(GLuint index, GLint size, GLenum type,
224b8e80941Smrg                           GLsizei stride, const GLvoid *pointer);
225848b8605Smrg
226848b8605Smrgextern void GLAPIENTRY
227848b8605Smrg_mesa_EnableVertexAttribArray(GLuint index);
228848b8605Smrg
229848b8605Smrgextern void GLAPIENTRY
230b8e80941Smrg_mesa_EnableVertexAttribArray_no_error(GLuint index);
231848b8605Smrg
232848b8605Smrg
233848b8605Smrgextern void GLAPIENTRY
234b8e80941Smrg_mesa_EnableVertexArrayAttrib(GLuint vaobj, GLuint index);
235848b8605Smrg
236848b8605Smrgextern void GLAPIENTRY
237b8e80941Smrg_mesa_EnableVertexArrayAttrib_no_error(GLuint vaobj, GLuint index);
238848b8605Smrg
239848b8605Smrg
240848b8605Smrg
241b8e80941Smrgextern void GLAPIENTRY
242b8e80941Smrg_mesa_DisableVertexAttribArray(GLuint index);
243848b8605Smrg
244848b8605Smrgextern void GLAPIENTRY
245b8e80941Smrg_mesa_DisableVertexAttribArray_no_error(GLuint index);
246848b8605Smrg
247848b8605Smrg
248848b8605Smrgextern void GLAPIENTRY
249b8e80941Smrg_mesa_DisableVertexArrayAttrib(GLuint vaobj, GLuint index);
250848b8605Smrg
251848b8605Smrgextern void GLAPIENTRY
252b8e80941Smrg_mesa_DisableVertexArrayAttrib_no_error(GLuint vaobj, GLuint index);
253848b8605Smrg
254848b8605Smrg
255848b8605Smrgextern void GLAPIENTRY
256b8e80941Smrg_mesa_GetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params);
257848b8605Smrg
258848b8605Smrgextern void GLAPIENTRY
259b8e80941Smrg_mesa_GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params);
260848b8605Smrg
261848b8605Smrgextern void GLAPIENTRY
262b8e80941Smrg_mesa_GetVertexAttribLdv(GLuint index, GLenum pname, GLdouble *params);
263848b8605Smrg
264848b8605Smrgextern void GLAPIENTRY
265b8e80941Smrg_mesa_GetVertexAttribiv(GLuint index, GLenum pname, GLint *params);
266848b8605Smrg
267848b8605Smrgextern void GLAPIENTRY
268b8e80941Smrg_mesa_GetVertexAttribLui64vARB(GLuint index, GLenum pname, GLuint64EXT *params);
269848b8605Smrg
270848b8605Smrg
271848b8605Smrgextern void GLAPIENTRY
272b8e80941Smrg_mesa_GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params);
273848b8605Smrg
274848b8605Smrg
275848b8605Smrgextern void GLAPIENTRY
276b8e80941Smrg_mesa_GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params);
277848b8605Smrg
278848b8605Smrg
279848b8605Smrgextern void GLAPIENTRY
280b8e80941Smrg_mesa_GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid **pointer);
281848b8605Smrg
282848b8605Smrg
283b8e80941Smrgvoid GLAPIENTRY
284b8e80941Smrg_mesa_GetVertexArrayIndexediv(GLuint vaobj, GLuint index,
285b8e80941Smrg                              GLenum pname, GLint *param);
286b8e80941Smrg
287b8e80941Smrg
288b8e80941Smrgvoid GLAPIENTRY
289b8e80941Smrg_mesa_GetVertexArrayIndexed64iv(GLuint vaobj, GLuint index,
290b8e80941Smrg                                GLenum pname, GLint64 *param);
291848b8605Smrg
292848b8605Smrg
293848b8605Smrgextern void GLAPIENTRY
294b8e80941Smrg_mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer);
295b8e80941Smrg
296848b8605Smrg
297848b8605Smrgextern void GLAPIENTRY
298b8e80941Smrg_mesa_LockArraysEXT(GLint first, GLsizei count);
299848b8605Smrg
300848b8605Smrgextern void GLAPIENTRY
301b8e80941Smrg_mesa_UnlockArraysEXT(void);
302b8e80941Smrg
303b8e80941Smrg
304b8e80941Smrgvoid GLAPIENTRY
305b8e80941Smrg_mesa_PrimitiveRestartIndex_no_error(GLuint index);
306848b8605Smrg
307848b8605Smrgextern void GLAPIENTRY
308848b8605Smrg_mesa_PrimitiveRestartIndex(GLuint index);
309848b8605Smrg
310b8e80941Smrgextern void GLAPIENTRY
311b8e80941Smrg_mesa_VertexAttribDivisor_no_error(GLuint index, GLuint divisor);
312848b8605Smrgextern void GLAPIENTRY
313848b8605Smrg_mesa_VertexAttribDivisor(GLuint index, GLuint divisor);
314848b8605Smrg
315b8e80941Smrgstatic inline unsigned
316b8e80941Smrg_mesa_primitive_restart_index(const struct gl_context *ctx,
317b8e80941Smrg                              unsigned index_size)
318b8e80941Smrg{
319b8e80941Smrg   /* The index_size parameter is menat to be in bytes. */
320b8e80941Smrg   assert(index_size == 1 || index_size == 2 || index_size == 4);
321b8e80941Smrg
322b8e80941Smrg   /* From the OpenGL 4.3 core specification, page 302:
323b8e80941Smrg    * "If both PRIMITIVE_RESTART and PRIMITIVE_RESTART_FIXED_INDEX are
324b8e80941Smrg    *  enabled, the index value determined by PRIMITIVE_RESTART_FIXED_INDEX
325b8e80941Smrg    *  is used."
326b8e80941Smrg    */
327b8e80941Smrg   if (ctx->Array.PrimitiveRestartFixedIndex) {
328b8e80941Smrg      /* 1 -> 0xff, 2 -> 0xffff, 4 -> 0xffffffff */
329b8e80941Smrg      return 0xffffffffu >> 8 * (4 - index_size);
330b8e80941Smrg   }
331b8e80941Smrg
332b8e80941Smrg   return ctx->Array.RestartIndex;
333b8e80941Smrg}
334848b8605Smrg
335b8e80941Smrgextern void GLAPIENTRY
336b8e80941Smrg_mesa_BindVertexBuffer_no_error(GLuint bindingIndex, GLuint buffer,
337b8e80941Smrg                                GLintptr offset, GLsizei stride);
338848b8605Smrgextern void GLAPIENTRY
339848b8605Smrg_mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset,
340848b8605Smrg                       GLsizei stride);
341848b8605Smrg
342b8e80941Smrgvoid GLAPIENTRY
343b8e80941Smrg_mesa_VertexArrayVertexBuffer_no_error(GLuint vaobj, GLuint bindingIndex,
344b8e80941Smrg                                       GLuint buffer, GLintptr offset,
345b8e80941Smrg                                       GLsizei stride);
346b8e80941Smrgextern void GLAPIENTRY
347b8e80941Smrg_mesa_VertexArrayVertexBuffer(GLuint vaobj, GLuint bindingIndex, GLuint buffer,
348b8e80941Smrg                              GLintptr offset, GLsizei stride);
349b8e80941Smrg
350b8e80941Smrgvoid GLAPIENTRY
351b8e80941Smrg_mesa_BindVertexBuffers_no_error(GLuint first, GLsizei count,
352b8e80941Smrg                                 const GLuint *buffers, const GLintptr *offsets,
353b8e80941Smrg                                 const GLsizei *strides);
354b8e80941Smrg
355848b8605Smrgextern void GLAPIENTRY
356848b8605Smrg_mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers,
357848b8605Smrg                        const GLintptr *offsets, const GLsizei *strides);
358848b8605Smrg
359b8e80941Smrgvoid GLAPIENTRY
360b8e80941Smrg_mesa_VertexArrayVertexBuffers_no_error(GLuint vaobj, GLuint first,
361b8e80941Smrg                                        GLsizei count, const GLuint *buffers,
362b8e80941Smrg                                        const GLintptr *offsets,
363b8e80941Smrg                                        const GLsizei *strides);
364b8e80941Smrg
365b8e80941Smrgextern void GLAPIENTRY
366b8e80941Smrg_mesa_VertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count,
367b8e80941Smrg                               const GLuint *buffers,
368b8e80941Smrg                               const GLintptr *offsets, const GLsizei *strides);
369b8e80941Smrg
370848b8605Smrgextern void GLAPIENTRY
371848b8605Smrg_mesa_VertexAttribFormat(GLuint attribIndex, GLint size, GLenum type,
372848b8605Smrg                         GLboolean normalized, GLuint relativeOffset);
373848b8605Smrg
374b8e80941Smrgextern void GLAPIENTRY
375b8e80941Smrg_mesa_VertexArrayAttribFormat(GLuint vaobj, GLuint attribIndex, GLint size,
376b8e80941Smrg                              GLenum type, GLboolean normalized,
377b8e80941Smrg                              GLuint relativeOffset);
378b8e80941Smrg
379848b8605Smrgextern void GLAPIENTRY
380848b8605Smrg_mesa_VertexAttribIFormat(GLuint attribIndex, GLint size, GLenum type,
381848b8605Smrg                          GLuint relativeOffset);
382848b8605Smrg
383b8e80941Smrgextern void GLAPIENTRY
384b8e80941Smrg_mesa_VertexArrayAttribIFormat(GLuint vaobj, GLuint attribIndex,
385b8e80941Smrg                               GLint size, GLenum type,
386b8e80941Smrg                               GLuint relativeOffset);
387b8e80941Smrg
388848b8605Smrgextern void GLAPIENTRY
389848b8605Smrg_mesa_VertexAttribLFormat(GLuint attribIndex, GLint size, GLenum type,
390848b8605Smrg                          GLuint relativeOffset);
391848b8605Smrg
392b8e80941Smrgextern void GLAPIENTRY
393b8e80941Smrg_mesa_VertexArrayAttribLFormat(GLuint vaobj, GLuint attribIndex,
394b8e80941Smrg                               GLint size, GLenum type,
395b8e80941Smrg                               GLuint relativeOffset);
396b8e80941Smrg
397b8e80941Smrgvoid GLAPIENTRY
398b8e80941Smrg_mesa_VertexAttribBinding_no_error(GLuint attribIndex, GLuint bindingIndex);
399b8e80941Smrg
400848b8605Smrgextern void GLAPIENTRY
401848b8605Smrg_mesa_VertexAttribBinding(GLuint attribIndex, GLuint bindingIndex);
402848b8605Smrg
403b8e80941Smrgvoid GLAPIENTRY
404b8e80941Smrg_mesa_VertexArrayAttribBinding_no_error(GLuint vaobj, GLuint attribIndex,
405b8e80941Smrg                                        GLuint bindingIndex);
406b8e80941Smrg
407b8e80941Smrgextern void GLAPIENTRY
408b8e80941Smrg_mesa_VertexArrayAttribBinding(GLuint vaobj, GLuint attribIndex,
409b8e80941Smrg                               GLuint bindingIndex);
410b8e80941Smrg
411b8e80941Smrgvoid GLAPIENTRY
412b8e80941Smrg_mesa_VertexBindingDivisor_no_error(GLuint bindingIndex, GLuint divisor);
413b8e80941Smrg
414848b8605Smrgextern void GLAPIENTRY
415848b8605Smrg_mesa_VertexBindingDivisor(GLuint bindingIndex, GLuint divisor);
416848b8605Smrg
417b8e80941Smrgvoid GLAPIENTRY
418b8e80941Smrg_mesa_VertexArrayBindingDivisor_no_error(GLuint vaobj, GLuint bindingIndex,
419b8e80941Smrg                                         GLuint divisor);
420b8e80941Smrg
421b8e80941Smrgextern void GLAPIENTRY
422b8e80941Smrg_mesa_VertexArrayBindingDivisor(GLuint vaobj, GLuint bindingIndex,
423b8e80941Smrg                                GLuint divisor);
424848b8605Smrg
425848b8605Smrg
426848b8605Smrgextern void
427848b8605Smrg_mesa_copy_vertex_attrib_array(struct gl_context *ctx,
428b8e80941Smrg                               struct gl_array_attributes *dst,
429b8e80941Smrg                               const struct gl_array_attributes *src);
430848b8605Smrg
431848b8605Smrgextern void
432848b8605Smrg_mesa_copy_vertex_buffer_binding(struct gl_context *ctx,
433848b8605Smrg                                 struct gl_vertex_buffer_binding *dst,
434848b8605Smrg                                 const struct gl_vertex_buffer_binding *src);
435848b8605Smrg
436848b8605Smrgextern void
437848b8605Smrg_mesa_print_arrays(struct gl_context *ctx);
438848b8605Smrg
439848b8605Smrgextern void
440b8e80941Smrg_mesa_init_varray(struct gl_context *ctx);
441848b8605Smrg
442b8e80941Smrgextern void
443848b8605Smrg_mesa_free_varray_data(struct gl_context *ctx);
444848b8605Smrg
445848b8605Smrg#endif
446