bufferobj.h revision af69d88d
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/** Can we not use this buffer while mapped? */ 49static inline GLboolean 50_mesa_check_disallowed_mapping(const struct gl_buffer_object *obj) 51{ 52 return _mesa_bufferobj_mapped(obj, MAP_USER) && 53 !(obj->Mappings[MAP_USER].AccessFlags & 54 GL_MAP_PERSISTENT_BIT); 55} 56 57/** 58 * Is the given buffer object a user-created buffer object? 59 * Mesa uses default buffer objects in several places. Default buffers 60 * always have Name==0. User created buffers have Name!=0. 61 */ 62static inline GLboolean 63_mesa_is_bufferobj(const struct gl_buffer_object *obj) 64{ 65 return obj != NULL && obj->Name != 0; 66} 67 68 69extern void 70_mesa_init_buffer_objects(struct gl_context *ctx); 71 72extern void 73_mesa_free_buffer_objects(struct gl_context *ctx); 74 75extern bool 76_mesa_handle_bind_buffer_gen(struct gl_context *ctx, 77 GLenum target, 78 GLuint buffer, 79 struct gl_buffer_object **buf_handle, 80 const char *caller); 81 82extern void 83_mesa_update_default_objects_buffer_objects(struct gl_context *ctx); 84 85 86extern struct gl_buffer_object * 87_mesa_lookup_bufferobj(struct gl_context *ctx, GLuint buffer); 88 89extern struct gl_buffer_object * 90_mesa_lookup_bufferobj_locked(struct gl_context *ctx, GLuint buffer); 91 92extern void 93_mesa_begin_bufferobj_lookups(struct gl_context *ctx); 94 95extern void 96_mesa_end_bufferobj_lookups(struct gl_context *ctx); 97 98extern struct gl_buffer_object * 99_mesa_multi_bind_lookup_bufferobj(struct gl_context *ctx, 100 const GLuint *buffers, 101 GLuint index, const char *caller); 102 103extern void 104_mesa_initialize_buffer_object(struct gl_context *ctx, 105 struct gl_buffer_object *obj, 106 GLuint name, GLenum target); 107 108extern void 109_mesa_reference_buffer_object_(struct gl_context *ctx, 110 struct gl_buffer_object **ptr, 111 struct gl_buffer_object *bufObj); 112 113static inline void 114_mesa_reference_buffer_object(struct gl_context *ctx, 115 struct gl_buffer_object **ptr, 116 struct gl_buffer_object *bufObj) 117{ 118 if (*ptr != bufObj) 119 _mesa_reference_buffer_object_(ctx, ptr, bufObj); 120} 121 122extern GLuint 123_mesa_total_buffer_object_memory(struct gl_context *ctx); 124 125extern void 126_mesa_init_buffer_object_functions(struct dd_function_table *driver); 127 128extern void 129_mesa_buffer_unmap_all_mappings(struct gl_context *ctx, 130 struct gl_buffer_object *bufObj); 131 132extern void 133_mesa_buffer_clear_subdata(struct gl_context *ctx, 134 GLintptr offset, GLsizeiptr size, 135 const GLvoid *clearValue, 136 GLsizeiptr clearValueSize, 137 struct gl_buffer_object *bufObj); 138 139/* 140 * API functions 141 */ 142void GLAPIENTRY 143_mesa_BindBuffer(GLenum target, GLuint buffer); 144 145void GLAPIENTRY 146_mesa_DeleteBuffers(GLsizei n, const GLuint * buffer); 147 148void GLAPIENTRY 149_mesa_GenBuffers(GLsizei n, GLuint * buffer); 150 151GLboolean GLAPIENTRY 152_mesa_IsBuffer(GLuint buffer); 153 154void GLAPIENTRY 155_mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data, 156 GLbitfield flags); 157 158void GLAPIENTRY 159_mesa_BufferData(GLenum target, GLsizeiptrARB size, 160 const GLvoid * data, GLenum usage); 161 162void GLAPIENTRY 163_mesa_BufferSubData(GLenum target, GLintptrARB offset, 164 GLsizeiptrARB size, const GLvoid * data); 165 166void GLAPIENTRY 167_mesa_GetBufferSubData(GLenum target, GLintptrARB offset, 168 GLsizeiptrARB size, void * data); 169 170void GLAPIENTRY 171_mesa_ClearBufferData(GLenum target, GLenum internalformat, 172 GLenum format, GLenum type, 173 const GLvoid * data); 174 175void GLAPIENTRY 176_mesa_ClearBufferSubData(GLenum target, GLenum internalformat, 177 GLintptr offset, GLsizeiptr size, 178 GLenum format, GLenum type, 179 const GLvoid * data); 180 181void * GLAPIENTRY 182_mesa_MapBuffer(GLenum target, GLenum access); 183 184GLboolean GLAPIENTRY 185_mesa_UnmapBuffer(GLenum target); 186 187void GLAPIENTRY 188_mesa_GetBufferParameteriv(GLenum target, GLenum pname, GLint *params); 189 190void GLAPIENTRY 191_mesa_GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params); 192 193void GLAPIENTRY 194_mesa_GetBufferPointerv(GLenum target, GLenum pname, GLvoid **params); 195 196void GLAPIENTRY 197_mesa_CopyBufferSubData(GLenum readTarget, GLenum writeTarget, 198 GLintptr readOffset, GLintptr writeOffset, 199 GLsizeiptr size); 200 201void * GLAPIENTRY 202_mesa_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, 203 GLbitfield access); 204 205void GLAPIENTRY 206_mesa_FlushMappedBufferRange(GLenum target, 207 GLintptr offset, GLsizeiptr length); 208 209GLenum GLAPIENTRY 210_mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option); 211 212GLenum GLAPIENTRY 213_mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option); 214 215void GLAPIENTRY 216_mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, 217 GLenum pname, GLint* params); 218 219void GLAPIENTRY 220_mesa_BindBufferRange(GLenum target, GLuint index, 221 GLuint buffer, GLintptr offset, GLsizeiptr size); 222 223void GLAPIENTRY 224_mesa_BindBufferBase(GLenum target, GLuint index, GLuint buffer); 225 226void GLAPIENTRY 227_mesa_BindBuffersRange(GLenum target, GLuint first, GLsizei count, 228 const GLuint *buffers, 229 const GLintptr *offsets, const GLsizeiptr *sizes); 230void GLAPIENTRY 231_mesa_BindBuffersBase(GLenum target, GLuint first, GLsizei count, 232 const GLuint *buffers); 233void GLAPIENTRY 234_mesa_InvalidateBufferSubData(GLuint buffer, GLintptr offset, 235 GLsizeiptr length); 236 237void GLAPIENTRY 238_mesa_InvalidateBufferData(GLuint buffer); 239 240 241#endif 242