bufferobj.h revision 01e04c3f
1/*
2 * Mesa 3-D graphics library
3 *
4 * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
5 * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */
25
26
27
28#ifndef BUFFEROBJ_H
29#define BUFFEROBJ_H
30
31#include <stdbool.h>
32#include "mtypes.h"
33
34
35/*
36 * Internal functions
37 */
38
39
40/** Is the given buffer object currently mapped by the GL user? */
41static inline GLboolean
42_mesa_bufferobj_mapped(const struct gl_buffer_object *obj,
43                       gl_map_buffer_index index)
44{
45   return obj->Mappings[index].Pointer != NULL;
46}
47
48/**
49 * Check whether the given buffer object is illegally mapped prior to
50 * drawing from (or reading back to) the buffer.
51 * Note that it's legal for a buffer to be mapped at draw/readback time
52 * if it was mapped persistently (See GL_ARB_buffer_storage spec).
53 * \return true if the buffer is illegally mapped, false otherwise
54 */
55static inline bool
56_mesa_check_disallowed_mapping(const struct gl_buffer_object *obj)
57{
58   return _mesa_bufferobj_mapped(obj, MAP_USER) &&
59          !(obj->Mappings[MAP_USER].AccessFlags &
60            GL_MAP_PERSISTENT_BIT);
61}
62
63/**
64 * Is the given buffer object a user-created buffer object?
65 * Mesa uses default buffer objects in several places.  Default buffers
66 * always have Name==0.  User created buffers have Name!=0.
67 */
68static inline GLboolean
69_mesa_is_bufferobj(const struct gl_buffer_object *obj)
70{
71   return obj != NULL && obj->Name != 0;
72}
73
74
75extern void
76_mesa_init_buffer_objects(struct gl_context *ctx);
77
78extern void
79_mesa_free_buffer_objects(struct gl_context *ctx);
80
81extern bool
82_mesa_handle_bind_buffer_gen(struct gl_context *ctx,
83                             GLuint buffer,
84                             struct gl_buffer_object **buf_handle,
85                             const char *caller);
86
87extern void
88_mesa_update_default_objects_buffer_objects(struct gl_context *ctx);
89
90
91extern struct gl_buffer_object *
92_mesa_lookup_bufferobj(struct gl_context *ctx, GLuint buffer);
93
94extern struct gl_buffer_object *
95_mesa_lookup_bufferobj_locked(struct gl_context *ctx, GLuint buffer);
96
97extern struct gl_buffer_object *
98_mesa_lookup_bufferobj_err(struct gl_context *ctx, GLuint buffer,
99                           const char *caller);
100
101extern struct gl_buffer_object *
102_mesa_multi_bind_lookup_bufferobj(struct gl_context *ctx,
103                                  const GLuint *buffers,
104                                  GLuint index, const char *caller);
105
106extern void
107_mesa_initialize_buffer_object(struct gl_context *ctx,
108                               struct gl_buffer_object *obj,
109                               GLuint name);
110
111extern void
112_mesa_delete_buffer_object(struct gl_context *ctx,
113                           struct gl_buffer_object *bufObj);
114
115extern void
116_mesa_reference_buffer_object_(struct gl_context *ctx,
117                               struct gl_buffer_object **ptr,
118                               struct gl_buffer_object *bufObj);
119
120static inline void
121_mesa_reference_buffer_object(struct gl_context *ctx,
122                              struct gl_buffer_object **ptr,
123                              struct gl_buffer_object *bufObj)
124{
125   if (*ptr != bufObj)
126      _mesa_reference_buffer_object_(ctx, ptr, bufObj);
127}
128
129extern GLuint
130_mesa_total_buffer_object_memory(struct gl_context *ctx);
131
132extern void
133_mesa_init_buffer_object_functions(struct dd_function_table *driver);
134
135extern void
136_mesa_buffer_data(struct gl_context *ctx, struct gl_buffer_object *bufObj,
137                  GLenum target, GLsizeiptr size, const GLvoid *data,
138                  GLenum usage, const char *func);
139
140extern void
141_mesa_buffer_sub_data(struct gl_context *ctx, struct gl_buffer_object *bufObj,
142                      GLintptr offset, GLsizeiptr size, const GLvoid *data);
143
144extern void
145_mesa_buffer_unmap_all_mappings(struct gl_context *ctx,
146                                struct gl_buffer_object *bufObj);
147
148extern void
149_mesa_ClearBufferSubData_sw(struct gl_context *ctx,
150                            GLintptr offset, GLsizeiptr size,
151                            const GLvoid *clearValue,
152                            GLsizeiptr clearValueSize,
153                            struct gl_buffer_object *bufObj);
154
155/*
156 * API functions
157 */
158void GLAPIENTRY
159_mesa_BindBuffer_no_error(GLenum target, GLuint buffer);
160
161void GLAPIENTRY
162_mesa_BindBuffer(GLenum target, GLuint buffer);
163
164void GLAPIENTRY
165_mesa_DeleteBuffers_no_error(GLsizei n, const GLuint * buffer);
166
167void GLAPIENTRY
168_mesa_DeleteBuffers(GLsizei n, const GLuint * buffer);
169
170void GLAPIENTRY
171_mesa_GenBuffers_no_error(GLsizei n, GLuint *buffers);
172
173void GLAPIENTRY
174_mesa_GenBuffers(GLsizei n, GLuint *buffers);
175
176void GLAPIENTRY
177_mesa_CreateBuffers_no_error(GLsizei n, GLuint *buffers);
178
179void GLAPIENTRY
180_mesa_CreateBuffers(GLsizei n, GLuint *buffers);
181
182GLboolean GLAPIENTRY
183_mesa_IsBuffer(GLuint buffer);
184
185void GLAPIENTRY
186_mesa_BufferStorage_no_error(GLenum target, GLsizeiptr size,
187                             const GLvoid *data, GLbitfield flags);
188void GLAPIENTRY
189_mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data,
190                    GLbitfield flags);
191void GLAPIENTRY
192_mesa_BufferStorageMemEXT(GLenum target, GLsizeiptr size,
193                          GLuint memory, GLuint64 offset);
194void GLAPIENTRY
195_mesa_BufferStorageMemEXT_no_error(GLenum target, GLsizeiptr size,
196                                   GLuint memory, GLuint64 offset);
197void GLAPIENTRY
198_mesa_NamedBufferStorage_no_error(GLuint buffer, GLsizeiptr size,
199                                  const GLvoid *data, GLbitfield flags);
200void GLAPIENTRY
201_mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data,
202                         GLbitfield flags);
203void GLAPIENTRY
204_mesa_NamedBufferStorageMemEXT(GLuint buffer, GLsizeiptr size,
205                               GLuint memory, GLuint64 offset);
206void GLAPIENTRY
207_mesa_NamedBufferStorageMemEXT_no_error(GLuint buffer, GLsizeiptr size,
208                                        GLuint memory, GLuint64 offset);
209
210void GLAPIENTRY
211_mesa_BufferData_no_error(GLenum target, GLsizeiptr size,
212                          const GLvoid *data, GLenum usage);
213
214void GLAPIENTRY
215_mesa_BufferData(GLenum target, GLsizeiptr size,
216                 const GLvoid *data, GLenum usage);
217
218void GLAPIENTRY
219_mesa_NamedBufferData_no_error(GLuint buffer, GLsizeiptr size,
220                               const GLvoid *data, GLenum usage);
221
222void GLAPIENTRY
223_mesa_NamedBufferData(GLuint buffer, GLsizeiptr size,
224                      const GLvoid *data, GLenum usage);
225
226void GLAPIENTRY
227_mesa_BufferSubData_no_error(GLenum target, GLintptr offset,
228                             GLsizeiptr size, const GLvoid *data);
229void GLAPIENTRY
230_mesa_BufferSubData(GLenum target, GLintptr offset,
231                    GLsizeiptr size, const GLvoid *data);
232
233void GLAPIENTRY
234_mesa_NamedBufferSubData_no_error(GLuint buffer, GLintptr offset,
235                                  GLsizeiptr size, const GLvoid *data);
236void GLAPIENTRY
237_mesa_NamedBufferSubData(GLuint buffer, GLintptr offset,
238                         GLsizeiptr size, const GLvoid *data);
239
240void GLAPIENTRY
241_mesa_GetBufferSubData(GLenum target, GLintptr offset,
242                       GLsizeiptr size, GLvoid *data);
243
244void GLAPIENTRY
245_mesa_GetNamedBufferSubData(GLuint buffer, GLintptr offset,
246                            GLsizeiptr size, GLvoid *data);
247
248void GLAPIENTRY
249_mesa_ClearBufferData_no_error(GLenum target, GLenum internalformat,
250                               GLenum format, GLenum type, const GLvoid *data);
251
252void GLAPIENTRY
253_mesa_ClearBufferData(GLenum target, GLenum internalformat,
254                      GLenum format, GLenum type,
255                      const GLvoid *data);
256
257void GLAPIENTRY
258_mesa_ClearNamedBufferData_no_error(GLuint buffer, GLenum internalformat,
259                                    GLenum format, GLenum type,
260                                    const GLvoid *data);
261
262void GLAPIENTRY
263_mesa_ClearNamedBufferData(GLuint buffer, GLenum internalformat,
264                           GLenum format, GLenum type,
265                           const GLvoid *data);
266
267void GLAPIENTRY
268_mesa_ClearBufferSubData_no_error(GLenum target, GLenum internalformat,
269                                  GLintptr offset, GLsizeiptr size,
270                                  GLenum format, GLenum type,
271                                  const GLvoid *data);
272
273void GLAPIENTRY
274_mesa_ClearBufferSubData(GLenum target, GLenum internalformat,
275                         GLintptr offset, GLsizeiptr size,
276                         GLenum format, GLenum type,
277                         const GLvoid *data);
278
279void GLAPIENTRY
280_mesa_ClearNamedBufferSubData_no_error(GLuint buffer, GLenum internalformat,
281                                       GLintptr offset, GLsizeiptr size,
282                                       GLenum format, GLenum type,
283                                       const GLvoid *data);
284
285void GLAPIENTRY
286_mesa_ClearNamedBufferSubData(GLuint buffer, GLenum internalformat,
287                              GLintptr offset, GLsizeiptr size,
288                              GLenum format, GLenum type,
289                              const GLvoid *data);
290
291GLboolean GLAPIENTRY
292_mesa_UnmapBuffer_no_error(GLenum target);
293GLboolean GLAPIENTRY
294_mesa_UnmapBuffer(GLenum target);
295
296GLboolean GLAPIENTRY
297_mesa_UnmapNamedBuffer_no_error(GLuint buffer);
298GLboolean GLAPIENTRY
299_mesa_UnmapNamedBuffer(GLuint buffer);
300
301void GLAPIENTRY
302_mesa_GetBufferParameteriv(GLenum target, GLenum pname, GLint *params);
303
304void GLAPIENTRY
305_mesa_GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params);
306
307void GLAPIENTRY
308_mesa_GetNamedBufferParameteriv(GLuint buffer, GLenum pname, GLint *params);
309
310void GLAPIENTRY
311_mesa_GetNamedBufferParameteri64v(GLuint buffer, GLenum pname,
312                                  GLint64 *params);
313
314void GLAPIENTRY
315_mesa_GetBufferPointerv(GLenum target, GLenum pname, GLvoid **params);
316
317void GLAPIENTRY
318_mesa_GetNamedBufferPointerv(GLuint buffer, GLenum pname, GLvoid **params);
319
320void GLAPIENTRY
321_mesa_CopyBufferSubData_no_error(GLenum readTarget, GLenum writeTarget,
322                                 GLintptr readOffset, GLintptr writeOffset,
323                                 GLsizeiptr size);
324void GLAPIENTRY
325_mesa_CopyBufferSubData(GLenum readTarget, GLenum writeTarget,
326                        GLintptr readOffset, GLintptr writeOffset,
327                        GLsizeiptr size);
328
329void GLAPIENTRY
330_mesa_CopyNamedBufferSubData_no_error(GLuint readBuffer, GLuint writeBuffer,
331                                      GLintptr readOffset,
332                                      GLintptr writeOffset, GLsizeiptr size);
333void GLAPIENTRY
334_mesa_CopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer,
335                             GLintptr readOffset, GLintptr writeOffset,
336                             GLsizeiptr size);
337
338void * GLAPIENTRY
339_mesa_MapBufferRange_no_error(GLenum target, GLintptr offset,
340                              GLsizeiptr length, GLbitfield access);
341void * GLAPIENTRY
342_mesa_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length,
343                     GLbitfield access);
344
345void * GLAPIENTRY
346_mesa_MapNamedBufferRange_no_error(GLuint buffer, GLintptr offset,
347                                   GLsizeiptr length, GLbitfield access);
348void * GLAPIENTRY
349_mesa_MapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length,
350                          GLbitfield access);
351
352void * GLAPIENTRY
353_mesa_MapBuffer_no_error(GLenum target, GLenum access);
354void * GLAPIENTRY
355_mesa_MapBuffer(GLenum target, GLenum access);
356
357void * GLAPIENTRY
358_mesa_MapNamedBuffer_no_error(GLuint buffer, GLenum access);
359void * GLAPIENTRY
360_mesa_MapNamedBuffer(GLuint buffer, GLenum access);
361
362void GLAPIENTRY
363_mesa_FlushMappedBufferRange_no_error(GLenum target, GLintptr offset,
364                                      GLsizeiptr length);
365void GLAPIENTRY
366_mesa_FlushMappedBufferRange(GLenum target,
367                             GLintptr offset, GLsizeiptr length);
368
369void GLAPIENTRY
370_mesa_FlushMappedNamedBufferRange_no_error(GLuint buffer, GLintptr offset,
371                                           GLsizeiptr length);
372void GLAPIENTRY
373_mesa_FlushMappedNamedBufferRange(GLuint buffer, GLintptr offset,
374                                  GLsizeiptr length);
375
376void GLAPIENTRY
377_mesa_BindBufferRange_no_error(GLenum target, GLuint index, GLuint buffer,
378                               GLintptr offset, GLsizeiptr size);
379void GLAPIENTRY
380_mesa_BindBufferRange(GLenum target, GLuint index,
381                      GLuint buffer, GLintptr offset, GLsizeiptr size);
382
383void GLAPIENTRY
384_mesa_BindBufferBase(GLenum target, GLuint index, GLuint buffer);
385
386void GLAPIENTRY
387_mesa_BindBuffersRange(GLenum target, GLuint first, GLsizei count,
388                       const GLuint *buffers,
389                       const GLintptr *offsets, const GLsizeiptr *sizes);
390void GLAPIENTRY
391_mesa_BindBuffersBase(GLenum target, GLuint first, GLsizei count,
392                      const GLuint *buffers);
393
394void GLAPIENTRY
395_mesa_InvalidateBufferSubData_no_error(GLuint buffer, GLintptr offset,
396                                       GLsizeiptr length);
397
398void GLAPIENTRY
399_mesa_InvalidateBufferSubData(GLuint buffer, GLintptr offset,
400                              GLsizeiptr length);
401
402void GLAPIENTRY
403_mesa_InvalidateBufferData_no_error(GLuint buffer);
404
405void GLAPIENTRY
406_mesa_InvalidateBufferData(GLuint buffer);
407
408void GLAPIENTRY
409_mesa_BufferPageCommitmentARB(GLenum target, GLintptr offset, GLsizeiptr size,
410                              GLboolean commit);
411
412void GLAPIENTRY
413_mesa_NamedBufferPageCommitmentARB(GLuint buffer, GLintptr offset,
414                                   GLsizeiptr size, GLboolean commit);
415
416#endif
417