bufferobj.h revision e5c128379a7233200acc156b0a48ac669d419055
1/* 2 * Mesa 3-D graphics library 3 * Version: 7.6 4 * 5 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 6 * Copyright (C) 2009 VMware, Inc. All Rights Reserved. 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a 9 * copy of this software and associated documentation files (the "Software"), 10 * to deal in the Software without restriction, including without limitation 11 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12 * and/or sell copies of the Software, and to permit persons to whom the 13 * Software is furnished to do so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included 16 * in all copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 */ 25 26 27 28#ifndef BUFFEROBJ_H 29#define BUFFEROBJ_H 30 31 32#include "mtypes.h" 33 34 35/* 36 * Internal functions 37 */ 38 39 40/** Is the given buffer object currently mapped? */ 41static INLINE GLboolean 42_mesa_bufferobj_mapped(const struct gl_buffer_object *obj) 43{ 44 return obj->Pointer != NULL; 45} 46 47/** 48 * Is the given buffer object a user-created buffer object? 49 * Mesa uses default buffer objects in several places. Default buffers 50 * always have Name==0. User created buffers have Name!=0. 51 */ 52static INLINE GLboolean 53_mesa_is_bufferobj(const struct gl_buffer_object *obj) 54{ 55 return obj->Name != 0; 56} 57 58 59extern void 60_mesa_init_buffer_objects( GLcontext *ctx ); 61 62extern void 63_mesa_free_buffer_objects( GLcontext *ctx ); 64 65extern void 66_mesa_update_default_objects_buffer_objects(GLcontext *ctx); 67 68 69extern struct gl_buffer_object * 70_mesa_lookup_bufferobj(GLcontext *ctx, GLuint buffer); 71 72extern void 73_mesa_initialize_buffer_object( struct gl_buffer_object *obj, 74 GLuint name, GLenum target ); 75 76extern void 77_mesa_reference_buffer_object(GLcontext *ctx, 78 struct gl_buffer_object **ptr, 79 struct gl_buffer_object *bufObj); 80 81extern GLboolean 82_mesa_validate_pbo_access(GLuint dimensions, 83 const struct gl_pixelstore_attrib *pack, 84 GLsizei width, GLsizei height, GLsizei depth, 85 GLenum format, GLenum type, const GLvoid *ptr); 86 87extern const GLvoid * 88_mesa_map_pbo_source(GLcontext *ctx, 89 const struct gl_pixelstore_attrib *unpack, 90 const GLvoid *src); 91 92extern const GLvoid * 93_mesa_map_validate_pbo_source(GLcontext *ctx, 94 GLuint dimensions, 95 const struct gl_pixelstore_attrib *unpack, 96 GLsizei width, GLsizei height, GLsizei depth, 97 GLenum format, GLenum type, const GLvoid *ptr, 98 const char *where); 99 100extern void 101_mesa_unmap_pbo_source(GLcontext *ctx, 102 const struct gl_pixelstore_attrib *unpack); 103 104extern void * 105_mesa_map_pbo_dest(GLcontext *ctx, 106 const struct gl_pixelstore_attrib *pack, 107 GLvoid *dest); 108 109extern GLvoid * 110_mesa_map_validate_pbo_dest(GLcontext *ctx, 111 GLuint dimensions, 112 const struct gl_pixelstore_attrib *unpack, 113 GLsizei width, GLsizei height, GLsizei depth, 114 GLenum format, GLenum type, GLvoid *ptr, 115 const char *where); 116 117extern void 118_mesa_unmap_pbo_dest(GLcontext *ctx, 119 const struct gl_pixelstore_attrib *pack); 120 121 122extern void 123_mesa_init_buffer_object_functions(struct dd_function_table *driver); 124 125 126/* 127 * API functions 128 */ 129 130extern void GLAPIENTRY 131_mesa_BindBufferARB(GLenum target, GLuint buffer); 132 133extern void GLAPIENTRY 134_mesa_DeleteBuffersARB(GLsizei n, const GLuint * buffer); 135 136extern void GLAPIENTRY 137_mesa_GenBuffersARB(GLsizei n, GLuint * buffer); 138 139extern GLboolean GLAPIENTRY 140_mesa_IsBufferARB(GLuint buffer); 141 142extern void GLAPIENTRY 143_mesa_BufferDataARB(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); 144 145extern void GLAPIENTRY 146_mesa_BufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); 147 148extern void GLAPIENTRY 149_mesa_GetBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data); 150 151extern void * GLAPIENTRY 152_mesa_MapBufferARB(GLenum target, GLenum access); 153 154extern GLboolean GLAPIENTRY 155_mesa_UnmapBufferARB(GLenum target); 156 157extern void GLAPIENTRY 158_mesa_GetBufferParameterivARB(GLenum target, GLenum pname, GLint *params); 159 160extern void GLAPIENTRY 161_mesa_GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params); 162 163extern void GLAPIENTRY 164_mesa_GetBufferPointervARB(GLenum target, GLenum pname, GLvoid **params); 165 166extern void GLAPIENTRY 167_mesa_CopyBufferSubData(GLenum readTarget, GLenum writeTarget, 168 GLintptr readOffset, GLintptr writeOffset, 169 GLsizeiptr size); 170 171extern void * GLAPIENTRY 172_mesa_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, 173 GLbitfield access); 174 175extern void GLAPIENTRY 176_mesa_FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length); 177 178#if FEATURE_APPLE_object_purgeable 179extern GLenum GLAPIENTRY 180_mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option); 181 182extern GLenum GLAPIENTRY 183_mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option); 184 185extern void GLAPIENTRY 186_mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname, GLint* params); 187#endif 188 189#endif 190