1fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/************************************************************************** 2fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 3fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellCopyright 2002 Tungsten Graphics Inc., Cedar Park, Texas. 4fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 5fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellAll Rights Reserved. 6fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 7fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellPermission is hereby granted, free of charge, to any person obtaining a 8fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellcopy of this software and associated documentation files (the "Software"), 9fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellto deal in the Software without restriction, including without limitation 10fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellon the rights to use, copy, modify, merge, publish, distribute, sub 11fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwelllicense, and/or sell copies of the Software, and to permit persons to whom 12fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellthe Software is furnished to do so, subject to the following conditions: 13fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 14fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellThe above copyright notice and this permission notice (including the next 15fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellparagraph) shall be included in all copies or substantial portions of the 16fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellSoftware. 17fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 18fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellFITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 21fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellTUNGSTEN GRAPHICS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 22fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 23fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 24fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith WhitwellUSE OR OTHER DEALINGS IN THE SOFTWARE. 25fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 26fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell**************************************************************************/ 27fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 28fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/* 29fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Authors: 30fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Keith Whitwell <keith@tungstengraphics.com> 31fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * 32fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */ 33fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 34fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#ifndef VBO_SAVE_H 35fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#define VBO_SAVE_H 36fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 3714b36cd568b7f3ae963430248fcd7ef0b7a165f6Vinson Lee#include "main/mfeatures.h" 38c223c6b663cd5db39ba19c2be74b88cc3b8f53f3Brian#include "main/mtypes.h" 391f07439fe8c6803f70a27a1cdb9d76360ae40571Keith Whitwell#include "vbo.h" 40fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "vbo_attrib.h" 41fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 42fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 43fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellstruct vbo_save_copied_vtx { 44fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLfloat buffer[VBO_ATTRIB_MAX * 4 * VBO_MAX_COPIED_VERTS]; 45fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint nr; 46fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}; 47fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 48fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 49fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/* For display lists, this structure holds a run of vertices of the 50fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * same format, and a strictly well-formed set of begin/end pairs, 51fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * starting on the first vertex and ending at the last. Vertex 52fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * copying on buffer breaks is precomputed according to these 53fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * primitives, though there are situations where the copying will need 54fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * correction at execute-time, perhaps by replaying the list as 55fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * immediate mode commands. 56fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * 57fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * On executing this list, the 'current' values may be updated with 58fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * the values of the final vertex, and often no fixup of the start of 59fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * the vertex list is required. 60fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * 61fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Eval and other commands that don't fit into these vertex lists are 62fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * compiled using the fallback opcode mechanism provided by dlist.c. 63fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */ 64fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellstruct vbo_save_vertex_list { 65fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLubyte attrsz[VBO_ATTRIB_MAX]; 66492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák GLenum attrtype[VBO_ATTRIB_MAX]; 67fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint vertex_size; 68fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 698b2ebd15310cbd5d905b08761b5e950f8e2580e5Keith Whitwell /* Copy of the final vertex from node->vertex_store->bufferobj. 708b2ebd15310cbd5d905b08761b5e950f8e2580e5Keith Whitwell * Keep this in regular (non-VBO) memory to avoid repeated 718b2ebd15310cbd5d905b08761b5e950f8e2580e5Keith Whitwell * map/unmap of the VBO when updating GL current data. 728b2ebd15310cbd5d905b08761b5e950f8e2580e5Keith Whitwell */ 738b2ebd15310cbd5d905b08761b5e950f8e2580e5Keith Whitwell GLfloat *current_data; 748b2ebd15310cbd5d905b08761b5e950f8e2580e5Keith Whitwell GLuint current_size; 758b2ebd15310cbd5d905b08761b5e950f8e2580e5Keith Whitwell 76fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint buffer_offset; 77d329b68f350a6db9439f71a0d1a8d2a8e2fd426cBrian Paul GLuint count; /**< vertex count */ 78fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint wrap_count; /* number of copied vertices at start */ 79fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLboolean dangling_attr_ref; /* current attr implicitly referenced 80fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell outside the list */ 81fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 82fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct _mesa_prim *prim; 83fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint prim_count; 84fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 85fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct vbo_save_vertex_store *vertex_store; 86fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct vbo_save_primitive_store *prim_store; 87fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}; 88fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 89fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/* These buffers should be a reasonable size to support upload to 90fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * hardware. Current vbo implementation will re-upload on any 91fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * changes, so don't make too big or apps which dynamically create 92fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * dlists and use only a few times will suffer. 93fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * 94fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Consider stategy of uploading regions from the VBO on demand in the 95fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * case of dynamic vbos. Then make the dlist code signal that 96fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * likelyhood as it occurs. No reason we couldn't change usage 97fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * internally even though this probably isn't allowed for client VBOs? 98fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */ 99fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#define VBO_SAVE_BUFFER_SIZE (8*1024) /* dwords */ 100fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#define VBO_SAVE_PRIM_SIZE 128 101b3d2ec9942303d1d03e28a25b030eb060415abfbMathias Fröhlich#define VBO_SAVE_PRIM_MODE_MASK 0x3f 102b3d2ec9942303d1d03e28a25b030eb060415abfbMathias Fröhlich#define VBO_SAVE_PRIM_WEAK 0x40 103b3d2ec9942303d1d03e28a25b030eb060415abfbMathias Fröhlich#define VBO_SAVE_PRIM_NO_CURRENT_UPDATE 0x80 104fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 105fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#define VBO_SAVE_FALLBACK 0x10000000 106fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 107fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/* Storage to be shared among several vertex_lists. 108fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */ 109fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellstruct vbo_save_vertex_store { 110fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct gl_buffer_object *bufferobj; 111fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLfloat *buffer; 112fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint used; 113fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint refcount; 114fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}; 115fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 116fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellstruct vbo_save_primitive_store { 117fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct _mesa_prim buffer[VBO_SAVE_PRIM_SIZE]; 118fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint used; 119fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint refcount; 120fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}; 121fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 122fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 123fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellstruct vbo_save_context { 124f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg struct gl_context *ctx; 125fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLvertexformat vtxfmt; 12697dedfda5fbb4078db28519e50adeeeb8e1a1dc1Brian Paul GLvertexformat vtxfmt_noop; /**< Used if out_of_memory is true */ 127fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct gl_client_array arrays[VBO_ATTRIB_MAX]; 128fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell const struct gl_client_array *inputs[VBO_ATTRIB_MAX]; 129fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 130fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLubyte attrsz[VBO_ATTRIB_MAX]; 131492b69f3be3e355064c67bc6f4a30d40e997ce9dMarek Olšák GLenum attrtype[VBO_ATTRIB_MAX]; 132fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLubyte active_sz[VBO_ATTRIB_MAX]; 133fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint vertex_size; 134fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 13597dedfda5fbb4078db28519e50adeeeb8e1a1dc1Brian Paul GLboolean out_of_memory; /**< True if last VBO allocation failed */ 13697dedfda5fbb4078db28519e50adeeeb8e1a1dc1Brian Paul 137fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLfloat *buffer; 138fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint count; 139fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint wrap_count; 140fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint replay_flags; 141fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 142fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct _mesa_prim *prim; 143fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint prim_count, prim_max; 144fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 145fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct vbo_save_vertex_store *vertex_store; 146fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct vbo_save_primitive_store *prim_store; 147fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 148c4d1f4607abf3dfbcfcffc5c67bb89d420d3381aKeith Whitwell GLfloat *buffer_ptr; /* cursor, points into buffer */ 149fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLfloat vertex[VBO_ATTRIB_MAX*4]; /* current values */ 150fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLfloat *attrptr[VBO_ATTRIB_MAX]; 151fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint vert_count; 152fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint max_vert; 153fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLboolean dangling_attr_ref; 154fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 155fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint opcode_vertex_list; 156fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 157fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell struct vbo_save_copied_vtx copied; 158fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 159fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLfloat *current[VBO_ATTRIB_MAX]; /* points into ctx->ListState */ 160fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLubyte *currentsz[VBO_ATTRIB_MAX]; 161fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}; 162fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 1638d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu#if FEATURE_dlist 164fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 165f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid vbo_save_init( struct gl_context *ctx ); 166f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid vbo_save_destroy( struct gl_context *ctx ); 167f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid vbo_save_fallback( struct gl_context *ctx, GLboolean fallback ); 168fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 169fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/* save_loopback.c: 170fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */ 171f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid vbo_loopback_vertex_list( struct gl_context *ctx, 172fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell const GLfloat *buffer, 173fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell const GLubyte *attrsz, 174fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell const struct _mesa_prim *prim, 175fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint prim_count, 176fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint wrap_count, 177fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell GLuint vertex_size); 178fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 179fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/* Callbacks: 180fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */ 181f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid vbo_save_EndList( struct gl_context *ctx ); 182f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid vbo_save_NewList( struct gl_context *ctx, GLuint list, GLenum mode ); 183f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid vbo_save_EndCallList( struct gl_context *ctx ); 184f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid vbo_save_BeginCallList( struct gl_context *ctx, struct gl_display_list *list ); 185f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid vbo_save_SaveFlushVertices( struct gl_context *ctx ); 186f9995b30756140724f41daf963fa06167912be7fKristian HøgsbergGLboolean vbo_save_NotifyBegin( struct gl_context *ctx, GLenum mode ); 187fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 188f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid vbo_save_playback_vertex_list( struct gl_context *ctx, void *data ); 189fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 190fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellvoid vbo_save_api_init( struct vbo_save_context *save ); 191fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell 192781f84a3c2f7a06cb9e6cc44b8d5d08b39577c25Brian PaulGLfloat * 193781f84a3c2f7a06cb9e6cc44b8d5d08b39577c25Brian Paulvbo_save_map_vertex_store(struct gl_context *ctx, 194781f84a3c2f7a06cb9e6cc44b8d5d08b39577c25Brian Paul struct vbo_save_vertex_store *vertex_store); 195781f84a3c2f7a06cb9e6cc44b8d5d08b39577c25Brian Paul 196781f84a3c2f7a06cb9e6cc44b8d5d08b39577c25Brian Paulvoid 197781f84a3c2f7a06cb9e6cc44b8d5d08b39577c25Brian Paulvbo_save_unmap_vertex_store(struct gl_context *ctx, 198781f84a3c2f7a06cb9e6cc44b8d5d08b39577c25Brian Paul struct vbo_save_vertex_store *vertex_store); 199781f84a3c2f7a06cb9e6cc44b8d5d08b39577c25Brian Paul 2008d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu#else /* FEATURE_dlist */ 2018d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu 2029520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline void 203f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvbo_save_init( struct gl_context *ctx ) 2048d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu{ 2058d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu} 2068d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu 2079520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline void 208f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvbo_save_destroy( struct gl_context *ctx ) 2098d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu{ 2108d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu} 2118d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu 2128d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu#endif /* FEATURE_dlist */ 2138d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu 2148d5c83c467f83b44f5f2e271c4f9cca2d45af518Chia-I Wu#endif /* VBO_SAVE_H */ 215