Mesa (master): mesa: move gl_array_attrib::_MaxElement to gl_array_object:: _MaxElement

Brian Paul brianp at kemper.freedesktop.org
Thu May 21 15:32:19 UTC 2009


Module: Mesa
Branch: master
Commit: a185bcbdec856cc98c26098e4e447a683eed14d1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a185bcbdec856cc98c26098e4e447a683eed14d1

Author: Brian Paul <brianp at vmware.com>
Date:   Thu May 14 13:24:24 2009 -0600

mesa: move gl_array_attrib::_MaxElement to gl_array_object::_MaxElement

This value is per array object.

---

 src/mesa/main/api_validate.c  |    8 ++++----
 src/mesa/main/mtypes.h        |    7 ++++++-
 src/mesa/main/state.c         |    2 +-
 src/mesa/vbo/vbo_exec_array.c |    5 +++--
 4 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index d5c604c..1507671 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -182,10 +182,10 @@ _mesa_validate_DrawElements(GLcontext *ctx,
       /* find max array index */
       GLuint max = max_buffer_index(ctx, count, type, indices,
                                     ctx->Array.ElementArrayBufferObj);
-      if (max >= ctx->Array._MaxElement) {
+      if (max >= ctx->Array.ArrayObj->_MaxElement) {
          /* the max element is out of bounds of one or more enabled arrays */
          _mesa_warning(ctx, "glDrawElements() index=%u is "
-                       "out of bounds (max=%u)", max, ctx->Array._MaxElement);
+                       "out of bounds (max=%u)", max, ctx->Array.ArrayObj->_MaxElement);
          return GL_FALSE;
       }
    }
@@ -254,7 +254,7 @@ _mesa_validate_DrawRangeElements(GLcontext *ctx, GLenum mode,
    if (ctx->Const.CheckArrayBounds) {
       GLuint max = max_buffer_index(ctx, count, type, indices,
                                     ctx->Array.ElementArrayBufferObj);
-      if (max >= ctx->Array._MaxElement) {
+      if (max >= ctx->Array.ArrayObj->_MaxElement) {
          /* the max element is out of bounds of one or more enabled arrays */
          return GL_FALSE;
       }
@@ -293,7 +293,7 @@ _mesa_validate_DrawArrays(GLcontext *ctx,
       return GL_FALSE;
 
    if (ctx->Const.CheckArrayBounds) {
-      if (start + count > (GLint) ctx->Array._MaxElement)
+      if (start + count > (GLint) ctx->Array.ArrayObj->_MaxElement)
          return GL_FALSE;
    }
 
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index d11df53..0df425c 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1578,6 +1578,12 @@ struct gl_array_object
 
    /** Mask of _NEW_ARRAY_* values indicating which arrays are enabled */
    GLbitfield _Enabled;
+
+   /**
+    * Min of all enabled arrays' _MaxElement.  When arrays reside inside VBOs
+    * we can determine the max legal (in bounds) glDrawElements array index.
+    */
+   GLuint _MaxElement;
 };
 
 
@@ -1602,7 +1608,6 @@ struct gl_array_attrib
    struct gl_buffer_object *ArrayBufferObj;
    struct gl_buffer_object *ElementArrayBufferObj;
 #endif
-   GLuint _MaxElement;          /* Min of all enabled array's maxes */
 };
 
 
diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index a6411f7..bfbefa5 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -206,7 +206,7 @@ update_arrays( GLcontext *ctx )
    }
 
    /* _MaxElement is one past the last legal array element */
-   ctx->Array._MaxElement = min;
+   arrayObj->_MaxElement = min;
 }
 
 
diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index fdb5018..a4c67c1 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -352,10 +352,11 @@ vbo_exec_DrawRangeElements(GLenum mode,
    if (!_mesa_validate_DrawRangeElements( ctx, mode, start, end, count, type, indices ))
       return;
 
-   if (end >= ctx->Array._MaxElement) {
+   if (end >= ctx->Array.ArrayObj->_MaxElement) {
       /* the max element is out of bounds of one or more enabled arrays */
       _mesa_warning(ctx, "glDraw[Range]Elements() index=%u is "
-                    "out of bounds (max=%u)", end, ctx->Array._MaxElement);
+                    "out of bounds (max=%u)", end,
+                    ctx->Array.ArrayObj->_MaxElement);
       return;
    }
 




More information about the mesa-commit mailing list