On 11/11/2011 10:11 AM, Mathias Fröhlich wrote:

Now the gl_array_object's layout matches the one used in
recalculate_input_bindings. Make use of this and remove the
bind_array_obj function.
---
  src/mesa/vbo/vbo_exec.h       |    6 ----
  src/mesa/vbo/vbo_exec_array.c |   53 +++++++++++-----------------------------
  2 files changed, 15 insertions(+), 44 deletions(-)

diff --git a/src/mesa/vbo/vbo_exec.h b/src/mesa/vbo/vbo_exec.h
index cfed8e8..e528e58 100644
--- a/src/mesa/vbo/vbo_exec.h
+++ b/src/mesa/vbo/vbo_exec.h
@@ -122,12 +122,6 @@ struct vbo_exec_context
     } eval;

     struct {
-      /* These just mirror the current arrayobj (todo: make arrayobj
-       * look like this and remove the mirror):
-       */
-      const struct gl_client_array *legacy_array[VERT_ATTRIB_FF_MAX];
-      const struct gl_client_array *generic_array[VERT_ATTRIB_GENERIC_MAX];
-
        /* Arrays and current values manipulated according to program
         * mode, etc.  These are the attributes as seen by vertex
         * programs:
diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index aa7bc3f..6e2e274 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -331,6 +331,7 @@ print_draw_arrays(struct gl_context *ctx,
  {
     struct vbo_context *vbo = vbo_context(ctx);
     struct vbo_exec_context *exec =&vbo->exec;
+   struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
     int i;

     printf("vbo_exec_DrawArrays(mode 0x%x, start %d, count %d):\n",
@@ -346,7 +347,7 @@ print_draw_arrays(struct gl_context *ctx,
             exec->array.inputs[i]->Size,
             stride,
             /*exec->array.inputs[i]->Enabled,*/
-            exec->array.legacy_array[i]->Enabled,
+            arrayObj->VertexAttrib[VERT_ATTRIB_FF(i)].Enabled,
             exec->array.inputs[i]->Ptr,
             bufName);

@@ -371,30 +372,6 @@ print_draw_arrays(struct gl_context *ctx,


  /**
- * Bind the VBO executor to the current vertex array object prior
- * to drawing.
- *
- * Just translate the arrayobj into a sane layout.
- */
-static void
-bind_array_obj(struct gl_context *ctx)
-{
-   struct vbo_context *vbo = vbo_context(ctx);
-   struct vbo_exec_context *exec =&vbo->exec;
-   struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
-   GLuint i;
-
-   for (i = 0; i<  VERT_ATTRIB_FF_MAX; i++)
-      exec->array.legacy_array[i] =&arrayObj-
VertexAttrib[VERT_ATTRIB_FF(i)];
-
-   for (i = 0; i<  VERT_ATTRIB_GENERIC_MAX; i++) {
-      assert(i<  Elements(exec->array.generic_array));
-      exec->array.generic_array[i] =&arrayObj-
VertexAttrib[VERT_ATTRIB_GENERIC(i)];
-   }
-}
-
-
-/**
   * Set the vbo->exec->inputs[] pointers to point to the enabled
   * vertex arrays.  This depends on the current vertex program/shader
   * being executed because of whether or not generic vertex arrays
@@ -407,6 +384,7 @@ recalculate_input_bindings(struct gl_context *ctx)
  {
     struct vbo_context *vbo = vbo_context(ctx);
     struct vbo_exec_context *exec =&vbo->exec;
+   struct gl_client_array *vertexAttrib = ctx->Array.ArrayObj->VertexAttrib;
     const struct gl_client_array **inputs =&exec->array.inputs[0];
     GLbitfield64 const_inputs = 0x0;
     GLuint i;
@@ -419,8 +397,8 @@ recalculate_input_bindings(struct gl_context *ctx)
         * are available as per-vertex attributes.
         */
        for (i = 0; i<  VERT_ATTRIB_FF_MAX; i++) {
-        if (exec->array.legacy_array[i]->Enabled)
-           inputs[i] = exec->array.legacy_array[i];
+        if (vertexAttrib[VERT_ATTRIB_FF(i)].Enabled)
+           inputs[i] =&vertexAttrib[VERT_ATTRIB_FF(i)];
         else {
            inputs[i] =&vbo->legacy_currval[i];
              const_inputs |= VERT_BIT(i);
@@ -455,8 +433,8 @@ recalculate_input_bindings(struct gl_context *ctx)
         * slots are vacant.
         */
        for (i = 0; i<  VERT_ATTRIB_FF_MAX; i++) {
-        if (exec->array.legacy_array[i]->Enabled)
-           inputs[i] = exec->array.legacy_array[i];
+        if (vertexAttrib[VERT_ATTRIB_FF(i)].Enabled)
+           inputs[i] =&vertexAttrib[VERT_ATTRIB_FF(i)];
         else {
            inputs[i] =&vbo->legacy_currval[i];
              const_inputs |= VERT_BIT_FF(i);
@@ -482,18 +460,18 @@ recalculate_input_bindings(struct gl_context *ctx)
         * generic attributes in the generic slots and materials are not
         * available as per-vertex attributes.
         */
-      if (exec->array.generic_array[0]->Enabled)
-        inputs[0] = exec->array.generic_array[0];
-      else if (exec->array.legacy_array[0]->Enabled)
-        inputs[0] = exec->array.legacy_array[0];
+      if (vertexAttrib[VERT_ATTRIB_GENERIC0].Enabled)
+        inputs[0] =&vertexAttrib[VERT_ATTRIB_GENERIC0];
+      else if (vertexAttrib[VERT_ATTRIB_POS].Enabled)
+        inputs[0] =&vertexAttrib[VERT_ATTRIB_POS];
        else {
         inputs[0] =&vbo->legacy_currval[0];
           const_inputs |= VERT_BIT_POS;
        }

        for (i = 1; i<  VERT_ATTRIB_FF_MAX; i++) {
-        if (exec->array.legacy_array[i]->Enabled)
-           inputs[i] = exec->array.legacy_array[i];
+        if (vertexAttrib[VERT_ATTRIB_FF(i)].Enabled)
+           inputs[i] =&vertexAttrib[VERT_ATTRIB_FF(i)];
         else {
            inputs[i] =&vbo->legacy_currval[i];
              const_inputs |= VERT_BIT_FF(i);
@@ -501,8 +479,8 @@ recalculate_input_bindings(struct gl_context *ctx)
        }

        for (i = 1; i<  VERT_ATTRIB_GENERIC_MAX; i++) {
-        if (exec->array.generic_array[i]->Enabled)
-           inputs[VERT_ATTRIB_GENERIC(i)] = exec->array.generic_array[i];
+        if (vertexAttrib[VERT_ATTRIB_GENERIC(i)].Enabled)
+           inputs[VERT_ATTRIB_GENERIC(i)] =
&vertexAttrib[VERT_ATTRIB_GENERIC(i)];
         else {
            inputs[VERT_ATTRIB_GENERIC(i)] =&vbo->generic_currval[i];
              const_inputs |= VERT_BIT_GENERIC(i);
@@ -532,7 +510,6 @@ vbo_bind_arrays(struct gl_context *ctx)
        return;
     }

-   bind_array_obj(ctx);
     recalculate_input_bindings(ctx);
     ctx->Array.RebindArrays = GL_FALSE;
  }

I think Keith's the only person who really knows this code well, but this looks OK to me.

Reviewed-by: Brian Paul <bri...@vmware.com>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to