Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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? */
  41. static 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? */
  49. static 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.  */
  62. static inline GLboolean
  63. _mesa_is_bufferobj(const struct gl_buffer_object *obj)
  64. {
  65.    return obj != NULL && obj->Name != 0;
  66. }
  67.  
  68.  
  69. extern void
  70. _mesa_init_buffer_objects(struct gl_context *ctx);
  71.  
  72. extern void
  73. _mesa_free_buffer_objects(struct gl_context *ctx);
  74.  
  75. extern 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.  
  82. extern void
  83. _mesa_update_default_objects_buffer_objects(struct gl_context *ctx);
  84.  
  85.  
  86. extern struct gl_buffer_object *
  87. _mesa_lookup_bufferobj(struct gl_context *ctx, GLuint buffer);
  88.  
  89. extern struct gl_buffer_object *
  90. _mesa_lookup_bufferobj_locked(struct gl_context *ctx, GLuint buffer);
  91.  
  92. extern struct gl_buffer_object *
  93. _mesa_lookup_bufferobj_err(struct gl_context *ctx, GLuint buffer,
  94.                            const char *caller);
  95.  
  96. extern void
  97. _mesa_begin_bufferobj_lookups(struct gl_context *ctx);
  98.  
  99. extern void
  100. _mesa_end_bufferobj_lookups(struct gl_context *ctx);
  101.  
  102. extern struct gl_buffer_object *
  103. _mesa_multi_bind_lookup_bufferobj(struct gl_context *ctx,
  104.                                   const GLuint *buffers,
  105.                                   GLuint index, const char *caller);
  106.  
  107. extern void
  108. _mesa_initialize_buffer_object(struct gl_context *ctx,
  109.                                struct gl_buffer_object *obj,
  110.                                GLuint name);
  111.  
  112. extern void
  113. _mesa_reference_buffer_object_(struct gl_context *ctx,
  114.                                struct gl_buffer_object **ptr,
  115.                                struct gl_buffer_object *bufObj);
  116.  
  117. static inline void
  118. _mesa_reference_buffer_object(struct gl_context *ctx,
  119.                               struct gl_buffer_object **ptr,
  120.                               struct gl_buffer_object *bufObj)
  121. {
  122.    if (*ptr != bufObj)
  123.       _mesa_reference_buffer_object_(ctx, ptr, bufObj);
  124. }
  125.  
  126. extern GLuint
  127. _mesa_total_buffer_object_memory(struct gl_context *ctx);
  128.  
  129. extern void
  130. _mesa_init_buffer_object_functions(struct dd_function_table *driver);
  131.  
  132. extern void
  133. _mesa_buffer_storage(struct gl_context *ctx, struct gl_buffer_object *bufObj,
  134.                      GLenum target, GLsizeiptr size, const GLvoid *data,
  135.                      GLbitfield flags, const char *func);
  136.  
  137. extern void
  138. _mesa_buffer_data(struct gl_context *ctx, struct gl_buffer_object *bufObj,
  139.                   GLenum target, GLsizeiptr size, const GLvoid *data,
  140.                   GLenum usage, const char *func);
  141.  
  142. extern void
  143. _mesa_buffer_sub_data(struct gl_context *ctx, struct gl_buffer_object *bufObj,
  144.                       GLintptr offset, GLsizeiptr size, const GLvoid *data,
  145.                       const char *func);
  146.  
  147. extern void
  148. _mesa_buffer_unmap_all_mappings(struct gl_context *ctx,
  149.                                 struct gl_buffer_object *bufObj);
  150.  
  151. extern void
  152. _mesa_copy_buffer_sub_data(struct gl_context *ctx,
  153.                            struct gl_buffer_object *src,
  154.                            struct gl_buffer_object *dst,
  155.                            GLintptr readOffset, GLintptr writeOffset,
  156.                            GLsizeiptr size, const char *func);
  157.  
  158. extern void *
  159. _mesa_map_buffer_range(struct gl_context *ctx,
  160.                        struct gl_buffer_object *bufObj,
  161.                        GLintptr offset, GLsizeiptr length,
  162.                        GLbitfield access, const char *func);
  163.  
  164. extern void
  165. _mesa_flush_mapped_buffer_range(struct gl_context *ctx,
  166.                                 struct gl_buffer_object *bufObj,
  167.                                 GLintptr offset, GLsizeiptr length,
  168.                                 const char *func);
  169.  
  170. extern void
  171. _mesa_ClearBufferSubData_sw(struct gl_context *ctx,
  172.                             GLintptr offset, GLsizeiptr size,
  173.                             const GLvoid *clearValue,
  174.                             GLsizeiptr clearValueSize,
  175.                             struct gl_buffer_object *bufObj);
  176.  
  177. extern void
  178. _mesa_clear_buffer_sub_data(struct gl_context *ctx,
  179.                             struct gl_buffer_object *bufObj,
  180.                             GLenum internalformat,
  181.                             GLintptr offset, GLsizeiptr size,
  182.                             GLenum format, GLenum type,
  183.                             const GLvoid *data,
  184.                             const char *func, bool subdata);
  185.  
  186. extern GLboolean
  187. _mesa_unmap_buffer(struct gl_context *ctx, struct gl_buffer_object *bufObj,
  188.                    const char *func);
  189.  
  190. /*
  191.  * API functions
  192.  */
  193. void GLAPIENTRY
  194. _mesa_BindBuffer(GLenum target, GLuint buffer);
  195.  
  196. void GLAPIENTRY
  197. _mesa_DeleteBuffers(GLsizei n, const GLuint * buffer);
  198.  
  199. void GLAPIENTRY
  200. _mesa_GenBuffers(GLsizei n, GLuint *buffers);
  201.  
  202. void GLAPIENTRY
  203. _mesa_CreateBuffers(GLsizei n, GLuint *buffers);
  204.  
  205. GLboolean GLAPIENTRY
  206. _mesa_IsBuffer(GLuint buffer);
  207.  
  208. void GLAPIENTRY
  209. _mesa_BufferStorage(GLenum target, GLsizeiptr size, const GLvoid *data,
  210.                     GLbitfield flags);
  211.  
  212. void GLAPIENTRY
  213. _mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data,
  214.                          GLbitfield flags);
  215.  
  216. void GLAPIENTRY
  217. _mesa_BufferData(GLenum target, GLsizeiptr size,
  218.                  const GLvoid *data, GLenum usage);
  219.  
  220. void GLAPIENTRY
  221. _mesa_NamedBufferData(GLuint buffer, GLsizeiptr size,
  222.                       const GLvoid *data, GLenum usage);
  223.  
  224. void GLAPIENTRY
  225. _mesa_BufferSubData(GLenum target, GLintptr offset,
  226.                     GLsizeiptr size, const GLvoid *data);
  227.  
  228. void GLAPIENTRY
  229. _mesa_NamedBufferSubData(GLuint buffer, GLintptr offset,
  230.                          GLsizeiptr size, const GLvoid *data);
  231.  
  232. void GLAPIENTRY
  233. _mesa_GetBufferSubData(GLenum target, GLintptr offset,
  234.                        GLsizeiptr size, GLvoid *data);
  235.  
  236. void GLAPIENTRY
  237. _mesa_GetNamedBufferSubData(GLuint buffer, GLintptr offset,
  238.                             GLsizeiptr size, GLvoid *data);
  239.  
  240. void GLAPIENTRY
  241. _mesa_ClearBufferData(GLenum target, GLenum internalformat,
  242.                       GLenum format, GLenum type,
  243.                       const GLvoid *data);
  244.  
  245. void GLAPIENTRY
  246. _mesa_ClearNamedBufferData(GLuint buffer, GLenum internalformat,
  247.                            GLenum format, GLenum type,
  248.                            const GLvoid *data);
  249.  
  250. void GLAPIENTRY
  251. _mesa_ClearBufferSubData(GLenum target, GLenum internalformat,
  252.                          GLintptr offset, GLsizeiptr size,
  253.                          GLenum format, GLenum type,
  254.                          const GLvoid *data);
  255.  
  256. void GLAPIENTRY
  257. _mesa_ClearNamedBufferSubData(GLuint buffer, GLenum internalformat,
  258.                               GLintptr offset, GLsizeiptr size,
  259.                               GLenum format, GLenum type,
  260.                               const GLvoid *data);
  261.  
  262. GLboolean GLAPIENTRY
  263. _mesa_UnmapBuffer(GLenum target);
  264.  
  265. GLboolean GLAPIENTRY
  266. _mesa_UnmapNamedBuffer(GLuint buffer);
  267.  
  268. void GLAPIENTRY
  269. _mesa_GetBufferParameteriv(GLenum target, GLenum pname, GLint *params);
  270.  
  271. void GLAPIENTRY
  272. _mesa_GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params);
  273.  
  274. void GLAPIENTRY
  275. _mesa_GetNamedBufferParameteriv(GLuint buffer, GLenum pname, GLint *params);
  276.  
  277. void GLAPIENTRY
  278. _mesa_GetNamedBufferParameteri64v(GLuint buffer, GLenum pname,
  279.                                   GLint64 *params);
  280.  
  281. void GLAPIENTRY
  282. _mesa_GetBufferPointerv(GLenum target, GLenum pname, GLvoid **params);
  283.  
  284. void GLAPIENTRY
  285. _mesa_GetNamedBufferPointerv(GLuint buffer, GLenum pname, GLvoid **params);
  286.  
  287.  
  288. void GLAPIENTRY
  289. _mesa_CopyBufferSubData(GLenum readTarget, GLenum writeTarget,
  290.                         GLintptr readOffset, GLintptr writeOffset,
  291.                         GLsizeiptr size);
  292.  
  293. void GLAPIENTRY
  294. _mesa_CopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer,
  295.                              GLintptr readOffset, GLintptr writeOffset,
  296.                              GLsizeiptr size);
  297.  
  298. void * GLAPIENTRY
  299. _mesa_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length,
  300.                      GLbitfield access);
  301.  
  302. void * GLAPIENTRY
  303. _mesa_MapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length,
  304.                           GLbitfield access);
  305.  
  306. void * GLAPIENTRY
  307. _mesa_MapBuffer(GLenum target, GLenum access);
  308.  
  309. void * GLAPIENTRY
  310. _mesa_MapNamedBuffer(GLuint buffer, GLenum access);
  311.  
  312.  
  313. void GLAPIENTRY
  314. _mesa_FlushMappedBufferRange(GLenum target,
  315.                              GLintptr offset, GLsizeiptr length);
  316.  
  317. void GLAPIENTRY
  318. _mesa_FlushMappedNamedBufferRange(GLuint buffer, GLintptr offset,
  319.                                   GLsizeiptr length);
  320.  
  321. GLenum GLAPIENTRY
  322. _mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option);
  323.  
  324. GLenum GLAPIENTRY
  325. _mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option);
  326.  
  327. void GLAPIENTRY
  328. _mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name,
  329.                                 GLenum pname, GLint* params);
  330.  
  331. void GLAPIENTRY
  332. _mesa_BindBufferRange(GLenum target, GLuint index,
  333.                       GLuint buffer, GLintptr offset, GLsizeiptr size);
  334.  
  335. void GLAPIENTRY
  336. _mesa_BindBufferBase(GLenum target, GLuint index, GLuint buffer);
  337.  
  338. void GLAPIENTRY
  339. _mesa_BindBuffersRange(GLenum target, GLuint first, GLsizei count,
  340.                        const GLuint *buffers,
  341.                        const GLintptr *offsets, const GLsizeiptr *sizes);
  342. void GLAPIENTRY
  343. _mesa_BindBuffersBase(GLenum target, GLuint first, GLsizei count,
  344.                       const GLuint *buffers);
  345. void GLAPIENTRY
  346. _mesa_InvalidateBufferSubData(GLuint buffer, GLintptr offset,
  347.                               GLsizeiptr length);
  348.  
  349. void GLAPIENTRY
  350. _mesa_InvalidateBufferData(GLuint buffer);
  351.  
  352.  
  353. #endif
  354.