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