diff options
author | Marek Olšák <maraeo@gmail.com> | 2010-12-27 22:20:58 +0100 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2011-01-06 16:51:54 +0100 |
commit | 31afa7616e3c11e9874f3297ac66ebdd50a67186 (patch) | |
tree | 0ad99ee0645556ba157031d00a5db1cbab65347e /src/gallium/drivers/r300/r300_screen_buffer.c | |
parent | 45b51a9e7021c004c754e1903afeb15fd885109e (diff) |
r300g: skip buffer validation of upload buffers when appropriate
because the upload buffers are reused for subsequent draw operations.
Diffstat (limited to 'src/gallium/drivers/r300/r300_screen_buffer.c')
-rw-r--r-- | src/gallium/drivers/r300/r300_screen_buffer.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/gallium/drivers/r300/r300_screen_buffer.c b/src/gallium/drivers/r300/r300_screen_buffer.c index 11ad87ed89..d9c491f1e6 100644 --- a/src/gallium/drivers/r300/r300_screen_buffer.c +++ b/src/gallium/drivers/r300/r300_screen_buffer.c @@ -62,8 +62,8 @@ void r300_upload_index_buffer(struct r300_context *r300, unsigned count) { unsigned index_offset; - boolean flushed; uint8_t *ptr = r300_buffer(*index_buffer)->user_buffer; + boolean flushed; *index_buffer = NULL; @@ -74,6 +74,11 @@ void r300_upload_index_buffer(struct r300_context *r300, index_buffer, &flushed); *start = index_offset / index_size; + + if (flushed || !r300->upload_ib_validated) { + r300->upload_ib_validated = FALSE; + r300->validate_buffers = TRUE; + } } void r300_upload_user_buffers(struct r300_context *r300) @@ -91,8 +96,12 @@ void r300_upload_user_buffers(struct r300_context *r300) r300_buffer(vb->buffer)->user_buffer, &vb->buffer_offset, &vb->buffer, &flushed); - r300->validate_buffers = TRUE; r300->vertex_arrays_dirty = TRUE; + + if (flushed || !r300->upload_vb_validated) { + r300->upload_vb_validated = FALSE; + r300->validate_buffers = TRUE; + } } } } |