mesa: consolidate code in _mesa_update_array_max_element()
authorBrian Paul <brianp@vmware.com>
Wed, 6 Apr 2011 20:16:57 +0000 (14:16 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 6 Apr 2011 22:52:48 +0000 (16:52 -0600)
src/mesa/main/arrayobj.c
src/mesa/main/state.c
src/mesa/main/varray.h

index d357ffb421dfb174f52c194b175bf546507358ce..85a8e0e569be9a902a04b318e6b3a2bf63e805c0 100644 (file)
@@ -50,6 +50,7 @@
 #include "arrayobj.h"
 #include "macros.h"
 #include "mtypes.h"
+#include "varray.h"
 #include "main/dispatch.h"
 
 
@@ -279,37 +280,6 @@ remove_array_object( struct gl_context *ctx, struct gl_array_object *obj )
 
 
 
-/**
- * Compute the index of the last array element that can be safely accessed
- * in a vertex array.  We can really only do this when the array lives in
- * a VBO.
- * The array->_MaxElement field will be updated.
- * Later in glDrawArrays/Elements/etc we can do some bounds checking.
- */
-static void
-compute_max_element(struct gl_client_array *array)
-{
-   if (array->BufferObj->Name) {
-      /* Compute the max element we can access in the VBO without going
-       * out of bounds.
-       */
-      array->_MaxElement = ((GLsizeiptrARB) array->BufferObj->Size
-                            - (GLsizeiptrARB) array->Ptr + array->StrideB
-                            - array->_ElementSize) / array->StrideB;
-      if (0)
-         printf("%s Object %u  Size %u  MaxElement %u\n",
-               __FUNCTION__,
-               array->BufferObj->Name,
-               (GLuint) array->BufferObj->Size,
-               array->_MaxElement);
-   }
-   else {
-      /* user-space array, no idea how big it is */
-      array->_MaxElement = 2 * 1000 * 1000 * 1000; /* just a big number */
-   }
-}
-
-
 /**
  * Helper for update_arrays().
  * \return  min(current min, array->_MaxElement).
@@ -317,7 +287,7 @@ compute_max_element(struct gl_client_array *array)
 static GLuint
 update_min(GLuint min, struct gl_client_array *array)
 {
-   compute_max_element(array);
+   _mesa_update_array_max_element(array);
    if (array->Enabled)
       return MIN2(min, array->_MaxElement);
    else
index 1d1ae47374e9e37b5eeee056bfdc2f16e440f530..4696dbb526fbbd7591695a487c397eb80960fd78 100644 (file)
@@ -48,6 +48,7 @@
 #include "texenvprogram.h"
 #include "texobj.h"
 #include "texstate.h"
+#include "varray.h"
 
 
 static void
@@ -60,36 +61,6 @@ update_separate_specular(struct gl_context *ctx)
 }
 
 
-/**
- * Compute the index of the last array element that can be safely accessed
- * in a vertex array.  We can really only do this when the array lives in
- * a VBO.
- * The array->_MaxElement field will be updated.
- * Later in glDrawArrays/Elements/etc we can do some bounds checking.
- */
-static void
-compute_max_element(struct gl_client_array *array)
-{
-   assert(array->Enabled);
-   if (array->BufferObj->Name) {
-      GLsizeiptrARB offset = (GLsizeiptrARB) array->Ptr;
-      GLsizeiptrARB obj_size = (GLsizeiptrARB) array->BufferObj->Size;
-
-      if (offset < obj_size) {
-        array->_MaxElement = (obj_size - offset +
-                              array->StrideB -
-                              array->_ElementSize) / array->StrideB;
-      } else {
-        array->_MaxElement = 0;
-      }
-   }
-   else {
-      /* user-space array, no idea how big it is */
-      array->_MaxElement = 2 * 1000 * 1000 * 1000; /* just a big number */
-   }
-}
-
-
 /**
  * Helper for update_arrays().
  * \return  min(current min, array->_MaxElement).
@@ -97,7 +68,7 @@ compute_max_element(struct gl_client_array *array)
 static GLuint
 update_min(GLuint min, struct gl_client_array *array)
 {
-   compute_max_element(array);
+   _mesa_update_array_max_element(array);
    return MIN2(min, array->_MaxElement);
 }
 
index 53e68c896671ad8f7f4930275fa0cf4f10912ee8..1c423200ffdeeac0436fd00b824c8b30a7c32c38 100644 (file)
 struct gl_client_array;
 struct gl_context;
 
+
+/**
+ * Compute the index of the last array element that can be safely accessed in
+ * a vertex array.  We can really only do this when the array lives in a VBO.
+ * The array->_MaxElement field will be updated.
+ * Later in glDrawArrays/Elements/etc we can do some bounds checking.
+ */
+static INLINE void
+_mesa_update_array_max_element(struct gl_client_array *array)
+{
+   assert(array->Enabled);
+
+   if (array->BufferObj->Name) {
+      GLsizeiptrARB offset = (GLsizeiptrARB) array->Ptr;
+      GLsizeiptrARB bufSize = (GLsizeiptrARB) array->BufferObj->Size;
+
+      if (offset < bufSize) {
+        array->_MaxElement = (bufSize - offset + array->StrideB
+                               - array->_ElementSize) / array->StrideB;
+      }
+      else {
+        array->_MaxElement = 0;
+      }
+   }
+   else {
+      /* user-space array, no idea how big it is */
+      array->_MaxElement = 2 * 1000 * 1000 * 1000; /* just a big number */
+   }
+}
+
+
 #if _HAVE_FULL_GL
 
 extern void GLAPIENTRY