summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/r300/r300_screen_buffer.c
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2010-12-27 22:20:58 +0100
committerMarek Olšák <maraeo@gmail.com>2011-01-06 16:51:54 +0100
commit31afa7616e3c11e9874f3297ac66ebdd50a67186 (patch)
tree0ad99ee0645556ba157031d00a5db1cbab65347e /src/gallium/drivers/r300/r300_screen_buffer.c
parent45b51a9e7021c004c754e1903afeb15fd885109e (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.c13
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;
+ }
}
}
}