diff options
author | Marek Olšák <maraeo@gmail.com> | 2011-01-09 12:15:15 +0100 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2011-01-09 22:43:41 +0100 |
commit | ac6306e9ca904ae9674bf2a15222efe4cb861bf5 (patch) | |
tree | 030fa5fdf3a3f324af41d5d83409c96fea594380 | |
parent | b3d8e1fb3bd9b6e5d7a9fc1e710a12547893c487 (diff) |
r300g: do not upload the same user buffer several times
Performance++.
-rw-r--r-- | src/gallium/drivers/r300/r300_screen_buffer.c | 4 |
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 | } |