Correctly read / write vertex header from / to main memory
authorIan Romanick <idr@us.ibm.com>
Thu, 31 Jan 2008 03:33:30 +0000 (19:33 -0800)
committerBen Skeggs <skeggsb@gmail.com>
Fri, 15 Feb 2008 02:50:27 +0000 (13:50 +1100)
src/mesa/pipe/cell/spu/spu_vertex_shader.c

index 125b2c3a436eeb522519cc7052cdbac2e7309751..ea5ffae6bc6e1fdbcb45ff4b806bc46f26df906d 100644 (file)
@@ -112,11 +112,16 @@ run_vertex_program(struct spu_vs_context *draw,
       unsigned slot;
       float x, y, z, w;
       unsigned char buffer[sizeof(struct vertex_header)
-                          + MAX_VERTEX_SIZE] ALIGN16_ATTRIB;
+          + MAX_VERTEX_SIZE] ALIGN16_ATTRIB;
       struct vertex_header *const tmpOut =
-         (struct vertex_header *) buffer;
-      const unsigned vert_size = sizeof(struct vertex_header)
-         + (sizeof(float) * 4 * draw->num_vs_outputs);
+          (struct vertex_header *) buffer;
+      const unsigned vert_size = ROUNDUP16(sizeof(struct vertex_header)
+                                           + (sizeof(float) * 4 
+                                              * draw->num_vs_outputs));
+
+      mfc_get(tmpOut, vOut[j], vert_size, TAG_VERTEX_BUFFER, 0, 0);
+      wait_on_mask(1 << TAG_VERTEX_BUFFER);
+
 
       /* Handle attr[0] (position) specially:
        *
@@ -155,12 +160,8 @@ run_vertex_program(struct spu_vs_context *draw,
          tmpOut->data[slot][3] = machine->Outputs[slot].xyzw[3].f[j];
       }
 
-      wait_on_mask(1 << TAG_VERTEX_BUFFER);
       mfc_put(tmpOut, vOut[j], vert_size, TAG_VERTEX_BUFFER, 0, 0);
-
    } /* loop over vertices */
-
-   wait_on_mask(1 << TAG_VERTEX_BUFFER);
 }