diff options
author | Jerome Glisse <jglisse@redhat.com> | 2010-12-15 12:07:09 -0500 |
---|---|---|
committer | Jerome Glisse <jglisse@redhat.com> | 2011-01-06 15:54:47 -0500 |
commit | 0fc205152c0706cff0eb9835e6a249376581366d (patch) | |
tree | a87d40b0707093a2774857fd95797d751c4676d2 | |
parent | 44346148446bc0cb89e3f003f249a98721bec6f4 (diff) |
r600g: need to reference upload buffer as the might still live accross flush
Can't get away from referencing upload buffer as after flush a vertex buffer
using the upload buffer might still be active. Likely need to simplify the
pipe_refence a bit so we don't waste so much cpu time in it.
candidates for 7.10 branch
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
-rw-r--r-- | src/gallium/drivers/r600/r600_buffer.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/r600/r600_upload.c | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/gallium/drivers/r600/r600_buffer.c b/src/gallium/drivers/r600/r600_buffer.c index 7d29f760a5d..a17c54d6eeb 100644 --- a/src/gallium/drivers/r600/r600_buffer.c +++ b/src/gallium/drivers/r600/r600_buffer.c @@ -103,7 +103,7 @@ static void r600_buffer_destroy(struct pipe_screen *screen, { struct r600_resource_buffer *rbuffer = r600_buffer(buf); - if (!rbuffer->uploaded && rbuffer->r.bo) { + if (rbuffer->r.bo) { r600_bo_reference((struct radeon*)screen->winsys, &rbuffer->r.bo, NULL); } rbuffer->r.bo = NULL; diff --git a/src/gallium/drivers/r600/r600_upload.c b/src/gallium/drivers/r600/r600_upload.c index ac72854ab16..44102ff55b6 100644 --- a/src/gallium/drivers/r600/r600_upload.c +++ b/src/gallium/drivers/r600/r600_upload.c @@ -69,6 +69,7 @@ void r600_upload_flush(struct r600_upload *upload) upload->default_size = MAX2(upload->total_alloc_size, upload->default_size); upload->total_alloc_size = 0; upload->size = 0; + upload->offset = 0; upload->ptr = NULL; upload->buffer = NULL; } @@ -105,7 +106,8 @@ int r600_upload_buffer(struct r600_upload *upload, unsigned offset, memcpy(upload->ptr + upload->offset, (uint8_t *) in_ptr + offset, size); *out_offset = upload->offset; *out_size = upload->size; - *out_buffer = upload->buffer; + *out_buffer = NULL; + r600_bo_reference(upload->rctx->radeon, out_buffer, upload->buffer); upload->offset += alloc_size; return 0; |