r300g: upload only vertex buffers referenced by vertex elements
authorMarek Olšák <maraeo@gmail.com>
Sat, 12 Jun 2010 18:34:50 +0000 (20:34 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sun, 13 Jun 2010 15:43:37 +0000 (17:43 +0200)
src/gallium/drivers/r300/r300_screen_buffer.c

index 44179f19ed473869803af19dd663d8d68661ae48..fe53f30b3080d29ecd15bc9c2b30f465aa1b07cf 100644 (file)
@@ -93,25 +93,28 @@ int r300_upload_user_buffers(struct r300_context *r300)
     enum pipe_error ret = PIPE_OK;
     int i, nr;
 
-    nr = r300->vertex_buffer_count;
+    nr = r300->velems->count;
 
     for (i = 0; i < nr; i++) {
-       if (r300_buffer_is_user_buffer(r300->vertex_buffer[i].buffer)) {
-           struct pipe_resource *upload_buffer = NULL;
-           unsigned offset = 0; /*r300->vertex_buffer[i].buffer_offset * 4;*/
-           unsigned size = r300->vertex_buffer[i].buffer->width0;
-           unsigned upload_offset;
-           ret = u_upload_buffer(r300->upload_vb,
-                                 offset, size,
-                                 r300->vertex_buffer[i].buffer,
-                                 &upload_offset, &upload_buffer);
-           if (ret)
-               return ret;
-
-           pipe_resource_reference(&r300->vertex_buffer[i].buffer, NULL);
-           r300->vertex_buffer[i].buffer = upload_buffer;
-           r300->vertex_buffer[i].buffer_offset = upload_offset;
-       }
+        struct pipe_vertex_buffer *vb =
+            &r300->vertex_buffer[r300->velems->velem[i].vertex_buffer_index];
+
+        if (r300_buffer_is_user_buffer(vb->buffer)) {
+            struct pipe_resource *upload_buffer = NULL;
+            unsigned offset = 0; /*vb->buffer_offset * 4;*/
+            unsigned size = vb->buffer->width0;
+            unsigned upload_offset;
+            ret = u_upload_buffer(r300->upload_vb,
+                                  offset, size,
+                                  vb->buffer,
+                                  &upload_offset, &upload_buffer);
+            if (ret)
+                return ret;
+
+            pipe_resource_reference(&vb->buffer, NULL);
+            vb->buffer = upload_buffer;
+            vb->buffer_offset = upload_offset;
+        }
     }
     return ret;
 }