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