diff options
| author | Brian Paul <brianp@vmware.com> | 2009-09-21 14:07:35 -0600 | 
|---|---|---|
| committer | Brian Paul <brianp@vmware.com> | 2009-09-21 14:56:40 -0600 | 
| commit | e5d29ebb5e5dd923c9c60972170d072120007aab (patch) | |
| tree | ef7506e06dfeeaec692594dd5c13b65db935127c /src | |
| parent | 4916a5a2e72b05c176809dd0db5066a966a45b80 (diff) | |
mesa: make max_buffer_index() a non-static function
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/main/api_validate.c | 45 | ||||
| -rw-r--r-- | src/mesa/main/api_validate.h | 6 | 
2 files changed, 51 insertions, 0 deletions
| diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c index 4a1448deee..e71e5a6ce8 100644 --- a/src/mesa/main/api_validate.c +++ b/src/mesa/main/api_validate.c @@ -52,6 +52,51 @@ index_bytes(GLenum type, GLsizei count)  /** + * Find the max index in the given element/index buffer + */ +GLuint +_mesa_max_buffer_index(GLcontext *ctx, GLuint count, GLenum type, +                       const void *indices, +                       struct gl_buffer_object *elementBuf) +{ +   const GLubyte *map = NULL; +   GLuint max = 0; +   GLuint i; + +   if (_mesa_is_bufferobj(elementBuf)) { +      /* elements are in a user-defined buffer object.  need to map it */ +      map = ctx->Driver.MapBuffer(ctx, GL_ELEMENT_ARRAY_BUFFER, +                                  GL_READ_ONLY, elementBuf); +      /* Actual address is the sum of pointers */ +      indices = (const GLvoid *) ADD_POINTERS(map, (const GLubyte *) indices); +   } + +   if (type == GL_UNSIGNED_INT) { +      for (i = 0; i < count; i++) +         if (((GLuint *) indices)[i] > max) +            max = ((GLuint *) indices)[i]; +   } +   else if (type == GL_UNSIGNED_SHORT) { +      for (i = 0; i < count; i++) +         if (((GLushort *) indices)[i] > max) +            max = ((GLushort *) indices)[i]; +   } +   else { +      ASSERT(type == GL_UNSIGNED_BYTE); +      for (i = 0; i < count; i++) +         if (((GLubyte *) indices)[i] > max) +            max = ((GLubyte *) indices)[i]; +   } + +   if (map) { +      ctx->Driver.UnmapBuffer(ctx, GL_ELEMENT_ARRAY_BUFFER_ARB, elementBuf); +   } + +   return max; +} + + +/**   * Check if OK to draw arrays/elements.   */  static GLboolean diff --git a/src/mesa/main/api_validate.h b/src/mesa/main/api_validate.h index 1d3ae157d7..6064d15fe6 100644 --- a/src/mesa/main/api_validate.h +++ b/src/mesa/main/api_validate.h @@ -30,6 +30,12 @@  #include "mtypes.h" + +extern GLuint +_mesa_max_buffer_index(GLcontext *ctx, GLuint count, GLenum type, +                       const void *indices, +                       struct gl_buffer_object *elementBuf); +  extern GLboolean  _mesa_validate_DrawArrays(GLcontext *ctx,  			  GLenum mode, GLint start, GLsizei count); | 
