summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2011-01-09 12:15:15 +0100
committerMarek Olšák <maraeo@gmail.com>2011-01-09 22:43:41 +0100
commitac6306e9ca904ae9674bf2a15222efe4cb861bf5 (patch)
tree030fa5fdf3a3f324af41d5d83409c96fea594380
parentb3d8e1fb3bd9b6e5d7a9fc1e710a12547893c487 (diff)
r300g: do not upload the same user buffer several times
Performance++.
-rw-r--r--src/gallium/drivers/r300/r300_screen_buffer.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gallium/drivers/r300/r300_screen_buffer.c b/src/gallium/drivers/r300/r300_screen_buffer.c
index e3cf45479fd..b349849cf37 100644
--- a/src/gallium/drivers/r300/r300_screen_buffer.c
+++ b/src/gallium/drivers/r300/r300_screen_buffer.c
@@ -87,13 +87,14 @@ void r300_upload_user_buffers(struct r300_context *r300,
87 int i, nr = r300->velems->count; 87 int i, nr = r300->velems->count;
88 unsigned count = max_index + 1 - min_index; 88 unsigned count = max_index + 1 - min_index;
89 boolean flushed; 89 boolean flushed;
90 boolean uploaded[16] = {0};
90 91
91 for (i = 0; i < nr; i++) { 92 for (i = 0; i < nr; i++) {
92 unsigned index = r300->velems->velem[i].vertex_buffer_index; 93 unsigned index = r300->velems->velem[i].vertex_buffer_index;
93 struct pipe_vertex_buffer *vb = &r300->vertex_buffer[index]; 94 struct pipe_vertex_buffer *vb = &r300->vertex_buffer[index];
94 struct r300_buffer *userbuf = r300_buffer(vb->buffer); 95 struct r300_buffer *userbuf = r300_buffer(vb->buffer);
95 96
96 if (userbuf && userbuf->user_buffer) { 97 if (userbuf && userbuf->user_buffer && !uploaded[index]) {
97 unsigned first, size; 98 unsigned first, size;
98 99
99 if (vb->stride) { 100 if (vb->stride) {
@@ -118,6 +119,7 @@ void r300_upload_user_buffers(struct r300_context *r300,
118 r300->upload_vb_validated = FALSE; 119 r300->upload_vb_validated = FALSE;
119 r300->validate_buffers = TRUE; 120 r300->validate_buffers = TRUE;
120 } 121 }
122 uploaded[index] = TRUE;
121 } else { 123 } else {
122 assert(r300->valid_vertex_buffer[index]); 124 assert(r300->valid_vertex_buffer[index]);
123 } 125 }